版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)第2章python數(shù)據(jù)分析與挖掘基礎(chǔ)本章內(nèi)容Python基礎(chǔ)Python內(nèi)建數(shù)據(jù)結(jié)構(gòu)Numpy數(shù)值運(yùn)算基礎(chǔ)Pandas統(tǒng)計(jì)分析基礎(chǔ)Matplotlib圖表繪制基礎(chǔ)Scikit-learn基礎(chǔ)10十一月202421.Python基礎(chǔ)Python是一個(gè)結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮母呒?jí)程序設(shè)計(jì)語(yǔ)言。其結(jié)構(gòu)簡(jiǎn)單,語(yǔ)法定義清晰。Python最具特色的就是使用縮進(jìn)來(lái)表示代碼塊,不需要使用大括號(hào){}。Python3中有六種標(biāo)準(zhǔn)的數(shù)據(jù)類型:Number(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Set(集合)和Dictionary(字典)。其中,不可變數(shù)據(jù)類型有Number、String和Tuple;可變數(shù)據(jù)類型有List、Dictionary和Set。Python中的變量是不需要聲明數(shù)據(jù)類型的,變量的“類型”是所指的內(nèi)存中被賦值對(duì)象的類型。同一變量可以反復(fù)賦值,而且可以是不同類型的變量。10十一月20243Python基礎(chǔ)操作符和表達(dá)式運(yùn)算符用于執(zhí)行程序代碼運(yùn)算,會(huì)針對(duì)一個(gè)以上的操作數(shù)進(jìn)行運(yùn)算。Python語(yǔ)言支持算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符。10十一月20244操作符描述+,-,*,/,%,//,**算術(shù)運(yùn)算:加、減、乘、除、取模、整除、冪<,<=,>,>=,!=,==關(guān)系運(yùn)算符and,or,not,邏輯運(yùn)算符Python基礎(chǔ)字符串1.轉(zhuǎn)義字符字符串被定義為引號(hào)之間的字符集合,在Python中,字符串用單引號(hào)('),雙引號(hào)("),三引號(hào)(''')括起來(lái)。當(dāng)Python字符串中有一個(gè)反斜杠時(shí)表示一個(gè)轉(zhuǎn)義序列的開始,稱反斜杠為轉(zhuǎn)義符。10十一月20245表2-2轉(zhuǎn)義字符示例轉(zhuǎn)義序列說(shuō)明\n換行\(zhòng)\反斜杠\”雙引號(hào)\t制表符Python允許用r+“
”的方式表示“
”內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義。Python基礎(chǔ)字符串2.字符串的運(yùn)算Python特有的索引規(guī)則為:第一個(gè)字符的索引是0,后續(xù)字符索引依次遞增,或者從右向左編號(hào),最后一個(gè)字符的索引號(hào)為-1,前面的字符依次減1,主要運(yùn)算+*切片。3.字符串的常見(jiàn)方法屬性,見(jiàn)表2-4字符串的方法描述10十一月20246Python基礎(chǔ)11/10/2024表2-4字符串的常用方法描述方法/函數(shù)作用str.capitalize()返回字符串的副本,其首字符大寫str.count(sub[,start[,end]])
返回[start,end]范圍內(nèi)sub的非重疊出現(xiàn)次數(shù),start和end可選str.endswith(sub[,start[,end]])返回布爾值,表示字符串是否以指定的sub結(jié)束,同類方法str.startswith()str.find(sub[,start[,end]])
返回字符串中首次出現(xiàn)子串sub的索引位置,start和end可選,若未找到sub,返回-1,類似方法str.index()str.split(sep=None)使用sep作為分隔符拆分字符串,返回字符串中單詞的列表str.strip([chars])刪除字符串前端和尾部chars指定的字符集,如果省略或None則刪除空白字符str.upper()/str.lower()將字符串中所有字符轉(zhuǎn)換為大寫/小寫Python基礎(chǔ)
流程控制條件語(yǔ)句ifcondition:if-block[elifcondition: elif-blockelse: else-block]10十一月20248其中,冒號(hào)(:)是語(yǔ)句塊開始標(biāo)記,[]內(nèi)為可選項(xiàng)。另外,在Python中,當(dāng)condition的值為False、0、None、””、()、[]、{}時(shí),會(huì)被解釋器解釋為假(False)。Python基礎(chǔ)
流程控制2.循環(huán)語(yǔ)句10十一月20249while語(yǔ)句語(yǔ)法格式:whilecondition:while-block【例2-4】求1+2+3+4+5的值。In[4]:sum=0i=1whilei<6:sum=sum+ii=i+1print("sumis%d."%sum)Out[4]:sumis15.Python基礎(chǔ)
流程控制2.循環(huán)語(yǔ)句10十一月202410for語(yǔ)句語(yǔ)法格式:for
v
in
Seq:for_block其中,v是循環(huán)變量,Seq是序列類型,涵蓋字符串、列表及元組。在每輪循環(huán)中,循環(huán)變量被設(shè)置為序列類型中的當(dāng)前對(duì)象,for_block是循環(huán)體,用來(lái)完成具體功能。Python基礎(chǔ)
流程控制2.循環(huán)語(yǔ)句10十一月202411for語(yǔ)句語(yǔ)法格式:for
v
in
Seq:for_block【例2-5】將下面數(shù)組中的奇數(shù)變成它的平方,偶數(shù)保持不變。In[5]:x=[1,2,3,4,8,7,22,33,88]print("原數(shù)據(jù):",x)foriinrange(len(x)):if(x[i]%2)!=0:#判讀第i個(gè)元素是否為奇數(shù)
x[i]=x[i]*x[i]print("處理后:",x)Out[5]:原數(shù)據(jù):
[1,2,3,4,8,7,22,33,88]處理后:
[1,2,9,4,8,49,22,1089,88]Python基礎(chǔ)函數(shù)是對(duì)程序邏輯進(jìn)行過(guò)程化和結(jié)構(gòu)化的一種方法。有了函數(shù),可將大塊的代碼巧妙合理地隔離成容易管理和維護(hù)的小塊。1.函數(shù)的定義函數(shù)定義語(yǔ)法格式如下所示:deffunction_name(arguments):function_block10十一月202412函數(shù)代碼塊以def關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)();function_name是用戶自定義的函數(shù)名稱;arguments是零個(gè)或多個(gè)參數(shù),且任何傳入?yún)?shù)必須放在圓括號(hào)內(nèi);最后必須跟一個(gè)冒號(hào)(:),函數(shù)體從冒號(hào)開始,并且縮進(jìn);function_block實(shí)現(xiàn)函數(shù)功能的語(yǔ)句塊。Python基礎(chǔ)10十一月202413【例2-6】定義函數(shù)計(jì)算n!。In[6]:deffac(n):s=1;foriinrange(2,n+1):s=s*ireturnsn=5print('%d!=%d'%(n,fac(n)))Out[6]:5!=120Python基礎(chǔ)2.lambda函數(shù)Python使用lambda來(lái)創(chuàng)建匿名函數(shù)。準(zhǔn)確地說(shuō),lambda只是一個(gè)表達(dá)式,函數(shù)體比def定義的函數(shù)簡(jiǎn)單得多,在lambda表達(dá)式中只能封裝有限的邏輯。除此之外,lambda函數(shù)擁有自己的命名空間,且不能訪問(wèn)自有參數(shù)列表之外或全局命名空間里的參數(shù)。10十一月202414【例2-7】定義一個(gè)lambda函數(shù)計(jì)算多項(xiàng)式1+2*x+y2+z*y的值。In[7]:polynominal=lambdax,y,z:1+2*x+y**2+z*ypolynominal(1,2,3)Out[7]:132Pyhton內(nèi)建數(shù)據(jù)結(jié)構(gòu)在Python中,最基本的數(shù)據(jù)結(jié)構(gòu)是序列。序列中的成員有序排列,可以通過(guò)下標(biāo)偏移量訪問(wèn)到它的一個(gè)或幾個(gè)成員。除了前面已經(jīng)介紹過(guò)的字符串,最常見(jiàn)的序列是列表和元組。列表是Python中最具靈活性的有序集合對(duì)象類型。和字符串不同的是,列表具有可變長(zhǎng)度、異構(gòu)以及任意嵌套列表的特點(diǎn)。列表是可變對(duì)象,支持在原處修改。10十一月2024152Pyhton內(nèi)建數(shù)據(jù)結(jié)構(gòu)
列表的常用方法(1)增加元素
L.append(v)(2)查找給定的元素L.index(x)(3)刪除列表中的元素L.remove(v)(4)列表元素倒排、統(tǒng)計(jì)和排序
L.reverse()用以倒排列表中的元素,L.count(x)實(shí)現(xiàn)返回x在列表中出現(xiàn)的次數(shù)。10十一月2024162Pyhton內(nèi)建數(shù)據(jù)結(jié)構(gòu)列表的推導(dǎo)式列表推導(dǎo)式提供了從序列創(chuàng)建列表的簡(jiǎn)單途徑。通常應(yīng)用程序?qū)⒁恍┎僮鲬?yīng)用于某個(gè)推導(dǎo)序列的每個(gè)元素,用其獲得的結(jié)果作為生成新列表的元素,或者根據(jù)確定的判定條件創(chuàng)建子序列。10十一月202417語(yǔ)法格式為:[<expr1>forkinLif<expr2>]語(yǔ)義:
returnList=[]forkinL:if<expr2>:returnList.append(<expr1>)returnreturnList;2Pyhton內(nèi)建數(shù)據(jù)結(jié)構(gòu)元組
元組有很多用途,例如,坐標(biāo)(x,y),數(shù)據(jù)庫(kù)中的員工記錄等等。元組和字符串一樣,不可改變,即不能給元組的一個(gè)獨(dú)立的元素賦值。元組用的是圓括號(hào)(),而列表用的是方括號(hào)[]。10十一月202418In[13]:tup=tuple('bar')#創(chuàng)建元組print('輸出元組tup:',tup)#輸出元組nested_tup=(4,5,6),(7,8)print('輸出元組tup:',nested_tup)#元素是元組的元組print('元組的連接',tup+tuple('wwy'))a,b,c=tup#元組的拆分print(a,b,c)print(tup.count(a))#統(tǒng)計(jì)某個(gè)數(shù)值在元組中出現(xiàn)的次數(shù)Out[13]:輸出元組tup:('b','a','r')輸出元組tup:((4,5,6),(7,8))元組的連接
('b','a','r','w','w','y')bar12Pyhton內(nèi)建數(shù)據(jù)結(jié)構(gòu)字典字典也稱映射,是一個(gè)由鍵/值對(duì)組成的非排序可變集合體。鍵值對(duì)在字典中以下面的方式標(biāo)記:dict={key1:value1,key2:value2}10十一月202419方法描述dict.get()返回指定鍵的值,若值不在字典中則返回defaultdict.items()以列表返回可遍歷的(鍵,值)元組數(shù)組dict.keys()以列表返回一個(gè)字典所有的鍵dict.values()以列表返回字典中的所有值2Pyhton內(nèi)建數(shù)據(jù)結(jié)構(gòu)集合是一個(gè)由唯一元素組成的非排序集合體。也就是說(shuō),集合中的元素沒(méi)有特定順序,也沒(méi)有重復(fù)項(xiàng)。集合可以使用大括號(hào){}或者set()函數(shù)創(chuàng)建集合,但是,創(chuàng)建一個(gè)空集合必須用set(),因?yàn)閧}是用來(lái)創(chuàng)建一個(gè)空字典。10十一月202420In[15]:set1=set([0,1,2,3,4])set2=set([1,3,5,7,9])print(set1.issubset(set2))print(set1.union(set2))print(set2.difference(set1))print(set1.issubset(set2))Out[15]:False{0,1,2,3,4,5,7,9}{9,5,7}FalseNumPy數(shù)值運(yùn)算基礎(chǔ)Numpy是一個(gè)開源的Python科學(xué)計(jì)算庫(kù),它是python科學(xué)計(jì)算庫(kù)的基礎(chǔ)庫(kù),許多其他著名的庫(kù)(如Pandas、
Scikit-learn等)都要用到Numpy庫(kù)的一些功能。Numpy常用的導(dǎo)入格式:importnumpyasnp創(chuàng)建數(shù)組對(duì)象NumPy庫(kù)能將數(shù)據(jù)(列表、元組、數(shù)組或其他序列類型)轉(zhuǎn)換為ndarray數(shù)組。利用array函數(shù)創(chuàng)建數(shù)組對(duì)象專門創(chuàng)建數(shù)組的函數(shù)10十一月202421NumPy數(shù)值運(yùn)算基礎(chǔ)利用array函數(shù)創(chuàng)建數(shù)組對(duì)象10十一月202422array函數(shù)的格式:np.array(object,dtype,ndmin)表2-6array函數(shù)的主要參數(shù)及說(shuō)明參數(shù)名稱說(shuō)明object接收array,表示想要?jiǎng)?chuàng)建的數(shù)組dtype接收data-type,表示數(shù)組所需的數(shù)據(jù)類型,默認(rèn)為Nonendmin接收int,指定生成數(shù)組應(yīng)該具有的最小維數(shù),默認(rèn)為NoneNumPy數(shù)值運(yùn)算基礎(chǔ)利用array函數(shù)創(chuàng)建數(shù)組對(duì)象importnumpyasnpdata1=[1,3,5,7]#列表w1=np.array(data1)print('w1:',w1)data2=(2,4,6,8)#元組w2=np.array(data2)print('w2:',w2)data3=[[1,2,3,4],[5,6,7,8]]#多維數(shù)組w3=np.array(data3)print('w3:',w3)10十一月202423NumPy數(shù)值運(yùn)算基礎(chǔ)2.專門創(chuàng)建數(shù)組的函數(shù)10十一月202424表2-7常用專門創(chuàng)建數(shù)組的函數(shù)np.arange(n)類似range()函數(shù),返回ndarray類型,元素從0到n-1np.ones(shape)根據(jù)shape生成一個(gè)全1數(shù)組,shape為元組類型np.zeros(shape)根據(jù)shape生成一個(gè)全0數(shù)組,shape為元組類型np.full(shape,val)根據(jù)shape生成一個(gè)值全為val的數(shù)組np.eye(n)創(chuàng)建一個(gè)對(duì)角線全為1其余元素為0的方陣np.linspace()指定開始值、終值和元素個(gè)數(shù)創(chuàng)建一維數(shù)組np.logspace()指定開始值、終值和元素個(gè)數(shù)創(chuàng)建一維等比數(shù)組NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy創(chuàng)建的ndarray對(duì)象屬性,主要有shape、size等屬性10十一月202425屬性說(shuō)明ndim秩,即數(shù)據(jù)軸的個(gè)數(shù)shape數(shù)組的維度size數(shù)組元素個(gè)數(shù)dtype數(shù)據(jù)類型itemsize數(shù)組中每個(gè)元素的字節(jié)大小nbytes整個(gè)數(shù)組所需的字節(jié)數(shù)NumPy數(shù)值運(yùn)算基礎(chǔ)生成隨機(jī)數(shù)在NumPy.random模塊中,提供了多種隨機(jī)數(shù)的生成函數(shù)。如randint生成指定范圍的隨機(jī)整數(shù)。用法:np.random.randint(low,high=None,size=None)10十一月202426arr1=np.random.randint(100,200,size=(2,4))print('arr1:\n',arr1)arr2=np.random.rand(5)print('arr2:\n',arr2)arr3=np.random.rand(3,2)print('arr3:\n',arr3)arr1:
[[117175143145]
[116158166192]]arr2:
[0.0591052
0.135920070.492438250.972930620.67059451]arr3:
[[0.717379740.39455845]
[0.945141410.34930551]
[0.927437750.26501378]]運(yùn)行結(jié)果NumPy數(shù)值運(yùn)算基礎(chǔ)生成隨機(jī)數(shù)函數(shù)10十一月202427函數(shù)說(shuō)明seed確定隨機(jī)數(shù)生成器的種子permutation返回一個(gè)序列的隨機(jī)排列或返回一個(gè)隨機(jī)排列的范圍shuffle對(duì)一個(gè)序列進(jìn)行隨機(jī)排序binomial產(chǎn)生二項(xiàng)分布的隨機(jī)數(shù)normal產(chǎn)生正態(tài)(高斯)分布的隨機(jī)數(shù)beta產(chǎn)生beta分布的隨機(jī)數(shù)chisquare產(chǎn)生卡方分布的隨機(jī)數(shù)gamma產(chǎn)生gamma分布的隨機(jī)數(shù)uniform產(chǎn)生在[0,1)中均勻分布的隨機(jī)數(shù)NumPy數(shù)值運(yùn)算基礎(chǔ)2.3.4數(shù)組變換
數(shù)組重塑
reshape方法改變其數(shù)據(jù)維度,傳入的參數(shù)為新維度的元組。reshape的參數(shù)中的其中一個(gè)可以設(shè)置為-1,表示數(shù)組的維度可以通過(guò)數(shù)據(jù)本身來(lái)推斷。10十一月202428Out[23]:arr1:[01234567891011]arr2:[[0123][4567][891011]]arr3:[[012345][67891011]]In[23]:arr1=np.arange(12)print('arr1:\n',arr1)arr2=arr1.reshape(3,4)print('arr2:\n',arr2)arr3=arr1.reshape(2,-1)print('arr3:\n',arr3)NumPy數(shù)值運(yùn)算基礎(chǔ)2.3.4數(shù)組變換
數(shù)組重塑
與reshape相反的方法是數(shù)據(jù)散開(ravel)或數(shù)據(jù)扁平化(flatten)。10十一月202429In[24]:arr1=np.arange(12).reshape(3,4)print('arr1:\n',arr1)arr2=arr1.ravel()print('arr2:',arr2)arr3=arr1.flatten()print('arr3:',arr3)Out[24]:arr1:[[0123][4567][891011]]arr2:[01234567891011]arr3:[01234567891011]NumPy數(shù)值運(yùn)算基礎(chǔ)2.3.4數(shù)組變換
數(shù)組合并完成數(shù)組的組合,包括數(shù)組的橫向組合和縱向組合。NumPy利用hstack、vstack和concatenate函數(shù)完成數(shù)組的組合。橫向組合是將ndarray對(duì)象構(gòu)成的元組作為參數(shù),傳給hstack函數(shù)??v向組合是利用vstack將數(shù)組縱向合并。10十一月202430In[25]:arr1=np.arange(6).reshape(3,2)arr2=arr1*2arr3=np.hstack((arr1,arr2))print('橫向合并:\n',arr3)arr4=np.vstack((arr1,arr2))print('縱向合并:\n',arr4)Out[25]:橫向合并:
[[0102][2346][45810]]縱向合并:
[[01][23][45][02][46][810]]NumPy數(shù)值運(yùn)算基礎(chǔ)2.3.4數(shù)組變換
數(shù)組合并concatenate函數(shù)可以實(shí)現(xiàn)數(shù)組的橫向或縱向合并,其中的參數(shù)axis=1時(shí)進(jìn)行橫向合并,axis=0時(shí)進(jìn)行縱向合并。10十一月202431In[26]:arr1=np.arange(6).reshape(3,2)arr2=arr1*2print('橫向組合為:\n',np.concatenate((arr1,arr2),axis=1))print('縱向組合為:\n',np.concatenate((arr1,arr2),axis=0))Out[26]:橫向組合為:
[[0102][2346][45810]]縱向組合為:
[[01][23][45][02][46][810]]NumPy數(shù)值運(yùn)算基礎(chǔ)2.3.4數(shù)組變換數(shù)組分割:與數(shù)組合并相反,NumPy提供了hsplit、vsplit和split分別實(shí)現(xiàn)數(shù)組的橫向、縱向和指定方向的分割。10十一月202432同樣,split在參數(shù)axis=1時(shí)實(shí)現(xiàn)數(shù)組的橫向分割,axis=0時(shí)則進(jìn)行縱向分割。NumPy數(shù)值運(yùn)算基礎(chǔ)2.3.4數(shù)組變換數(shù)組轉(zhuǎn)置和軸對(duì)換數(shù)組轉(zhuǎn)置是數(shù)組重塑的一種特殊形式,可以通過(guò)transpose方法進(jìn)行轉(zhuǎn)置。transpose方法需要傳入軸編號(hào)組成的元組。10十一月202433除了使用transpose外,可以直接利用數(shù)組的T屬性進(jìn)行數(shù)組轉(zhuǎn)置。NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的索引和切片一維數(shù)組的索引和切片一維數(shù)組的切片和索引與python的list索引類似10十一月202434In[29]:arr=np.arange(10)print(arr)print(arr[2])print(arr[-1])print(arr[1:4])Out[29]:[0123456789]29[123]NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的索引和切片一維數(shù)組的索引和切片數(shù)組的切片返回的是原始數(shù)組的視圖,并不會(huì)產(chǎn)生新的數(shù)據(jù),這就意味著在視圖上的操作會(huì)使原數(shù)組發(fā)生改變。如果需要的并非視圖而是要復(fù)制數(shù)據(jù),則可以通過(guò)copy方法實(shí)現(xiàn)。10十一月202435In[30]:arr1=arr[-4:-1].copy()print(arr)print(arr1)Out[30]:[0123456789][678]NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的索引和切片多維數(shù)組的索引對(duì)于多維數(shù)組,它的每一個(gè)維度都有一個(gè)索引,各個(gè)維度的索引之間用逗號(hào)分隔。也可以使用整數(shù)函數(shù)和布爾值索引訪問(wèn)多維數(shù)組。10十一月202436In[31]:arr=np.arange(12).reshape(3,4)print(arr)print(arr[0,1:3])#索引第0行中第1列到第2列的元素print(arr[:,2])#索引第2列元素print('索引結(jié)果1:',arr[(0,1),(1,3)])#索引第1、2行中第0、2、3列的元素print('索引結(jié)果2:',arr[1:2,(0,2,3)])mask=np.array([1,0,1],dtype=np.bool)#mask是一個(gè)布爾數(shù)組,它索引第0,2行中第1列元素print('索引結(jié)果3:',arr[mask,1])Out[31]:[[0123][4567][891011]][12][2610]索引結(jié)果1:[17]索引結(jié)果2:[[467]]索引結(jié)果3:[19]NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的運(yùn)算數(shù)組的運(yùn)算支持向量化運(yùn)算,將本來(lái)需要在Python級(jí)別進(jìn)行的運(yùn)算,放到C語(yǔ)言的運(yùn)算中,明顯地提高了程序的運(yùn)算速度。1.數(shù)組和標(biāo)量間的運(yùn)算數(shù)組之所以強(qiáng)大是因?yàn)椴恍枰ㄟ^(guò)循環(huán)就可以完成批量計(jì)算,比如相同維度的數(shù)組的算術(shù)運(yùn)算直接應(yīng)用到元素中。10十一月202437【例2-32】數(shù)組元素的追加。In[32]:a=[1,2,3]b=[]foriina:b.append(i*i)print('b數(shù)組:',b)wy=np.array([1,2,3])c=wy*2print('c數(shù)組:',c)Out[32]:b數(shù)組:[1,4,9]c數(shù)組:[246]NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的運(yùn)算2.ufunc函數(shù)ufunc函數(shù)全稱為通用函數(shù),是一種能夠?qū)?shù)組中的所有元素進(jìn)行操作的函數(shù)。ufunc函數(shù)是針對(duì)數(shù)組進(jìn)行操作,而且以NumPy數(shù)組作為輸出。對(duì)一個(gè)數(shù)組進(jìn)行重復(fù)運(yùn)算時(shí),使用ufunc函數(shù)比使用math庫(kù)中的函數(shù)效率更高。常用的ufunc函數(shù)運(yùn)算有四則運(yùn)算、比較運(yùn)算和邏輯運(yùn)算。10十一月202438NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的運(yùn)算2.ufunc函數(shù)常用的ufunc函數(shù)運(yùn)算有四則運(yùn)算、比較運(yùn)算和邏輯運(yùn)算。1)四則運(yùn)算:加(+)、減(-)、乘(*)、除(/)、冪(**)。數(shù)組間的四則運(yùn)算表示對(duì)每個(gè)數(shù)組中的元素分別進(jìn)行四則運(yùn)算,所以形狀必須相同。2)比較運(yùn)算:>、<、==、>=、<=、!=。比較運(yùn)算返回的結(jié)果是一個(gè)布爾數(shù)組,每個(gè)元素為每個(gè)數(shù)組對(duì)應(yīng)元素的比較結(jié)果。3)邏輯運(yùn)算:np.any函數(shù)表示邏輯“or”,np.all函數(shù)表示邏輯“and”。運(yùn)算結(jié)果返回布爾值。10十一月202439NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的運(yùn)算2.ufunc函數(shù)常用的ufunc函數(shù)運(yùn)算有四則運(yùn)算、比較運(yùn)算和邏輯運(yùn)算。10十一月202440In[33]:x=np.array([1,2,3])y=np.array([4,5,6])print('數(shù)組相加結(jié)果:',x+y)print('數(shù)組相減結(jié)果:',x-y)print('數(shù)組相乘結(jié)果:',x*y)print('數(shù)組冪運(yùn)算結(jié)果:',x**y)Out[33]:數(shù)組相加結(jié)果:
[579]數(shù)組相減結(jié)果:
[-3-3-3]數(shù)組相乘結(jié)果:
[41018]數(shù)組冪運(yùn)算結(jié)果:
[132729]NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的運(yùn)算2.ufunc函數(shù)常用的ufunc函數(shù)運(yùn)算有四則運(yùn)算、比較運(yùn)算和邏輯運(yùn)算。10十一月202441數(shù)組的比較運(yùn)算。In[34]:x=np.array([1,3,6])y=np.array([2,3,4])print('比較結(jié)果(<):',x<y)print('比較結(jié)果(>):',x>y)print('比較結(jié)果(==):',x==y)print('比較結(jié)果(>=):',x>=y)print('比較結(jié)果(!=):',x!=y)Out[34]:比較結(jié)果(<):[TrueFalseFalse]比較結(jié)果(>):[FalseFalseTrue]比較結(jié)果(==):[FalseTrueFalse]比較結(jié)果(>=):[FalseTrueTrue]比較結(jié)果(!=):[TrueFalseTrue]NumPy數(shù)值運(yùn)算基礎(chǔ)數(shù)組的運(yùn)算2.ufunc函數(shù)ufunc函數(shù)的廣播機(jī)制廣播(broadcasting)是指不同形狀的數(shù)組之間執(zhí)行算術(shù)運(yùn)算的方式。10十一月202442In[35]:arr1=np.array([[0,0,0],[1,1,1],[2,2,2]])arr2=np.array([1,2,3])print('arr1:\n',arr1)print('arr2:\n',arr2)print('arr1+arr2:\n',arr1+arr2)Out[35]:arr1:[[000][111][222]]arr2:[123]arr1+arr2:[[123][234][345]]NumPy數(shù)值運(yùn)算基礎(chǔ)條件邏輯運(yùn)算在NumPy中可以利用基本的邏輯運(yùn)算就可以實(shí)現(xiàn)數(shù)組的條件運(yùn)算。這種方法對(duì)大規(guī)模數(shù)組處理效率不高,也無(wú)法用于多維數(shù)組。NumPy提供的where方法可以解決這些問(wèn)題。where的用法:np.where(condition,x,y)滿足條件(condition),輸出x,不滿足則輸出y。10十一月202443NumPy數(shù)值運(yùn)算基礎(chǔ)條件邏輯運(yùn)算在NumPy中可以利用基本的邏輯運(yùn)算就可以實(shí)現(xiàn)數(shù)組的條件運(yùn)算。10十一月202444In[37]print(np.where([[True,False],[True,True]],[[1,2],[3,4]],[[9,8],[7,6]]))w=np.array([2,5,6,3,10])print(np.where(w>4))Out[37]array([[1,8],[3,4]])(array([1,2,4],dtype=int64),)NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy中的數(shù)據(jù)統(tǒng)計(jì)與分析1.排序
numpy.sort(a,axis,kind,order)
sort主要參數(shù)及其說(shuō)明10十一月202445參數(shù)說(shuō)明a要排序的數(shù)組kind排序算法,默認(rèn)為“quicksort”order如果數(shù)組包含字段,則是要排序的字段axis按指定軸對(duì)數(shù)據(jù)集排序。axis=1為沿橫軸排序;axis=0為沿縱軸排序;axis=None,將數(shù)組平坦化之后進(jìn)行排序NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy中的數(shù)據(jù)統(tǒng)計(jì)與分析1.排序
numpy.sort(a,axis,kind,order)
10十一月202446In[38]:arr=np.array([7,9,5,2,9,4,3,1,4,3])print('原數(shù)組:',arr)arr.sort()print('排序后:',arr)Out[38]:原數(shù)組:
[7952943143]排序后:
[1233445799]NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy中的數(shù)據(jù)統(tǒng)計(jì)與分析1.排序
numpy.sort(a,axis,kind,order)
10十一月202447帶軸向參數(shù)的sort排序。In[39]:arr=np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]])print('原數(shù)組:\n',arr)arr.sort(axis=1)#沿橫向排序print('橫向排序后:\n',arr)Out[39]:原數(shù)組:
[[4295][6483][1624]]橫向排序后:
[[2459][3468][1246]]NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy中的數(shù)據(jù)統(tǒng)計(jì)與分析1.排序
使用argsort和lexsort函數(shù),可以在給定一個(gè)或多個(gè)鍵時(shí),得到一個(gè)由整數(shù)構(gòu)成的索引數(shù)組,索引值表示數(shù)據(jù)在新的序列中的位置。10十一月202448使用argsort和lexsort函數(shù)進(jìn)行排序。In[40]:arr=np.array([7,9,5,2,9,4,3,1,4,3])print('原數(shù)組:',arr)print('排序后:',arr.argsort())#返回值為數(shù)組排序后的下標(biāo)排列a=[2,5,8,4,3,7,6]b=[9,4,0,4,0,2,1]c=np.lexsort((a,b))print(c)Out[40]:原數(shù)組:
[7952943143]排序后:
[7369582014][4265310]NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy中的數(shù)據(jù)統(tǒng)計(jì)與分析2.重復(fù)數(shù)據(jù)與去重在數(shù)據(jù)統(tǒng)計(jì)分析中,需要提前將重復(fù)數(shù)據(jù)剔除。在NumPy中,可以通過(guò)unique函數(shù)找到數(shù)組中的唯一值并返回已排序的結(jié)果。
10十一月202449數(shù)組內(nèi)數(shù)據(jù)去重。In[41]:names=np.array(['紅色','藍(lán)色','黃色','白色','紅色'])print('原數(shù)組:',names)print('去重后的數(shù)組:',np.unique(names))Out[41]:原數(shù)組:
['紅色''藍(lán)色''黃色''白色''紅色']去重后的數(shù)組:
['白色''紅色''藍(lán)色''黃色']NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy中的數(shù)據(jù)統(tǒng)計(jì)與分析2.重復(fù)數(shù)據(jù)與去重10十一月202450統(tǒng)計(jì)分析中有時(shí)需要把一個(gè)數(shù)據(jù)重復(fù)若干次,在NumPy中主要使用tile和repeat函數(shù)實(shí)現(xiàn)數(shù)據(jù)重復(fù)?!纠?-42】使用tile函數(shù)實(shí)現(xiàn)數(shù)據(jù)重復(fù)。In[42]:arr=np.arange(5)print('原數(shù)組:',arr)wy=np.tile(arr,3)print('重復(fù)數(shù)據(jù)處理:\n',wy)Out[42]:原數(shù)組:
[01234]重復(fù)數(shù)據(jù)處理:
[012340123401234]NumPy數(shù)值運(yùn)算基礎(chǔ)NumPy中的數(shù)據(jù)統(tǒng)計(jì)與分析2.重復(fù)數(shù)據(jù)與去重repeat函數(shù)的格式:numpy.repeat(A,reps,axis=None)其中參數(shù)“a”是需要重復(fù)的數(shù)組元素,參數(shù)“repeats”是重復(fù)次數(shù),參數(shù)“axis”指定沿著哪個(gè)軸進(jìn)行重復(fù),axis=0表示按行進(jìn)行元素重復(fù);axis=1表示按列進(jìn)行元素重復(fù)。10十一月202451In[43]:arr1=np.arange(5)print('原數(shù)組:',arr1)w1=np.tile(arr,3)print('原數(shù)組重復(fù)3次:\n',np.tile(arr1,3))arr2=np.array([[1,2,3],[4,5,6]])print('重復(fù)數(shù)據(jù)處理:\n',arr2.repeat(2,axis=0))Out[43]:原數(shù)組:
[01234]原數(shù)組重復(fù)3次:
[012340123401234]重復(fù)數(shù)據(jù)處理:
[[123][123][456][456]]NumPy數(shù)值運(yùn)算基礎(chǔ)3.常用統(tǒng)計(jì)函數(shù)NumPy中提供了很多用于統(tǒng)計(jì)分析的函數(shù),常見(jiàn)的有sum、mean、std、var、min和max等。幾乎所有的統(tǒng)計(jì)函數(shù)在針對(duì)二維數(shù)組的時(shí)候需要注意軸的概念。10十一月202452NumPy數(shù)值運(yùn)算基礎(chǔ)3.常用統(tǒng)計(jì)函數(shù)10十一月202453【例2-44】NumPy中常用函數(shù)的使用。In[44]:arr=np.arange(20).reshape(4,5)print('創(chuàng)建的數(shù)組:\n',arr)print('數(shù)組的和:',np.sum(arr))print('數(shù)組縱軸的和:',np.sum(arr,axis=0))print('數(shù)組橫軸的和:',np.sum(arr,axis=1))print('數(shù)組的均值:',np.mean(arr))print('數(shù)組橫軸的均值:',np.mean(arr,axis=1))print('數(shù)組的標(biāo)準(zhǔn)差:',np.std(arr))print('數(shù)組橫軸的標(biāo)準(zhǔn)差:',np.std(arr,axis=1))Out[44]:創(chuàng)建的數(shù)組:
[[01234][56789][1011121314][1516171819]]數(shù)組的和:
190數(shù)組縱軸的和:[3034384246]數(shù)組橫軸的和:[10356085]數(shù)組的均值:
8.5數(shù)組橫軸的均值:[2.7.12.17.]數(shù)組的標(biāo)準(zhǔn)差:
4.766281297335398數(shù)組橫軸的標(biāo)準(zhǔn)差:[1.414213561.414213561.414213561.41421356]Pandas統(tǒng)計(jì)分析基礎(chǔ)Pandas(PythonDataAnalysisLibrary)是基于NumPy的數(shù)據(jù)分析模塊,它提供了大量標(biāo)準(zhǔn)數(shù)據(jù)模型和高效操作大型數(shù)據(jù)集所需的工具,可以說(shuō)Pandas是使得Python能夠成為高效且強(qiáng)大的數(shù)據(jù)分析環(huán)境的重要因素之一。導(dǎo)入方式:importpandasaspd10十一月202454Pandas統(tǒng)計(jì)分析基礎(chǔ)Pandas中的數(shù)據(jù)結(jié)構(gòu)Pandas有三種數(shù)據(jù)結(jié)構(gòu)Series、DataFrame和Panel。Series類似于數(shù)組,DataFrame類似于表格,而Panel則可以視為Excel的多表單Sheet。10十一月202455Pandas統(tǒng)計(jì)分析基礎(chǔ)SeriesSeries是一種一維數(shù)組對(duì)象,包含了一個(gè)值序列,并且包含了數(shù)據(jù)標(biāo)簽,稱為索引(index),通過(guò)索引來(lái)訪問(wèn)數(shù)組中的數(shù)據(jù)。Series的創(chuàng)建1)通過(guò)列表創(chuàng)建2)通過(guò)字典創(chuàng)建10十一月202456Pandas統(tǒng)計(jì)分析基礎(chǔ)Series的創(chuàng)建1)通過(guò)列表創(chuàng)建10十一月202457In[45]:importpandasaspdobj1=pd.Series([1,-2,3,-4])print(obj1)i=["a","c","d","a"]v=[2,4,5,7]obj2=pd.Series(v,index=i,name="col")print(obj2)Out[45]:011-2233-4dtype:int64a2c4d5a7Name:col,dtype:int64輸出的第一列為index,第二列為數(shù)據(jù)value。如果創(chuàng)建Series時(shí)沒(méi)有指定index,Pandas會(huì)采用整型數(shù)據(jù)作為該Series的index。所以Series有兩套描述某條數(shù)據(jù)的手段,即位置和標(biāo)簽。Pandas統(tǒng)計(jì)分析基礎(chǔ)Series的創(chuàng)建2)通過(guò)字典創(chuàng)建10十一月202458如果數(shù)據(jù)被存放在一個(gè)Python字典中,也可以直接通過(guò)這個(gè)字典來(lái)創(chuàng)建Series。【例2-46】通過(guò)字典創(chuàng)建Series。In[46]:sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}obj3=pd.Series(sdata)print(obj3)Out[46]:Ohio35000Texas71000Oregon16000Utah5000dtype:int64Pandas統(tǒng)計(jì)分析基礎(chǔ)Series的創(chuàng)建2)通過(guò)字典創(chuàng)建10十一月202459對(duì)于許多應(yīng)用而言,Series域重要的一個(gè)功能是:它在算術(shù)運(yùn)算中會(huì)自動(dòng)對(duì)齊不同索引的數(shù)據(jù)?!纠?-47】不同索引數(shù)據(jù)的自動(dòng)對(duì)齊。In[47]:sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}obj1=pd.Series(sdata)states=['California','Ohio','Oregon','Texas']obj2=pd.Series(sdata,index=states)print(obj1+obj2)Out[47]:CaliforniaNaNOhio70000.0Oregon32000.0Texas142000.0UtahNaNdtype:float64Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrameDataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看作由Series組成的字典(共用同一個(gè)索引)。構(gòu)建DataFrame的方式有很多,最常用的是直接傳入一個(gè)由等長(zhǎng)列表或NumPy數(shù)組組成的字典來(lái)構(gòu)建DataFrame。10十一月202460Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrame10十一月202461【例2-49】DataFrame的索引。In[49]:data={'name':['張三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','廣州','北京']}df1=pd.DataFrame(data,columns=['name','year','sex','city'])display(df1)Out[49]:Pandas統(tǒng)計(jì)分析基礎(chǔ)索引對(duì)象Pandas的索引對(duì)象負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù)(如軸名稱等)。構(gòu)建Series或DataFrame時(shí),所用到的任何數(shù)組或其他序列的標(biāo)簽都會(huì)被轉(zhuǎn)換成一個(gè)Index。10十一月202462【例2-50】顯示DataFrame的索引和列。In[50]:display(df1)print(df1.index)print(df1.columns)Out[50]:
RangeIndex(start=0,stop=4,step=1)Index(['name','year','sex','city'],dtype='object')Pandas統(tǒng)計(jì)分析基礎(chǔ)索引對(duì)象1.重新索引索引對(duì)象是無(wú)法修改的,因此,重新索引是指對(duì)索引重新排序而不是重新命名,如果某個(gè)索引值不存在的話,會(huì)引入缺失值。10十一月202463重建索引In[51]:obj=pd.Series([7.2,-3.3,3.5,3.6],index=['b','a',
'd','c'])obj.reindex(['a','b','c','d','e'])Out[51]:a-3.3b7.2c3.6d3.5eNaNdtype:float64對(duì)于重建索引引入的缺失值,可以利用fill_value參數(shù)填充。Pandas統(tǒng)計(jì)分析基礎(chǔ)索引對(duì)象1.重新索引10十一月202464【例2-52】重建索引時(shí)填充缺失值。In[52]:obj.reindex(['a','b','c','d','e'],fill_value=0)Out[52]:a-3.3b7.2c3.6d3.5e0.0dtype:float64Pandas統(tǒng)計(jì)分析基礎(chǔ)索引對(duì)象1.重新索引10十一月202465對(duì)于順序數(shù)據(jù),比如時(shí)間序列,重新索引時(shí)可能需要進(jìn)行插值或填值處理,利用參數(shù)method選項(xiàng)可以設(shè)置:?
method=‘ffill’或‘pad’,表示前向值填充?
method=‘bfill’或‘backfill’,表示后向值填充【例2-53】缺失值的前向填充。In[53]:importnumpyasnpobj1=pd.Series(['blue','red','black'],index=[0,2,4])obj1.reindex(np.arange(6),method='ffill')Out[53]:0blue1blue2red3red4black5blackdtype:objectPandas統(tǒng)計(jì)分析基礎(chǔ)索引對(duì)象1.重新索引10十一月202466缺失值的后向填充則對(duì)空缺值用后面的數(shù)據(jù)值進(jìn)行填充,參數(shù)method取值'backfill'。對(duì)于DataFrame,reindex可以修改行索引或列索引。如果僅傳入一個(gè)序列,則結(jié)果中的行會(huì)重建索引。【例2-54】DataFrame數(shù)據(jù)。In[54]:df2=pd.DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['one','two','four'])display(df2)df2.reindex(index=['a','b','c','d'],columns=['one','two','three','four'])Out[54]:Pandas統(tǒng)計(jì)分析基礎(chǔ)索引對(duì)象1.重新索引10十一月202467默認(rèn)對(duì)行索引重新排序。傳入fill_value=n用n代替缺失值?!纠?-55】傳入fill_value=n填充缺失值。In[55]:df2.reindex(index=['a','b','c','d'],columns=['one','two','three','four'],fill_value=100)Out[55]:
Pandas統(tǒng)計(jì)分析基礎(chǔ)更換索引在DataFrame數(shù)據(jù)中,如果不希望使用默認(rèn)的行索引,則可以在創(chuàng)建時(shí)通過(guò)Index參數(shù)來(lái)設(shè)置。有時(shí)候希望將列數(shù)據(jù)作為索引,則可以通過(guò)set_index方法來(lái)實(shí)現(xiàn)。10十一月202468In[56]:df3=df1.set_index('city')
display(df3)Out[56]:與set_index方法相反的方法是reset_index方法。Pandas統(tǒng)計(jì)分析基礎(chǔ)查看DataFrame的常用屬性DataFrame的基礎(chǔ)屬性有values、index、columns、dtypes、ndim和shape,分別可以獲取DataFrame的元素、索引、列名、類型、維度和形狀。10十一月202469In[57]:print('信息表的所有值為:\n',df3.values)print('信息表的所有列為:\n',df3.columns)print('信息表的元素個(gè)數(shù)為:',df3.size)print('信息表的維度是:',df3.ndim)print('信息表的形狀為:',df3.shape)Out[57]:信息表的所有值為:
[['張三'2001'female']['李四'2001'female']['王五'2003'male']['小明'2002'male']]信息表的所有列為:
Index(['name','year','sex'],dtype='object')信息表的元素個(gè)數(shù)為:
12信息表的維度是:
2信息表的形狀為:
(4,3)Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrame數(shù)據(jù)的查詢?cè)跀?shù)據(jù)分析中,選取需要的數(shù)據(jù)進(jìn)行分析處理是最基本操作。在Pandas中需要通過(guò)索引完成數(shù)據(jù)的選取。(1)選取列通過(guò)列索引標(biāo)簽或以屬性的方式可以單獨(dú)獲取DataFrame的列數(shù)據(jù),返回的數(shù)據(jù)為Series類型數(shù)據(jù)。10十一月202470Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrame數(shù)據(jù)的查詢例題:選取列10十一月202471In[58]:w1=df3['name']print('選取1列數(shù)據(jù):\n',w1)w2=df3[['name','year']]print('選取2列數(shù)據(jù):\n',w2)Out[58]:選取1列數(shù)據(jù):
city北京
張三上海
李四廣州
王五北京
小明Name:name,dtype:object選取2列數(shù)據(jù):
nameyearcity北京
張三
2001上海
李四
2001廣州
王五
2003北京
小明
2002在選取列時(shí)注意不能使用切片方式。Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrame數(shù)據(jù)的查詢(2)選取行通過(guò)行索引或行索引位置的切片形式可以選取行數(shù)據(jù)。10十一月202472In[59]:display(df3)print('顯示前2行:\n',df3[:2])print('顯示2-3兩行:\n',df3[1:3])Out[59]:
顯示前2行:nameyearsexcity北京
張三
2001female上海
李四
2001female顯示2-3兩行:nameyearsexcity上海
李四
2001female廣州
王五
2003malePandas統(tǒng)計(jì)分析基礎(chǔ)10十一月202473除了上述方法獲取行之外,通過(guò)DataFrame提供的head和tail方法可以得到多行數(shù)據(jù),但是用這兩種方法得到的數(shù)據(jù)都是從開始或者末尾獲取連續(xù)的數(shù)據(jù),而利用sample可以隨機(jī)抽取數(shù)據(jù)并顯示。head()#默認(rèn)獲取前5行head(n)#獲取前n行tail()#默認(rèn)獲取后5行tail(n)#獲取后n行sample(n)#隨機(jī)抽取n行顯示Pandas統(tǒng)計(jì)分析基礎(chǔ)(3)選取行和列切片方法選取行有很大的局限性,如獲取單獨(dú)的幾行,可以通過(guò)Pandas提供的loc和iloc方法實(shí)現(xiàn)。DataFrame.loc(行索引名稱或條件,列索引名稱)DataFrame.iloc(行索引位置,列索引位置)10十一月202474In[60]:display(df3.loc[:,['name','year']])#顯示name和year兩列display(df3.iloc[[1,3]])#顯示第1和第3行display(df3.iloc[[1,3],[1,2]])Pandas統(tǒng)計(jì)分析基礎(chǔ)(4)布爾選擇在Pandas中可以對(duì)DataFrame中的數(shù)據(jù)進(jìn)行布爾選擇,常用的布爾運(yùn)算符為不等于(!=)、與(&)、或(|)等。10十一月202475【例2-61】布爾選擇。In[61]:df3[df3['year']==2001]Out[61]:Pandas統(tǒng)計(jì)分析基礎(chǔ)(5)DataFrame行和列的選取還可以通過(guò)query方法實(shí)現(xiàn)。
display(df5.query('year>2001'))display(df5.query('year>2001&year<2003'))10十一月202476Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrame數(shù)據(jù)的編輯(1)增加數(shù)據(jù)增加一行直接通過(guò)append方法傳入字典結(jié)構(gòu)數(shù)據(jù)即可。增加列時(shí),只需為要增加的列賦值即可創(chuàng)建一個(gè)新的列。10十一月202477In[62]:data1={'city':'蘭州','name':'小軍','year':2005,'sex':'female'}df4=df3.append(data1,ignore_index=True)df4['age']=20df4['C']=[85,78,96,80,93]display(df4)Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrame數(shù)據(jù)的編輯(2)刪除數(shù)據(jù)刪除數(shù)據(jù)直接用drop方法,行列數(shù)據(jù)通過(guò)axis參數(shù)確定是刪除的是行還是列。10十一月202478In[63]:df3.drop('sex',axis=1,inplace=True)display(df3)display(df3.drop('北京'))Pandas統(tǒng)計(jì)分析基礎(chǔ)DataFrame數(shù)據(jù)的編輯(3)修改數(shù)據(jù)修改數(shù)據(jù)時(shí)直接對(duì)選擇的數(shù)據(jù)直接賦值即可。Replace:如DataFrame.replace({'B':'E','C':'F'})表示將表中的B替換為E,C替換為F。10十一月202479Pandas統(tǒng)計(jì)分析基礎(chǔ)Pandas數(shù)據(jù)運(yùn)算算術(shù)運(yùn)算:Pandas的數(shù)據(jù)對(duì)象在進(jìn)行算術(shù)運(yùn)算時(shí),如果有相同索引則進(jìn)行算術(shù)運(yùn)算,如果沒(méi)有則會(huì)進(jìn)行數(shù)據(jù)對(duì)齊,但會(huì)引入缺失值。10十一月202480In[64]:a=np.arange(6).reshape(2,3)b=np.arange(4).reshape(2,2)df1=pd.DataFrame(a,columns=['a','b','e'],index=['A','C'])print('df1:\n',df1)df2=pd.DataFrame(b,columns=['a','b'],index=['A','D'])print('df2:\n',df2)print('df1+df2:\n',df1+df2)Pandas統(tǒng)計(jì)分析基礎(chǔ)Pandas數(shù)據(jù)運(yùn)算函數(shù)應(yīng)用和映射:在數(shù)據(jù)分析時(shí),經(jīng)常會(huì)對(duì)數(shù)據(jù)進(jìn)行較復(fù)雜的運(yùn)算,此時(shí)需要定義函數(shù)。定義好的函數(shù)可以應(yīng)用到pandas數(shù)據(jù)中,其中有三種方法:map函數(shù),將函數(shù)套用到Series的每個(gè)元素中;apply函數(shù),將函數(shù)套用到DataFrame的行與列上,行與列通過(guò)axis參數(shù)設(shè)置;applymap函數(shù),將函數(shù)套用到DataFrame的每個(gè)元素上。10十一月202481Pandas統(tǒng)計(jì)分析基礎(chǔ)Pandas數(shù)據(jù)運(yùn)算map函數(shù),將函數(shù)套用到Series的每個(gè)元素中;10十一月202482【例2-65】將水果價(jià)格表中的“元”去掉。In[65]:data={'fruit':['apple','grape','banana'],'price':['30元','43元','28元']}df1=pd.DataFrame(data)print(df1)deff(x):returnx.split('元')[0]df1['price']=df1['price'].map(f)print('修改后的數(shù)據(jù)表:\n',df1)Pandas統(tǒng)計(jì)分析基礎(chǔ)Pandas數(shù)據(jù)運(yùn)算apply函數(shù),將函數(shù)套用到DataFrame的行與列上,行與列通過(guò)axis參數(shù)設(shè)置;10十一月202483In[66]:df2=pd.DataFrame(np.random.randn(3,3),columns=['a','b','c'],
index=['app','win','mac'])print(df2)df2.apply(np.mean)Out[66]:abcapp2.3124720.866631-1.416253win0.2129320.5174180.239052mac0.4345401.856411-0.441800a0.986648b1.080154c-0.539667dtype:float64Pandas統(tǒng)計(jì)分析基礎(chǔ)Pandas數(shù)據(jù)運(yùn)算applymap函數(shù),將函數(shù)套用到DataFrame的每個(gè)元素上。10十一月202484【例2-67】applymap函數(shù)的用法。In[67]:print(df2)df2.applymap(lambdax:'%.3f'%x)Out[67]:Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)排序在Series中,通過(guò)sort_index方法對(duì)索引進(jìn)行排序,默認(rèn)為升序,降序排序時(shí)加參數(shù)ascending=False。通過(guò)sort_values方法對(duì)數(shù)值進(jìn)行排序。10十一月202485【例2-68】Series的排序。In[68]:wy=pd.Series([1,-2,4,-4],index=['c','b','a','d'])print(wy)print('排序后的Series:\n',wy.sort_index())print('值排序后的Series:\n',wy.sort_values())Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)排序?qū)τ贒ataFrame數(shù)據(jù)排序,通過(guò)指定軸方向,使用sort_index函數(shù)對(duì)行或列索引進(jìn)行排序,根據(jù)列進(jìn)行排序,通過(guò)sort_values函數(shù)把列名傳給by參數(shù)即可。10十一月202486In[69]:print(df2)df2.sort_values(by='a')Out[69]:Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)匯總與統(tǒng)計(jì)1.數(shù)據(jù)匯總在DataFrame中,可以通過(guò)sum方法對(duì)每列進(jìn)行求和匯總,與Excel中的sum函數(shù)類似。如果設(shè)置axis=1指定軸方向,可以實(shí)現(xiàn)按行匯總。10十一月202487In[70]:print('按列匯總:\n',df2.sum())print('按行匯總:\n',df2.sum(axis=1))Out[70]:按列匯總:a2.959945b3.240461c-1.619001dtype:float64按行匯總:app1.762850win0.969403mac1.849152dtype:float64Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)匯總與統(tǒng)計(jì)2.數(shù)據(jù)描述與統(tǒng)計(jì)描述性統(tǒng)計(jì)是用來(lái)概括、表述事物整體狀況以及事物間關(guān)聯(lián)、類屬關(guān)系的統(tǒng)計(jì)方法。利用describe方法會(huì)每個(gè)數(shù)值型列進(jìn)行統(tǒng)計(jì),通常在對(duì)數(shù)據(jù)的初步觀察時(shí)使用。10十一月202488In[71]:df2.describe()Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)匯總與統(tǒng)計(jì)2.數(shù)據(jù)描述與統(tǒng)計(jì)10十一月202489
Pandas中常用的描述性統(tǒng)計(jì)量方法名稱說(shuō)明方法名稱說(shuō)明min最小值max最大值mean均值ptp極差median中位數(shù)std標(biāo)準(zhǔn)差var方差cov協(xié)方差sem標(biāo)準(zhǔn)誤差mode眾數(shù)skew樣本偏度kurt樣本峰度quantile四分位數(shù)count非空值數(shù)目describe描述統(tǒng)計(jì)mad平均絕對(duì)離差Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)匯總與統(tǒng)計(jì)2.數(shù)據(jù)描述與統(tǒng)計(jì)10十一月202490對(duì)于類別型特征的描述性統(tǒng)計(jì),可以使用頻數(shù)統(tǒng)計(jì)表。Pandas庫(kù)中通過(guò)unique方法獲取不重復(fù)的數(shù)組,利用value_counts方法實(shí)現(xiàn)頻數(shù)統(tǒng)計(jì)?!纠?-72】數(shù)據(jù)的頻數(shù)統(tǒng)計(jì)。In[72]:obj=pd.Series(['a','b','c','a','d','c'])print(obj.unique())print(obj.value_counts())Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)分組與聚合1.數(shù)據(jù)分組根據(jù)某個(gè)或某幾個(gè)字段對(duì)數(shù)據(jù)集進(jìn)行分組,然后對(duì)每個(gè)分組進(jìn)行分析與轉(zhuǎn)換是數(shù)據(jù)分析中常見(jiàn)的操作。Pandas提供了一個(gè)高效的groupby方法,配合agg或apply方法實(shí)現(xiàn)數(shù)據(jù)分組聚合的操作。DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,**kwargs)10十一月202491Pandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)分組與聚合1.數(shù)據(jù)分組10十一月202492groupby方法的參數(shù)及其說(shuō)明參數(shù)名稱參數(shù)說(shuō)明by可以傳入函數(shù)、字典、Series等,用于確定分組的依據(jù)axis接收int,表示操作的軸方向,默認(rèn)為0level接收int或索引名,代表標(biāo)簽所在級(jí)別,默認(rèn)為Noneas_index接收boolean,表示聚合后的聚合標(biāo)簽是否以DataFrame索引輸出sort接收boolean,表示對(duì)分組依據(jù)和分組標(biāo)簽排序,默認(rèn)為Truegroup_keys接收boolean,表示是否顯示分組標(biāo)簽的名稱,默認(rèn)為Truesqueeze接收boolean,表示是否在允許情況下對(duì)返回?cái)?shù)據(jù)降維,默認(rèn)FalsePandas統(tǒng)計(jì)分析基礎(chǔ)數(shù)據(jù)分組與聚合1.數(shù)據(jù)分組10十一月202493In[73]:df=pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['yes','no','yes','yes','no'],'data1':np.random.randn(5),'data2':np.random.randn(5)})grouped=df['data1'].groupb
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 租客有老人小孩租房合同(2篇)
- 巜趙州橋 課件
- 西南林業(yè)大學(xué)《茶藝》2023-2024學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《設(shè)計(jì)表現(xiàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 探究水溫對(duì)金魚呼吸的影響
- 新人教版五年級(jí)上冊(cè)用字母表示數(shù)例3教程
- 西京學(xué)院《工程力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《安裝工程計(jì)量與計(jì)價(jià)》2021-2022學(xué)年第一學(xué)期期末試卷
- 西華師范大學(xué)《數(shù)字電子技術(shù)基礎(chǔ)》2022-2023學(xué)年期末試卷
- 描寫眼睛 課件
- 小學(xué)四年級(jí)家長(zhǎng)會(huì)精品課件完美版
- 公路超限超載檢測(cè)站設(shè)計(jì)指南(試點(diǎn)工程版)
- 《傳感器原理及應(yīng)用》全套教學(xué)課件
- 文物與博物館學(xué)課件
- 高精度時(shí)間同步及定位技術(shù)應(yīng)用白皮書
- 短暫性腦缺血發(fā)作培訓(xùn)課件
- 新版統(tǒng)編版三年級(jí)上冊(cè)語(yǔ)文《大自然的聲音》課件(第二課時(shí))
- 首件驗(yàn)收?qǐng)?bào)驗(yàn)表
- 小學(xué)科學(xué)教育科學(xué)三年級(jí)上冊(cè)空氣《風(fēng)的成因》教案
- 四年級(jí)上冊(cè)數(shù)學(xué)課件 《平行與垂直》 人教版(共11張PPT)
- 出砂機(jī)理及防砂
評(píng)論
0/150
提交評(píng)論