版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章Pandas基礎(chǔ)與應(yīng)用主講人:***15-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contentsPandas中的數(shù)據(jù)結(jié)構(gòu)0102Pandas簡(jiǎn)介0304數(shù)據(jù)運(yùn)算與分析Pandas中數(shù)據(jù)的基本操作Pandas簡(jiǎn)介016.1.1主要特性Pandas是Python中的一個(gè)高效易用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析的第三方庫(kù)。Pandas是Python中數(shù)據(jù)分析的基礎(chǔ),旨在成為最實(shí)用最便利的開(kāi)源數(shù)據(jù)分析的工具。其主要特性如下:善于處理浮點(diǎn)數(shù)和非浮點(diǎn)數(shù)的數(shù)據(jù)缺失(用NaN來(lái)表示);大小可變:數(shù)據(jù)的行列能夠從DataFrame或者更高維度的數(shù)據(jù)結(jié)構(gòu)中添加或者刪除;自動(dòng)數(shù)據(jù)對(duì)齊:目標(biāo)會(huì)被顯式地根據(jù)標(biāo)簽對(duì)齊,使用者也可以忽略標(biāo)簽,直接利用DataFrame、Series來(lái)自動(dòng)對(duì)齊;功能強(qiáng)大,靈活的分組功能,可對(duì)數(shù)據(jù)執(zhí)行拆分-應(yīng)用-組合的一系列操作,以便聚合和轉(zhuǎn)換數(shù)據(jù);可以很方便地把其他Python和NumPy的雜亂的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成DataFrame對(duì)象;6.1.1主要特性基于智能標(biāo)簽的切片、花式索引和子集化大數(shù)據(jù)集;直觀的合并和連接數(shù)據(jù)集;靈活的重塑(reshape)和數(shù)據(jù)集的旋轉(zhuǎn);軸的分層標(biāo)簽(每個(gè)標(biāo)記可能有多個(gè)標(biāo)簽);強(qiáng)大的IO工具,用于從原始文件(CSV)、Excel文件、數(shù)據(jù)庫(kù)中加載數(shù)據(jù),以及從超快速HDF5格式保存/加載數(shù)據(jù);
時(shí)間序列-特定功能:日期范圍生成和頻率轉(zhuǎn)換、移動(dòng)窗口統(tǒng)計(jì)、移動(dòng)窗口線
性回歸、日期移動(dòng)和滯后等。6.1.2
pandas安裝安裝包方法:pip命令,語(yǔ)法格式為:pipinstallpandasconda命令,語(yǔ)法格式為:condainstallpandas還可以使用condalistpandas查看已安裝的pandas包的版本信息。Anaconda環(huán)境中默認(rèn)已集成了Numpy和Pandas等第三方工具包,如想自行安裝,可使用pip命令或conda命令。Pandas中的數(shù)據(jù)結(jié)構(gòu)026.2.1
Series數(shù)據(jù)結(jié)構(gòu)Series數(shù)據(jù)結(jié)構(gòu)一種類(lèi)似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)以及一組與之相對(duì)應(yīng)的數(shù)據(jù)標(biāo)簽(即索引)組成。創(chuàng)建Series的語(yǔ)法為:s=pd.Series(data,index=index)其中:data可以是一維數(shù)組、列表和字典,還可以是一個(gè)標(biāo)量;index參數(shù)是與之對(duì)應(yīng)的行的索引,可依實(shí)際情況進(jìn)行指定或默認(rèn)。[例6-1]使用標(biāo)量創(chuàng)建Series:index參數(shù)必須設(shè)置,如未設(shè)置index,默認(rèn)狀態(tài)時(shí)生成只有一組數(shù)據(jù)(1個(gè)data和一個(gè)索引)的Series。(左側(cè)為索引值,右側(cè)為數(shù)據(jù))[例6-2]數(shù)組創(chuàng)建Series:index可默認(rèn)或設(shè)定,默認(rèn)狀態(tài)下的index從0開(kāi)始。[例6-3]列表創(chuàng)建Series:使用列表創(chuàng)建Series,并自定義index。6.2.1
Series數(shù)據(jù)結(jié)構(gòu)索引個(gè)數(shù)大于data個(gè)數(shù)時(shí),會(huì)用NaN自動(dòng)補(bǔ)全[例6-4]字典創(chuàng)建Series:當(dāng)index默認(rèn)時(shí),會(huì)自動(dòng)以字典的key作為索引,并按照排序后排列6.2.1
Series數(shù)據(jù)結(jié)構(gòu)
Series操作
對(duì)于Series對(duì)象的使用,主要取決于其創(chuàng)建對(duì)象的相關(guān)操作。由于數(shù)組和字典都可以用來(lái)創(chuàng)建Series,所以Series除了具備基本屬性外,還適用數(shù)組、字典的相關(guān)操作。Series支持許多數(shù)組類(lèi)型的操作。如:索引、切片等,以及許多NumPy的函數(shù)也適用于Series,其返回值仍是Series[例6-5]顯示Series對(duì)象的屬性。Series的常用屬性包括values和index,還有name和屬性。[例6-6]Series支持?jǐn)?shù)組類(lèi)型的操作。如:索引、切片等。6.2.1
Series數(shù)據(jù)結(jié)構(gòu)
Series還適用于字典的基本操作,如in()和get()。in()用來(lái)查看Series中是否有某個(gè)標(biāo)記,返回值為true或false;get()來(lái)索引不存在的標(biāo)記,返回值為Nan。[例6-7]Series支持的字典操作。(其中s為例6-6中創(chuàng)建的Series對(duì)象) Series還支持一些向量化操作。如兩個(gè)Series相加、數(shù)乘等。[例6-8]Series支持的向量化操作。6.2.1
Series數(shù)據(jù)結(jié)構(gòu)6.2.2DataFrame數(shù)據(jù)結(jié)構(gòu) DataFrame數(shù)據(jù)結(jié)構(gòu)
DataFrame是一個(gè)結(jié)構(gòu)類(lèi)似于二維數(shù)組或表格的數(shù)據(jù)類(lèi)型,可以看作一張表格,它含有一組有序的列,每一列的數(shù)據(jù)類(lèi)型都是一致的。DataFrame類(lèi)對(duì)象由索引和數(shù)據(jù)組成,與Series類(lèi)對(duì)象相比,該對(duì)象有兩組索引,分別是行索引(index)和列索引(columns)。DataFrame的數(shù)據(jù)結(jié)構(gòu)如下圖所示。6.2.2DataFrame數(shù)據(jù)結(jié)構(gòu)[例6-10]可以指定行索引和列索引創(chuàng)建DataFrame,如下:[例6-9]由數(shù)組構(gòu)建DataFrame。等長(zhǎng)列表或NumPy數(shù)組:系統(tǒng)自動(dòng)分配列索引和行索引
列表類(lèi)型是字典時(shí),一般不需另外指定列的索引,會(huì)自動(dòng)采用字典的key豎向作為列索引,并排序后輸出,但支持指定行索引。注意:字典值的長(zhǎng)度必須相同,否則會(huì)報(bào)錯(cuò)。[例6-11]傳入列表類(lèi)型的字典構(gòu)建DataFrame。6.2.2DataFrame數(shù)據(jù)結(jié)構(gòu)
DataFrame的常用屬性包括values、index、columns、dtypes、size、ndim和shape等,分別可以顯示DataFrame的數(shù)據(jù)、索引、列名、類(lèi)型、元素個(gè)數(shù)、維度和形狀等,如表6-1所示。6.2.2DataFrame數(shù)據(jù)結(jié)構(gòu)
表6-1DataFrame的常用屬性[例6-12]輸出上例中DataFrame對(duì)象的屬性。6.2.2DataFrame數(shù)據(jù)結(jié)構(gòu)Pandas中數(shù)據(jù)的基本操作036.3.1數(shù)據(jù)的導(dǎo)入和導(dǎo)出 Pandas支持多種文件格式的數(shù)據(jù)讀取與寫(xiě)入,包括txt、Excel、csv、sql、table、html和json等眾多格式。讀取文件的語(yǔ)法格式為:File=pd.read_xxx(file,encoding)
其中,read_xxx()函數(shù)的選擇取決于要讀取文件的格式,在實(shí)際操作中可以tab鍵補(bǔ)全函數(shù);file是指將要讀取的文件路徑;encoding是指讀取文件的編碼格式,一般常用的有utf-8、utf-16、gbk及gb2312。 Dataframe數(shù)據(jù)也可以保存在各種格式的文件中,需要使用的函數(shù)是.to_xxx()函數(shù)。6.3.1數(shù)據(jù)的導(dǎo)入和導(dǎo)出Pandas常用的數(shù)據(jù)導(dǎo)入函數(shù)如表6-2所示。表6-2Pandas常用的數(shù)據(jù)導(dǎo)入函數(shù)6.3.1數(shù)據(jù)的導(dǎo)入和導(dǎo)出[例6-13]Pandas讀取csv文件數(shù)據(jù)。6.3.1數(shù)據(jù)的導(dǎo)入和導(dǎo)出[例6-14]Pandas讀取excel文件數(shù)據(jù)。6.3.1數(shù)據(jù)的導(dǎo)入和導(dǎo)出[例6-15]Pandas讀取json文件數(shù)據(jù)。6.3.1數(shù)據(jù)的導(dǎo)入和導(dǎo)出
文本數(shù)據(jù)的導(dǎo)出存儲(chǔ)與讀取類(lèi)似,可以使用DataFrame的.to_xxx()函數(shù)將Dataframe對(duì)象數(shù)據(jù)保存到各種格式的文件中。結(jié)構(gòu)化數(shù)據(jù)可以通過(guò)to_csv函數(shù)以csv文件格式存儲(chǔ),to_excel函數(shù)可以將數(shù)據(jù)存儲(chǔ)為Excel文件格式。[例6-16]將df數(shù)據(jù)保存為csv文件,使用逗號(hào)作為分隔符。6.3.2數(shù)據(jù)的選取
首先創(chuàng)建一個(gè)DataFrame對(duì)象df1,然后介紹相關(guān)數(shù)據(jù)的查看與選取方法。[例6-17]創(chuàng)建一個(gè)DataFrame對(duì)象。1.基本選取方式1)按列選取數(shù)據(jù)DataFrame的列數(shù)據(jù)為一個(gè)Series??筛鶕?jù)字典訪問(wèn)key值的方式使用對(duì)應(yīng)的列名或列名的列表,實(shí)現(xiàn)單列或多列數(shù)據(jù)的訪問(wèn),或者以屬性的方式實(shí)現(xiàn)單列數(shù)據(jù)的訪問(wèn),例如df.A。[例6-18]按列選取DataFrame的數(shù)據(jù)。6.3.2數(shù)據(jù)的選取1.基本選取方式2)按行選取數(shù)據(jù)訪問(wèn)DataFrame某幾行數(shù)據(jù)可以使用[:]實(shí)現(xiàn)。也可以使用head和tail函數(shù)得到多行數(shù)據(jù),默認(rèn)獲得開(kāi)始或末尾的連續(xù)5行數(shù)據(jù),可以在函數(shù)中輸入要訪問(wèn)的行數(shù),即可實(shí)現(xiàn)目標(biāo)行數(shù)的查看,如head(10)可查看前10行數(shù)據(jù)。[例6-19]按行選取DataFrame的數(shù)據(jù)。6.3.2數(shù)據(jù)的選取1.基本選取方式3)按行和列選取數(shù)據(jù)選取DataFrame中某一列的某幾行時(shí),單獨(dú)一列的DataFrame可以看作一個(gè)Series,而訪問(wèn)一個(gè)Series基本和訪問(wèn)一個(gè)一維的ndarray相同。選取DataFrame多列數(shù)據(jù)時(shí),可以將多個(gè)列索引名作為一個(gè)列表。同時(shí)訪問(wèn)DataFrame多列數(shù)據(jù)中的多行數(shù)據(jù)與訪問(wèn)單列數(shù)據(jù)的多行數(shù)據(jù)方法基本相同。[例6-20]按行和列選取DataFrame的數(shù)據(jù)。6.3.2數(shù)據(jù)的選取1.基本選取方式4)布爾運(yùn)算選取數(shù)據(jù)可以對(duì)DataFrame中的數(shù)據(jù)根據(jù)布爾運(yùn)算進(jìn)行選取,常用的布爾運(yùn)算符包括大于(>)、小于(<)、不等于(!=)等。[例6-21]布爾運(yùn)算選取DataFrame的數(shù)據(jù)。6.3.2數(shù)據(jù)的選取2. loc及iloc選取方式可以使用Pandas提供的loc和iloc方法對(duì)DataFrame進(jìn)行切片訪問(wèn)。loc方法使用索引名稱(chēng)對(duì)DataFrame進(jìn)行切片,如果傳入的不是索引名稱(chēng),則切片操作將無(wú)法執(zhí)行。iloc方法,即indexlocate,參數(shù)是整型,需使用行索引和列索引的位置進(jìn)行切片訪問(wèn)。loc和iloc的使用方法如下。DataFrame.loc[行索引名稱(chēng)或條件,列索引名稱(chēng)]DataFrame.iloc[行索引位置,列索引位置]6.3.2數(shù)據(jù)的選取2. loc及iloc選取方式6.3.2數(shù)據(jù)的選取[例6-22]使用loc方法進(jìn)行切片選取,實(shí)例代碼為:2. loc及iloc選取方式6.3.2數(shù)據(jù)的選取[例6-23]使用iloc方法進(jìn)行切片選取,實(shí)例代碼為:[例6-24]DataFrame中增加數(shù)據(jù)。6.3.3數(shù)據(jù)的編輯1.增加數(shù)據(jù)可以通過(guò)給新列直接賦值來(lái)為DataFrame增加新列。默認(rèn)狀態(tài)下,新增加的列將排在原對(duì)象的后面,也可以使用insert()方法,將列添加到指定位置。用法為:df1.insert(iloc,column,value),其中,第一個(gè)參數(shù)是增加列的位置,第二個(gè)參數(shù)是增加列的索引,第三個(gè)位置是增加列的內(nèi)容。[例6-25]通過(guò)append()方法傳入字典結(jié)構(gòu)數(shù)據(jù)來(lái)增加數(shù)據(jù)。請(qǐng)注意,默認(rèn)append不改變?cè)瓟?shù)據(jù),若要在原數(shù)據(jù)中增加,需要讓原數(shù)據(jù)等于append后的結(jié)果。6.3.2數(shù)據(jù)的選取[例6-26]刪除DataFrame中的數(shù)據(jù)。6.3.3數(shù)據(jù)的編輯2.刪除數(shù)據(jù)可用關(guān)鍵詞del或者pop()方法刪除指定列。還可以使用drop()方法,并設(shè)置axis參數(shù)指定要?jiǎng)h除的是行還是列,默認(rèn)不改變?cè)瓟?shù)據(jù),若要在原數(shù)據(jù)中刪除,需要設(shè)置參數(shù)inplace=True。[例6-27]修改DataFrame中的數(shù)據(jù)。6.3.3數(shù)據(jù)的編輯3.修改數(shù)據(jù)對(duì)選定的數(shù)據(jù)直接賦值即可修改數(shù)據(jù),數(shù)據(jù)的修改操作無(wú)法撤銷(xiāo),且是在原數(shù)據(jù)上直接修改,因此需要實(shí)現(xiàn)做好數(shù)據(jù)的備份。6.3.4數(shù)據(jù)的合并1.merge()函數(shù)操作類(lèi)似于sql里面的join,實(shí)現(xiàn)將2個(gè)DataFrame根據(jù)一些共有的列連接起來(lái),內(nèi)含多個(gè)參數(shù),具體參數(shù)說(shuō)明見(jiàn)下表。參數(shù)說(shuō)明left參與合并的左側(cè)的DataFrameright參與合并的右側(cè)的DataFramehow連接方式:‘inner’(默認(rèn)),‘outer’,‘left’,‘right’on用于連接的列名,必須同時(shí)存在于左右兩個(gè)DataFrame對(duì)象中,若干未指定,則left和right的列名交集作為連接鍵。left_on左側(cè)DataFrame中用作連接鍵的列right_on右側(cè)DataFrame中用作連接鍵的列l(wèi)eft_index將左側(cè)的行索引用作其連接鍵right_index將右側(cè)的行索引用作其連接鍵sort根據(jù)連接鍵對(duì)合并后的數(shù)據(jù)進(jìn)行排序,默認(rèn)為T(mén)rue。suffixes字符串值元組,用于追加到重疊列名的末尾,默認(rèn)為(‘_x’,‘_y’)。copy設(shè)置為False,可以在某些特殊情況下避免將數(shù)據(jù)復(fù)制到結(jié)果數(shù)據(jù)結(jié)構(gòu)中。merge()函數(shù)—實(shí)例初始化兩個(gè)DataFrame對(duì)象:left=right=[例6-28]默認(rèn)狀態(tài):DataFrame合并時(shí)會(huì)以列名的交集作為連接鍵。若連接列中含有多個(gè)相同的值,則采用笛卡爾積的形式進(jìn)行連接。設(shè)置how參數(shù):設(shè)置連接時(shí)的方式,默認(rèn)狀態(tài)下是inner。當(dāng)how取值outer時(shí),會(huì)采用并集式合并,缺項(xiàng)以NaN補(bǔ)齊。6.3.4數(shù)據(jù)的合并
當(dāng)DataFrame的列交集不止一項(xiàng)時(shí),可以通過(guò)參數(shù)on來(lái)指定連接鍵,可一個(gè),也可多個(gè)。如果合并的DataFrame中還有相同的列索引,可以設(shè)置suffixes參數(shù),實(shí)現(xiàn)對(duì)列名的區(qū)分。[例6-29]使用merge函數(shù)并設(shè)置suffixes參數(shù),連接DataFrame對(duì)象。6.3.4數(shù)據(jù)的合并merge()函數(shù)—實(shí)例2.concat()函數(shù)
主要實(shí)現(xiàn)一些簡(jiǎn)單的行合并和列合并的操作,其內(nèi)含多個(gè)參數(shù),具體見(jiàn)下表。參數(shù)說(shuō)明objs參與連接的列表或字典,且列表或字典里的對(duì)象是Pandas數(shù)據(jù)類(lèi)型,唯一必須給定的參數(shù)axis=0指明連接的軸向,0是縱軸,1是橫軸,默認(rèn)是0join‘inter’(交集),‘outer’(并集),默認(rèn)是‘outer’join_axis指明用于其他n-1條軸的索引,不執(zhí)行交并集keys與連接對(duì)象有關(guān)的值,可以是任意值的列表、元組或數(shù)組levels指定用作層次化索引各級(jí)別上的索引,如果設(shè)置keys的話names用于創(chuàng)建分層級(jí)別的名稱(chēng),如果設(shè)置keys或levels的話verify_integrity檢查結(jié)果對(duì)象新軸上的重復(fù)情況,默認(rèn)值為false,允許重復(fù)ignore_index不保留連接軸上的索引,產(chǎn)生一組新索引range(total_length)6.3.4數(shù)據(jù)的合并concat()函數(shù)—實(shí)例初始化三個(gè)DataFrame對(duì)象:df1=df2=[例6-30]設(shè)置參數(shù)axis:axis=0時(shí),縱向合并;axis=1時(shí),橫向合并。設(shè)置ignore_index參數(shù):合并時(shí)是否保留原來(lái)的索引;默認(rèn)狀態(tài)下,合并后的索引不改變。df3=6.3.4數(shù)據(jù)的合并初始化兩個(gè)DataFrame對(duì)象:df1=df2=[例6-31]設(shè)置join參數(shù):當(dāng)join參數(shù)設(shè)置為outer,按并集方法合并,缺少的部分填充N(xiāo)aN。當(dāng)join參數(shù)設(shè)置為inner時(shí),以交集方式合并,即只合并公共的部分6.3.4數(shù)據(jù)的合并concat()函數(shù)—實(shí)例數(shù)據(jù)運(yùn)算與分析046.4.1算術(shù)和比較運(yùn)算Pandas為Series和DataFrame提供了許多算術(shù)運(yùn)算的方法,算術(shù)規(guī)則是根據(jù)行列索引補(bǔ)齊后進(jìn)行運(yùn)算,運(yùn)算結(jié)果默認(rèn)為浮點(diǎn)型,補(bǔ)齊時(shí)缺項(xiàng)填充為NaN。初始化兩個(gè)DataFrame對(duì)象:a:b:[例6-32]DataFrame對(duì)象的算術(shù)運(yùn)算。四則運(yùn)算時(shí):返回一個(gè)新的對(duì)象,也可以采用相關(guān)方法,實(shí)現(xiàn)相似的效果,分別是:.add(d,**argws).sub(d,**argws).mul(d,**argws).div(d,**argws)6.4.1算術(shù)和比較運(yùn)算a:b:[例6-33]DataFrame對(duì)象的比較運(yùn)算。比較運(yùn)算:只能比較相同索引的元素,而且不進(jìn)行補(bǔ)齊操作,返回一個(gè)布爾型的對(duì)象。常見(jiàn)的比較運(yùn)算有:‘>’,‘<’,‘>=’,‘<=’,‘==’,‘!=’等。初始化兩個(gè)DataFrame對(duì)象:6.4.2數(shù)據(jù)排序
Pandas提供了數(shù)據(jù)排序的方法,既可以依據(jù)行列的索引排序,也可以依據(jù)指定行列索引的數(shù)據(jù)排序。排序主要利用的方法是sort_index()和sort_values()。
依據(jù)索引排序:采用sort_index(axis=[0,1],ascending=True)方法。通過(guò)設(shè)置參數(shù)axis實(shí)現(xiàn)對(duì)行索引和列索引的排序,一般默認(rèn)順序排列。
當(dāng)axis=1時(shí),實(shí)現(xiàn)對(duì)列索引的排序;
當(dāng)axis=0時(shí),實(shí)現(xiàn)對(duì)行索引的排序。[例6-34]DataFrame對(duì)象的數(shù)據(jù)排序。6.4.2數(shù)據(jù)排序
依據(jù)數(shù)值排序:使用的方法是sort_values(by,axis=0,ascending=True),其中默認(rèn)順序排列,by是axis軸上的某個(gè)索引或者索引列表。此外,若含有空值時(shí),統(tǒng)一排序到末尾。
6.4.3統(tǒng)計(jì)分析 Pandas提供的Series和DataFrame兩種數(shù)組類(lèi)型還支持各種統(tǒng)計(jì)分析的操作?;镜慕y(tǒng)計(jì)分析函數(shù)一般均適用于以上兩種數(shù)據(jù)類(lèi)型。常見(jiàn)的基本統(tǒng)計(jì)函數(shù)如下表。方法說(shuō)明.sum()計(jì)算數(shù)據(jù)的總和,按0軸計(jì)算,下同.count()非NaN值得數(shù)量.mean().median()計(jì)算數(shù)據(jù)的算術(shù)平均值、算術(shù)中位數(shù).var().std()計(jì)算數(shù)據(jù)的方差、標(biāo)準(zhǔn)差.min().max()計(jì)算數(shù)據(jù)的最小值、最大值.argmin().argmax()計(jì)算數(shù)據(jù)最大、最小值所在位置的索引位置(自定義所用),僅Series可用.idxmin().idxmax()計(jì)算數(shù)據(jù)最大、最小值所在位置的索引(自定義所用),僅Series可用.describe()針對(duì)各列的統(tǒng)計(jì)匯總6.4.3統(tǒng)計(jì)分析[例6-35]讀入小費(fèi)文件tips.csv,使用DataFrame對(duì)象的基本統(tǒng)計(jì)分析方法了解數(shù)據(jù)信息。6.4.3統(tǒng)計(jì)分析describe()方法返回的結(jié)果包括各列的元素個(gè)數(shù)、均值、標(biāo)準(zhǔn)差、最小值、四分之一分位點(diǎn)、中位數(shù)、四分之三分位點(diǎn)和最大值。corr()方法可以返回?cái)?shù)值列或指定兩個(gè)數(shù)值列之間的相關(guān)系數(shù)。6.4.3統(tǒng)計(jì)分析
對(duì)于Pandas數(shù)據(jù),由于其類(lèi)似表格的特性,還支持許多累計(jì)統(tǒng)計(jì)的分析,為數(shù)據(jù)分析提供了很大的方便,也成Pandas的一大優(yōu)勢(shì)。常見(jiàn)的累計(jì)統(tǒng)計(jì)分析函數(shù)如下表。方法說(shuō)明.cumsum()依次給出前n個(gè)數(shù)的和.cumprod()依次給出前n個(gè)數(shù)的積.cummax()依次給出前n個(gè)數(shù)的最大值.cummin()依次給出前n個(gè)數(shù)的最小值df:首先,構(gòu)建一個(gè)DateFrame對(duì)象。6.4.3統(tǒng)計(jì)分析[例6-36]DataFrame對(duì)象的累計(jì)函數(shù)。.cumsum()和.cumprod()函數(shù)分別返回一個(gè)DataFrame,除第一數(shù)據(jù)外,其余行是前幾行(包括本行)數(shù)據(jù)累加/積的結(jié)果。本例中,df.cumsum()和df.cumprod()的結(jié)果如下:6.4.3統(tǒng)計(jì)分析[例6-36]DataFrame對(duì)象的累計(jì)函數(shù)。.cummax()和.cummin()函數(shù)分別返回一個(gè)DataFrame,返回值分別為對(duì)應(yīng)列上前幾行數(shù)據(jù)的最大值和最小值。本例中,df.cummax()和df.cummin()的結(jié)果如下:6.4.3統(tǒng)計(jì)分析[例6-36]DataFrame對(duì)象的累計(jì)函數(shù)。此外,Pandas在統(tǒng)計(jì)操作中,還支持滾動(dòng)計(jì)算,利用的函數(shù)主要是.rollong(w).sum()等類(lèi)似函數(shù),其中,w主要是指參與運(yùn)算的元素?cái)?shù)量,其返回值是一個(gè)DataFrame,缺失值以NaN補(bǔ)全,df.rolling(2).sum()的結(jié)果下:6.4.4分組與聚合1.數(shù)據(jù)分組可以使用groupby()根據(jù)索引或字段對(duì)數(shù)據(jù)進(jìn)行分組,具體的用法如下所示:DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=<no_default>,observed=False,dropna=True)說(shuō)明如下:6.4.4分組與聚合[例6-37]數(shù)據(jù)分組實(shí)例。
groupby分組后的結(jié)果不再是DataFrame類(lèi)型,而是一個(gè)DataFrameGroupBy對(duì)象??梢园磫瘟蟹纸M,也可以同時(shí)按多個(gè)列進(jìn)行分組,如df.groupby(["A","B"])表示按A和B兩列進(jìn)行分組。6.4.4分組與聚合2.數(shù)據(jù)聚合分組后的結(jié)果不能直接查看,可以使用聚合運(yùn)算對(duì)分組后數(shù)據(jù)進(jìn)行計(jì)算,并查看可聚合計(jì)算后的結(jié)果,常用的數(shù)據(jù)聚合方法如下表所示。6.4.4分組與聚合[例6-38]數(shù)據(jù)聚合實(shí)例。6.4.4分組與聚合2.數(shù)據(jù)聚合除了使用pandas提供的數(shù)據(jù)聚合方法,還可以將自定義的聚合函數(shù)傳入agg()或aggregate()方法,實(shí)現(xiàn)分組后的數(shù)據(jù)聚合計(jì)算。agg()方法可以指定軸上使用一個(gè)或多個(gè)操作進(jìn)行聚合,支持Python內(nèi)置函數(shù)或自定義的函數(shù)。aggregate()方法對(duì)DataFrame對(duì)象操作的功能基本相同。6.4.4分組與聚合[例6-39]使用agg()方法聚合數(shù)據(jù),df為上例中定義的DataFrame對(duì)象。6.4.5透視表與交叉表1.透視表數(shù)據(jù)透視表是常用的數(shù)據(jù)分析工具之一,它可以根據(jù)一個(gè)或多個(gè)指定的維度對(duì)數(shù)據(jù)進(jìn)行聚合。在python中可以通過(guò)pandas.pivot_table函數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)透視表。pandas.pivot_table函數(shù)包含5個(gè)主要參數(shù)及其他可選參數(shù),如下所示。pandas.pivot_table(data,values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All',observed=False,sort=True)說(shuō)明如下:[例6-40]使用pivot_table創(chuàng)建數(shù)據(jù)透視表。6.4.5透視表與交叉表[例6-40]使用pivot_table創(chuàng)建數(shù)據(jù)透視表。6.4.5透視表與交叉表首先,設(shè)列A作為行分組鍵,列C作為列分組鍵,通過(guò)sum來(lái)聚合列D的數(shù)據(jù)。[例6-40]使用pivot_table創(chuàng)建數(shù)據(jù)透視表。6.4.5透視表與交叉表然后,設(shè)列A和B作為行分組鍵,列C作為列分組鍵,通過(guò)sum來(lái)聚合列D的數(shù)據(jù),使用fill_value參數(shù)填充缺失值。[例6-40]使用pivot_table創(chuàng)建數(shù)據(jù)透視表。6.4.5透視表與交叉表最后,設(shè)列A和B作為行分組鍵,通過(guò)列D和列E的平均值進(jìn)行聚合。6.4.5透視表與交叉表2.交叉表交叉表是一種特殊的透視表,主要用于計(jì)算分組頻率。pandas.crosstab函數(shù)可以用于制作交叉表,該函數(shù)的參數(shù)和使用格式如下。pandas.crosstab(index,columns,values=None,rownames=None,colnames=None,aggfunc=None,margins=False,margins_name='All',dropna=True,normalize=False)[例6-41]使用crosstab創(chuàng)建交叉表。6.4.5透視表與交叉表6.4.5透視表與交叉表首先,設(shè)列A作為行分組鍵,列B作為列分組鍵,創(chuàng)建交叉表。然后設(shè)列A作為行分組鍵,列B作為列分組鍵,用列C的平均值創(chuàng)建交叉表。[例6-41]使用crosstab創(chuàng)建交叉表。6.4.5透視表與交叉表可以使用normalize參數(shù)對(duì)頻率表進(jìn)行規(guī)范化,以顯示百分比,而不是計(jì)數(shù)。另外,還可以將margins參數(shù)設(shè)置為T(mén)rue,則可以打開(kāi)匯總(Total)功能。[例6-41]使用crosstab創(chuàng)建交叉表。本章實(shí)踐例題本章實(shí)踐例題[例6-42]DataFrame創(chuàng)建實(shí)例。本章實(shí)踐例題[例6-43]Pandas文件讀寫(xiě)實(shí)例。本章實(shí)踐例題[例6-44]天氣信息文件temp.xlsx中存放著某城市最近一周(從周一到周日)的每天最高和最低氣溫(單位為攝氏度)。每行中,第一列為序號(hào),代表周幾,第二列為當(dāng)天最高氣溫maxTemp,第三列為當(dāng)天最低氣溫minTemp。求:1、增加一列,存放每天的平均氣溫;2、求出本周溫度的平均值;3、這一周中第幾天最熱(按最高氣溫計(jì)算),最高多少度?這一周中第幾天最冷(按最低氣溫計(jì)算),最冷多少度?本章實(shí)踐例題[例6-45]
泰坦尼克號(hào)乘客生還數(shù)據(jù)的分析實(shí)例。利用DataFrame對(duì)Titanic號(hào)乘客的生還數(shù)據(jù)進(jìn)行預(yù)處理和初步分析。本章實(shí)踐例題[例6-46]讀入data目錄下的tips.csv文件,放到一個(gè)DataFrame結(jié)構(gòu)df1中。查看tips數(shù)據(jù)的相關(guān)信息,并按是否吸煙、性別等字段分組統(tǒng)計(jì)相關(guān)信息,完成對(duì)tips數(shù)據(jù)的分析。小結(jié)Pandas是使用Python進(jìn)行數(shù)據(jù)分析非常重要的包。它提供了許多快速?gòu)?qiáng)大而又簡(jiǎn)單易用的數(shù)據(jù)結(jié)構(gòu)來(lái)處理相關(guān)數(shù)據(jù),在數(shù)據(jù)分析中有著廣泛的應(yīng)用。本章結(jié)合實(shí)例介紹了Pandas中的常用數(shù)據(jù)結(jié)構(gòu)和常用數(shù)據(jù)分析方法。本章中需要重點(diǎn)掌握的知識(shí)點(diǎn)是:Series數(shù)據(jù)類(lèi)型和DataFrame數(shù)據(jù)類(lèi)型的使用。小結(jié)本章習(xí)題請(qǐng)先用字典數(shù)據(jù)生成一個(gè)DataFrame對(duì)象df,數(shù)據(jù)為:{'Name':['Kate','Rose','Tom','John'],'Height':[155,165,170,168],'Weight':[45,50,65,62]}。完成如下數(shù)據(jù)的編輯:(1)用兩種方法,分別往df中加入性別列'gender'和年齡列'age'(數(shù)據(jù)可自定義);(2)往df中加入一行數(shù)據(jù),數(shù)據(jù)為:{'Name':'Lucky','Height':165,'Age':17,'Weight':48,'Gender':'Female'}。本章習(xí)題2. 請(qǐng)先用字典數(shù)據(jù)生成一個(gè)DataFrame對(duì)象,數(shù)據(jù)為:{'城市':['北京','上海','天津','深圳'],'郵編':['010','021','022','073'],'氣溫':[18,22,19,30]},為其加上行索引'c1','c2','c3','c4'。完成如下數(shù)據(jù)的選?。?1)輸出“氣溫”列;(2)用兩種方法輸出“上?!边@一行的數(shù)據(jù);(3)輸出“深圳”的郵編;(4)輸出所有“氣溫”大于20度的城市的“城市名”和“郵編”。本章習(xí)題3. 讀取“simple_score.xlsx”文件,首先過(guò)濾其中的異常成績(jī)數(shù)據(jù)(小于0、大于100或?yàn)榭盏氖钱惓?shù)據(jù)),然后統(tǒng)計(jì)“成績(jī)”字段的描述性信息,除了默認(rèn)的均值、方差等以外,還需統(tǒng)計(jì)“總和”、“極差”、“變異系數(shù)”、“四分位數(shù)間距”,并輸出以上統(tǒng)計(jì)信息,輸出結(jié)果如下圖所示。本章習(xí)題4. 讀取“scores.xlsx”文件中sheet_name=0的數(shù)據(jù),包括學(xué)生學(xué)號(hào)、姓名、性別、及三門(mén)課程的考試成績(jī)。輸出以下內(nèi)容:文件數(shù)據(jù)總行數(shù),三門(mén)課程按性別分組后的平均分;增加一列“總分”,記錄每個(gè)同學(xué)三門(mén)課程分?jǐn)?shù)的總和,并輸出按總分降序排列結(jié)果中的前5行數(shù)據(jù),輸出結(jié)果如下圖所示。本章習(xí)題5. 讀取小費(fèi)文件“tips.csv”,先用性別列sex和是否吸煙列smoker分別做行和列的分組鍵,制作透視表,觀察tip列和total_bill列的均值,再以星期列day和時(shí)間列time分別做行和列的分組鍵,觀察tip列和total_bill列的均值,輸出結(jié)果如下圖所示。本章習(xí)題第六章Pandas基礎(chǔ)與應(yīng)用謝謝!Python數(shù)據(jù)分析與數(shù)據(jù)挖掘第7章Matplotlib基礎(chǔ)及應(yīng)用主講人:***15-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contentsMatplotlib簡(jiǎn)介0102Matplotlib基礎(chǔ)知識(shí)03Pyplot的使用04Pyplot中的常用圖形Matplotlib簡(jiǎn)介017.1.1
Matplotlib主要特性 Matplotlib是一個(gè)常用的Python繪圖庫(kù),常與NumPy和Pandas一起結(jié)合使用,它以各種格式和跨平臺(tái)的交互環(huán)境生成可達(dá)到印刷質(zhì)量的圖形。Matplotlib可用于Python腳本、Python和IPythonshell、JupyterNotebook、Web應(yīng)用程序服務(wù)器和四個(gè)圖形用戶界面工具包。 Matplotlib具有良好的操作系統(tǒng)兼容性和圖形顯示底層接口兼容性,并支持幾十種圖形顯示接口與輸出格式,是Python中繪制二維、三維圖表的重要可視化工具。新版的Matplotlib可以輕松實(shí)現(xiàn)主流的繪圖風(fēng)格,其中加入了許多新的程序包,實(shí)現(xiàn)了更加簡(jiǎn)潔新穎的API,例如Seaborn、ggplot、HoloViews、Altair和Pandas對(duì)Matplotlib的API封裝的繪圖功能。其主要特點(diǎn):使用簡(jiǎn)單繪圖語(yǔ)句實(shí)現(xiàn)復(fù)雜繪圖效果;以交互式操作實(shí)現(xiàn)漸趨精細(xì)的圖形效果;對(duì)圖表的組成元素實(shí)現(xiàn)精細(xì)化控制;使用嵌入式的LaTeX輸出具有印刷級(jí)別的圖表、科學(xué)表達(dá)式和符號(hào)文本。7.1.2Matplotlib安裝python-mpipinstall-Upippython-mpipinstall-Umatplotlib
對(duì)于Windows、MacOS和普通Linux平臺(tái)來(lái)說(shuō),Anaconda、Canopy和ActiveState都是非常好的選擇。Winpython是Windows用戶的一個(gè)選項(xiàng)。這些發(fā)行版中已經(jīng)包含了matplotlib和許多其他有用的(數(shù)據(jù))科學(xué)工具。其安裝語(yǔ)法如下:
使用時(shí),只需將其導(dǎo)入即可:以plt作為Pyplot子模塊的縮寫(xiě)。importmatplotlibasmplimportmatplotlib.pyplotaspltMatplotlib基礎(chǔ)知識(shí)027.2.1導(dǎo)入Matplotlib
我們?cè)谧鲌D前,需要導(dǎo)入matplotlib和其中的模塊(如matplotlib.pyplot)。通常為了方便,設(shè)置一個(gè)常用的簡(jiǎn)寫(xiě)形式,本章例子中還需要導(dǎo)入NumPy和Pandas模塊。importmatplotlibasmplimportmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspd7.2.2Matplotlib圖形構(gòu)成
Matplotlib將數(shù)據(jù)繪制在圖形(Figure)上,圖形可以理解為包含其他所有繪圖元素的頂級(jí)容器,其中包含所有軸(Axes)、其他Artist和畫(huà)布(Canvas)。通常情況下,畫(huà)布(Canvas)是一個(gè)繪圖的對(duì)象,對(duì)用戶而言,該對(duì)象一般不可見(jiàn)。在圖形上看到的一切都是Artist,Artist有兩種類(lèi)型,即圖形元素(primitives)和容器(containers)。圖形元素是我們需要加入Canvas的元素,比如線條、矩形、文字等,而容器是放置這些元素的地方,例如Axis、Axes和Figure,其中Figure是頂層的Artist。1、圖形(Figure)[例7-1]使用figure()方法創(chuàng)建新圖形。
軸(Axes)是matplotlibAPI中重要的類(lèi),這是因?yàn)檩S是大多數(shù)對(duì)象所在的繪圖區(qū)域。在創(chuàng)建Figure對(duì)象之后,在作圖前需要?jiǎng)?chuàng)建軸,軸是繪圖基準(zhǔn),是圖像中帶數(shù)據(jù)空間的區(qū)域。如果將Figure理解為容器,即畫(huà)布的載體,則具體的繪圖操作是在畫(huà)紙上完成,畫(huà)紙可以理解為子圖Subplot或更加靈活的子圖--軸(Axes)。2、軸(Axes)7.2.2Matplotlib圖形構(gòu)成[例7-2]本例首先生成一個(gè)空白Figure,然后創(chuàng)建1行2列的子圖,返回子圖的軸對(duì)象ax1和ax2。在第1個(gè)子圖的軸對(duì)象ax1上添加軸線標(biāo)簽X-Axis和Y-Axis,并設(shè)置軸線的數(shù)據(jù)范圍:X為[0,5],Y為[-2,2]。
軸線是類(lèi)似數(shù)字線的對(duì)象,是軸上的刻度。它們負(fù)責(zé)設(shè)置圖形范圍并生成記號(hào)(軸上的標(biāo)記)和記號(hào)標(biāo)簽(標(biāo)記記號(hào)的字符串)。一般情況下,圖中可以包含兩個(gè)或三個(gè)軸線對(duì)象(三維圖),它們負(fù)責(zé)處理數(shù)據(jù)范圍??梢允褂胮lt.axis()或plt.xlim()等函數(shù)設(shè)置軸線范圍,plt.xlabel()或者plt.ylabel()等為軸線命名,同時(shí)也可利用tick的相關(guān)方法對(duì)軸上的刻度進(jìn)行修改。3、軸線(Axis)7.2.2Matplotlib圖形構(gòu)成[例7-3]設(shè)置軸線實(shí)例。圖Figure、Axes和Axis的關(guān)系
圖例是展現(xiàn)圖表中數(shù)據(jù)組列表并通過(guò)提供線索(線條樣式或顏色)來(lái)讓數(shù)據(jù)組更易于識(shí)別。圖例的設(shè)置與修改是通過(guò)調(diào)用legend()來(lái)實(shí)現(xiàn)。4、圖例(legend)5、標(biāo)題(title)
標(biāo)題是對(duì)整個(gè)圖標(biāo)的說(shuō)明,方便對(duì)整個(gè)圖表含義的理解,通過(guò)調(diào)用plt.title()方法來(lái)實(shí)現(xiàn)對(duì)title內(nèi)容的設(shè)置。6、網(wǎng)格(Grid)
有時(shí)需要在圖形中添加網(wǎng)格,網(wǎng)格線方便看到圖表中每個(gè)元素的精確值,而且也方便執(zhí)行單點(diǎn)之間的對(duì)比。但是網(wǎng)格也會(huì)增加噪聲,讓看到實(shí)際的數(shù)據(jù)流變得困難。一般情況下,默認(rèn)狀態(tài)下無(wú)網(wǎng)格線,可以通過(guò)調(diào)用grid()方法實(shí)現(xiàn)。7.2.2Matplotlib圖形構(gòu)成7、圖形主體內(nèi)容
圖形的主體內(nèi)容是一張圖的核心,對(duì)于二維圖表而言,圖形的主體內(nèi)容可以是點(diǎn),也可以是線條等。對(duì)應(yīng)的方法分別是點(diǎn)(scatter、plot)、線(line、plot)等。7.2.2Matplotlib圖形構(gòu)成[例7-4]添加了網(wǎng)格、圖例的繪圖實(shí)例。 Matplotlib默認(rèn)狀態(tài)下無(wú)法顯示中文,在前面的許多例子中各種標(biāo)題及圖例都是使用的英文。若在作圖過(guò)程中,需要顯示中文,可通過(guò)下面兩種方法進(jìn)行操作。方法一:借助rcParams修改字體實(shí)現(xiàn)設(shè)置
其中,rcParams[‘font.family’]的種類(lèi)也可以設(shè)置多種。屬性說(shuō)明‘font.family’用于顯示字體的名字‘font.style’字體風(fēng)格,正常‘normal’或斜體‘italic’‘font.size’字體大小,整數(shù)字號(hào)或者‘large’、‘x‐small’rcParams的屬性7.2.3Matplotlib中設(shè)置中文中文字體種類(lèi) Matplotlib默認(rèn)狀態(tài)下無(wú)法顯示中文,在前面的許多例子中各種標(biāo)題及圖例都是使用的英文。若在作圖過(guò)程中,需要顯示中文,可通過(guò)下面兩種方法進(jìn)行操作。方法一:借助rcParams修改字體實(shí)現(xiàn)設(shè)置7.2.3Matplotlib中設(shè)置中文
可以用下列語(yǔ)句查看matplotlib中默認(rèn)已經(jīng)識(shí)別到的所有可用字體和對(duì)應(yīng)的文件名,其中部分輸出的為字體名稱(chēng),font.fname部分輸出字體文件的路徑和文件名。importmatplotlib.pyplotaspltfrommatplotlibimportfont_managerforfontinfont_manager.fontManager.ttflist:#查看字體名以及對(duì)應(yīng)的字體文件名print(,'--',font.fname)輸出的“KaiTi--C:\Windows\Fonts\simkai.ttf”中,“KaiTi”為字體名,“C:\Windows\Fonts\simkai.ttf”為對(duì)應(yīng)的字體文件。則可以用如下語(yǔ)句來(lái)使用該字體,如下所示:plt.rcParams['font.family']='KaiTi'plt.text(0.5,0.5,'楷體',ha='center',fontsize=50) Matplotlib默認(rèn)狀態(tài)下無(wú)法顯示中文,在前面的許多例子中各種標(biāo)題及圖例都是使用的英文。若在作圖過(guò)程中,需要顯示中文,可通過(guò)下面兩種方法進(jìn)行操作。方法一:借助rcParams修改字體實(shí)現(xiàn)設(shè)置7.2.3Matplotlib中設(shè)置中文[例7-5]中文顯示方法一。 Matplotlib默認(rèn)狀態(tài)下無(wú)法顯示中文,在前面的許多例子中各種標(biāo)題及圖例都是使用的英文。若在作圖過(guò)程中,需要顯示中文,可通過(guò)下面兩種方法進(jìn)行操作。方法二:在有中文輸出的地方,增加一個(gè)fontproperties屬性。7.2.3Matplotlib中設(shè)置中文[例7-6]中文顯示方法二。Pyplot使用037.3.1plt.plot()的使用
在Matplotlib模塊中,Pyplot是一個(gè)核心的子模塊,通過(guò)該子模塊,我們可以完成很多基本的可視化操作。子模塊的導(dǎo)入如下:importmatplotlib.pyplotasplt
其中,以plt作為Pyplot子模塊的縮寫(xiě) Pyplot繪圖的主要功能是繪制x,y的坐標(biāo)圖,在完成繪圖后一般情況下是不會(huì)自動(dòng)顯示圖表的,需要調(diào)用plt.show()方法顯示。當(dāng)plt.plot()中只有一個(gè)輸入列表或者數(shù)組時(shí),參數(shù)會(huì)被當(dāng)作Y坐標(biāo)數(shù)據(jù),而X的坐標(biāo)列表自動(dòng)生成索引,默認(rèn)為[0,1,2,3,…]。1、基本使用使用plt.plot()繪制的主要是線圖,其語(yǔ)法格式為:plt.plot(x,y,
format_string,
**kwargs)其中:必要的參數(shù)是x坐標(biāo)列表和y坐標(biāo)列表。當(dāng)plt.plot(x,y)中用2個(gè)以上參數(shù)時(shí),則會(huì)按照x軸和y軸順序繪制數(shù)據(jù)點(diǎn)。7.3.1plt.plot()的使用[例7-7]plt.plot()繪制實(shí)例。plt.plot()還有數(shù)十個(gè)可選參數(shù)來(lái)設(shè)置繪圖特征,但常用的有幾個(gè)特征,分別是: color:設(shè)置線條顏色,默認(rèn)為藍(lán)色。 linewidthorlw:設(shè)置線條寬度,默認(rèn)為1.0。 linestyleorls:設(shè)置線條樣式,默認(rèn)為實(shí)線。 labels:設(shè)置圖形名稱(chēng),一般搭配legend屬性使用。 marker:設(shè)置數(shù)據(jù)點(diǎn)的符號(hào),默認(rèn)為點(diǎn)。字符顏色字符顏色‘b’藍(lán)色‘g’綠色‘r’紅色‘c’青色‘m’品紅色‘y’黃色‘k’黑色‘w’白色字符線條樣式‘-’實(shí)線‘--’虛線‘-.’點(diǎn)劃線‘:’點(diǎn)線字符標(biāo)記類(lèi)型字符標(biāo)記類(lèi)型‘?!c(diǎn)‘,’像素‘o’圓圈‘v’下三角1‘^’上三角1‘<’左三角1‘>’右三角1‘1’下三角2‘2’上三角2‘3’左三角2‘4’右三角2‘s’正方形‘p’五角形‘*’星號(hào)‘h’六邊形樣式1‘H’六邊形樣式2‘+’加號(hào)‘x’X‘D’鉆石‘d’薄鉆石‘|’垂直線‘_’水平線7.3.1plt.plot()的使用1、基本使用Matplotlib的顏色Matplotlib的線條樣式Matplotlib標(biāo)記1、基本使用—參數(shù)設(shè)置實(shí)例7.3.1plt.plot()的使用[例7-8]設(shè)置plot繪圖特征實(shí)例。2、添加內(nèi)容
圖表主體內(nèi)容設(shè)置結(jié)束后,還可以設(shè)置或添加文本內(nèi)容。具體的添加內(nèi)容與所調(diào)用的函數(shù)具體見(jiàn)表。函數(shù)名稱(chēng)函數(shù)作用plt.title()在當(dāng)前圖形中添加標(biāo)題,可以指定標(biāo)題的名稱(chēng)、位置、顏色、字體大小等參數(shù)。plt.xlabel()在當(dāng)前圖形中添加x軸名稱(chēng),可以指定位置、顏色、字體大小等參數(shù)plt.ylabel()在當(dāng)前圖形中添加y軸名稱(chēng),可以指定位置、顏色、字體大小等參數(shù)plt.xlim()指定當(dāng)前圖形x軸的范圍,只能確定一個(gè)數(shù)值區(qū)間,而無(wú)法使用字符串標(biāo)識(shí)。plt.ylim()指定當(dāng)前圖形y軸的范圍,只能確定一個(gè)數(shù)值區(qū)間,而無(wú)法使用字符串標(biāo)識(shí)。plt.xticks()指定x軸刻度的數(shù)目與取值。plt.yticks()指定y軸刻度的數(shù)目與取值。plt.legend()指定當(dāng)前圖形的圖例,可以指定圖例的大小、位置、標(biāo)簽7.3.1plt.plot()的使用常用添加畫(huà)布內(nèi)容的函數(shù)說(shuō)明2、添加內(nèi)容—實(shí)例7.3.1plt.plot()的使用[例7-9]設(shè)置plot繪圖文本。2、添加內(nèi)容—實(shí)例7.3.1plt.plot()的使用[例7-10]為圖形添加注釋。代碼中的plt.annotate()函數(shù)有多個(gè)參數(shù)plt.annotate(s,xy=arrow_crd,xytext=text_crd,arrowprops=dict)3、圖形的保存7.3.1plt.plot()的使用
圖形繪制完成后,可以使用plt.show()進(jìn)行顯示,也可以使用plt.savefig()將其保存,在該函數(shù)中可以設(shè)置保存路徑和文件名、圖片的分辨率、邊緣的顏色等參數(shù)。如果既要顯示又要保存,請(qǐng)注意要將plt.savefig()放在plt.show()之前。否則,在plt.show()后實(shí)際上已經(jīng)創(chuàng)建了一個(gè)新的空白的圖片,此時(shí)再用plt.savefig()就會(huì)保存這個(gè)生成的空白圖片。[例7-11]保存圖片。plt.savefig()函數(shù)中主要參數(shù)含義為:fname:含有文件路徑的字符串,拓展名指定文件類(lèi)型,如'png'、'pdf'、’svg'、'ps'、'jpg'等;dpi:分辨率,默認(rèn)100;facecolor:圖像的表面顏色,默認(rèn)為“auto”;bbox_inches:圖表需要保留的部分,如果設(shè)置為“tight”,則將嘗試剪除圖像周?chē)目瞻撞糠帧?.3.2子圖
在Matplotlib中,不僅可以在一張圖形中繪制多條曲線,還可以將一張圖分成多個(gè)子圖進(jìn)行繪制。plt的subplot()方法參數(shù)可以是一個(gè)三位數(shù)字,例如121,也可以是一個(gè)數(shù)組,如[1,2,1]。其中第一個(gè)數(shù)字代表子圖總行數(shù),第二個(gè)數(shù)字代表子圖總列數(shù),第三個(gè)數(shù)字表示對(duì)應(yīng)圖像顯示的繪圖區(qū)域數(shù)。【解釋說(shuō)明】:以plt.subplot(2,2,1)為例,它是指將繪圖區(qū)域分為2行2列4個(gè)區(qū)域,并在第一個(gè)區(qū)域內(nèi)作圖,其他同上。1. 使用matplotlib.pyplot.subplot()進(jìn)行設(shè)置子圖[例7-12]用plt的subplot()繪制子圖。
subplot()方法也可以設(shè)置不同大小的繪圖區(qū)域?!窘忉屨f(shuō)明】:對(duì)于第一圖而言,它是在2行1列的區(qū)域內(nèi)作圖,當(dāng)設(shè)置后續(xù)三張圖的位置時(shí),從編號(hào)4開(kāi)始,暗示圖一占據(jù)3列的寬度。7.3.2子圖1. 使用matplotlib.pyplot.subplot()進(jìn)行設(shè)置子圖[例7-13]使用subplot()設(shè)置不同大小的繪圖區(qū)域。7.3.2子圖
實(shí)際使用中可能會(huì)面臨更復(fù)雜的繪圖分隔區(qū)域,subplot()方法就不能很好地滿足需要,此時(shí)需要借助subplot2grid()方法。語(yǔ)法如下: plt.subplot2grid(GridSpec,CurSpec,colspan=num1,rowspan=num2)2. 使用matplotlib.pyplot.subplot2grid()設(shè)置復(fù)雜的繪圖分隔區(qū)域【解釋說(shuō)明】:創(chuàng)建第1個(gè)小圖,(3,3)表示將整個(gè)圖像窗口分成3行3列,(0,0)表示從第0行第0列開(kāi)始作圖,colspan=3表示列的跨度為3,行的跨度為缺省,默認(rèn)跨度為1;創(chuàng)建第2個(gè)小圖,(3,3)表示將整個(gè)圖像窗口分成3行3列,(1,0)表示從第1行第0列開(kāi)始作圖,colspan=2表示列的跨度為2。后續(xù)子圖同理。注意:可以使用subplots_adjust()調(diào)整子圖間的間距。7.3.2子圖2. 使用matplotlib.pyplot.subplot2grid()設(shè)置復(fù)雜的繪圖分隔區(qū)域[例7-14]設(shè)置復(fù)雜的繪圖分隔區(qū)域。7.3.2子圖3. 使用matplotlib.pyplot.subplots()函數(shù)來(lái)設(shè)置子圖
subplots()函數(shù),返回一個(gè)包含figure和axes對(duì)象的元組。因此,通常使用fig,ax=plt.subplots()將元組分解為fig和ax兩個(gè)變量。如果創(chuàng)建了多個(gè)子圖,則ax可以是一個(gè)Axes對(duì)象的數(shù)組。
例如,fig,ax=plt.subplots(m,n,figsize=(a,b))設(shè)置了m*n個(gè)大小為a*b的子圖,fig為圖像對(duì)象,ax為大小為m*n的axes數(shù)組。7.3.2子圖3. 使用matplotlib.pyplot.subplots()函數(shù)來(lái)設(shè)置子圖[例7-15]用subplots()函數(shù)設(shè)置子圖。7.3.2子圖4. 使用matplotlib.figure.Figure.add_subplot()來(lái)設(shè)置子圖
add_subplot()的參數(shù)與plt的subplot()類(lèi)似,可以是一個(gè)三位數(shù)字,例如121,也可以是一個(gè)數(shù)組,如[1,2,1]。其中第一個(gè)數(shù)字代表子圖總行數(shù),第二個(gè)數(shù)字代表子圖總列數(shù),第三個(gè)數(shù)字表示對(duì)應(yīng)圖像顯示的繪圖區(qū)域數(shù)。7.3.2子圖[例7-16]使用figure的add_subplot()設(shè)置子圖并標(biāo)號(hào)。4. 使用matplotlib.figure.Figure.add_subplot()來(lái)設(shè)置子圖7.3.2子圖[例7-17]使用figure的add_subplot()設(shè)置子圖。4. 使用matplotlib.figure.Figure.add_subplot()來(lái)設(shè)置子圖Pyplot中的常用圖形047.4Pyplot中的常用圖形
Matplotlib中提供了許多繪制圖形的函數(shù),包括簡(jiǎn)單的基礎(chǔ)統(tǒng)計(jì)圖形,如直方圖、氣泡圖、箱線圖等,也有一些高維度的立體圖形,如3D圖等。下表給出Pyplot常用的基礎(chǔ)圖像繪制函數(shù)。函數(shù)說(shuō)明Plt.plot(x,y,fmt,…)繪制作表態(tài)Plt.boxplot(data,notch,position)繪制箱型圖Plt.bar(left,height,width,bottom)繪制條形圖Plt.barh(width,bottom,left,height)繪制一個(gè)橫向條形圖Plt.polar(theta,r)繪制極坐標(biāo)圖Plt.pie(data,explode)繪制餅圖Plt.psd(x,NFFT=256,pad_to,Fs)繪制功率譜密度圖Plt.specgarm(x,NFFT=256,pad_to,Fs)繪制譜圖Plt.cohere(x,y,NFFT=256,Fs)繪制X-Y的相關(guān)性圖Plt.scatter(x,y)繪制散點(diǎn)圖,其中x和y長(zhǎng)度相同Plt.step(x,y,where)繪制步階圖Plt.hist(x,bins,normed)繪制直方圖Plt.contour(X,Y,Z,N)繪制等制圖Plt.vlines()繪制垂直圖Plt.stem(x,y,linefmt,markerfmt)繪制柴火圖Plt.plot_date()繪制數(shù)據(jù)日期7.4.1散點(diǎn)圖
散點(diǎn)圖的繪制依賴(lài)plt.scatter()函數(shù),該函數(shù)包含很多參數(shù),具體如下:S:點(diǎn)的大小C:點(diǎn)的顏色,取值可以為[‘b’,‘c’,‘g’,‘k’,‘m’,‘r’,‘w’,‘y’]Alpha:點(diǎn)的透明度,取值為0-1Marker:點(diǎn)的形狀,默認(rèn)狀態(tài)下為“o”,常見(jiàn)的還有[‘v’,‘>’,‘<’,‘*’,‘s’,‘p’,‘h’,‘x’,‘+’]。[例7-18]不設(shè)置參數(shù)繪制散點(diǎn)圖。1、不設(shè)置任何參數(shù)時(shí)調(diào)用7.4.1散點(diǎn)圖[例7-19]設(shè)置部分參數(shù)繪制散點(diǎn)圖。2、設(shè)置部分的參數(shù),優(yōu)化圖表7.4.1散點(diǎn)圖7.4.2柱狀圖
柱狀圖主要用于查看各分組數(shù)據(jù)的數(shù)量分布,以及各個(gè)分組數(shù)據(jù)之間的數(shù)量比較。
柱狀圖的繪制使用:
plt.bar(x,height,width,bottom=None,*,align='center',data=None,**kwargs)7.4.2柱狀圖[例7-20]繪制簡(jiǎn)單柱狀圖。如果把例子中的plt.bar()改為plt.barh(),其他參數(shù)不變,即可以繪制如右圖的水平柱狀圖。7.4.2柱狀圖[例7-21]柱狀圖頂部添加數(shù)據(jù)說(shuō)明。本例中在柱狀圖頂部添加上具體的數(shù)據(jù)說(shuō)明。7.4.3直方圖
直方圖的繪制依賴(lài)plt.hist(x,bins=bins,color=”b”,histtype=’bar’,label=’label’,rwidth=rwidth)函數(shù),具體各參數(shù)說(shuō)明如下: x:連續(xù)型數(shù)據(jù)的輸入值bins:用于確定柱體的個(gè)數(shù)或是柱體邊緣范圍color:柱體的顏色histtype:柱體類(lèi)型label:圖例內(nèi)容rwidth:柱體寬度[例7-22]繪制簡(jiǎn)單直方圖。7.4.3直方圖[例7-23]繪制堆積直方圖。當(dāng)參數(shù)stacked設(shè)置為False時(shí),也是默認(rèn)狀態(tài),則繪制并排放置的直方圖。7.4.4餅圖
餅圖的繪制依賴(lài)plt.pie(size,explode,labels,autopct,startangle,shadow,color)函數(shù),具體各參數(shù)說(shuō)明如下:size:各部分的百分比;explode:餅片邊緣偏離半徑的百分比,凸出率;labels:每部分餅片的文本標(biāo)簽;autopct:每部分餅片對(duì)應(yīng)數(shù)值的百分比樣式;startangle:第一個(gè)餅片逆時(shí)針旋
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度茶葉茶青種植與加工技術(shù)培訓(xùn)合同4篇
- 2025年度儲(chǔ)煤場(chǎng)地租賃與智能監(jiān)控系統(tǒng)安裝合同3篇
- 2024石材石材石材石材環(huán)保技術(shù)研發(fā)與購(gòu)銷(xiāo)合作協(xié)議3篇
- 專(zhuān)屬2024年全球鉆機(jī)買(mǎi)賣(mài)協(xié)議范本版A版
- 2025年度高科技產(chǎn)業(yè)園區(qū)場(chǎng)地租賃合同范本8篇
- 2025年度茶苗種植與茶葉產(chǎn)業(yè)扶貧合作合同4篇
- 2025年度新能源汽車(chē)零部件貼牌供應(yīng)合同3篇
- 2025年度煤炭資源居間交易合作協(xié)議
- 2025年度美容院美容師培訓(xùn)退款及就業(yè)協(xié)議
- 2025年度路燈照明合同范本
- 細(xì)胞庫(kù)建設(shè)與標(biāo)準(zhǔn)制定-洞察分析
- 2024年國(guó)家公務(wù)員錄用考試公共基礎(chǔ)知識(shí)復(fù)習(xí)題庫(kù)2500題及答案
- DB3309T 98-2023 登步黃金瓜生產(chǎn)技術(shù)規(guī)程
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- DBJ41-T 108-2011 鋼絲網(wǎng)架水泥膨脹珍珠巖夾芯板隔墻應(yīng)用技術(shù)規(guī)程
- 2025年學(xué)長(zhǎng)引領(lǐng)的讀書(shū)會(huì)定期活動(dòng)合同
- 表內(nèi)乘除法口算l練習(xí)題1200道a4打印
- 《EICC培訓(xùn)講義》課件
- 2025年四川省政府直屬事業(yè)單位招聘管理單位筆試遴選500模擬題附帶答案詳解
- 2024年物業(yè)公司服務(wù)質(zhì)量保證合同條款
- 文言文閱讀之理解實(shí)詞含義(講義)-2025年中考語(yǔ)文專(zhuān)項(xiàng)復(fù)習(xí)
評(píng)論
0/150
提交評(píng)論