




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數據分析與可視化第一章數據可視化概述1.1數據、信息和知識理解1.2知識的提取流程1.3數據可視化與統(tǒng)計圖表1.4如何利用可視化幫助決策第一章數據可視化概述2《數據分析與可視化》第一章數據可視化概述1.1.1數據和信息1.1.2知識理解1.1數據、信息和知識理解3《數據分析與可視化》第一章數據可視化概述1.1.1數據和信息數據是得出結論的前提。一般數據和信息往往相互關聯常見數據存儲格式:(1) CSV文件
(2) 數據庫表單(3) 文檔文件(Excel、PDF、Word等格式文件)(4) HTML文件
(5) JSON文件(6) TXT文本文件
(7) XML文件1.1數據、信息和知識理解4《數據分析與可視化》第一章數據可視化概述1.1.2知識理解知識總量的增長有多種方式,當現有數據被重新排列或重組時,或當現有算法發(fā)生變化時,知識也是在增加的數據分析取決于數學算法,往往這些算法用來說明數據之間的關系的知識理解常見外部數據協同的來源:社交媒體和消費者群1.1數據、信息和知識理解5《數據分析與可視化》第一章數據可視化概述1.2.1從數據中提取信息1.2.2從信息中提取知識和理解1.2知識的提取流程6《數據分析與可視化》第一章數據可視化概述1.2.1從數據中提取信息收集數據時一般需要處理和組織數據轉換和處理方法:如過濾、聚合、應用相關性、縮放、歸一化以及分類等1.2知識的提取流程7《數據分析與可視化》第一章數據可視化概述1.2.2從信息中提取知識和理解信息的訪問、生成、存儲、分發(fā)、搜索、壓縮和復制,可以通過信息量或數量來量化信息經過處理、分析,可生成報告如:社交媒體消費者情緒分析1.2知識的提取流程8《數據分析與可視化》第一章數據可視化概述發(fā)展過程兩階段:計算機出現之前的可視化以及計算機出現后的可視化數據分析的方式:探索性數據分析(ExploratoryDataAnalysis,EDA),探索性空間數據分析(ExploratorySpatialDataAnalysis,ESDA)1.3數據可視化與統(tǒng)計圖表9《數據分析與可視化》第一章數據可視化概述基于可視化的分析過程,旨在讓技術人員等積極參與整個決策過程數據可視化由數據驅動。從常見的可視化工具開始,分析數據,整合信息,加深知識的理解,慢慢拓展到交互式可視化及更深層次的內容1.4如何利用可視化幫助決策10《數據分析與可視化》第一章數據可視化概述謝謝!ThankYou謝謝!11數據分析與可視化第二章數據可視化2.1利用數據可視化創(chuàng)造有趣的故事2.2可視化的一些最佳實踐2.3Python中的可視化工具2.4交互式可視化和布局第二章數據可視化13《數據分析與可視化》第二章數據可視化GapminderWorld數據讀者驅動的敘述的經典例子它收集了國際經濟、環(huán)境、健康、技術等方面的超過600個數據指標,并提供了可以用來研究現實世界問題并發(fā)現發(fā)展模式、趨勢和相關性的工具2.1利用數據可視化創(chuàng)造有趣的故事14《數據分析與可視化》第二章數據可視化例:交互式氣泡圖2.1利用數據可視化創(chuàng)造有趣的故事15《數據分析與可視化》第二章數據可視化GapminderWorld數據實例可視化技術領域(1)科學可視化:這涉及具有固有物理實體的科學性的數據(2)信息可視化:這涉及抽象數據(空間或非空間)執(zhí)行任務(1)直觀地表示數據以幫助提升數據分析效果。(2)直觀地展示模型、數據解釋、想法、假設和洞察力。(3)為用戶的假設找到佐證或反證,以幫助改進他們的模型。(4)幫助用戶組織和分享他們的想法。2.1利用數據可視化創(chuàng)造有趣的故事16《數據分析與可視化》第二章數據可視化常用可視化方法(1)比較和排序。(2)相關性。(3)分布。(4)局部與整體的關系。(5)隨時間變化的趨勢。2.2可視化的一些最佳實踐17《數據分析與可視化》第二章數據可視化比較和排序傳統(tǒng)方式為使用條形圖,但不總是最佳方式例:創(chuàng)造性的可視化展示的方式2.2可視化的一些最佳實踐18《數據分析與可視化》第二章數據可視化基于GapminderWorld數據的非洲GDP排名前12國家數據的可視化展示相關性相關矩陣用于同時研究多個變量之間的依賴關系,矩陣中的元素代表變量之間的相關系數例:構建簡單散點圖2.2可視化的一些最佳實踐19《數據分析與可視化》第二章數據可視化不同性別大學生GPA與運動和看電視時長的關系例:構建散點圖,數據之間的關聯通過帶縮放和顏色的圖進行展示2.2可視化的一些最佳實踐20《數據分析與可視化》第二章數據可視化用散點圖表示數據的相關矩陣例:用熱圖表述數據的相關矩陣2.2可視化的一些最佳實踐21《數據分析與可視化》第二章數據可視化用熱圖表示數據的相關矩陣分布分布分析顯示定量值在其范圍內的分布情況常用圖表:直方圖(Histogram)和箱線圖(BoxPlot)直方圖的形狀很大程度上取決于指定的框(bin)的大小和位置;箱線圖非常適合用于顯示多個分布2.2可視化的一些最佳實踐22《數據分析與可視化》第二章數據可視化例:用直方圖和箱線圖表述數據的相關矩陣2.2可視化的一些最佳實踐23《數據分析與可視化》第二章數據可視化學生成績分布情況直方圖學生成績分布情況箱線圖局部與整體的關系餅圖通常用于展示局部與整體的關系分組條形圖適用于將類別中的每個元素與其他元素進行比較,以及跨類別比較元素堆積柱形圖適合顯示總數,直觀地聚合一個組中的所有類別,其缺點是使比較各個類別的大小變得更加困難。堆疊也能夠表示局部與整體的關系2.2可視化的一些最佳實踐24《數據分析與可視化》第二章數據可視化例:堆積柱形圖2.2可視化的一些最佳實踐25《數據分析與可視化》第二章數據可視化水果消耗情況隨時間變化的趨勢例:展示一段時間內的趨勢2.2可視化的一些最佳實踐26《數據分析與可視化》第二章數據可視化可穿戴設備創(chuàng)業(yè)公司投資情況通用軟件工具:即集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)特定軟件組合:即Python繪圖庫,如Bokeh、IPython、matplotlib、NetworkX、SciPy和NumPy、scikit-learn和Seaborn2.3Python中的可視化工具27《數據分析與可視化》第二章數據可視化EnthoughtCanopy有在伯克利軟件套件(BerkeleySoftwareDistribution,BSD)開源許可協議下發(fā)布的免費版本同時包括高級文本編輯器、集成的IPython(交互式Python)控制臺、圖形包管理器和在線文檔鏈接2.3Python中的可視化工具28《數據分析與可視化》第二章數據可視化2.3Python中的可視化工具29《數據分析與可視化》第二章數據可視化Canopy分析環(huán)境Anaconda和IPython基于Conda的應用程序。Conda是一個用于查找和安裝軟件包的應用程序,包含系統(tǒng)級庫、Python模塊、可運行程序或其他組件的二進制tarballAnaconda包含sypder-app(一個科學的Python開發(fā)環(huán)境),和一個IPython查看器2.3Python中的可視化工具30《數據分析與可視化》第二章數據可視化2.3Python中的可視化工具31《數據分析與可視化》第二章數據可視化Anaconda用戶界面IPython
提供了一個增強的交互式Pythonshell附加功能:
(1)制表符補全:制表符補全涉及變量、函數、方法、屬性和文件名的補全。制表符補全是通過GNUReadline實現的,非常便捷。接觸GNUReadline后,很難再愿意使用常規(guī)的命令行界面(CommandLineInterface,CLI)
(2)命令歷史記錄功能:該功能發(fā)布命令歷史記錄,可以完整記錄以前使用的命令2.3Python中的可視化工具32《數據分析與可視化》第二章數據可視化交互式的可視化遵循兩個標準(1)人工輸入:對信息的由視覺表示的某些方面的控制必須可供人控制使用(2)響應時間短:人所做的更改必須能夠及時“納入”可視化2.4交互式可視化和布局33《數據分析與可視化》第二章數據可視化是否美觀是衡量布局方法強弱的標準之一為了使布局更具可讀性,圖結構需要具有層次結構或對稱性,布局的一個關鍵因素是空間的利用常用布局方法:(1) 環(huán)狀布局(CircularLayout)(2) 放射狀布局(RadialLayout)(3) 氣球式布局(BalloonLayout)2.4交互式可視化和布局34《數據分析與可視化》第二章數據可視化環(huán)狀布局
環(huán)狀布局可以使用幾種不同的組合(定性和定量)在單個可視化圖表中顯示例:利用環(huán)狀布局在有限的空間內直觀地展示復雜的關系2.4交互式可視化和布局35《數據分析與可視化》第二章數據可視化環(huán)狀布局示例放射狀布局
放射狀一種徑向空間填充可視化技術,其根節(jié)點位于圓心,不同層次的節(jié)點被放置在半徑不同的同心圓上,節(jié)點到圓心的距離對應于它的深度2.4交互式可視化和布局36《數據分析與可視化》第二章數據可視化例:隨著層次的增加,徑向樹會將更多的節(jié)點分布在更大的區(qū)域上2.4交互式可視化和布局37《數據分析與可視化》第二章數據可視化放射狀布局示例氣球式布局
氣球式布局有不同的變化形式可使用不同顏色和大小的氣球(或圓圈、氣泡)來展示更多的內容2.4交互式可視化和布局38《數據分析與可視化》第二章數據可視化氣球式布局示例謝謝!ThankYou謝謝!39數據分析與可視化第三章常見PythonIDE3.1PythonIDE3.2利用Anaconda進行可視化3.3交互式可視化的庫第三章常見PythonIDE41《數據分析與可視化》第三章常見PythonIDE3.1.1Python3.x與Python2.73.1.2不同類型的交互式工具3.1.3不同類型的PythonIDE3.1PythonIDE42《數據分析與可視化》第三章常見PythonIDE3.1.1Python3.x與Python2.7Python3.x不向后兼容2.x版本主要關注Python3.x3.1PythonIDE43《數據分析與可視化》第三章常見PythonIDE3.1.2不同類型的交互式工具Ipython:增強的交互式Pythonshell,一并包括Julia、R、Ruby等其他語言,默認提供制表符補全3.1PythonIDE44《數據分析與可視化》第三章常見PythonIDE命令描述?對IPython的特性的介紹和概述等%quickref提供快速參考--help-all提供關于Python的幫助%who/%whos提供有關標識符的信息IPython基本命令Ipythonnotebook:基于Web的交互式計算環(huán)境3.1PythonIDE45《數據分析與可視化》第三章常見PythonIDEIPython運行示例Plotly:在線分析和數據可視化工具,包含多種語言(例如Arduino、Julia、MATLAB、Perl、Python和R)的科學圖形庫3.1PythonIDE46《數據分析與可視化》第三章常見PythonIDE五大洲人均GDP和人均壽命情況importplotly.plotlyaspyimportmatplotlib.pyplotasplt#創(chuàng)建畫布mpl_fig_obj=plt.figure()#創(chuàng)建matplotlib圖形py.plot_mpl(mpl_fig_obj)3.1PythonIDE47《數據分析與可視化》第三章常見PythonIDE將繪圖從matplotlib轉換為Plotly3.1.3不同類型的PythonIDE(1)PyCharm:提供基于JavaSwing的用戶界面。(2)PyDev:提供基于SWT的用戶界面(適用于Eclipse)。(3)InteractiveEditorforPython(IEP):提供簡單高效的Python開發(fā)環(huán)境。(4)Enthought開發(fā)的Canopy:基于PyQt。(5)ContinuumAnalytics開發(fā)的Spyder(AnacondaDistribution):基于PyQt。3.1PythonIDE48《數據分析與可視化》第三章常見PythonIDEPyCharm:少數幾個具有強大功能的流行IDE之一,其社區(qū)版本是免費的提供了適用于macOS、Linux和Windows的版本3.1PythonIDE49《數據分析與可視化》第三章常見PythonIDENumPy極坐標投影示例rand_4=np.random.random_sample((2,2,2,2))-1array([[[[-0.6565232,-0.2920045],[-0.45976502,-0.70469325]],[[-0.80218558,-0.77538009],[-0.34687551,-0.42498698]]],[[[-0.60869175,-0.9553122],[-0.05888953,-0.70585856]],[[-0.69856656,-0.21664848],[-0.29017137,-0.61972867]]]])3.1PythonIDE50《數據分析與可視化》第三章常見PythonIDE創(chuàng)建隨機樣本隨機數組創(chuàng)建過程PyDev:Eclipse的插件,支持代碼重構、圖形式代碼調試、交互式控制臺、代碼分析和代碼折疊可作為Eclipse插件安裝或直接安裝LiClipse,但需要先安裝Java183.1PythonIDE51《數據分析與可視化》第三章常見PythonIDE3.1PythonIDE52《數據分析與可視化》第三章常見PythonIDEPyDev使用示例IEP:形式上與MicrosoftWindows上使用的工具相似,主要關注交互性和代碼內省由編輯器和shell兩個主要組件組成,并使用一組可插拔工具來幫助編程關鍵特性:(1)與各種現代IDE一樣的代碼內?。–odeIntrospection)。(2)通過CLI或通過IPython界面以交互方式運行Python腳本。(3)將shell作為后臺進程運行。(4)多個shell使用不同的Python版本。3.1PythonIDE53《數據分析與可視化》第三章常見PythonIDE3.1PythonIDE54《數據分析與可視化》第三章常見PythonIDE不同Python版本的同時展現EnthoughtCanopy:有在BSD開源許可協議下發(fā)布的免費版本組件介紹:(1)文檔瀏覽器:使用它,您可以從硬盤讀取或寫入Python程序。(2)Python代碼編輯器:它指定了一個語法高亮的代碼編輯器,包括專用于Python代碼的附加功能。(3)Python窗格:這是一個集成的IPython提示,可用于交互式運行Python程序,而不是從文件中直接運行。(4)編輯器狀態(tài)欄:可用于顯示行號、列號、文件類型和文件路徑。3.1PythonIDE55《數據分析與可視化》第三章常見PythonIDE3.1PythonIDE56《數據分析與可視化》第三章常見PythonIDECanopyIDE組件Canopy文檔瀏覽器3.1PythonIDE57《數據分析與可視化》第三章常見PythonIDECanopy包管理器Anaconda-Spyder:Anaconda是社區(qū)使用的最流行的IDE之一。它帶有大量已集成的軟件包,此IDE基于名為conda的核心組件使用conda或pip安裝或更新Python包多種選擇:IPython控制臺(ipythonqtconsole)、IPython筆記本(ipython-notebook)、spyder-app和glueviz3.1PythonIDE58《數據分析與可視化》第三章常見PythonIDE3.1PythonIDE59《數據分析與可視化》第三章常見PythonIDE
Spyder代碼編輯器和IPython控制臺Conda:命令行工具,用于管理Python的環(huán)境和包查看Conda運行的是哪個版本:Conda環(huán)境本身是一個文件系統(tǒng)目錄,其中包含特定的Conda包集合3.1PythonIDE60《數據分析與可視化》第三章常見PythonIDEconda–v3.1PythonIDE61《數據分析與可視化》第三章常見PythonIDE已正確安裝Anaconda下安裝SciPy:$condainstallSciPy用Conda安裝SciPy包3.1PythonIDE62《數據分析與可視化》第三章常見PythonIDE安裝或更新Python包:condainstall<packagename>orcondaupdate<packagename>用Conda更新matplotlib包3.1PythonIDE63《數據分析與可視化》第三章常見PythonIDE快速顯示默認環(huán)境中安裝的所有軟件包的列表:$condalist可以使用平常的方式安裝軟件包,例如運行pipinstall或使用setup.py文件從源代碼安裝3.2.1繪制3D曲面圖3.2.2繪制方形樹狀圖3.2利用Anaconda進行可視化64《數據分析與可視化》第三章常見PythonIDE3.2利用Anaconda進行可視化65《數據分析與可視化》第三章常見PythonIDE常用繪圖庫:(1)Matplotlib:加上NumPy和SciPy,是與科學計算相關的Python社區(qū)的主要驅動力。IPython有一個pylab模式,專門用于支持matplotlib實現交互式繪圖。(2)Plotly:在瀏覽器上運行的協作繪圖和分析平臺。它支持基于IPythonnotebook的交互式圖表。使用matplotlib編寫的繪圖代碼都可以輕松導出為Plotly版本。(3)Veusz:用Python和PyQt編寫的GPL(GeneralPublicLicense,通用公共許可協議)繪圖包。Veusz也可以嵌入其他Python程序(4)Mayavi:3D繪圖包,支持基于Python編寫腳本(5)NetworkX:Python語言軟件包,用于創(chuàng)建、操作和研究復雜網絡的結構和功能(6)pygooglechart:可用于創(chuàng)建可視化方法并支持與GoogleChartAPI進行交互
3.2利用Anaconda進行可視化66《數據分析與可視化》第三章常見PythonIDE(1)首先生成“X”和“Y”網格(Grid)importnumpyasnpX=np.arange(-4,4,0.25)Y=np.arange(-4,4,0.25)X,Y=np.meshgrid(X,Y)3.2利用Anaconda進行可視化67《數據分析與可視化》第三章常見PythonIDE(2)繪制曲面frommpl_toolkits.mplot3dimportAxes3dfrommatplotlibimportcmfrommatplotlib.tickerimportLinearLocator,FormatStrFormatterimportmatplotlib.pyplotaspltimportnumpyasnpfig=plt.figure(figsize=(12,9))ax=fig.gca(projection='3d')#生成ZR=np.sqrt(X**2+Y**2)Z=np.sin(R)3.2利用Anaconda進行可視化68《數據分析與可視化》第三章常見PythonIDEsurf=ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=cm.coolwarm,linewidth=0,antialiased=False)ax.set_zlim(-1.01,1.01)ax.zaxis.set_major_locator(LinearLocator(10))ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))fig.colorbar(surf,shrink=0.6,aspect=6)plt.show()用mpl_toolkits繪制3D曲面3.2.1繪制方形樹狀圖例:使用squarify算法(基于matplotlib)按GDP顯示非洲排名前12的國家3.2利用Anaconda進行可視化69《數據分析與可視化》第三章常見PythonIDE3.2利用Anaconda進行可視化70《數據分析與可視化》第三章常見PythonIDE#方形樹狀圖:源代碼文件(squarify.py)#運行代碼的算法來自Bruls,Huizing,vanWijk,"SquarifiedTreemaps"#squarify是由UriLaserson創(chuàng)建的defnormalize_sizes(sizes,dx,dy): total_size=sum(sizes) total_area=dx*dy sizes=map(float,sizes) sizes=map(lambdasize:size*total_area/total_size,sizes) returnsizes3.2利用Anaconda進行可視化71《數據分析與可視化》第三章常見PythonIDEdefpad_rectangle(rect): ifrect['dx']>2: rect['x']+=1rect['dx']-=2ifrect['dy']>2:rect['y']+=1 rect['dy']-=2deflayoutrow(sizes,x,y,dx,dy): covered_area=sum(sizes)width=covered_area/dy rects=[] forsizeinsizes: rects.append({'x':x,'y':y,'dx':width,'dy':size/width}) y+=size/width returnrects3.2利用Anaconda進行可視化72《數據分析與可視化》第三章常見PythonIDEdeflayoutcol(sizes,x,y,dx,dy):covered_area=sum(sizes) height=covered_area/dx rects=[] forsizeinsizes: rects.append({'x':x,'y':y,'dx':size/height,'dy':height}) x+=size/height returnrectsdeflayout(sizes,x,y,dx,dy): returnlayoutrow(sizes,x,y,dx,dy)ifdx>=dyelselayoutcol(sizes,x,y,dx,dy)3.2利用Anaconda進行可視化73《數據分析與可視化》第三章常見PythonIDEdefleftoverrow(sizes,x,y,dx,dy): covered_area=sum(sizes) width=covered_area/dy leftover_x=x+width leftover_y=y leftover_dx=dx-width leftover_dy=dy return(leftover_x,leftover_y,leftover_dx,leftover_dy)defleftovercol(sizes,x,y,dx,dy): covered_area=sum(sizes) height=covered_area/dx leftover_x=x leftover_y=y+height leftover_dx=dx leftover_dy=dy-height return(leftover_x,leftover_y,leftover_dx,leftover_dy)3.2利用Anaconda進行可視化74《數據分析與可視化》第三章常見PythonIDEdefleftover(sizes,x,y,dx,dy): returnleftoverrow(sizes,x,y,dx,dy)ifdx>=dyelseleftovercol(sizes,x,y,dx,dy)defworst_ratio(sizes,x,y,dx,dy): returnmax([max(rect['dx']/rect['dy'],rect['dy']/rect['dx'])forrectinlayout(sizes,x,y,dx,dy)])defsquarify(sizes,x,y,dx,dy): sizes=map(float,sizes) iflen(sizes)==0: return[] iflen(sizes)==1: returnlayout(sizes,x,y,dx,dy) i=13.2利用Anaconda進行可視化75《數據分析與可視化》第三章常見PythonIDE whilei<len(sizes)andworst_ratio(sizes[:i],x,y,dx,dy)>=worst_ratio(sizes[:(i+1)],x,y,dx,dy): i+=1 current=sizes[:i] remaining=sizes[i:] (leftover_x,leftover_y,leftover_dx,leftover_dy)=leftover(current,x,y,dx,dy) returnlayout(current,x,y,dx,dy)+\squarify(remaining,leftover_x,leftover_y,leftover_dx,leftover_dy)defpadded_squarify(sizes,x,y,dx,dy): rects=squarify(sizes,x,y,dx,dy) forrectinrects: pad_rectangle(rect) returnrects3.2利用Anaconda進行可視化76《數據分析與可視化》第三章常見PythonIDEimportmatplotlib.pyplotaspltimportmatplotlib.cmimportrandomimportsquarifyx=0y=0width=950height=733norm_x=1000norm_y=1000fig=plt.figure(figsize=(15,13)) ax=fig.add_subplot(111,axisbg='white')上述代碼squarify函數可用于展示非洲GDP排名前12的國家,其實現如以下代碼所示:3.2利用Anaconda進行可視化77《數據分析與可視化》第三章常見PythonIDEinitvalues=[285.4,188.4,173,140.6,91.4,75.5,62.3,39.6,29.4,28.5,26.2,22.2]values=initvalueslabels=["SouthAfrica","Egypt","Nigeria","Algeria","Morocco","Angola","Libya","Tunisia","Kenya","Ethiopia","Ghana","Cameron"]colors=[(214,27,31),(229,109,0),(109,178,2),(50,155,18),(41,127,214),(27,70,163),(72,17,121),(209,0,89),(148,0,26),(223,44,13),(195,215,0)]#將RGB數值(r,g,b)標準化到[0,1]使其滿足matplotlib作圖需求foriinrange(len(colors)): r,g,b=colors[i] colors[i]=(r/255.,g/255.,b/255.)#值必須降序排列values.sort(reverse=True)#這些值的總和必須等于要鋪設的總面積values=squarify.normalize_sizes(values,width,height)3.2利用Anaconda進行可視化78《數據分析與可視化》第三章常見PythonIDE#在某些情況下,加上邊緣的矩形可能會有更好的視覺效果rects=squarify.padded_squarify(values,x,y,width,height)cmap=matplotlib.cm.get_cmap()color=[cmap(random.random())foriinrange(len(values))]x=[rect['x']forrectinrects]y=[rect['y']forrectinrects]dx=[rect['dx']forrectinrects]dy=[rect['dy']forrectinrects]ax.bar(x,dy,width=dx,bottom=y,color=colors,label=labels)va='center'idx=13.2利用Anaconda進行可視化79《數據分析與可視化》第三章常見PythonIDEforl,r,vinzip(labels,rects,initvalues): x,y,dx,dy=r['x'],r['y'],r['dx'],r['dy'] ax.text(x+dx/2,y+dy/2+10,str(idx)+"-->"+l,va=va,ha='center',color='white',fontsize=14)ax.text(x+dx/2,y+dy/2-12,"($"+str(v)+"b)",va=va,ha='center',color='white',fontsize=12) idx=idx+1ax.set_xlim(0,norm_x)ax.set_ylim(0,norm_y)plt.show()3.2利用Anaconda進行可視化80《數據分析與可視化》第三章常見PythonIDE運行結果:非洲GDP前12國家3.3.1Bokeh3.3.2VisPy3.3交互式可視化的庫81《數據分析與可視化》第三章常見PythonIDEBokeh:交互式可視化庫,與D3.js美學非常相似,可以支持在HTML5的瀏覽器上工作安裝前需利用命令condainstalljsonschema先安裝jsonschema包3.3交互式可視化的庫82《數據分析與可視化》第三章常見PythonIDE用Conda安裝jsonschema包VisPy:用于2D或3D繪圖的可視化庫,可以利用OpenGL知識快速創(chuàng)建可視化圖表使用condainstallvispy命令或binstarsearch-tcondavispy命令3.3交互式可視化的庫83《數據分析與可視化》第三章常見PythonIDE用Conda安裝VisPy庫謝謝!ThankYou謝謝!84數據分析與可視化第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數4.2標量選擇、切片與索引4.3數據結構4.4使用matplotlib進行可視化第四章數值計算與交互式繪圖86《數據分析與可視化》第四章數值計算與交互式繪圖4.1.1NumPy介紹4.1.2Scipy介紹4.1.3MKL函數介紹4.1NumPy、SciPy和MKL函數87《數據分析與可視化》第四章數值計算與交互式繪圖4.1.1NumPy介紹NumPy通用函數(ufunc):通過每個元素對ndarray進行操作的函數,支持類型轉換是接受標量輸入并產生標量輸出的函數的矢量化包裝器運行速度比Python函數快88《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數importnumpyasnpx=np.random.random(5)print(x)print(x+1)#對向量x在每個元素上加14.1NumPy、SciPy和MKL函數89《數據分析與可視化》第四章數值計算與交互式繪圖ufunc操作每個元素4.1NumPy、SciPy和MKL函數90《數據分析與可視化》第四章數值計算與交互式繪圖對于大規(guī)模數組,ndarray元素的操作性能要好得多importnumpyasnparr=np.arange(1000000)listarr=arr.tolist()defscalar_multiple(alist,scalar):fori,valinenumerate(alist):alist[i]=val*scalarreturnalist#使用IPython的函數計時timeitarr*2.410loops,bestof3:31.7msperloop#計算以上結果使用了31.7ms(注意單位不是s)timeitscalar_multiple(listarr,2.4)1loops,bestof3:1.39sperloop#計算以上結果使用了1.39s(注意單位是s)矩陣維度和重塑操作91《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數更改現有數組的維度比使用新維度從舊數據創(chuàng)建新數組更有效importnumpyasnpa=np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])print(a)[[123456][789101112]]#通過shape屬性可以查看變量的維度a.shape(2,6)#接下來改變變量的維度a.shape=(3,4)print(a)[[1234][5678][9101112]]shape()函數和reshape()函數的反向操作是ravel()
#ravel()的例子a=np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])a.ravel()array([1,2,3,4,5,6,7,8,9,10,11,12])4.1NumPy、SciPy和MKL函數92《數據分析與可視化》第四章數值計算與交互式繪圖插值93《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數例:interp()插值n=100importnumpyasnpimportmatplotlib.pyplotasplt#創(chuàng)建長度為n、取值為0~4π的向量x=np.linspace(0,4*np.pi,n)y=np.sin(x)#對y進行插值yinterp=erp(x,x,y)#繪制出插值點的曲線,'-x'代表插值點的形狀plt.plot(x,yinterp,'-x')plt.show()正弦曲線插值結果向量化函數vectorize():通過逐元素應用相同的規(guī)則,將采用標量作為參數的函數轉換為采用數組作為參數的函數94《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數4.1NumPy、SciPy和MKL函數95《數據分析與可視化》第四章數值計算與交互式繪圖例1:定義函數“addition()”,采用3個標量參數來生成一個接收3個數組參數的向量化函數importnumpyasnpdefaddition(x,y,z):returnx+2*y+3*zdefaddpoly():i=np.random.randint(25)poly1=np.arange(i,i+10)i=np.random.randint(25)poly2=np.arange(i,i+10)poly3=np.arange(10,20)print(poly1)print(poly2)print(poly3)print('-'*32)4.1NumPy、SciPy和MKL函數96《數據分析與可視化》第四章數值計算與交互式繪圖vecf=np.vectorize(addition)print(vecf(poly1,poly2,poly3))addpoly()[891011121314151617][567891011121314][10111213141516171819]--------------------------------[23262932353841444750]注:arrange()是Python內置range()函數的“數組值”版本4.1NumPy、SciPy和MKL函數97《數據分析與可視化》第四章數值計算與交互式繪圖例2:定義一個接收一個標量參數的函數“posquare()”來生成一個接收一個數組參數的向量化函數importnumpyasnpdefposquare(x):ifx>=0:returnx**2else:return-xi=np.random.randint(30)poly1=np.arange(i,i+10)print(poly1)[3456789101112]vecfunc=np.vectorize(posquare,otypes=[float])vecfunc(poly1)array([9.,16.,25.,36.,49.,64.,81.,100.,121.,144.])4.1NumPy、SciPy和MKL函數98《數據分析與可視化》第四章數值計算與交互式繪圖記錄運行時間,比較3種方法運行速度importnumpyasnpfromtimeimporttimedefincrembyone(x):returnx+1dataarray=np.linspace(1,10,1000000)t1=time()lendata=len(dataarray)print("Len="+str(lendata))print(dataarray[1:7])foriinrange(lendata):dataarray[i]+=1print("timeforloop(Novectorization)->"+str(time()-t1))t2=time()vecincr=np.vectorize(incrembyone)#1vecincr(dataarray)#2print("timeforvectorizedversion-1:"+str(time()-t2))t3=time()4.1NumPy、SciPy和MKL函數99《數據分析與可視化》第四章數值計算與交互式繪圖#通過以下的方法增加元素的值比較高效dataarray+=1print(dataarray[1:7])print("timeforvectorizedversion-2:"+str(time()-t3))Len=1000000[1.0000091.0000181.0000271.0000361.0000451.000054]timeforloop(Novectorization)->0.373765850067timeforvectorizedversion-1:0.1701500415802002[2.0000092.0000182.0000272.0000362.0000452.000054]timeforvectorizedversion-2:0.00133609771728515624.1NumPy、SciPy和MKL函數100《數據分析與可視化》第四章數值計算與交互式繪圖使程序更有效:在循環(huán)中使用前綴符號,創(chuàng)建一個本地別名并在循環(huán)中使用該別名fastsin=math.sinx=range(1000000)foriinx:x[i]=fastsin(x[i])NumPy線性代數常用函數101《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數函數名描述dot(a,b)計算兩個數組的點積Linalg.norm(x)計算一個矩陣或向量范數Linalg.cond(x)計算條件數Linalg.solve(A,b)求解線性方程組Ax=b,其輸出結果為x的值Linalg.inv(A)計算矩陣A的逆矩陣Linalg.pinv(A)計算矩陣A的偽逆矩陣Linalg.eig(A)計算矩陣A的特征值/向量Linalg.eigvals(A)計算矩陣A的特征值Linalg.svd(A)對矩陣A進行奇異值分解(SingularValueDecomposition,SVD)NumPy常用函數4.1.2SciPy介紹SciPy:NumPy在數學、科學和工程方面的擴展,它有許多可用于線性代數、積分、插值、快速傅里葉變換、大矩陣操作、統(tǒng)計計算等的子包102《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數SciPy子包功能的簡要描述SciPy.cluster指定了用于聚類的函數,包括矢量化和k-means(k均值)Segrate指定了使用梯形、Simpson’s、Romberg和其他方法運行數值積分的函數。它還指定了常微分方程的積分函數。可以使用函數quad()、dblquad()和tplquad()對函數對象運行單重、雙重和三重集成Serpolate表示離散數值數據插值對象和線性樣條插值對象的函數和類SciPy
.linalgNumPy中l(wèi)inalg包的包裝器。NumPy的所有功能都是SciPy的一部分子包的簡要描述4.1NumPy、SciPy和MKL函數103《數據分析與可視化》第四章數值計算與交互式繪圖SciPy.polyld()importscipyassp#定義兩個多項式相乘的函數defmultiplyPoly():cubic1=sp.polyId([1,2,3,5])cubic2=sp.polyId([2,3,-1,2])print(cubic1)print(cubic2)print('-'*12)#輸出多項式相乘的結果
print(cubic1*cubic2)multiplyPoly()#結果如下所示32101x+2x+3x+532102x+3x-1x+2-------------------------------65432102x+7x+11x+19x+16x+1x+104.1NumPy、SciPy和MKL函數104《數據分析與可視化》第四章數值計算與交互式繪圖插值函數interpolate.splev()和interpolate.splprep()importnumpyasnpimportmatplotlib.pyplotaspltimportSciPyasspimportSciPerpolatet=np.arange(0,3,.1)x=np.sin(2*np.pi*t)y=np.cos(2*np.pi*t)tcktuples,uarray=erpolate.splprep([x,y],s=0)unew=np.arange(0,1.01,0.01)splinevalues=erpolate.splev(unew,tcktuples)plt.figure(figsize=(7,7))plt.plot(x,y,'x',splinevalues[0],splinevalues[1],np.sin(2*np.pi*unew),np.cos(2*np.pi*unew),x,y,'b')plt.legend(['線性','三次樣條','實際曲線’])plt.axis([-1.25,1.25,-1.25,1.25])plt.title(‘參數化樣條差值曲線’)plt.show()4.1NumPy、SciPy和MKL函數105《數據分析與可視化》第四章數值計算與交互式繪圖插值函數interpolate.splev()和interpolate.splprep()樣條插值結果4.1NumPy、SciPy和MKL函數106《數據分析與可視化》第四章數值計算與交互式繪圖數值積分
數值積分結果4.1NumPy、SciPy和MKL函數107《數據分析與可視化》第四章數值計算與交互式繪圖NumPy的romberg()函數計算積分importnumpyasnpfromSciPegrateimportsimps,romberga=-4.0;b=4.0;N=30x=np.linspace(a,b,N)y=16-x*xyromb=lambdax:(16-x*x)t=np.trapz(y,x)s=simps(y,x)r=romberg(yromb,a,b)4.1NumPy、SciPy和MKL函數108《數據分析與可視化》第四章數值計算與交互式繪圖#實際積分值aiv=(16*b-(b*b*b)/3.0)-(16*a-(a*a*a)/3.0)print('trapezoidal={0}({1:%}error)'.format(t,(t-aiv)/aiv))print('simpsons={0}({1:%}error)'.format(s,(s-aiv)/aiv))print('romberg={0}({1:%}error)'.format(r,(r-aiv)/aiv))print('actualvalue={0}'.format(aiv))trapezoidal=85.23(-0.118906%error)simpsons=85.33(-0.004100%error)romberg=85.33(-0.000000%error)actualvalue=85.33解線性方程組例:解一個有3個變量(x,y,z)的線性方程組109《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數
4.1NumPy、SciPy和MKL函數110《數據分析與可視化》第四章數值計算與交互式繪圖np.linalg.solve()求解線性方程importnumpyasnp#A表示系數矩陣A=np.array([[2,2,-1],[3,-3,2],[2,1,-1]])#b表示常數向量b=np.array([5,-1,3])#通過np.linalg.solve()計算結果v=np.linalg.solve(A,b)#v是所得的結果print("Thesolutionvectoris")print(v)#通過所得的v驗證結果是否正確print(np.dot(A,v)==b)[1.2.1.][TrueTrueTrue]向量化的數值導數Python中應用向量化方法來計算導數不需要循環(huán)111《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數
4.1NumPy、SciPy和MKL函數112《數據分析與可視化》第四章數值計算與交互式繪圖importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(-np.pi/2,np.pi/2,50)y=1/(1+np.sin(x)*np.sin(x))dy_actual=-np.sin(2*x)/(1+np.sin(x)*np.sin(x))**2fig=plt.figure(figsize=(7,7))ax=fig.add_subplot(111,fc='white')#我們需要提前指定dy的大小dy=np.zeros(y.shape,np.float)dy[0:-1]=np.diff(y)/np.diff(x)dy[-1]=(y[-1]-y[-2])/(x[-1]-x[-2])plt.plot(x,y,linewidth=3,color='b',label='實際函數')plt.plot(x,dy_actual,label='實際函數導數',linewidth=2,color='r')plt.plot(x,dy,label='前向差',linewidth=2,color='g')plt.legend(loc='upperleft')plt.show()4.1NumPy、SciPy和MKL函數113《數據分析與可視化》第四章數值計算與交互式繪圖運行結果函數與其導數和前向差4.1.3MKL函數介紹MKL:提供了向量和矩陣的高性能例程,包括FFT函數和向量統(tǒng)計函數,可在Intel處理器上高效工作114《數據分析與可視化》第四章數值計算與交互式繪圖4.1NumPy、SciPy和MKL函數MKL對計算速度的影響4.2.1標量選擇從數組中選擇元素的最簡單方法一維數組使用[rowindex],二維數組使用[rowindex,columnindex]等115《數據分析與可視化》第四章數值計算與交互式繪圖4.2標量選擇、切片與索引4.2標量選擇、切片與索引116《數據分析與可視化》第四章數值計算與交互式繪圖數組元素引用importnumpyasnpx=np.array([[3.0,2,1,3],[2,4,1,5]])x[1,2]1.0給數組元素賦值x[1,2]=3xarray([[3.,2.,1.,3.],[2.,4.,3.,5.]])4.2.2切片數組切片與列表切片相似,但語法更簡單使用[:,:,...:]語法對數組進行切片切片速記符號:117《數據分析與可視化》第四章數值計算與交互式繪圖4.2標量選擇、切片與索引:and:與0:n:1相同,其中n為數組的長度。m:andm:n:與m:n:1相同,其中n是數組的長度。:n:與0:n:1相同。::d:與0:n:d相同,其中n為數組的長度4.2.1標量選擇4.2.2切片4.2.3數組索引4.2標量選擇、切片與索引118《數據分析與可視化》第四章數值計算與交互式繪圖4.2標量選擇、切片與索引119《數據分析與可視化》第四章數值計算與交互式繪圖簡單切片importnumpyasnpx=np.array([14,15,16,17,18,19,20,5,6,7,8,9,10,11,12,13])#默認起始位置,終止位置為2y=x[:2]yarray([14,15])#默認起始和終止位置,步長為2y=x[::2]yarray([14,16,18,20,6,8,10,12])4.2標量選擇、切片與索引120《數據分析與可視化》第四章數值計算與交互式繪圖將具有一種數據類型的元素插入具有不同數據類型的數組,NumPy會嘗試自動轉換數據類型a=[2.0,4,3,6,5]b=np.array(a)b.dtypedtype('float64')該例子表明,即使數組中只有一個元素是浮點數,其余的都是整數,為了讓數組正常工作,它會被初始化為浮點類型4.2標量選擇、切片與索引121《數據分析與可視化》第四章數值計算與交互式繪圖flat()函數線性切片a=np.array([[1,2,3],[4,5,6],[7,8,9]])b=a.flat[:]print(b)[123456789]
4.2.3數組索引NumPy數組中的元素可以使用4種方法選擇:標量選擇、切片、數值索引和邏輯(或布爾)索引122《數據分析與可視化》第四章數值計算與交互式繪圖4.2標量選擇、切片與索引數值索引:使用坐標來選擇元素,切片表示法的替代方法數值索引創(chuàng)建的數組會創(chuàng)建數據的副本,而切片只是數據的視圖,而不是副本可以是列表也可以是NumPy數組,并且必須包含整數數據123《數據分析與可視化》第四章數值計算與交互式繪圖4.2標量選擇、切片與索引4.2標量選擇、切片與索引124《數據分析與可視化》第四章數值計算與交互式繪圖數值索引決定了元素的位置,而數值索引數組的形狀決定了輸出的形狀a=5*np.arange(4.0)array([0.,5.,10.,15.])a[[1]]#提取下標為1的元素array([5.])a[[0,3,2]]#提取下標為0、3、2的元素array([0.,15.,10.])sel=np.array([2,1,2,2,1,3])#帶有重復值的數組a[sel]array([10.,5.,10.,10.,5.,15.])sel=np.array([[2,1],[3,2]])a[sel]array([[10.,5.],[15.,10.]])4.2標量選擇、切片與索引125《數據分析與可視化》第四章數值計算與交互式繪圖flat()函數a=5*np.arange(8.0)array([0.,5.,10.,15.,20.,25.,30.,35.])a.flat[[3,4,1]]array([15.,20.,5.])a.flat[[[3,4,7],[1,5,3]]]array([[15.,20.,35.],[5.,25.,15.]])邏輯索引:使用邏輯來選擇元素、行或列邏輯數組與原數組大小相同,并且邏輯索引總是返回一個一維數組126《數據分析與可視化》第四章數值計算與交互式繪圖4.2標量選擇、切片與索引4.2標量選擇、切片與索引127《數據分析與可視化》第四章數值計算與交互式繪圖例1x=np.arange(-5,4)x<0array([True,True,True,True,True,False,False,False,False])x[x>0]array([1,2,3])x[abs(x)>=2]array([-5,-4,-3,-2,2,3])#對于二維的情況也會返回一維的數組x=np.reshape(np.arange(-8,8),(4,4))xarray([[-8,-7,-6,-5],[-4,-3,-2,-1],[0,1,2,3],[4,5,6,7]])x[x<0]array([-8,-7,-6,-5,-4,-3,-2,-1])4.2標量選擇、切片與索引128《數據分析與可視化》第四章數值計算與交互式繪圖例2frommathimportisnana=[[1,2,float('NaN')],[4,6,5],[1,3,2],[2,-1,float('NaN')]]list2=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題三 主題二 單元教學案例4 機體穩(wěn)態(tài)的體液調節(jié)及其相關疾病-高中生物單元教學設計
- 第10課 吃飯有講究 (教學設計)2023-2024學年統(tǒng)編版道德與法治一年級上冊
- 24 古人談讀書教學設計-2024-2025學年五年級上冊語文統(tǒng)編版
- 滬教版高中信息技術必修 第三章第2節(jié) 2.3信息的發(fā)布與交流 教學設計
- 口語交際:轉述(教學設計)-2023-2024學年統(tǒng)編版語文四年級下冊
- 第二章勻變速直線運動的研究之追及相遇問題 教學設計-2024-2025學年高一上學期物理人教版(2019)必修第一冊
- Unit4聽說課第一課時教學設計 - 2024-2025學年外研版(2024)七年級英語上冊
- 全國清華版信息技術小學二年級上冊新授課 第2課 中華民族網上游-上網搜集資料 教學設計
- 第十二章第一節(jié)《杠桿》教學設計 -2023-2024學年人教版八年級物理下冊
- 11《種樹郭橐駝傳》教學設計 2023-2024學年統(tǒng)編版高中語文選擇性必修下冊
- 電力安全一把手講安全課
- 小學三年級數學口算天天練-A4紙直接打印
- 2025年億達商學院成立儀式及論壇經驗總結(三篇)
- (2025)駕照C1證考試科目一必考題庫及參考答案(包過版)
- 2025年湖南理工職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 罕見病診治與病例管理制度
- 幼兒園開學前教職工安全培訓
- 口腔接診流程
- 東風汽車網上測評答案
- 婦科常見急危重癥護理
- 企業(yè)員工信息安全意識培訓
評論
0/150
提交評論