Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 10 科學(xué)計(jì)算與數(shù)據(jù)分析_第1頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 10 科學(xué)計(jì)算與數(shù)據(jù)分析_第2頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 10 科學(xué)計(jì)算與數(shù)據(jù)分析_第3頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 10 科學(xué)計(jì)算與數(shù)據(jù)分析_第4頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 10 科學(xué)計(jì)算與數(shù)據(jù)分析_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

學(xué)習(xí)目標(biāo)掌握numpy庫(kù)的使用掌握matplotlib庫(kù)的使用掌握pandas庫(kù)的使用第10章科學(xué)計(jì)算與數(shù)據(jù)分析Numpy庫(kù)的使用數(shù)組對(duì)象的常見操作矩陣生成與常用操作重Matplotlib庫(kù)的使用重1234pandas5重重難難科學(xué)計(jì)算相關(guān)庫(kù)應(yīng)用6重難難難難知識(shí)導(dǎo)圖10.1numpy庫(kù)的使用numpy數(shù)組對(duì)象ndarray創(chuàng)建數(shù)組的常用方法函數(shù)含義np.array(object)利用常規(guī)Python列表或元組創(chuàng)建數(shù)組np.zeros((m,n))創(chuàng)建一個(gè)m行n列且元素均為0的數(shù)組,返回給定形狀和類型的新數(shù)組,并用零填充np.ones((m,n))創(chuàng)建一個(gè)m行n列且元素均為1的數(shù)組,返回給定形狀和類型的新數(shù)組,并填充為1np.empty((m,n))返回給定形狀和類型的新數(shù)組,而無(wú)須初始化條目np.arange(x,y,i)創(chuàng)建一個(gè)由x到y(tǒng)且步長(zhǎng)為i的數(shù)組np.linspace(x,y,n)創(chuàng)建一個(gè)由x到y(tǒng)且等分成n個(gè)元素的數(shù)組np.random.rand(m,n)創(chuàng)建一個(gè)m行n列且元素為隨機(jī)值的數(shù)組10.1numpy庫(kù)的使用3.ndarray數(shù)組對(duì)象的屬性ndarray對(duì)象的維度(dimensions)稱為軸(axes),軸的個(gè)數(shù)稱為秩(rank)。一維數(shù)組的秩為1,二維數(shù)組的秩為2。數(shù)組的大?。╯ize)是指數(shù)組中的元素個(gè)數(shù)。ndarray對(duì)象的重要屬性如表所示。屬性含義ndarray.ndim數(shù)組的軸(維度)的數(shù)量,即秩的大小ndarray.shape數(shù)組維度的元組。為一個(gè)整數(shù)元素,表示每個(gè)維度上的大小,對(duì)于一個(gè)n行m列的矩陣來(lái)說(shuō),shape就是(n,m)。shape元組的長(zhǎng)度就是秩(或者維度的數(shù)量)ndimndarray.size數(shù)組的元素的總個(gè)數(shù)ndarray.dtype用來(lái)描述數(shù)組中元素類型的對(duì)象ndarray.itemsize數(shù)組的每個(gè)元素的字節(jié)大小。例如,一個(gè)類型為float64的元素的數(shù)組itemsize為8ndarray.data該緩沖區(qū)包含了數(shù)組的實(shí)際元素10.1numpy庫(kù)的使用4.ndarray的數(shù)據(jù)類型數(shù)據(jù)類型描

述bool用1位表示存儲(chǔ)的布爾類型(值為True或False)int由所在平臺(tái)決定其精度的整數(shù)(一般為int32或int64)int8整數(shù),范圍在-128至127int16整數(shù),范圍在-32768至32767int32整數(shù),范圍在-231至231-1int64整數(shù),范圍在-263至263-1unit8無(wú)符號(hào)整數(shù),范圍在0至255unit16無(wú)符號(hào)整數(shù),范圍在0至65536unit32無(wú)符號(hào)整數(shù),范圍在0至232-1unit64無(wú)符號(hào)整數(shù),范圍在0至264-1float16半精度浮點(diǎn)數(shù)(16位):其中1位表示正負(fù)號(hào),5位表示指數(shù),10位表示尾數(shù)float32單精度浮點(diǎn)數(shù)(32位):其中1位表示正負(fù)號(hào),8位表示指數(shù),23位表示尾數(shù)float64雙精度浮點(diǎn)數(shù)(64位):其中1位表示正負(fù)號(hào),11位表示指數(shù),52位表示尾數(shù)complex64復(fù)數(shù),分別用兩個(gè)32位浮點(diǎn)數(shù)表示實(shí)部和虛部complex128復(fù)數(shù),分別用兩個(gè)64位浮點(diǎn)數(shù)表示實(shí)部和虛部10.2數(shù)組對(duì)象的常見操作使用函數(shù)描

述reshape(a,newhape[,order])在不更改數(shù)據(jù)的情況下為數(shù)組賦予新的形狀ravel(a[,order])返數(shù)組回一個(gè)連續(xù)的bianpingndarray.flat數(shù)組上的一維迭代器ndarray.flatten([order])返回折疊成一維的數(shù)組的副本moveaxis(a,source,destination)將數(shù)組的軸移到新位置rollaxis(a,axis1,axis2)向后滾動(dòng)指定的軸,直到其位于給定的位置swapaxes(a,axis1,axis2)互換數(shù)組的兩個(gè)軸ndarray.T轉(zhuǎn)置數(shù)組Transpose(a[,axes])排列數(shù)組的尺寸Delete(arr,obj[,axis])返回一個(gè)新的數(shù)組,該數(shù)組具有沿刪除的軸的子數(shù)組Insert(arr,obj,values[,axis])沿給定軸在給定索引之前插入值A(chǔ)ppend(arr,values[,axis])將值附加到數(shù)組的末尾Resize(a,new_shape)返回具有指定形狀的新數(shù)組,如有必要可重復(fù)填充所實(shí)數(shù)量的元素10.2數(shù)組對(duì)象的常見操作使用修改數(shù)組元素?cái)U(kuò)展庫(kù)numpy支持多種方式修改數(shù)組中元素的值,既可以使用insert()、append()函數(shù)在原數(shù)組的基礎(chǔ)上插入或追加元素并返回新數(shù)組,也可以使用下標(biāo)的方式直接修改數(shù)組中一個(gè)或多個(gè)元素的值。>>>importnumpyasnp>>>x=np.arange(5)>>>x#array([0,1,2,3,4])>>>np.append(x,5)#在數(shù)組尾部追加一個(gè)元素,并返回新的數(shù)組array([0,1,2,3,4,5])>>>np.insert(x,0,-1)#在指定位置插入一個(gè)元素,并返回新的數(shù)組array([-1,0,1,2,3,4])>>>x[-1]=5#使用下標(biāo)的方式在原地修改某數(shù)組元素的值>>>x#array([0,1,2,3,5])>>>y=np.array([[1,2,3],[4,5,6],[7,8,9]])>>>y[0,1]=-2#修改第0行第1列的元素值>>>y[1:,1:]=0#利用切片,將行數(shù)大于等于1且列數(shù)為大于等于1對(duì)應(yīng)的元素值都設(shè)置為0>>>yarray([[1,-2,3],[4,0,0],[7,0,0]])10.2數(shù)組對(duì)象的常見操作使用數(shù)組與普通值的運(yùn)算>>>z=np.array((0,1,2))>>>z+1#數(shù)組與數(shù)值相加,array([1,2,3])>>>z–1#數(shù)組與數(shù)值相減,array([-1,0,1])>>>z*2#數(shù)組與數(shù)值相乘>>>z/2#數(shù)組與數(shù)值相除>>>z//2#數(shù)組與數(shù)值整除>>>z**2#數(shù)組的冪運(yùn)算>>>z%2#數(shù)組各元素求余數(shù)>>>2**z#數(shù)值的冪運(yùn)算10.2數(shù)組對(duì)象的常見操作使用數(shù)組間的運(yùn)算>>>importnumpyasnp>>>np.array([1,2,3])+np.array([3,2,1])#等長(zhǎng)數(shù)組相加,對(duì)應(yīng)元素的值相加,array([4,4,4])>>>np.array([1,2,3])+np.array([1])#數(shù)組中每個(gè)元素值都加1,array([2,3,4])>>>array1=np.array([1,3,5])>>>array1+array1#等長(zhǎng)數(shù)組之間的加法運(yùn)算,對(duì)應(yīng)元素的值相加,array([2,6,10])>>>array1-array1#等長(zhǎng)數(shù)組之間的減法運(yùn)算,對(duì)應(yīng)元素的值相減,array([0,0,0])>>>array1*array1#等長(zhǎng)數(shù)組之間的乘法法運(yùn)算,對(duì)應(yīng)元素的值相乘,array([1,9,25])>>>array1/array1#等長(zhǎng)數(shù)組之間的除法運(yùn)算,對(duì)應(yīng)元素的值相除,array([1.,1.,1.])>>>array1**2#數(shù)組中每個(gè)元素都乘方,array([1,9,25],dtype=int32)>>>array1**array1#等長(zhǎng)數(shù)組之間的冪運(yùn)算,對(duì)應(yīng)元素的值乘方,array([1,27,3125],dtype=int32)10.2數(shù)組對(duì)象的常見操作使用數(shù)組排序擴(kuò)展庫(kù)

numpy的

argsort()函數(shù)用來(lái)返回一個(gè)數(shù)組,其中的每個(gè)元素為原數(shù)組中元素的索引,表示應(yīng)該把原數(shù)組中哪個(gè)位置上的元素放在這個(gè)位置。另外,

numpy還提供了

argmax()函數(shù)和

argmin()函數(shù),分別用來(lái)返回?cái)?shù)組中最大元素和最小元素的下標(biāo),而數(shù)組本身也提供了原地排序方法sort()。>>>import

numpy

as

np>>>array1=np.array([1,3,5,2,4])>>>np.argsort(array1)#返回升序后元素的原下標(biāo)array([0,3,1,4,2],dtype=int64)>>>array1array([1,3,5,2,4])>>>array1.argmax(),array1.argmin()#返回最大值和最小值下標(biāo)(2,0)10.2數(shù)組對(duì)象的常見操作使用數(shù)組的內(nèi)積運(yùn)算擴(kuò)展庫(kù)

numpy提供了dot()函數(shù)用來(lái)計(jì)算兩個(gè)數(shù)組的內(nèi)積,擴(kuò)展庫(kù)

numpy中的數(shù)組也提供了dot()方法用來(lái)計(jì)算和另一個(gè)數(shù)組的內(nèi)積,也可以借助于內(nèi)置sum()函數(shù)來(lái)計(jì)算兩個(gè)數(shù)組的內(nèi)積,>>>array1=np.array((1,3,5))>>>array2=np.array((2,4,6))>>>np.dot(array1,array2)44>>>array1.dot(array2)44>>>sum(array1*array2)4410.2數(shù)組對(duì)象的常見操作使用訪問(wèn)數(shù)組中的元素用戶可以使用下標(biāo)和切片的方式來(lái)訪問(wèn)數(shù)組中的某個(gè)或多個(gè)元素,形式非常靈活.>>>importnumpy

as

np

>>>a=np.array(([1,2,3],[4,5,6],[7,8,9]))>>>a#a數(shù)組所有元素array([[1,2,3],[4,5,6],[7,8,9]])>>>a[:]#a數(shù)組所有元素>>>a[1]#第1行所有元素>>>a[0:2]#第0行第1行的元素>>>a[1,1:2]#行下標(biāo)為1,列下標(biāo)介于[1,2]間元素,即第1行第1列元素>>>a[::-1]#反向切片array([[7,8,9],[4,5,6],[1,2,3]])10.2數(shù)組對(duì)象的常見操作使用數(shù)組對(duì)函數(shù)運(yùn)算的支持?jǐn)U展庫(kù)

numpy提供了大量用于對(duì)數(shù)組進(jìn)行計(jì)算的函數(shù),可以用于對(duì)數(shù)組中所有元素進(jìn)行同樣的計(jì)算并返回新數(shù)組,處理速度比循環(huán)要快很多。>>>x=np.arange(0,10,2,dtype=np.floating)>>>xarray([0.,2.,4.,6.,8.])>>>np.sin(x)#數(shù)組中每個(gè)元素的值求正弦值array([0.,0.90929743,-0.7568025,-0.2794155,0.98935825])>>>xarray([0.,2.,4.,6.,8.])>>>np.ceil(x/2)#向上取整array([0.,1.,2.,3.,4.])10.2數(shù)組對(duì)象的常見操作使用改變數(shù)組形狀擴(kuò)展庫(kù)

numpy中的數(shù)組提供了

兩種方法來(lái)修改數(shù)組的形狀,分別是reshape()和

resize()兩個(gè)方法。

numpy還提供了同名的函數(shù)來(lái)實(shí)現(xiàn)類似的功能并返回新數(shù)組。語(yǔ)法格式分別為:reshape(a,newshape[,order])resize(a,newshape)>>>import

numpy

as

np

>>>a=np.arange(1,12,2)>>>aarray([1,3,5,7,9,11])>>>a.shape#查看數(shù)組形狀(6,)>>>a.size#數(shù)組中元素的數(shù)量6

10.2數(shù)組對(duì)象的常見操作使用>>>a.shape=2,3#改為2行3列的數(shù)組

>>>aarray([[1,3,5],[7,9,11]])>>>a.

shape(2,3)>>>a.shape=3,-1#-1表示自動(dòng)計(jì)算>>>aarray([[1,3],[5,7],[9,11]])>>>a=a.reshape(2,3)#reshape()方法返回新數(shù)組>>>aarray([[1,3,5],[7,9,11]])10.3

矩陣生成與常用操作矩陣生成擴(kuò)展庫(kù)

numpy中提供的matrix()函數(shù)可以用來(lái)把列表、元組、

range對(duì)象等Python可迭代對(duì)象轉(zhuǎn)換為矩陣。運(yùn)行結(jié)果:

[[1234][5678]]

[[12345678]]

81234importnumpyasnparray1=np.matrix([[1,2,3,4],[5,6,7,8]])array2=np.matrix([1,2,3,4,5,6,7,8])print(array1,array2,array1[1,3],sep='\n\n')#x[1,3]返回行下標(biāo)為1列下標(biāo)為3的元素10.3

矩陣生成與常用操作矩陣轉(zhuǎn)置

矩陣轉(zhuǎn)置是指對(duì)矩陣的行和列互換得到新矩陣的操作,原矩陣的第i行變?yōu)樾戮仃嚨牡趇列,原矩陣中的第j列變?yōu)樾戮仃嚨牡趈行,一個(gè)m×n的矩陣轉(zhuǎn)置之后得n×m的矩陣。在

numpy中,矩陣對(duì)象的屬性T實(shí)現(xiàn)了轉(zhuǎn)置的功能。運(yùn)行結(jié)果:[[1357][2468]][[1][2][3][4][5]]1234importnumpyasnparray1=np.matrix([[1,2],[3,4],[5,6],[7,8]])array2=np.matrix([1,2,3,4,5])print(array1.T,array2.T,sep='\n\n')10.3

矩陣生成與常用操作查看矩陣特征矩陣特征主要指矩陣的最大值、最小值、元素求和、平均值等,擴(kuò)展庫(kù)

numpy中的矩陣提供了相應(yīng)的max()、min()、sum()、mean()等方法。max()方法為例,語(yǔ)法格式:max(axis=None,

out=None)該方法返回矩陣中沿axis方向的最大元素,如果不指定axis參數(shù),則對(duì)矩陣平鋪后的所有元素進(jìn)行操作,也就是返回矩陣中所有元素的最大值;axis=0表示沿矩陣的第一個(gè)維度(也就是行)進(jìn)行計(jì)算,axis=1表示沿矩陣的第二個(gè)維度(也就是列)進(jìn)行計(jì)算。對(duì)于m×n的矩陣,沿axis=0的方向計(jì)算相當(dāng)于對(duì)矩陣從上往下“壓扁”,最終得到1×n的矩陣;沿axis=1的方向計(jì)算相當(dāng)于對(duì)矩陣從左向右“壓扁”,最終得到m×1的矩陣。

10.3

矩陣生成與常用操作矩陣運(yùn)算在擴(kuò)展庫(kù)numpy中,支持矩陣乘法運(yùn)算,直接計(jì)算即可。運(yùn)行結(jié)果:[[91215][192633][294051]]1234importnumpyasnparray1=np.matrix([[1,2],[3,4],[5,6]])array2=np.matrix([[1,2,3],[4,5,6]])print(array1*array2)10.3

矩陣生成與常用操作相關(guān)系數(shù)矩陣相關(guān)系數(shù)矩陣是一個(gè)對(duì)稱矩陣,其中對(duì)角線上的元素都是1,表示自相關(guān)系數(shù)。非對(duì)角線上的元素表示互相關(guān)系數(shù),每個(gè)元素的絕對(duì)值都小于等于1,反映變量變化趨勢(shì)的相似程度。擴(kuò)展庫(kù)

numpy提供了

corrcoef()函數(shù)用來(lái)計(jì)算相關(guān)系數(shù)矩陣。12345importnumpyasnpprint(np.corrcoef([1,2,3],[3,2,1]))#負(fù)相關(guān),變化方向相反print(np.corrcoef([1,2,3],[4,2,1]))#負(fù)相關(guān),變化方向相反print(np.corrcoef([1,2,3],[1,2,3]))#正相關(guān),變化方向一致print(np.corrcoef([1,2,3],[1,2,30]))#正相關(guān),變化趨勢(shì)接近10.4matplotlib庫(kù)的使用線性圖plot()函數(shù)實(shí)現(xiàn)畫線功能,其語(yǔ)法格式如下。plot(x,y,s,color,linewidth,label)功能:在二維坐標(biāo)體系中繪制直線、曲線或者離散的點(diǎn),返回一個(gè)列表對(duì)象。參數(shù)說(shuō)明:x:橫坐標(biāo)的取值范圍,可選,省略時(shí)默認(rèn)用y數(shù)據(jù)集的索引作為x;y:與x對(duì)應(yīng)的縱坐標(biāo)的取值范圍;s:控制線型的格式字符串,可選,省略時(shí)繪制的線型采用默認(rèn)格式。分線風(fēng)格字符和點(diǎn)風(fēng)格字符;color:線條的顏色;linewidth:折線線條的寬度;label:標(biāo)記圖形內(nèi)容的標(biāo)簽文本。10.4matplotlib庫(kù)的使用【例10-1】繪制線性圖形。參考代碼:運(yùn)行結(jié)果如圖10-1所示。

10-1使用plot()函數(shù)繪制的圖形12345importmatplotlib.pyplotaspltimportnumpyasnpplt.plot([1,2,3],[3,6,9],"bs-")plt.plot([1,2,3],[2,4,6],"r*:")plt.show()#顯示圖像10.4matplotlib庫(kù)的使用散點(diǎn)圖scatter()函數(shù)用來(lái)繪制散點(diǎn)圖,其語(yǔ)法格式如下,常用參數(shù)如表10.2所示。scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,hold=None,data=None,**kwargs)參數(shù)說(shuō)明:x、y:分別用來(lái)指定散點(diǎn)的x和y坐標(biāo),可以為標(biāo)量或數(shù)組形式的數(shù)據(jù),如果x和y都為標(biāo)量則在指定位置繪制一個(gè)散點(diǎn)符號(hào),如果均為數(shù)組形式的數(shù)據(jù)則把兩個(gè)數(shù)組中對(duì)應(yīng)位置上數(shù)據(jù)作為坐標(biāo),在這些位置上繪制若干散點(diǎn)符號(hào);

s:用來(lái)指定散點(diǎn)符號(hào)的大小,默認(rèn)為50;

marker:用來(lái)指定散點(diǎn)符號(hào)的形狀;

alpha:用來(lái)指定散點(diǎn)符號(hào)的透明度;

linewidths:用來(lái)指定線寬,可以是標(biāo)量或類似于數(shù)組的對(duì)象;

edgecolors:用來(lái)指定散點(diǎn)符號(hào)的邊線顏色,可以是顏色值或包含若干顏色值的序列。10.4matplotlib庫(kù)的使用【例10-2】散點(diǎn)圖示例。參考代碼:運(yùn)行結(jié)果如圖10-2所示。

10-2散點(diǎn)圖1234567importmatplotlib.pyplotaspltimportnumpyasnpn=10plt.scatter(np.random.rand(n)*50,np.random.rand(n)*50,c='r',s=100,alpha=0.8)plt.scatter(np.random.rand(n)*50,np.random.rand(n)*50,c='g',s=200,alpha=0.8)plt.scatter(np.random.rand(n)*50,np.random.rand(n)*50,c='b',s=300,alpha=0.8)plt.show()10.4matplotlib庫(kù)的使用餅狀圖pie()函數(shù)繪制餅圖,其語(yǔ)法格式如下。pie(x,explode=None,labels=None,autopct=None,shadow=False)功能:繪制餅圖,餅塊逆時(shí)針拜訪。參數(shù)說(shuō)明:x:需要繪制餅圖的數(shù)據(jù)集;explode:設(shè)置餅塊分離,默認(rèn)為空(即餅塊不分離),如果不為空,非零值將分離;labels:設(shè)置餅塊對(duì)應(yīng)標(biāo)簽,默認(rèn)為空;autopct:設(shè)置餅塊顯示占比值,默認(rèn)為空;shadow:設(shè)置餅圖是否有陰影,即立體效果,默認(rèn)為False(即餅圖是一個(gè)平面)。10.4matplotlib庫(kù)的使用【例10-3】繪制餅圖。參考代碼:運(yùn)行結(jié)果如圖10-3所示。123456789importmatplotlib.pyplotaspltimportnumpyasnpLabels=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]data=np.random.rand(7)*100Explode=(0,0,0,0,1,0,0)plt.pie(data,labels=Labels,explode=Explode,autopct="%.2f%%",shadow="True")plt.axis("equal")plt.legend()#設(shè)置圖例plt.show()圖

10-3餅圖10.4matplotlib庫(kù)的使用條形圖bar()函數(shù)可以用來(lái)繪制條形圖,其語(yǔ)法格式如下。bar(left,height,width=0.8,bottom=None,hold=None,data=None,**kwargs)功能:根據(jù)給定的數(shù)據(jù)繪制柱狀圖。參數(shù)說(shuō)明:left:用來(lái)指定每個(gè)柱的左側(cè)邊框的x坐標(biāo);height:用來(lái)指定每個(gè)柱的高度;width:用來(lái)指定每個(gè)柱的寬度,默認(rèn)為0.8;bottom:用來(lái)指定每個(gè)柱底部邊框的y坐標(biāo);color:用來(lái)指定每個(gè)柱的顏色;edgecolot:用來(lái)指定每個(gè)柱的邊框顏色;linewith:用來(lái)指定每個(gè)柱的邊框線寬;align:用來(lái)指定每個(gè)柱的對(duì)齊方式,以垂直柱狀圖為例,如果aligh='edge'且width>0表示柱左側(cè)邊框與給定的x坐標(biāo)對(duì)齊,如果aligh='edge'且width<0表示柱右側(cè)邊框與給定的x坐標(biāo)對(duì)齊,如果aligh='center'表示給定的x坐標(biāo)恰好位于柱的中間位置;orientation:用來(lái)指定柱的朝向,設(shè)置為'vertical'時(shí)繪制垂直柱狀圖,設(shè)置為'horizontal'時(shí)繪制水平柱狀圖;alpha:用來(lái)指定透明度;10.4matplotlib庫(kù)的使用【例10-4】條形圖舉例。參考代碼:運(yùn)行結(jié)果如圖10-4所示。

10-4條形圖12345678910importmatplotlib.pyplotaspltimportnumpyasnpn=7x=np.arange(7)data=np.random.randint(low=0,high=100,size=n)colors=np.random.rand(n*3).reshape(n,-1)labels=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]plt.title("WeekdayData")plt.bar(x,data,alpha=0.8,color=colors,tick_label=labels)plt.show()10.4matplotlib庫(kù)的使用直方圖直方圖是由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的統(tǒng)計(jì)報(bào)告圖,使用hist()函數(shù)可以方便、快捷地繪制直方圖?!纠?0-5】直方圖舉例。參考代碼:

運(yùn)行結(jié)果如圖10-5所示。

10-5直方圖12345678importnumpyasnpimportmatplotlib.pyplotaspltx=[np.random.randint(0,n,n)fornin[2000,3000,4000]]labels=['2k','3k','4k']bins=[0,100,500,1000,2000,3000,4000]plt.hist(x,bins=bins,label=labels)plt.legend()plt.show()10.4matplotlib庫(kù)的使用子圖繪制——subplot()函數(shù)利用plot()函數(shù)可以在一個(gè)繪圖區(qū)域一次性繪制多個(gè)圖形,但是如果需要在一個(gè)繪圖區(qū)域繪制多個(gè)不疊加的圖形,這時(shí)就需要用到

pyplot模塊中的

subplot()函數(shù)了。其語(yǔ)法格式如下。

subplot(nrow,

ncols

index)功能:在繪圖區(qū)域創(chuàng)建子繪圖區(qū)域。參數(shù)說(shuō)明:

nrows:將繪圖區(qū)分割成mows行

ncols:將繪圖區(qū)分割成

ncols列

index:指定當(dāng)前子繪圖區(qū)域的索引

subplot()函數(shù)的前兩個(gè)參數(shù)相當(dāng)于把繪圖區(qū)域分割成nrows行、

ncols列,共

nrows

×

ncols個(gè)子區(qū)域;第三個(gè)參數(shù)

index指定了當(dāng)前的子區(qū)域索引號(hào)。子區(qū)域索引號(hào)按照行優(yōu)先順序,從1開始編號(hào),步長(zhǎng)為1,依次遞增。10.4matplotlib庫(kù)的使用【例10-6】在一個(gè)繪圖區(qū)域的四個(gè)位置分別畫出四種圖形。參考代碼:12345678910importmatplotlib.pyplotaspltplt.subplot(2,2,1)#在22網(wǎng)格的第1個(gè)位置創(chuàng)建子繪plt.barh(range(5),[2,6,3,5,8])plt.subplot(2,2,2)plt.plot(range(5),[2,6,3,5,8])plt.subplot(2,2,3)plt.scatter(range(5),[2,6,3,5,8])plt.subplot(2,2,4)plt.bar(range(5),[2,6,3,5,8])plt.show()10.5pandaspandas簡(jiǎn)介

pandas是基于

NumPy構(gòu)建的庫(kù),在數(shù)據(jù)處理方面可以把它看成

NumPy的加強(qiáng)版,同時(shí)

pandas也是一項(xiàng)開源項(xiàng)目。pandas適合于許多不同類型的數(shù)據(jù),包括:

(1)具有異構(gòu)類型列的表格數(shù)據(jù),例如SQL表格或Excl數(shù)據(jù)。

(2)有序和無(wú)序(不一定是固定頻率)時(shí)間序列數(shù)據(jù)。

(3)具有行列標(biāo)簽的任意矩陣數(shù)據(jù)(均勻類型或不同類型)。

(4)任何其他形式的觀測(cè)統(tǒng)計(jì)數(shù)據(jù)集。10.5pandaspandas數(shù)據(jù)結(jié)構(gòu)不同于

NumPy的是,

pandas中有兩個(gè)主要的數(shù)據(jù)結(jié)構(gòu)Series和

DataFrame。

Series是一維的數(shù)據(jù)結(jié)構(gòu),

DataFrame是二維的數(shù)據(jù)結(jié)構(gòu)。1.SeriesSeries()函數(shù)可以直接創(chuàng)建Series對(duì)象,該函數(shù)的語(yǔ)法格式如下。pd.Series(data=None,index=None,dtype=None)參數(shù)說(shuō)明:data參數(shù)代表接收的數(shù)據(jù),該參數(shù)可接收一組數(shù)組、列表或字典等;index參數(shù)代表自定義行標(biāo)簽索引,若該參數(shù)沒(méi)有接收到數(shù)據(jù),默認(rèn)使用0~n的整數(shù)索引;dtype參數(shù)代表數(shù)據(jù)類型。10.5pandas【例10-7】分別創(chuàng)建兩個(gè)Series對(duì)象,其中一個(gè)Series對(duì)象使用的是整數(shù)索引,另一個(gè)Series對(duì)象使用的是標(biāo)簽索引。參考代碼:運(yùn)行結(jié)果:02142638dtype:int64a85b69c77d96e88dtype:int6412345importpandasaspds1=pd.Series([2,4,6,8])print(s1)s2=pd.Series([85,69,77,96,88],index=['a','b','c','d','e'])print(s2)10.5pandas2.DataFrameDataFrame()函數(shù)可以直接創(chuàng)建DataFrame對(duì)象,該函數(shù)的語(yǔ)法格式如下。pd.DataFrame(data=None,index=None,columns=None,dtype=None)參數(shù)說(shuō)明:data參數(shù)代表接收的數(shù)據(jù),該參數(shù)可接收二維數(shù)組、字典、Series對(duì)象或另一個(gè)DataFrame對(duì)象等;index參數(shù)代表自定義行標(biāo)簽;columns參數(shù)代表自定義的列標(biāo)簽,若index和columns這兩個(gè)參數(shù)沒(méi)有接收到數(shù)據(jù),默認(rèn)使用0~n的整數(shù)索引;dtype參數(shù)代表數(shù)據(jù)類型。參數(shù)代表自定義行標(biāo)簽索引,若該參數(shù)沒(méi)有接收到數(shù)據(jù),默認(rèn)使用0~n的整數(shù)索引;dtype參數(shù)代表數(shù)據(jù)類型。10.5pandas【例10-8】分別創(chuàng)建帶有整數(shù)索引和標(biāo)簽索引的DataFrame對(duì)象。參考代碼:運(yùn)行結(jié)果:01208992951968280PythonCJava089929519682801234567importpandasaspdimportnumpyasnparr_scores=np.array([[89,92,95],[96,82,80]])df_scores1=pd.DataFrame(arr_scores)print(df_scores1)df_scores2=pd.DataFrame(arr_scores,columns=['Python','C','Java'])print(df_scores2)10.5pandas3.常見屬性Series和DataFrame對(duì)象中一些常見屬性的具體說(shuō)明如表所示。屬

性描

述Series|DataFrame.index獲取行索引(列標(biāo)簽)Series|DataFrame.values返回包含數(shù)據(jù)的數(shù)組Series|DataFrame.dtype返回基礎(chǔ)的數(shù)據(jù)類型對(duì)象Series|DataFrame.shape返回基礎(chǔ)形狀的元組Series|DataFrame.size返回元素個(gè)數(shù)Series|DataFrame.columns獲取DataFrame對(duì)象的列索引(列標(biāo)簽)10.5pandas【例10-9】創(chuàng)建一個(gè)帶自定義列標(biāo)簽的DataFrame對(duì)象,查看它的行索引、列索引和數(shù)據(jù)。參考代碼:PythonC08990178856670RangeIndex(start=0,stop=3,step=1)Index(['Python','C'],dtype='object')123importpandasaspddf_scores=pd.DataFrame([[89,90],[78,85],[66,70]],columns=['Python','C'])print(df_scores)>>>df_scores.index>>>df_scores.columns10.5pandaspandas數(shù)據(jù)操作1.I/O工具pandas的I/OAPI是一組read函數(shù),如

pandas.

read_csv(函數(shù)。這類函數(shù)可以返回pandas對(duì)象。相應(yīng)的

write函數(shù)是類似

Dataframe.

to

csv()的對(duì)象方法。Pandas讀取文件后,系統(tǒng)會(huì)自動(dòng)生成DataFrame數(shù)據(jù)結(jié)構(gòu)的二維表,我們將結(jié)合成績(jī)表的公開數(shù)據(jù)集score_data.csv介紹內(nèi)容。成績(jī)數(shù)據(jù)如表10.11所示。表10.11成績(jī)表姓名語(yǔ)文數(shù)學(xué)外語(yǔ)馬龍807998許昕878680陳夢(mèng)77688310.5pandas【例10-10】使用read_csv函數(shù)讀取csv文件。參考代碼:運(yùn)行結(jié)果:<class'pandas.core.frame.DataFrame'>

姓名

語(yǔ)文

數(shù)學(xué)

外語(yǔ)0馬龍8079981許昕8786802陳夢(mèng)77688312345importpandasaspdimportcsvscores=pd.read_csv('scores.csv')print(type(scores))print(scores)10.5pandas

2.I/O數(shù)據(jù)運(yùn)算與對(duì)齊pandas具有自動(dòng)對(duì)齊的功能,其能夠?qū)蓚€(gè)數(shù)據(jù)結(jié)構(gòu)的索引對(duì)齊,這可能是與

pan數(shù)據(jù)索引有關(guān)的最強(qiáng)大的功能。Series和

DataFrame進(jìn)行算術(shù)運(yùn)算時(shí),它們都支持?jǐn)?shù)據(jù)自動(dòng)對(duì)齊功能,同時(shí)也支持使用

fill

value參數(shù)指定NaN為填充值。3.數(shù)據(jù)預(yù)處理在實(shí)際中獲取的數(shù)據(jù)有很多不完整、冗余和模糊的情況,這些數(shù)據(jù)是不能直接進(jìn)行數(shù)據(jù)分析的。為了提高數(shù)據(jù)的質(zhì)量,在進(jìn)行數(shù)據(jù)分析之前,必須對(duì)原始數(shù)據(jù)進(jìn)行一定的預(yù)處理操作。數(shù)據(jù)預(yù)處理是整個(gè)數(shù)據(jù)分析過(guò)程中最為耗時(shí)的操作,使用經(jīng)過(guò)規(guī)范化處理后的數(shù)據(jù)不但可以節(jié)約分析時(shí)間,而且可以保證分析結(jié)果能夠更好地起到?jīng)Q策和預(yù)測(cè)作用。目前,數(shù)據(jù)預(yù)處理的方法有很多,主要分為數(shù)據(jù)清洗、數(shù)據(jù)集成、數(shù)據(jù)變換、數(shù)據(jù)規(guī)約等。10.5pandas4.數(shù)據(jù)可視化

前面我們介紹了

matplotlib可視化工具,它的功能非常強(qiáng)大。目前,很多開源框架的繪圖功能都是基于

matplotlib實(shí)現(xiàn)的,

pandas也是其中之一。對(duì)于

pandas的數(shù)據(jù)結(jié)構(gòu)來(lái)說(shuō),直接使用自身的繪圖功能要比使用

matplotlib更簡(jiǎn)單方便。通常使用pandas的plot的kind參數(shù)快速繪制不同的圖形,其參數(shù)常用取值為:(1)“l(fā)ine”或“barh”

for

bar

plots;

(2)“hist”

for

histogram;

(3)“box”

for

boxplot;

(4)“area”

for

area

plots;

(5)“

scatter”

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論