Python基礎與大數據應用(第2版)(微課版)課件 單元9-數據分析基礎_第1頁
Python基礎與大數據應用(第2版)(微課版)課件 單元9-數據分析基礎_第2頁
Python基礎與大數據應用(第2版)(微課版)課件 單元9-數據分析基礎_第3頁
Python基礎與大數據應用(第2版)(微課版)課件 單元9-數據分析基礎_第4頁
Python基礎與大數據應用(第2版)(微課版)課件 單元9-數據分析基礎_第5頁
已閱讀5頁,還剩164頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單元九

數據分析基礎3pandas模塊目錄項目實戰2numpy模塊1單元小結

4numpy模塊

numpy是一個用Python實現的科學計算包,專為進行嚴格的數值處理而產生,尤其是對大型多維數組和矩陣的支持,并且有一個大型的高級數學函數庫來操作這些數組。numpy提供了許多高級的數值編程工具,如矩陣數據類型、矢量處理,以及精密的運算庫。numpy多為很多大型金融公司和核心的科學計算組織使用,具有運算速度快、效率高、節省空間等特點。numpy模塊→ndarray數組numpy中最重要的對象就是ndarray的多維數組,它是一組相同類型元素的集合,元素可用從零開始的索引來訪問。多維數組ndarray中的每個元素在內存中連續存放并占同樣大小存儲空間。多維數組ndarray有以下幾個屬性:ndarray.size:數組中全部元素的數量;ndarray.dtype:數組中數據元素的類型(int8,uint8,int16,uint16,int32,uint32,int64,uint64,float16,float32,float64,float128,complex64,complex128,complex256,bool,object,string,unicode等);ndarray.itemsize:每個元素占的字節數;ndarray.ndim:數組的維度;

ndarray.shape:數組各維度大小。numpy模塊→ndarray數組1.創建一維數組(1)用array()函數創建一維數組

創建數組最簡單的方法就是使用array()函數。它將輸入的數據(元組、列表、數組或其它序列的對象)轉換成多維數組ndarray,數組元素類型自動推斷出或顯式制定dtype類型,默認直接復制輸入的數據,然后產生一個新的多維數組ndarray。>>>importnumpyasnp#導入numpy模塊,重命名為np>>>x=np.array((1,2,3,4))#創建一維數組x>>>xarray([1,2,3,4])#一維數組[1,2,3,4]>>>print(x)#輸出x值[1234]>>>print(x.size)#輸出x全部元素的數量4>>>print(x.dtype)#輸出x中每個元數的類型int64>>>print(x.itemsize)#輸出x中每個元素占幾個字節8>>>x.ndim#顯示x的維度1

>>>x.shape#顯示x的形狀,行上共4個元素

(4,)#array()函數參數為列表,創建數組,指定類型為float64>>>y=np.array([1,2,3,4,5],dtype='float64')>>>yarray([1.,2.,3.,4.,5.])#[1.,2.,3.,4.,5.]中的點表示數組中元素類型是浮點型

>>>print(y)[1.2.3.4.5.]>>>y.dtypedtype('float64')>>>y.ndim1

numpy模塊→ndarray數組1.創建一維數組(2)用arange()函數創建一維數組arrange()函數用于創建等差數組,使用頻率非常高,arange()非常類似Python中range()函數,兩者的區別在于,arange()返回的是一個數組,而range()返回的是list,并且是整型。>>>importnumpyasnp>>>np.arange(5)#arange()輸出的是含有0~4,5個元素的數組array([0,1,2,3,4])>>>np.arange(1,5)array([1,2,3,4])>>>np.arange(2,5)array([2,3,4])>>>np.arange(1,10,2)#第一個參數起點,第二個參數終點,第三個參數步長array([1,3,5,7,9])>>>np.arange(1,10,2,dtype=16)#指定數據元素的類型為int16array([1,3,5,7,9],dtype=int16)numpy模塊→ndarray數組2.創建N維數組(1)使用array()函數創建>>>importnumpyasnp>>>x1=np.array([1,2,3,4])#創建一維數組>>>x1array([1,2,3,4])>>>print(x1.ndim)#輸出x1的維度1>>>print(x1.shape)(4,)>>>x2=np.array([[1,2,3,4]])#創建二維數組,注意參數的形式>>>x2array([[1,2,3,4]])>>>print(x2.ndim)#輸出x2的維度2>>>print(x2.shape)(1,4)>>>x3=np.array([[1,2,3,4],[5,6,7,8]])#創建二維數組>>>print(x3)[[1234][5678]]>>>print(x3.dtype)int64>>>print(x3.ndim)#輸出x3的維度2>>>print(x3.shape)#輸出x3各維度大小,(2,4)表示2行4列(2,4)>>>y=np.array([[[1,2,3,4],[5,6,7,8]],[[0,0,0,0],[9,9,9,9]]])#創建三維數組>>>print(y)[[[1234][5678]]

[[0000][9999]]]>>>print(y.dtype)int64>>>print(y.ndim)#輸出y的維度3>>>print(y.shape)#輸出y各維度大小,(2,2,4)表示2維2行4列(2,2,4)numpy模塊→ndarray數組2.創建N維數組(2)使用reshape()函數創建reshape()函數可以實現給數組一個新的形狀而不改變其數據,通過reshape()生成的新數組和原始數組公用一個內存,也就是說,假如更改一個數組的元素,另一個數組也將發生改變

。常與arange()函數一起使用來構造多維數組。>>>importnumpyasnp>>>yo=np.arange(1,9)>>>print(yo)[12345678]#創建由1~8,8個元素組成的一維數組,并改變形狀為2行4列二維數組>>>y1=np.arange(1,9).reshape(2,4)>>>print(y1)[[1234][5678]]#reshape(x,y,z)中任意1參數值用-1替換,此軸長度自動計算>>>y2=np.arange(1,9).reshape(-1,4)>>>print(y2)[[1234][5678]]>>>y3=np.arange(1,9).reshape(2,-1)>>>print(y3)[[1234][5678]]>>>y4=np.arange(1,9).reshape(1,-1)#1行,自動計算為8列>>>print(y4)[[12345678]]>>>y5=np.arange(1,5).reshape(-1,1)#1列,自動計算為4行>>>print(y5)[[1][2][3][4]]>>>y6=np.arange(1,9).reshape(-1)>>>print(y6)[12345678]>>>y7=np.arange(1,25).reshape(2,3,4)>>>print(y7)[[[1234][5678][9101112]]

[[13141516][17181920][21222324]]]>>>print(y7.dtype)#數組中數據元素的類型是64位整型int64>>>print(y7.ndim)#3維數組3>>>print(y7.shape)#數組各維度大小(2,3,4)>>>print(y7.size)#數組中全部元素的數量24個24>>>print(y7.itemsize)#每個元素占8個字節8>>>print(y7.reshape(-1))#輸出y7數組變形為1維的結果[123456789101112131415161718192021222324]numpy模塊→ndarray數組3.創建數組的其它常用函數函數名稱功能說明np.ones()根據指定的形狀和類型生成全1的數組np.zeros()生成全0的數組np.empty()創建空數組,只分配存儲空間,不填充數據,隨機值np.random.randint(x,y,(m,n))創建x起始值,y截止值,m行n列的隨機整數數組np.linspace(x,y,z)等間距生成x起始值,y截止值,z個數的一維數組numpy模塊→ndarray數組3.創建數組的其它常用函數>>>importnumpyasnp>>>print(np.ones((2,3,4),dtype=8))#2維3行4列全1數組,指定數據類型為int8[[[1111][1111][1111]]

[[1111][1111][1111]]]>>>print(np.zeros((2,3,4),dtype=8))#2維3行4列全0數組,指定數據類型為int8[[[0000][0000][0000]]

[[0000][0000][0000]]]>>>print(np.empty((2,3,4),dtype=8))

#2維3行4列全空數組,數據類型為int8[[[0000][0000][0000]]

[[0000][0000][0000]]]>>>print(np.random.randint(0,9,(3,4)))#大于等于0小于9,3行4列的隨機整數數組[[0343][2550][3645]]numpy模塊→ndarray數組3.創建數組的其它常用函數>>>print(np.random.rand(3,4))#隨機樣本位于[0,1),生成3行4列的隨機實數數組[[0.962541650.562349310.333054270.61655296][0.619701550.981799230.663141030.16168549][0.899329540.466380020.387409380.61592195]]>>>print(np.random.randn(3,4))#從標準正態分布中返回樣本值,生成3行4列的隨機實數數組[[-1.309775450.476684670.110541810.93487926][-0.49593833-0.648461040.25832515-1.82852527][-0.868078991.25805438-0.163114220.75200323]]>>>print(np.linspace(-2,2,5))#起點為-2,終點為2,取5個點[-2.-1.0.1.2.]>>>print(np.linspace(-2,8,5))#起點為-2,終點為8,取5個點[-2.0.53.5.58.]>>>print(np.random.randint(0,9,size=(3,4)))[[4512][7178][0486]]>>>print(np.random.randint(9,size=(3,4)))[[4143][1664][2857]]numpy模塊→ndarray數組4.數組的運算(1)數組的基本運算#數組的+、-、*、/四則運算,要求參與運算的數組要同樣大小,即維度和元素個數相同>>>a=np.array(np.arange(1,5))>>>b=a>>>aarray([1,2,3,4])>>>barray([1,2,3,4])>>>print(a+b)#對應元素進行運算[2468]>>>print(a-b)[0000]>>>print(a*b)[14916]>>>print(a/b)[1111]>>>print(a+2)#每個元素都進行同樣的運算[3456]>>>print(a-2)[-1012]>>>print(a*2)[2468]>>>print(a/2)[0112]>>>c=np.array(np.arange(1,9).reshape(2,4))>>>d=c>>>carray([[1,2,3,4],[5,6,7,8]])>>>darray([[1,2,3,4],[5,6,7,8]])>>>print(c+d)[[2468][10121416]]>>>print(c-d)[[0000][0000]]>>>print(c*d)[[14916][25364964]]>>>print(c/d)[[1111][1111]]>>>print(c+2)[[3456][78910]]>>>print(c-2)[[-1012][3456]]>>>print(c*2)[[2468][10121416]]>>>print(c/2)[[0112][2334]]numpy模塊→ndarray數組4.數組的運算(2)數組運算的基本函數

數組運算的基本函數是指能同時對數組中所有元素進行運算的函數,主要包括一元函數和二元函數。一元函數有平方square()、平方根sqrt()、絕對值abs()/fabs()、對數log()/log10/log2()、符號sign()、是否為NaNisnan()、是否是有窮isinf()、三角函數cos()/cosh()/sin()/sinh()/tan()/tanh()、四舍五入rint()、整數和小數分離,作兩個數組返回modf();二元函數有元素級加法add(array1,array2)、元素級減法subtract(array1,array2)、元素級乘法multiply(array1,array2)、元素級除法divide(array1,array2)、元素級指數power(array1,array2)、元素級最大/最小值maximum/minimum(array1,aray2)等函數。>>>importnumpyasnp>>>a=np.array(np.arange(1,9).reshape(2,4))>>>aarray([[1,2,3,4],[5,6,7,8]])>>>b=np.square(a)#一元函數square(),計算平方>>>print(b)[[14916][25364964]]>>>c=np.sqrt(b)#一元函數sqrt(),計算平方根>>>print(c)[[1.2.3.4.][5.6.7.8.]]>>>d=np.array([[1.22,3.44,5,6.21],[8.99,7,4,.82]])>>>print(d)[[1.223.445.6.21][8.997.4.0.82]]numpy模塊→ndarray數組4.數組的運算(2)數組運算的基本函數>>>print(np.add(a,a))#二元函數add(array1,array2),計算和[[2468][10121416]]>>>print(np.subtract(a,a))#二元函數subtract(array1,array2),計算差[[0000][0000]]>>>print(np.multiply(a,a))#二元函數multiply(array1,array2),計算積[[14916][25364964]]>>>print(np.divide(a,a))#二元函數divide(array1,array2),計算商[[1111][1111]]numpy模塊→ndarray數組4.數組的運算(3)數學和統計函數numpy中有一組數學函數可以實現對整個數組或某個軸向的數據進行統計計算,如求和sum()、求平均數mean()、標準差std()等函數,同時mean()和sum()這類函數可以接受一個axis參數(用于計算該軸向上的統計值),最終結果是一個少一維的數組。其它的常用函數還有求方差var()、最小值min()、最大值max()、最小值索引argmin()、最大值索引argmax()等。

>>>importnumpyasnp>>>a=np.array(np.arange(1,9).reshape(2,4))>>>aarray([[1,2,3,4],[5,6,7,8]])>>>np.sum(a)#數組所有元素和36>>>a.sum()36>>>a.sum(axis=1)#“axis=1”對行上的數據進行匯總求和,即數組每行所有元素和array([10,26])>>>np.sum(a,axis=1)array([10,26])>>>a.sum(1)array([10,26])>>>a.sum(axis=0)#“axis=0”對列上的數據進行匯總求和,即數組每列所有元素和array([6,8,10,12])>>>np.sum(a,axis=0)array([6,8,10,12])>>>a.sum(0)array([6,8,10,12])>>>np.mean(a)#數組所有元素和平均值4.5>>>a.mean()4.5numpy模塊→ndarray數組4.數組的運算(3)數學和統計函數#axis=1對行上的數據進行匯總求平均值,即數組每行所有元素平均值>>>a.mean(axis=1)array([2.5,6.5])#axis=0對列上的數據進行匯總求平均值,即數組每列所有元素平均值>>>a.mean(axis=0)array([3.,4.,5.,6.])>>>aarray([[1,2,3,4],[5,6,7,8]])>>>a.cumsum()#數組所有元素累積和array([1,3,6,10,15,21,28,36])>>>a.cumsum(1)#數組行累積和array([[1,3,6,10],[5,11,18,26]])>>>a.cumsum(0)#數組列累積和array([[1,2,3,4],[6,8,10,12]])>>>a.cumprod()#數組所有元素累積積array([1,2,6,24,120,720,5040,40320])>>>a.cumprod(1)#數組行累積積array([[1,2,6,24],[5,30,210,1680]])>>>a.cumprod(0)#數組列累積積array([[1,2,3,4],[5,12,21,32]])numpy模塊→ndarray數組4.數組的運算(4)索引與切片數組的索引是通過元素位置獲取元素的方法,切片是獲取某些元素的方法。>>>a=np.array([1,2,3,4])array([1,2,3,4])>>>print(a[0])

#一維數組索引1>>>c=np.array([[1,2,3,4],[5,6,7,8]])>>>print(c[1,2])

#二維數組索引的方法(一)7>>>print(c[1][2])

#二維數組索引的方法(二)7>>>x=np.array(np.arange(9))>>>xarray([0,1,2,3,4,5,6,7,8])>>>print(x[3:6])

#一維數組的切片,參數同前述的列表[345]>>>print(x[:6])[012345]>>>print(x[3:])

[345678]numpy模塊→ndarray數組4.數組的運算(4)索引與切片>>>y=np.array(np.arange(20).reshape(4,5))>>>yarray([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]])>>>print(y[1:3,2:4])#二維數組的花式切片,“1:3”對應行,“2:4”對應列[[78][1213]]>>>print(y[1:,2:])[[789][121314][171819]]>>>print(y[:3,:3])[[012][567][101112]]numpy模塊→ndarray數組4.數組的運算(4)索引與切片>>>print(y[:,[1,3]])#二維數組花式切片,取所有行,取1列和3列[[13][68][1113][1618]]>>>print(y[[1,2,3],:])#二維數組花式切片,取1、2、3行,取所有列[[56789][1011121314][1516171819]]#bool型索引,即篩選滿足條件的值,結果為一維數組,注意加括號>>>print(y[(y>5)&(y%2==0)])[681012141618]>>>y[(y>5)&(y%2==0)]array([6,8,10,12,14,16,18])>>>y[(y>5)|(y%2==0)]array([0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19])numpy模塊→matrix類型矩陣N維數組ndarray和矩陣類型matrix是numpy中兩個最重要的數據類型,它們是很多基于numpy數值計算的基礎,因此學習并理清兩者的關系非常重要,特別是程序中同時混雜這兩種類型,還夾帶著一些加減乘除的運算時,就更容易混淆。N維數組ndarry,簡稱數組array。而矩陣類型matrix其實也是一種array,只不過是維數為2的特殊array,因此,可以說在numpy中二維數組就是矩陣,矩陣也有與數組一樣常見的幾個屬性,但二者分別是兩種類型。matrix的維數是固定的永遠是2,這點和一般array顯著不同,即便加減乘除各種運算,matrix的維數不會發生變化,而array在運算時特別是歸約時維數會發生變化。array轉變成matrix用np.mat()、np.matrix()或者np.asmatrix(),而matrix轉array用np.asarray或者matrix的A屬性(mat1.getA()),再看行向量或者列向量對應的array和matrix的實際維數。1.創建矩陣(1)利用mat()、matrix()或asmatrix()函數創建>>>importnumpyasnp>>>list1=[[1,2,3,4],[5,6,7,8]]>>>list1[[1,2,3,4],[5,6,7,8]]>>>mat1=np.mat(list1)#mat()對列表創建矩陣>>>mat1matrix([[1,2,3,4],[5,6,7,8]])>>>print(mat1)[[1234][5678]]>>>mat2=np.matrix(list1)#matrix()對列表創建矩陣numpy模塊→matrix類型矩陣>>>mat2matrix([[1,2,3,4],[5,6,7,8]])>>>print(mat2)[[1234][5678]]>>>mat3=np.asmatrix(list1)#asmatrix()對列表創建矩陣>>>mat3matrix([[1,2,3,4],[5,6,7,8]])>>>print(mat3)[[1234][5678]]>>>array1=np.array(list1)#array()對列表創建數組>>>array1array([[1,2,3,4],[5,6,7,8]])>>>mat4=np.mat(array1)#mat()對數組創建矩陣>>>mat4matrix([[1,2,3,4],

[5,6,7,8]])>>>print(mat4.ndim)#mat4維數是二維2>>>print(mat4.shape)#mat4是2行4列

(2,4)>>>print(type(mat4))#mat4類型,矩陣類型

<class'numpy.matrixlib.defmatrix.matrix'>>>>array2=np.arange(1,5)#創建一維數組>>>array2#顯示array2array([1,2,3,4])numpy模塊→matrix類型矩陣>>>print(array2)#輸出array2[1234]>>>print(array2.ndim)#輸出array2的維數為11>>>print(array2.shape)#輸出array2的形狀,行為4元素,列無(4,)>>>print(type(array2))#輸出array2的類型,N維數組類型<type'numpy.ndarray'>>>>mat5=np.mat(array2)#利用mat()對一維數組創建矩陣mat5>>>mat5#顯示mat5matrix([[1,2,3,4]])>>>print(mat5)#輸出mat5[[1234]]>>>print(mat5.ndim)#輸出mat5的維數為22>>>print(mat5.shape)#輸出mat5的形狀,1行4列(1,4)>>>print(type(mat5))#輸出mat5的類型,矩陣類型<class'numpy.matrixlib.defmatrix.matrix'>numpy模塊→matrix類型矩陣1.創建矩陣(2)特殊矩陣的創建>>>importnumpyasnp>>>x=np.zeros((3,3),dtype=8)#創建3*3全0二維數組>>>xarray([[0,0,0],[0,0,0],[0,0,0]],dtype=int8)>>>mat1=np.mat(x)#創建3*3全0矩陣>>>mat1matrix([[0,0,0],[0,0,0],[0,0,0]],dtype=int8)>>>print(mat1)[[000][000][000]]>>>mat2=np.mat(np.ones((3,3),dtype=8))#創建3*3全1矩陣>>>mat2matrix([[1,1,1],[1,1,1],[1,1,1]],dtype=int8)>>>mat3=np.mat(np.eye(3,3,dtype=int))#創建3*3對角矩陣,即單位矩陣>>>mat3matrix([[1,0,0],[0,1,0],[0,0,1]])>>>y=[1,2,3]>>>mat4=np.mat(np.diag(y))#創建對角線為1,2,3的3*3對角矩陣>>>mat4matrix([[1,0,0],[0,2,0],[0,0,3]])numpy模塊→matrix類型矩陣1.創建矩陣(3)列表、數組、矩陣間的相互轉換>>>importnumpyasnp>>>list1=[[0,1,2,3,4],[5,6,7,8]]>>>array1=np.array(list1)#列表list1→數組array1,array()實現>>>array1array([[0,1,2,3],[4,5,6,7]])>>>print(array1)[[0123][4567]]>>>mat1=np.mat(array1)#數組array1→矩陣mat1,mat()實現>>>mat1matrix([[0,1,2,3],[4,5,6,7]])>>>print(mat1)[[0123][4567]]numpy模塊→matrix類型矩陣>>>print(mat1)[[0123][4567]]>>>array2=np.array(mat1)#矩陣mat1→數組array2,array2=array1,array()實現>>>array2array([[0,1,2,3],[4,5,6,7]])>>>array3=mat1.getA()#矩陣mat1→數組array3,array3=array1,getA()實現>>>array3array([[0,1,2,3],[4,5,6,7]])>>>list2=mat1.tolist()#矩陣mat1→列表list2,list2=list1,tolist()實現>>>list2[[0,1,2,3],[4,5,6,7]]>>>list3=array3.tolist()#數組array3→列表list3,list3=list1,tolist()實現>>>list3[[0,1,2,3],[4,5,6,7]]numpy模塊→matrix類型矩陣2.矩陣的運算兩個矩陣相加減,即它們相同位置的元素相加減。只有對于兩個行數、列數分別相等的矩陣(即同型矩陣),加減法運算才有意義,這一點與二維數組的加減運算規則一致。當矩陣A的列數等于矩陣B的行數時,A與B兩矩陣才可以相乘,兩矩陣相乘按照矩陣的乘法運算規則,這一點與二維數組的乘法運算規則不同,二維數組的乘法運算規則同加減規則一致,按位相乘。一般不進行兩個矩陣直接相除,矩陣的除法是通過逆矩陣實現的。(1)矩陣的加減乘運算>>>importnumpyasnp>>>a=np.mat(np.arange(1,7).reshape(2,3))>>>amatrix([[1,2,3],[4,5,6]])>>>b=a>>>bmatrix([[1,2,3],[4,5,6]])>>>print(a+b)#矩陣相加,同型矩陣[[246][81012]]>>>print(a-b)#矩陣相減,同型矩陣[[000][000]]>>>c=np.mat(np.arange(1,7).reshape(3,2))>>>cmatrix([[1,2],[3,4],[5,6]])>>>print(a*c)#矩陣相乘,a的列數等于矩陣c的行數[[2228][4964]]>>>print(np.dot(a,c))#矩陣點乘,a的列數等于矩陣c的行數[[2228][4964]]>>>print(2*a)#數乘矩陣[[246][81012]]>>>print(a*2)#矩陣乘數[[246][81012]]numpy模塊→matrix類型矩陣2.矩陣的運算(2)矩陣的轉置和求逆>>>print(a.T)#矩陣轉置[[14][25][36]]>>>print(a.I)#求逆矩陣[[-0.944444440.44444444][-0.111111110.11111111][0.72222222-0.22222222]]>>>print(a)[[123][456]](3)矩陣的求和及索引>>>print(a.sum(axis=0))#計算矩陣每一列的和[[579]]>>>print(a.sum(axis=1))#計算矩陣每一行的和[[6][15]]>>>print(a.max(axis=0))#計算矩陣每一列的最大值[[456]]>>>print(a.max(axis=1))#計算矩陣每一行的最大值[[3][6]]>>>print(a.argmax(axis=0))#計算矩陣每一列的最大值索引[[111]]>>>print(a.argmax(axis=1))#計算矩陣每一行的最大值索引[[2][2]]numpy模塊→matrix類型矩陣2.矩陣的運算(4)矩陣的分割和合并

>>>mat1=np.mat(np.arange(20).reshape(4,5))>>>print(mat1)[[01234][56789][1011121314][1516171819]]#分割出行,2行(含)到最后行;列,3列(含)到最后列,所有元素>>>mat2=mat1[2:,3:]>>>print(mat2)[[1314][1819]]>>>mat3=mat1[:2,:]#分割出行,開始到2行(不含);列,所有列,所有元素>>>mat3matrix([[0,1,2,3,4],[5,6,7,8,9]])>>>mat4=mat1[2:,:]#分割出行,2行(含)到最后行;列,所有列,所有元素numpy模塊→matrix類型矩陣>>>mat4matrix([[10,11,12,13,14],[15,16,17,18,19]])>>>mat4=mat1[2:]#分割出行,2行(含)到最后行;列,所有列,所有元素>>>mat4matrix([[10,11,12,13,14],[15,16,17,18,19]])>>>mat5=np.vstack((mat3,mat4))#按列合并,即列數不變>>>print(mat5)[[01234][56789][1011121314][1516171819]]>>>mat6=np.hstack((mat3,mat4))#按行合并,即行數不變>>>print(mat6)[[012341011121314][567891516171819]]numpy模塊→matrix類型和array類型的區別numpy的matrix必須是2維的,但是numpy的array(ndarrays)可以是多維的(1D,2D,3D…ND);matrix是array的一個小的分支,包含于array,所以matrix擁有array的所有特性。但是numpy里面數組array遵循逐個元素的運算規則,而矩陣matrix遵循矩陣運算的規則。在二者做乘法運算和規約運算時要注意其區別。(1)矩陣和矩陣相乘>>>a=np.mat([[1,2,3,4],[5,6,7,8]])#mat()函數將列表生成矩陣

>>>print(a)#輸出矩陣a的值

[[1234][5678]]>>>print(type(a))#輸出矩陣a的類型

<class'numpy.matrixlib.defmatrix.matrix'>>>>print(a.ndim)#輸出矩陣a維數,維數2,矩陣必須是二維2>>>print(a.shape)#輸出矩陣a形狀,2行4列(2,4)>>>b=np.mat(np.arange(1,9).reshape(4,2))#mat()函數將二維數組生成矩陣b>>>print(b)#輸出矩陣b的值[[12][34][56][78]]>>>print(type(b))#輸出矩陣b的類型<class'numpy.matrixlib.defmatrix.matrix'>>>>print(b.ndim)#輸出矩陣b維數,維數2,矩陣必須是二維2>>>print(b.shape)#輸出矩陣b形狀,4行2列(4,2)#矩陣a和b滿足相乘的規則,用a*b求矩陣的乘>>>a*bmatrix([[50,60],[114,140]])>>>print(a*b)#輸出矩陣a和矩陣b相乘的結果,結果還是二維的矩陣[[5060][114140]]#用dot(a,b)求矩陣的乘>>>print(np.dot(a,b))[[5060][114140]](2)數組和數組相乘#數組c和數組d相乘,也可用c*d>>>c=np.array([[1,2,3,4],[5,6,7,8]])#array()函數將列表生成2行4列數組>>>print(c)#輸出數組c的值[[1234][5678]]>>>print(type(c))#輸出c的類型,數組類型<type'numpy.ndarray'>>>>print(c.ndim)#輸出數組c維數,維數22>>>print(c.shape)#輸出數組c形狀,2行4列(2,4)#reshape()函數將arange()生成的一維數組重塑成4行2列數組>>>d=np.arange(1,9).reshape(4,2)>>>print(d)#輸出數組d的值,4行2列數組[[12][34][56][78]]>>>print(type(d))#輸出d的類型,數組類型<type'numpy.ndarray'>#二維數組c和d相乘,是對應元素相乘,兩二維數組形狀要一樣>>>c*d#形狀不一樣,拋出異常Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>ValueError:operandscouldnotbebroadcasttogetherwithshapes(2,4)(4,2)#reshape()函數將arange()生成的一維數組#重塑成2行4列數組>>>d=np.arange(1,9).reshape(2,4)>>>print(d)#輸出數組d的值,2行4列數組[[1234][5678]]>>>print(type(d))#輸出d的類型,數組類型<type'numpy.ndarray'>#c和d形狀一致,對應元素相乘>>>c*darray([[1,4,9,16],[25,36,49,64]])numpy模塊→matrix類型和array類型的區別(3)歸約運算

數組array與矩陣matrix最大的不同是在做歸約運算時,array的維數會發生變化,但matrix總是保持為2維。#矩陣matrix做歸約運算時,總是保持為2維>>>a=np.mat(np.arange(4).reshape(2,2))>>>amatrix([[0,1],[2,3]])>>>b=a.mean(1)#按行規約,求平均值,矩陣維數2不變>>>bmatrix([[0.5],[2.5]])>>>b.shape(2,1)>>>b.ndim2numpy模塊→matrix類型和array類型的區別#數組array做歸約運算時,維數會發生變化>>>c=np.arange(4).reshape(2,2)>>>carray([[0,1],[2,3]])>>>d=c.mean(1)#按行規約,求平均值,數組維數變為1>>>darray([0.5,2.5])>>>d.shape(2,)>>>d.ndim13pandas模塊目錄項目實戰2numpy模塊1單元小結

4pandas模塊pandas是Python的一個數據分析包,最初由AQRCapitalManagement于2008年4月開發,并于2009年底開源出來,目前由專注于Python數據包開發的PyData開發項目組繼續開發和維護。pandas最初被作為金融數據分析工具而開發出來,因此,pandas為時間序列分析提供了很好的支持。Python中的所有數據類型在pandas中依然適用,pandas自己主要有一維Series、二維的表格型DataFrame和三維的Panel三種類型。一維Series與Numpy中的一維array類似,二者與Python基本的數據結構list也很相近,字符串、bool值、數字等都能保存在Series中,其中Time-Series是以時間為索引的Series。二維的表格型數據結構DataFrame可以理解為Series的容器;三維的Panel可以理解為DataFrame的容器。這些數據類型讓pandas操作數據顯得更加方便和高效,而三種類型中以DataFrame類型最為常用。pandas模塊→Series類型>>>importnumpyasnp>>>importpandasaspd#用Series()創建Series類型對象#np.nan的值為NaN,表示數據值缺失>>>s=pd.Series([1,3,4,5,6,np.nan,8,np.nan,10])>>>print(s)#輸出s,顯示成一列,有索引,元素類型默認是float6401132435465NaN687NaN810dtype:float64>>>print(s.dtype)#輸出s中元素類型,默認是float64float64>>>print(s.ndim)#輸出s維數1>>>print(s.shape)#輸出s形狀(9,)>>>print(())#Series無該屬性,DataFrame有該屬性Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"/usr/lib/Python2.7/dist-packages/pandas/core/generic.py",line2360,in__getattr__(type(self).__name__,name))AttributeError:'Series'objecthasnoattribute'info’>>>print(type(s))#輸出s的類型,是Series類型<class'pandas.core.series.Series'>>>>print(s.values)#輸出s的values值[1.3.4.5.6.nan8.nan10.]>>>s.values#輸出s的values值,值是數組類型array([1.,3.,4.,5.,6.,nan,8.,nan,10.])>>>print(type(s.values))#輸出s.values的類型是ndarray數組類型<type'numpy.ndarray'>>>>print(s.index)#輸出s的index值Int64Index([0,1,2,3,4,5,6,7,8],dtype='int64')>>s.index#輸出s的index值,值是Int64Index類型Int64Index([0,1,2,3,4,5,6,7,8],dtype='int64')>>>print(type(s.index))#輸出s.index的類型是Int64Index<class'pandas.core.index.Int64Index'>>>>print(s.sum())#輸出s的各元素的和

37.0

Series是帶標簽的一維數組數據結構,標簽可以理解為索引,但這個索引并不局限于整數,它也可以是字符類型,比如a、b、c等。該結構能夠存儲各種數據類型,比如字符、整數、浮點數、Python對象等,Series用name和index屬性來描述數據值。#輸出s每個元素對應是否為空值NaN,False表示非空值,True表示是空值>>>print(s.isnull())0False1False2False3False4False5True6False7True8Falsedtype:bool#查看列是否存在空值,True表示有空值,False表示無空值>>>print(s.isnull().any(axis=0))True>>>print(s.isnull().any())#省略any()參數axis=0,功能同上True#計算有空值列的數量,要么是1,要么是0,因為只有1列>>>print(s.isnull().any(axis=0).sum())1pandas模塊→Series類型>>>importnumpyasnp>>>importpandasaspd(1)字典作為DataFrame()輸入創建二維表格>>>df=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],"date":pd.date_range('20180101',periods=6),"city":['Beijing','shanghai','guangzhou','Shenzhen','nanjing','changzhou'],"age":[18,26,28,36,42,52],"category":['2018-A','2018-B','2018-C','2018-D','2018-E','2018-F'],"price":[1200,np.nan,2500,5500,np.nan,4300]},columns=['id','date','city','category','age','price'])>>>df#顯示df的值,帶索引列(自動添加)和column行iddatecitycategoryageprice010012018-01-01Beijing2018-A181200.0110022018-01-02shanghai2018-B26NaN210032018-01-03guangzhou2018-C282500.0310042018-01-04Shenzhen2018-D365500.0410052018-01-05nanjing2018-E42NaN510062018-01-06changzhou2018-F524300.0pandas模塊→DataFrame類型DataFrame是一種二維表格型數據結構,既有行索引,也有列索引。行索引是index,列索引是columns。在創建DataFrame數據結構時,可以指定相應的索引值。#查看二維表格類型DataFrame信息>>>print(type(df))#輸出df的類型

<class'pandas.core.frame.DataFrame'>>>>print(df.ndim)#輸出df的維數2>>>print(df.shape)#輸出df的形狀(6,6)>>>print(df.dtypes)#輸出df各列數據類型idint64datedatetime64[ns]cityobjectcategoryobjectageint64pricefloat64dtype:objectpandas模塊→DataFrame類型#輸出df基本信息(類型、行數、列數、列名稱、每列數據類型、所占空間)>>>print(())<class'pandas.core.frame.DataFrame'>Int64Index:6entries,0to5Datacolumns(total6columns):id6non-nullint64date6non-nulldatetime64[ns]city6non-nullobjectcategory6non-nullobjectage6non-nullint64price4non-nullfloat64dtypes:datetime64[ns](1),float64(1),int64(2),object(2)memoryusage:336.0+bytesNone>>>print(df['date'])#輸出DataFrame某一列的值02018-01-0112018-01-0222018-01-0332018-01-0442018-01-0552018-01-06Name:date,dtype:datetime64[ns]>>>print(df[['age','price']])#輸出DataFrame某幾列的值ageprice0181200126NaN22825003365500442NaN5524300>>>print(df.isnull())#以二維表格形式,輸出每個元素對應是否為空值NaNiddatecitycategoryageprice0FalseFalseFalseFalseFalseFalse1FalseFalseFalseFalseFalseTrue2FalseFalseFalseFalseFalseFalse3FalseFalseFalseFalseFalseFalse4FalseFalseFalseFalseFalseTrueFalseFalseFalseFalseFalseFalse#查看各列是否存在空值,True表示有空值,False表示無空值>>>print(df.isnull().any(axis=0))idFalsedateFalsecityFalsecategoryFalseageFalsepriceTruedtype:boolpandas模塊→DataFrame類型pandas基礎>>>df.values#df.values的類型是二維數組類型array([[1001,Timestamp('2018-01-0100:00:00'),'Beijing','2018-A',18,1200.0],[1002,Timestamp('2018-01-0200:00:00'),'shanghai','2018-B',26,nan],[1003,Timestamp('2018-01-0300:00:00'),'guangzhou','2018-C',28,2500.0],[1004,Timestamp('2018-01-0400:00:00'),'Shenzhen','2018-D',36,5500.0],[1005,Timestamp('2018-01-0500:00:00'),'nanjing','2018-E',42,nan],[1006,Timestamp('2018-01-0600:00:00'),'changzhou','2018-F',52,4300.0]],dtype=object)>>>print(df.columns)#

溫馨提示

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

評論

0/150

提交評論