




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第九章 數(shù)據(jù)分析基礎北京西普陽光教育科技股份有限公司 中國IT教育解決方案專家 2018年10月制作:丁輝1目 錄 Contents01numpy模塊02pandas模塊030407項目訓練小結(jié)2numpy模塊01numpy模塊 numpy是一個用Python實現(xiàn)的科學計算包,專為進行嚴格的數(shù)值處理而產(chǎn)生,尤其是對大型多維數(shù)組和矩陣的支持,并且有一個大型的高級數(shù)學函數(shù)庫來操作這些數(shù)組。numpy提供了許多高級的數(shù)值編程工具,如矩陣數(shù)據(jù)類型、矢量處理,以及精密的運算庫。numpy多為很多大型金融公司和核心的科學計算組織使用,具有運算速度快、效率高、節(jié)省空間等特點。45 numpy中最重要的對象就
2、是ndarray的多維數(shù)組,它是一組相同類型元素的集合,元素可用從零開始的索引來訪問。多維數(shù)組ndarray中的每個元素在內(nèi)存中連續(xù)存放并占同樣大小存儲空間。多維數(shù)組ndarray有以下幾個屬性:ndarray.size:數(shù)組中全部元素的數(shù)量;ndarray.dtype:數(shù)組中數(shù)據(jù)元素的類型(int8,uint8,int16,uint16,int32,uint32,int64,uint64,float16,float32,float64,float128,complex64,complex128,complex256,bool,object,string,unicode等);ndarray.i
3、temsize:每個元素占的字節(jié)數(shù);ndarray.ndim:數(shù)組的維度;ndarray.shape:數(shù)組各維度大小。ndarray類型數(shù)組6創(chuàng)建一維數(shù)組(1)用array()函數(shù)創(chuàng)建一維數(shù)組 創(chuàng)建數(shù)組最簡單的方法就是使用array()函數(shù)。它將輸入的數(shù)據(jù)(元組、列表、數(shù)組或其它序列的對象)轉(zhuǎn)換成多維數(shù)組ndarray,數(shù)組元素類型自動推斷出或顯式制定dtype類型,默認直接復制輸入的數(shù)據(jù),然后產(chǎn)生一個新的多維數(shù)組ndarray。 import numpy as np #導入numpy模塊,重命名為np x = np.array(1,2,3,4) #創(chuàng)建一維數(shù)組x x array(1, 2,
4、3, 4) #一維數(shù)組1, 2, 3, 4 print(x) #輸出 x值1 2 3 4 print(x.size) #輸出 x 全部元素的數(shù)量4 print(x.dtype) #輸出 x中每個元數(shù)的類型int64 print(x.itemsize) #輸出 x中每個元素占幾個字節(jié)8 x.ndim #顯示x的維度1 x.shape #顯示x的形狀,行上共4個元素 (4,)#array()函數(shù)參數(shù)為列表,創(chuàng)建數(shù)組,指定類型為float64 y = np.array(1,2,3,4,5,dtype=float64) yarray( 1., 2., 3., 4., 5.) # 1., 2., 3.,
5、 4., 5.中的點表示數(shù)組中元素類型是浮點型 print(y) 1. 2. 3. 4. 5. y.dtypedtype(float64) y.ndim 1 ndarray類型數(shù)組7創(chuàng)建一維數(shù)組(2)用arange()函數(shù)創(chuàng)建一維數(shù)組 arrange()函數(shù)用于創(chuàng)建等差數(shù)組,使用頻率非常高,arange()非常類似Python中range()函數(shù),兩者的區(qū)別在于,arange()返回的是一個數(shù)組,而range()返回的是list,并且是整型。 import numpy as np np.arange(5) # arange()輸出的是含有04,5個元素的數(shù)組array(0, 1, 2, 3,
6、4) np.arange(1,5) array(1, 2, 3, 4) np.arange(2,5) array(2, 3, 4) np.arange(1,10,2) #第一個參數(shù)起點,第二個參數(shù)終點,第三個參數(shù)步長array(1, 3, 5, 7, 9) np.arange(1,10,2, dtype=16) #指定數(shù)據(jù)元素的類型為int16array(1, 3, 5, 7, 9 , dtype=int16)ndarray類型數(shù)組8創(chuàng)建N維數(shù)組(1)使用array()函數(shù)創(chuàng)建 import numpy as np x1 = np.array(1,2,3,4) #創(chuàng)建一維數(shù)組 x1
7、array(1,2, 3, 4) print(x1.ndim) #輸出 x1的維度1 print(x1.shape)(4,) x2 = np.array(1,2,3,4) #創(chuàng)建二維數(shù)組,注意參數(shù)的形式 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) #創(chuàng)建二維數(shù)組 print(x3)1 2 3 4 5 6 7 8 print(x3.dtype)int64 print(x3.ndim) #輸出 x3的維度2ndarray類型數(shù)組 print(x3.s
8、hape) #輸出 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) #創(chuàng)建三維數(shù)組 print(y)1 2 3 4 5 6 7 8 0 0 0 0 9 9 9 9 print(y.dtype)int64 print(y.ndim) #輸出 y的維度3 print(y.shape) #輸出y各維度大小,(2, 2, 4) 表示2維2行4列(2, 2, 4)9創(chuàng)建N維數(shù)組(2)使用reshape()函數(shù)創(chuàng)建 reshape()函數(shù)可以實現(xiàn)給數(shù)組一個新的形狀而不改變其數(shù)據(jù),通過reshape()生成的
9、新數(shù)組和原始數(shù)組公用一個內(nèi)存,也就是說,假如更改一個數(shù)組的元素,另一個數(shù)組也將發(fā)生改變。常與arange()函數(shù)一起使用來構(gòu)造多維數(shù)組。 import numpy as np yo = np.arange(1,9) print(yo)1 2 3 4 5 6 7 8#創(chuàng)建由18,8個元素組成的一維數(shù)組,并改變形狀為2行4列二維數(shù)組 y1 = np.arange(1,9).reshape(2,4) print(y1)1 2 3 4 5 6 7 8#reshape(x,y,z)中任意1參數(shù)值用 -1 替換,此軸長度自動計算 y2 = np.arange(1,9).reshape(-1,4) prin
10、t(y2)1 2 3 4 5 6 7 8 y3 = np.arange(1,9).reshape(2,-1) print(y3)1 2 3 4 5 6 7 8 y4 = np.arange(1,9).reshape(1,-1) #1行,自動計算為8列 print(y4)1 2 3 4 5 6 7 8 y5 = np.arange(1,5).reshape(-1,1) #1列,自動計算為4行 print(y5)1 2 3 4ndarray類型數(shù)組 y6 = np.arange(1,9).reshape(-1) print(y6)1 2 3 4 5 6 7 8 y7 = np.arange(1,2
11、5).reshape(2,3,4) print(y7) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 print(y7.dtype) #數(shù)組中數(shù)據(jù)元素的類型是64位整型int64 print(y7.ndim) # 3維數(shù)組3 print(y7.shape) #數(shù)組各維度大小(2, 3, 4) print(y7.size) #數(shù)組中全部元素的數(shù)量24個24 print(y7.itemsize) #每個元素占8個字節(jié)8 print(y7.reshape(-1) #輸出y7數(shù)組變形為1維的結(jié)果 1 2 3 4 5 6 7
12、 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2410創(chuàng)建數(shù)組的其它常用函數(shù)ndarray類型數(shù)組函數(shù)名稱功能說明np.ones()根據(jù)指定的形狀和類型生成全1的數(shù)組np.zeros()生成全0的數(shù)組np.empty()創(chuàng)建空數(shù)組,只分配存儲空間,不填充數(shù)據(jù),隨機值np.random.randint(x,y,(m,n)創(chuàng)建x起始值, y截止值, m行n列的隨機整數(shù)數(shù)組np.linspace(x, y, z)等間距生成 x起始值,y截止值, z個數(shù)的一維數(shù)組 import numpy as np print(np.ones(2,3,4),dtype
13、=8) #2維3行4列全1數(shù)組,指定數(shù)據(jù)類型為int81 1 1 11 1 1 11 1 1 11 1 1 11 1 1 11 1 1 1 print(np.zeros(2,3,4),dtype=8) #2維3行4列全0數(shù)組,指定數(shù)據(jù)類型為int80 0 0 00 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0print(np.empty(2,3,4),dtype=8) #2維3行4列全空數(shù)組,數(shù)據(jù)類型為int80 0 0 00 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0 print(np.random.randi
14、nt(0,9,(3,4) #大于等于0小于9,3行4列的隨機整數(shù)數(shù)組0 3 4 32 5 5 03 6 4 5 print(np.random.randint(0,9,size=(3,4)4 5 1 27 1 7 80 4 8 6 print(np.random.randint(9,size=(3,4)4 1 4 31 6 6 42 8 5 7 print(np.random.rand(3,4) #隨機樣本位于0, 1),生成3行4列的隨機實數(shù)數(shù)組 0.96254165 0.56234931 0.33305427 0.61655296 0.61970155 0.98179923 0.66314
15、103 0.16168549 0.89932954 0.46638002 0.38740938 0.61592195 print(np.random.randn(3,4) #從標準正態(tài)分布中返回樣本值,生成3行4列的隨機實數(shù)數(shù)組-1.30977545 0.47668467 0.11054181 0.93487926-0.49593833 -0.64846104 0.25832515 -1.82852527-0.86807899 1.25805438 -0.16311422 0.75200323 print(np.linspace(-2,2,5) #起點為-2,終點為2,取5個點-2. -1.
16、0. 1. 2. print(np.linspace(-2,8,5) #起點為-2,終點為8,取5個點-2. 0.5 3. 5.5 8. 11數(shù)組的運算ndarray類型數(shù)組(1)數(shù)組的基本運算#數(shù)組的+、-、*、/四則運算,要求參與運算的數(shù)組要同樣大小,即維度和元素個數(shù)相同 a = np.array(np.arange(1,5) b = a aarray(1, 2, 3, 4) barray(1, 2, 3, 4) print(a + b) #對應元素進行運算2 4 6 8 print(a - b)0 0 0 0 print(a * b) 1 4 9 16 print(a / b)1 1 1
17、 1 print(a + 2) #每個元素都進行同樣的運算3 4 5 6 print(a - 2)-1 0 1 2 print(a * 2)2 4 6 8 print(a / 2)0 1 1 2 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) 2 4 6 8 10 12 14 16 print(c - d)0 0 0 0 0 0 0 0 print(c * d) 1 4 9 16 25 36 49 6
18、4 print(c / d)1 1 1 1 1 1 1 1 print(c + 2) 3 4 5 6 7 8 9 10 print(c - 2)-1 0 1 2 3 4 5 6 print(c * 2) 2 4 6 8 10 12 14 16 print(c / 2)0 1 1 2 2 3 3 412數(shù)組的運算ndarray類型數(shù)組(2)數(shù)組運算的基本函數(shù)數(shù)組運算的基本函數(shù)是指能同時對數(shù)組中所有元素進行運算的函數(shù),主要包括一元函數(shù)和二元函數(shù)。一元函數(shù)有平方square()、平方根sqrt()、絕對值abs()/fabs()、對數(shù)log()/log10/log2()、符號sign()、是否為Na
19、N isnan()、是否是有窮 isinf()、三角函數(shù)cos()/cosh()/sin()/sinh()/tan()/tanh()、四舍五入rint()、整數(shù)和小數(shù)分離,作兩個數(shù)組返回modf();二元函數(shù)有元素級加法add(array1,array2)、元素級減法subtract(array1,array2)、元素級乘法multiply(array1,array2)、元素級除法divide(array1,array2) 、元素級指數(shù)power(array1,array2)、元素級最大/最小值maximum/minimum(array1,aray2)等函數(shù)。 import numpy as
20、np a = np.array(np.arange(1,9).reshape(2,4) aarray(1, 2, 3, 4, 5, 6, 7, 8) b = np.square(a) #一元函數(shù)square(),計算平方 print(b) 1 4 9 16 25 36 49 64 c = np.sqrt(b) #一元函數(shù)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.22 3.44 5. 6.21 8.99 7. 4. 0.8213數(shù)組的運算
21、ndarray類型數(shù)組(2)數(shù)組運算的基本函數(shù) print(np.add(a,a) #二元函數(shù)add(array1,array2),計算和 2 4 6 8 10 12 14 16 print(np.subtract(a,a) #二元函數(shù)subtract (array1,array2),計算差0 0 0 0 0 0 0 0 print(np.multiply(a,a) #二元函數(shù)multiply (array1,array2),計算積 1 4 9 16 25 36 49 64 print(np.divide(a,a) #二元函數(shù)divide (array1,array2),計算商1 1 1 1
22、1 1 1 114數(shù)組的運算ndarray類型數(shù)組(3)數(shù)學和統(tǒng)計函數(shù)numpy中有一組數(shù)學函數(shù)可以實現(xiàn)對整個數(shù)組或某個軸向的數(shù)據(jù)進行統(tǒng)計計算,如求和sum()、求平均數(shù)mean()、標準差std()等函數(shù),同時mean()和sum()這類函數(shù)可以接受一個axis參數(shù)(用于計算該軸向上的統(tǒng)計值),最終結(jié)果是一個少一維的數(shù)組。其它的常用函數(shù)還有求方差var()、最小值min() 、最大值max() 、最小值索引argmin() 、最大值索引argmax()等。 import numpy as np a = np.array(np.arange(1,9).reshape(2,4) aarray(1
23、, 2, 3, 4, 5, 6, 7, 8) np.sum(a) #數(shù)組所有元素和36 a.sum()36 a.sum(axis = 1) # “axis=1”對行上的數(shù)據(jù)進行匯總求和,即數(shù)組每行所有元素和array(10, 26) np.sum(a,axis = 1)array(10, 26) a.sum(1)array(10, 26) a.sum(axis=0) # “axis=0”對列上的數(shù)據(jù)進行匯總求和,即數(shù)組每列所有元素和array( 6, 8, 10, 12) np.sum(a,axis=0)array( 6, 8, 10, 12) a.sum(0)array( 6, 8, 10,
24、 12) np.mean(a) # 數(shù)組所有元素和平均值4.5 a.mean()4.515數(shù)組的運算ndarray類型數(shù)組(3)數(shù)學和統(tǒng)計函數(shù)# axis = 1對行上的數(shù)據(jù)進行匯總求平均值,即數(shù)組每行所有元素平均值 a.mean(axis = 1) array( 2.5, 6.5)# axis=0對列上的數(shù)據(jù)進行匯總求平均值,即數(shù)組每列所有元素平均值 a.mean(axis = 0) array( 3., 4., 5., 6.) aarray(1, 2, 3, 4, 5, 6, 7, 8) a.cumsum() # 數(shù)組所有元素累積和array( 1, 3, 6, 10, 15, 21, 2
25、8, 36) a.cumsum(1) # 數(shù)組行累積和array( 1, 3, 6, 10, 5, 11, 18, 26) a.cumsum(0) # 數(shù)組列累積和array( 1, 2, 3, 4, 6, 8, 10, 12) a.cumprod() # 數(shù)組所有元素累積積array( 1, 2, 6, 24, 120, 720, 5040, 40320) a.cumprod(1) # 數(shù)組行累積積array( 1, 2, 6, 24, 5, 30, 210, 1680) a.cumprod(0) # 數(shù)組列累積積array( 1, 2, 3, 4, 5, 12, 21, 32)16matr
26、ix類型矩陣 N維數(shù)組ndarray和矩陣類型matrix是numpy中兩個最重要的數(shù)據(jù)類型,它們是很多基于numpy數(shù)值計算的基礎,因此學習并理清兩者的關(guān)系非常重要,特別是程序中同時混雜這兩種類型,還夾帶著一些加減乘除的運算時,就更容易混淆。 N維數(shù)組ndarry,簡稱數(shù)組array。而矩陣類型matrix其實也是一種array,只不過是維數(shù)為2的特殊array,因此,可以說在numpy中二維數(shù)組就是矩陣,矩陣也有與數(shù)組一樣常見的幾個屬性,但二者分別是兩種類型。matrix的維數(shù)是固定的永遠是2,這點和一般array顯著不同,即便加減乘除各種運算,matrix的維數(shù)不會發(fā)生變化,而array
27、在運算時特別是歸約時維數(shù)會發(fā)生變化。 array轉(zhuǎn)變成matrix用np.mat()、np.matrix()或者np.asmatrix(),而matrix轉(zhuǎn)array用np.asarray或者matrix的A屬性(mat1.getA()),再看行向量或者列向量對應的array和matrix的實際維數(shù)。17matrix類型矩陣創(chuàng)建矩陣(1)利用mat()、matrix()或asmatrix()函數(shù)創(chuàng)建 import numpy as np list1 = 1,2,3,4,5,6,7,8 list11, 2, 3, 4, 5, 6, 7, 8 mat1 = np.mat(list1) # mat(
28、)對列表創(chuàng)建矩陣 mat1matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat1)1 2 3 4 5 6 7 8 mat2 = np.matrix(list1) # matrix()對列表創(chuàng)建矩陣 mat2matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat2)1 2 3 4 5 6 7 8 mat3 = np.asmatrix(list1) # asmatrix()對列表創(chuàng)建矩陣 mat3matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat3)1 2 3 4 5 6 7 8 array1 = np.array
29、(list1) # array()對列表創(chuàng)建數(shù)組 array1array(1, 2, 3, 4, 5, 6, 7, 8) mat4 = np.mat(array1) # mat()對數(shù)組創(chuàng)建矩陣 mat4matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat4.ndim) # mat4維數(shù)是二維2 print(mat4.shape) # mat4是2行4列 (2, 4) print(type(mat4) # mat4類型,矩陣類型 array2 = np.arange(1,5) #創(chuàng)建一維數(shù)組 array2 #顯示array2array(1, 2, 3, 4) pri
30、nt(array2) #輸出array21 2 3 4 print(array2.ndim) #輸出array2的維數(shù)為11 print(array2.shape) #輸出array2的形狀,行為4元素,列無(4,) print(type(array2) #輸出array2的類型,N維數(shù)組類型 mat5 = np.mat(array2) #利用mat()對一維數(shù)組創(chuàng)建矩陣mat5 mat5 #顯示mat5 matrix(1, 2, 3, 4) print(mat5) #輸出mat51 2 3 4 print(mat5.ndim) #輸出mat5的維數(shù)為22 print(mat5.shape)
31、#輸出mat5的形狀,1行4列(1, 4) print(type(mat5) #輸出mat5的類型,矩陣類型18matrix類型矩陣創(chuàng)建矩陣(2)特殊矩陣的創(chuàng)建 import numpy as np x = np.zeros(3,3),dtype=8) #創(chuàng)建3*3全0二維數(shù)組 xarray(0, 0, 0, 0, 0, 0, 0, 0, 0, dtype=int8) mat1 = np.mat(x) #創(chuàng)建3*3全0矩陣 mat1matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, dtype=int8) print(mat1)0 0 0 0 0 0 0 0 0 m
32、at2 = np.mat(np.ones(3,3),dtype=8) #創(chuàng)建3*3全1矩陣 mat2matrix(1, 1, 1, 1, 1, 1, 1, 1, 1, dtype=int8) mat3 = np.mat(np.eye(3,3,dtype=int) #創(chuàng)建3*3對角矩陣,即單位矩陣 mat3matrix(1, 0, 0, 0, 1, 0, 0, 0, 1) y = 1,2,3 mat4 = np.mat(np.diag(y) #創(chuàng)建對角線為1,2,3的3*3對角矩陣 mat4matrix(1, 0, 0, 0, 2, 0, 0, 0, 3)19matrix類型矩陣創(chuàng)建
33、矩陣(3)列表、數(shù)組、矩陣間的相互轉(zhuǎn)換 import numpy as np list1 = 0,1,2,3,4,5,6,7,8 array1 = np.array(list1) #列表list1數(shù)組array1,array()實現(xiàn) array1array(0, 1, 2, 3, 4, 5, 6, 7) print(array1)0 1 2 3 4 5 6 7 mat1 = np.mat(array1) #數(shù)組array1矩陣mat1,mat()實現(xiàn) mat1matrix(0, 1, 2, 3, 4, 5, 6, 7) print(mat1)0 1 2 3 4 5 6 7 array2 = n
34、p.array(mat1) #矩陣mat1數(shù)組array2,array2= array1,array()實現(xiàn) array2array(0, 1, 2, 3, 4, 5, 6, 7) array3 = mat1.getA() #矩陣mat1數(shù)組array3,array3= array1,getA()實現(xiàn) array3array(0, 1, 2, 3, 4, 5, 6, 7) list2 = mat1.tolist() #矩陣mat1列表list2,list2= list1,tolist()實現(xiàn) list20, 1, 2, 3, 4, 5, 6, 7 list3 = array3.tolist()
35、 #數(shù)組array3列表list3,list3=list1,tolist()實現(xiàn) list30, 1, 2, 3, 4, 5, 6, 720matrix類型矩陣矩陣的運算兩個矩陣相加減,即它們相同位置的元素相加減。只有對于兩個行數(shù)、列數(shù)分別相等的矩陣(即同型矩陣),加減法運算才有意義,這一點與二維數(shù)組的加減運算規(guī)則一致。當矩陣A的列數(shù)等于矩陣B的行數(shù)時,A與B兩矩陣才可以相乘,兩矩陣相乘按照矩陣的乘法運算規(guī)則,這一點與二維數(shù)組的乘法運算規(guī)則不同,二維數(shù)組的乘法運算規(guī)則同加減規(guī)則一致,按位相乘。一般不進行兩個矩陣直接相除,矩陣的除法是通過逆矩陣實現(xiàn)的。(1) 矩陣的加減乘運算 import nu
36、mpy as np 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) #矩陣相加,同型矩陣 2 4 6 8 10 12 print(a - b) #矩陣相減,同型矩陣0 0 0 0 0 0 c = np.mat(np.arange(1,7).reshape(3,2) cmatrix(1, 2, 3, 4, 5, 6) print(a * c) #矩陣相乘,a的列數(shù)等于矩陣c的行數(shù)22 28 49 64 print(np.dot
37、(a,c) #矩陣點乘,a的列數(shù)等于矩陣c的行數(shù)22 28 49 64 print(2 * a) #數(shù)乘矩陣 2 4 6 8 10 12 print(a * 2) #矩陣乘數(shù) 2 4 6 8 10 1221matrix類型矩陣矩陣的運算(2)矩陣的轉(zhuǎn)置和求逆 print(a.T) #矩陣轉(zhuǎn)置1 4 2 5 3 6 print(a.I) #求逆矩陣-0.94444444 0.44444444 -0.11111111 0.11111111 0.72222222 -0.22222222 print(a)1 2 3 4 5 6(3)矩陣的求和及索引 print(a.sum(axis = 0) #計算矩
38、陣每一列的和5 7 9 print(a.sum(axis = 1) #計算矩陣每一行的和 6 15 print(a.max(axis = 0) #計算矩陣每一列的最大值4 5 6 print(a.max(axis = 1) #計算矩陣每一行的最大值3 6 print(a.argmax(axis = 0) #計算矩陣每一列的最大值索引1 1 1 print(a.argmax(axis = 1) #計算矩陣每一行的最大值索引2 2(4)矩陣的分割和合并 mat1 = np.mat(np.arange(20).reshape(4,5) print(mat1) 0 1 2 3 4 5 6 7 8 9
39、10 11 12 13 14 15 16 17 18 19#分割出行,2行(含)到最后行;列,3列(含)到最后列,所有元素 mat2 = mat12:,3: print(mat2)13 14 18 19 mat3 = mat1:2,: #分割出行,開始到2行(不含);列,所有列,所有元素 mat3matrix(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) mat4 = mat12:,: #分割出行,2行(含)到最后行;列,所有列,所有元素 mat4matrix(10, 11, 12, 13, 14, 15, 16, 17, 18, 19) mat4 = mat12: #分割出行,
40、2行(含)到最后行;列,所有列,所有元素 mat4matrix(10, 11, 12, 13, 14, 15, 16, 17, 18, 19) mat5 = np.vstack(mat3,mat4) #按列合并,即列數(shù)不變 print(mat5) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 mat6 = np.hstack(mat3,mat4) #按行合并,即行數(shù)不變 print(mat6) 0 1 2 3 4 10 11 12 13 14 5 6 7 8 9 15 16 17 18 19 22matrix類型和array類型的區(qū)別 nu
41、mpy的matrix必須是2維的,但是numpy的array (ndarrays) 可以是多維的(1D,2D,3DND);matrix是array的一個小的分支,包含于array,所以matrix 擁有array的所有特性。但是numpy里面數(shù)組array遵循逐個元素的運算規(guī)則,而矩陣matrix遵循矩陣運算的規(guī)則。在二者做乘法運算和規(guī)約運算時要注意其區(qū)別。(1)矩陣和矩陣相乘 a = np.mat(1,2,3,4,5,6,7,8) #mat()函數(shù)將列表生成矩陣 print(a) #輸出矩陣a的值1 2 3 4 5 6 7 8 print(type(a) #輸出矩陣a的類型 print(a.
42、ndim) #輸出矩陣a維數(shù),維數(shù)2,矩陣必須是二維2 print(a.shape) #輸出矩陣a形狀, 2行4列(2, 4) b = np.mat(np.arange(1,9).reshape(4,2) #mat()函數(shù)將二維數(shù)組生成矩陣b print(b) #輸出矩陣b的值1 2 3 4 5 6 7 8 print(type(b) #輸出矩陣b的類型 print(b.ndim) #輸出矩陣b維數(shù),維數(shù)2,矩陣必須是二維2 print(b.shape) #輸出矩陣b形狀, 4行2列(4, 2)#矩陣a和b滿足相乘的規(guī)則,用a*b求矩陣的乘 a * b matrix( 50, 60, 114,
43、 140) print(a * b) #輸出矩陣a和矩陣b相乘的結(jié)果,結(jié)果還是二維的矩陣 50 60 114 140#用dot(a,b)求矩陣的乘 print(np.dot(a,b) 50 60 114 14023matrix類型和array類型的區(qū)別(2)數(shù)組和數(shù)組相乘#數(shù)組c和數(shù)組d相乘,也可用c*d c = np.array(1,2,3,4,5,6,7,8) # array ()函數(shù)將列表生成2行4列數(shù)組 print(c) #輸出數(shù)組c的值1 2 3 4 5 6 7 8 print(type(c) #輸出c的類型,數(shù)組類型 print(c.ndim) #輸出數(shù)組c維數(shù),維數(shù)22 prin
44、t(c.shape) #輸出數(shù)組c形狀,2行4列(2, 4)# reshape ()函數(shù)將arange()生成的一維數(shù)組重塑成4行2列數(shù)組 d = np.arange(1,9).reshape(4,2) print(d) #輸出數(shù)組d的值,4行2列數(shù)組1 2 3 4 5 6 7 8 print(type(d) #輸出d的類型,數(shù)組類型#二維數(shù)組c和d相乘,是對應元素相乘,兩二維數(shù)組形狀要一樣 c*d #形狀不一樣,拋出異常Traceback (most recent call last): File , line 1, in ValueError: operands could not be
45、broadcast together with shapes (2,4) (4,2) # reshape ()函數(shù)將arange()生成的一維數(shù)組#重塑成2行4列數(shù)組 d = np.arange(1,9).reshape(2,4) print(d) #輸出數(shù)組d的值,2行4列數(shù)組1 2 3 4 5 6 7 8 print(type(d) #輸出d的類型,數(shù)組類型#c和d形狀一致,對應元素相乘 c * d array( 1, 4, 9, 16, 25, 36, 49, 64)24matrix類型和array類型的區(qū)別(3)歸約運算 數(shù)組array與矩陣matrix最大的不同是在做歸約運算時,ar
46、ray的維數(shù)會發(fā)生變化,但matrix總是保持為2維。# 矩陣matrix做歸約運算時,總是保持為2維 a = np.mat(np.arange(4).reshape(2,2) amatrix(0, 1, 2, 3) b = a.mean(1) #按行規(guī)約,求平均值,矩陣維數(shù)2不變 bmatrix( 0.5, 2.5) b.shape(2, 1) b.ndim2# 數(shù)組array做歸約運算時,維數(shù)會發(fā)生變化 c = np.arange(4).reshape(2,2) carray(0, 1, 2, 3) d = c.mean(1) #按行規(guī)約,求平均值,數(shù)組維數(shù)變?yōu)? darray( 0.5,
47、 2.5) d.shape(2,) d.ndim1pandas模塊02pandas簡介 pandas是Python的一個數(shù)據(jù)分析包,最初由AQR Capital Management于2008年4月開發(fā),并于2009年底開源出來,目前由專注于Python數(shù)據(jù)包開發(fā)的PyData開發(fā)項目組繼續(xù)開發(fā)和維護。pandas最初被作為金融數(shù)據(jù)分析工具而開發(fā)出來,因此,pandas為時間序列分析提供了很好的支持。 Python 中的所有數(shù)據(jù)類型在pandas中依然適用,pandas自己主要有一維Series、二維的表格型DataFrame和三維的Panel三種類型。一維Series與Numpy中的一維ar
48、ray類似,二者與Python基本的數(shù)據(jù)結(jié)構(gòu)list也很相近,字符串、bool值、數(shù)字等都能保存在Series中,其中Time-Series是以時間為索引的Series。二維的表格型數(shù)據(jù)結(jié)構(gòu)DataFrame可以理解為Series的容器;三維的Panel可以理解為DataFrame的容器。這些數(shù)據(jù)類型讓pandas操作數(shù)據(jù)顯得更加方便和高效,而三種類型中以DataFrame類型最為常用。26pandas基礎1. Series類型 import numpy as np import pandas as pd#用Series()創(chuàng)建Series類型對象# np.nan的值為NaN,表示數(shù)據(jù)值缺失
49、s = pd.Series(1,3,4,5,6,np.nan,8,np.nan,10) print(s) #輸出s,顯示成一列,有索引,元素類型默認是float640 11 32 43 54 65 NaN6 87 NaN8 10dtype: float64 print(s.dtype) #輸出s中元素類型,默認是float64float64 print(s.ndim) #輸出s維數(shù)1 print(s.shape) #輸出s形狀(9,) print(() # Series無該屬性,DataFrame有該屬性Traceback (most recent call last): File
50、 , line 1, in File /usr/lib/Python2.7/dist-packages/pandas/core/generic.py, line 2360, in _getattr_ (type(self)._name_, name)AttributeError: Series object has no attribute info27 print(type(s) #輸出s的類型,是Series類型 print(s.values) #輸出s的values值 1. 3. 4. 5. 6. nan 8. nan 10. s.values #輸出s的values值,值是數(shù)組類型ar
51、ray( 1., 3., 4., 5., 6., nan, 8., nan, 10.) print(type(s.values) #輸出s.values的類型是ndarray數(shù)組類型 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 p
52、rint(s.sum() #輸出s的各元素的和 37.0pandas基礎#輸出s每個元素對應是否為空值NaN,F(xiàn)alse表示非空值,True表示是空值 print(s.isnull() 0 False1 False2 False3 False4 False5 True6 False7 True8 Falsedtype: bool# 查看列是否存在空值,True表示有空值, False表示無空值 print(s.isnull().any(axis=0) True print(s.isnull().any() # 省略any()參數(shù)axis=0,功能同上True#計算有空值列的數(shù)量,要么是1,要么
53、是0,因為只有1列 print(s.isnull().any(axis=0).sum()128pandas基礎2. DataFrame類型 import numpy as np import pandas as pd(1)字典作為DataFrame()輸入創(chuàng)建二維表格 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,2
54、6,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行 id date city category age price0 1001 2018-01-01 Beijing 2018-A 18 1200.01 1002 2018-01-02 shanghai 2018-B 26 NaN2 1003 20
55、18-01-03 guangzhou 2018-C 28 2500.03 1004 2018-01-04 Shenzhen 2018-D 36 5500.04 1005 2018-01-05 nanjing 2018-E 42 NaN5 1006 2018-01-06 changzhou 2018-F 52 4300.0#查看二維表格類型DataFrame信息 print(type(df) #輸出df的類型 print(df.ndim) #輸出df的維數(shù)2 print(df.shape) #輸出df的形狀(6, 6) print(df.dtypes) #輸出df各列數(shù)據(jù)類型id int64da
56、te datetime64nscity objectcategory objectage int64price float64dtype: object29pandas基礎2. DataFrame類型#輸出df基本信息(類型、行數(shù)、列數(shù)、列名稱、每列數(shù)據(jù)類型、所占空間) print(() Int64Index: 6 entries, 0 to 5Data columns (total 6 columns):id 6 non-null int64date 6 non-null datetime64nscity 6 non-null objectcategory 6 non-null
57、 objectage 6 non-null int64price 4 non-null float64dtypes: datetime64ns(1), float64(1), int64(2), object(2)memory usage: 336.0+ bytesNone print(dfdate) # 輸出DataFrame某一列的值0 2018-01-011 2018-01-02 2 2018-01-033 2018-01-044 2018-01-055 2018-01-06Name: date, dtype: datetime64ns print(dfage,price) # 輸出Da
58、taFrame某幾列的值 age price0 18 12001 26 NaN2 28 25003 36 55004 42 NaN5 52 430030 print(df.isnull() # 以二維表格形式,輸出每個元素對應是否為空值NaN id date city category age price0 False False False False False False1 False False False False False True2 False False False False False False3 False False False False False False
59、4 False False False False False TrueFalse False False False False False# 查看各列是否存在空值,True表示有空值, False表示無空值 print(df.isnull().any(axis=0)id Falsedate Falsecity Falsecategory Falseage Falseprice Truedtype: boolpandas基礎2. DataFrame類型 df.values # df.values的類型是二維數(shù)組類型array(1001, Timestamp(2018-01-01 00:00:
60、00), Beijing, 2018-A, 18, 1200.0, 1002, Timestamp(2018-01-02 00:00:00), shanghai, 2018-B, 26, nan, 1003, Timestamp(2018-01-03 00:00:00), guangzhou , 2018-C, 28, 2500.0, 1004, Timestamp(2018-01-04 00:00:00), Shenzhen, 2018-D, 36, 5500.0, 1005, Timestamp(2018-01-05 00:00:00), nanjing, 2018-E, 42, nan,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 5 good manners study skills 教學設計2024-2025學年牛津譯林版八年級英語下冊
- 2020-2021深圳南山實驗學校初中部小學四年級數(shù)學上期末第一次模擬試題帶答案
- 鋼軌彈性支撐施工方案
- 屋頂融雪裝置施工方案
- 醇油漆施工方案
- 樓體加固具體施工方案
- 入駐店鋪合同范本
- 業(yè)務拓展顧問合同范例
- 產(chǎn)品質(zhì)量控制的年度措施計劃
- 乙方委托設計合同范本
- 2024-2029年中國金融服務外包行業(yè)發(fā)展分析及發(fā)展戰(zhàn)略研究報告
- 皮膚病測試題(附參考答案)
- 2024年皖西衛(wèi)生職業(yè)學院單招職業(yè)適應性測試題庫各版本
- 第八單元達標測試卷(單元測試)2023-2024學年統(tǒng)編版語文一年級下冊
- DZ∕T 0283-2015 地面沉降調(diào)查與監(jiān)測規(guī)范(正式版)
- 人事專員簡歷模板
- 全國蓄滯洪區(qū)建設與管理規(guī)劃090825
- 光伏項目過戶協(xié)議書
- 增城林場高質(zhì)量水源林工程建設項目增城林場森林質(zhì)量優(yōu)化提升工程-中幼林撫育作業(yè)設計
- 內(nèi)燃機車司機技師(強化練習)
- 2024年揚州工業(yè)職業(yè)技術(shù)學院單招職業(yè)技能測試題庫及答案解析
評論
0/150
提交評論