Python程序設(shè)計(jì) 課件 第10章 Pandas數(shù)據(jù)處理與分析_第1頁
Python程序設(shè)計(jì) 課件 第10章 Pandas數(shù)據(jù)處理與分析_第2頁
Python程序設(shè)計(jì) 課件 第10章 Pandas數(shù)據(jù)處理與分析_第3頁
Python程序設(shè)計(jì) 課件 第10章 Pandas數(shù)據(jù)處理與分析_第4頁
Python程序設(shè)計(jì) 課件 第10章 Pandas數(shù)據(jù)處理與分析_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章Pandas數(shù)據(jù)處理與分析Pandas基本數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)分析的基本流程數(shù)據(jù)的導(dǎo)入與導(dǎo)出數(shù)據(jù)預(yù)處理數(shù)據(jù)分析方法DataFrame的合并與連接Pandas基本數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)分析的基本流程數(shù)據(jù)的導(dǎo)入與導(dǎo)出數(shù)據(jù)預(yù)處理數(shù)據(jù)分析方法DataFrame的合并與連接熟悉Pandas基本數(shù)據(jù)結(jié)構(gòu)熟練使用Pandas讀取和處理各種數(shù)據(jù)源的數(shù)據(jù)學(xué)會對數(shù)據(jù)進(jìn)行清洗掌握數(shù)據(jù)篩選、排序、分組、聚合等基本操作使用Pandas進(jìn)行數(shù)據(jù)合并、連接、拼接等操作熟悉Pandas的時(shí)間序列數(shù)據(jù)處理和分析掌握Pandas常見的數(shù)據(jù)分析方法Pandas基本數(shù)據(jù)結(jié)構(gòu)

Series數(shù)據(jù)結(jié)構(gòu)定義與操作DataFrame數(shù)據(jù)結(jié)構(gòu)定義與操作訪問DataFrame數(shù)據(jù)元素修改與刪除DataFrame數(shù)據(jù)元素DataFrame數(shù)據(jù)元素的排序10.110.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作Python中常用的序列結(jié)構(gòu)pandas是數(shù)據(jù)分析的三大劍客之一,能夠簡單、直觀、快速地處理各種類型的數(shù)據(jù),比如表格數(shù)據(jù)、矩陣數(shù)據(jù)、時(shí)間序列數(shù)據(jù)、統(tǒng)計(jì)數(shù)據(jù)集等。pandas基于numPy構(gòu)建,是進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)挖掘的有效工具。pandas中有兩個(gè)主要的數(shù)據(jù)結(jié)構(gòu):使用pandas庫,必須先執(zhí)行下列導(dǎo)入操作。

importpandasaspd#導(dǎo)入pandas模塊Series:處理帶標(biāo)簽的一維數(shù)組DataFrame:處理帶標(biāo)簽的二維數(shù)組。10.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作1.Series原理Series是Pandas中的基本對象,在numPy的ndarray基礎(chǔ)上進(jìn)行擴(kuò)展。Series支持下標(biāo)存取元素和索引存取元素。每個(gè)Series對象都由兩個(gè)數(shù)組組成,即索引和值。2.index原理index是索引對象,用于保存標(biāo)簽信息。若創(chuàng)建Series對象時(shí)不指定index,pandas將自動創(chuàng)建一個(gè)表示位置下標(biāo)的索引。3.values原理values是保存元素值的數(shù)組。10.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作Series對象由索引(index)和值(values)兩部分組成,索引就是值的標(biāo)簽。默認(rèn)使用正整數(shù)作為每個(gè)值的索引(從0開始,表示數(shù)據(jù)的位置編號);也可以為索引定義一個(gè)標(biāo)識符(稱為索引名或標(biāo)簽)。Series支持下標(biāo)存取元素和索引存取元素。每個(gè)Series對象都由兩個(gè)數(shù)組組成,即索引和值。index(索引)element(數(shù)據(jù)元素)011223344556索引位于左邊,數(shù)據(jù)位于右邊10.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作利用Python列表、元組、字典、range對象和一維數(shù)組等可以創(chuàng)建一個(gè)Series對象。語法結(jié)構(gòu):Series(data,index,dtype)data:Series中的數(shù)據(jù)。index:自定義的索引標(biāo)識符。標(biāo)識符的個(gè)數(shù)要與數(shù)據(jù)個(gè)數(shù)相同。dtype:指定數(shù)據(jù)類型。參數(shù)說明:10.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作例【10-1】利用Pandas的Series方法創(chuàng)建Series對象與元素訪問。importpandasaspdser_obj1=pd.Series(data=[185,165,156,175])#直接使用Series對象創(chuàng)建print("自動生成整數(shù)索引的ser_obj1:\n",ser_obj1)ser_obj2=pd.Series(data=[185,165,156,175],index=['Strong','Tommy','Berry','Bill'])#手動設(shè)置Series索引print("手動設(shè)置索引的ser_obj2:\n",ser_obj2)ser_obj3=pd.Series(data=[185,165,156,175],index=['Strong','Tommy','Berry','Bill'],dtype='float',name='height')#強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型為float,并指定列名print(ser_obj3)ser_obj4=pd.Series({'Strong':185,'Tommy':165,'Berry':156,'Bill':175})#利用字典創(chuàng)建對象Series,鍵為索引print("字典創(chuàng)建對象ser_obj4:\n",ser_obj4)print('ser_obj4的索引:\n',ser_obj4.index)print('ser_obj4的值:\n',ser_obj4.values)print('ser_obj1的1位置的元素值:\n',ser_obj1[1])print('ser_obj1的1:3位置的元素值:\n',ser_obj1[1:3])print('ser_obj3中的Tommy的身高:\n',ser_obj3['Tommy'])print('ser_obj2中大于175:\n',ser_obj2[ser_obj2>175])10.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作例【10-2】Series對象數(shù)據(jù)的修改與運(yùn)算。importpandasaspdscorelist=pd.Series([95,69,85],index=['python','database','web'])scorelist['web']=88scorelist['linux']=82 print(scorelist)print(scorelist.max())print(round(scorelist.mean(),1))scorelist=scorelist+5print(scorelist)#修改元素#添加元素#求均值,保留1位小數(shù)#算術(shù)運(yùn)算#查找元素中的最大值10.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作Series對象的索引可以是一個(gè)時(shí)間序列。使用pandas庫中的date_range()函數(shù)可以創(chuàng)建時(shí)間序列對象(Datetimelndex)。

根據(jù)指定的起止時(shí)間,創(chuàng)建時(shí)間序列對象。語法結(jié)構(gòu):date_range(start,end,periods,freq)start,end:時(shí)間序列的起始時(shí)間和終止時(shí)間。periods:時(shí)間序列中包含的數(shù)據(jù)數(shù)量。freq:時(shí)間間隔,默認(rèn)為'D'(天)。間隔可以是'W'(周)、'H'(小時(shí))等。start、end、periods三個(gè)參數(shù)只需要指定其中2個(gè)(三選二)。參數(shù)說明:10.1.1Series數(shù)據(jù)結(jié)構(gòu)定義與操作例【10-3】創(chuàng)建時(shí)間序列對象示例。importpandasaspddate_1=pd.date_range(start='20220204',end='20220206',freq='D')#間隔1天print("間隔一天的時(shí)間序列:\n",date_1)date_2=pd.date_range(start='20220204',end='20220205',freq='6H')#間隔6小時(shí)print("間隔6小時(shí)的時(shí)間序列:\n",date_2)date_3=date=pd.date_range(start='20220204',freq='M',periods=4)#間隔1個(gè)月print("間隔一個(gè)月的時(shí)間序列:\n",date_3)height=[20,25,30,40]ser_height=pd.Series(height,index=date_3)#時(shí)間序列作為索引print("作為生長高度記錄:\n",ser_height)10.1.2DataFrame數(shù)據(jù)結(jié)構(gòu)定義與操作DataFrame是一個(gè)二維表格結(jié)構(gòu),包含index(行索引)、columns(列索引)和values(值)三部分。DataFrame中的一行稱為一條記錄(或樣本),一列稱為一個(gè)字段(或?qū)傩裕ataFrame中的每一列都是一個(gè)Series類型,存儲相同數(shù)據(jù)類型和語義的數(shù)據(jù)。DataFrame中每行的前面和每列的上面都有一個(gè)索引,用來標(biāo)識一行或一列,前者稱為index,后者稱為columns。10.1.2DataFrame數(shù)據(jù)結(jié)構(gòu)定義與操作1.創(chuàng)建DataFrame利用Python字典、嵌套列表和二維數(shù)組等對象可以創(chuàng)建一個(gè)DataFrame對象。也可以通過導(dǎo)入文件的方法創(chuàng)建。本節(jié)主要介紹使用代碼創(chuàng)建DataFrame對象的方法。語法結(jié)構(gòu):DataFrame(data,index,columns,dtype)pandas.DataFrame(data=None,index=None,columns=None,dtype=None)data:表示數(shù)據(jù),可以使ndarray數(shù)組、series對象、列表、字典等。index:表示行標(biāo)簽(索引)。如果沒有傳入索引參數(shù),則默認(rèn)會自動創(chuàng)建一個(gè)從0~N的整數(shù)索引。columns:表示列標(biāo)簽(索引)。如果沒有傳入索引參數(shù),則默認(rèn)會自動創(chuàng)建一個(gè)從0~N的整數(shù)索引。dtype:每一列數(shù)據(jù)的數(shù)據(jù)類型,與Python數(shù)據(jù)類型有所不同,如圖表3-1Pandas數(shù)據(jù)類型與Python數(shù)據(jù)類型的對應(yīng)。參數(shù)說明:10.1.2DataFrame數(shù)據(jù)結(jié)構(gòu)定義與操作1.創(chuàng)建DataFrame例【10-4】importpandasaspdpd.set_option('display.unicode.east_asian_width',True)data=[['Strong',185],['Tommy',165],['Berry',156],['Bill',175]]columns=['姓名','身高']df1=pd.DataFrame(data=data,columns=columns)print(df1)df2=pd.DataFrame({'姓名':['Strong','Tommy','Berry','Bill'],'身高':[185,165,156,175],'班級':'大數(shù)據(jù)2021'})print(df2)#解決數(shù)據(jù)輸出時(shí)列名與#數(shù)據(jù)不對齊的問題#指定列索引#通過字典創(chuàng)建DataFrame#對象#通過二維數(shù)組創(chuàng)建#DataFrame對象利用二維數(shù)組和字典兩種方法創(chuàng)建DataFrame對象。10.1.2DataFrame數(shù)據(jù)結(jié)構(gòu)定義與操作2.查看DataFrame的基本信息例【10-5】df_1=pd.DataFrame(data=data,columns=columns)#DF數(shù)據(jù)的形狀#DF數(shù)據(jù)的行索引#DF數(shù)據(jù)的記錄數(shù)#DF數(shù)據(jù)的行數(shù)DataFrame的相關(guān)基本信息查看。df_1.shapedf_1.indexdf_1.index.sizelen(df_1)df_1.columnsdf_1.columns.sizedf_1.valuestype(df_1)#DF數(shù)據(jù)的數(shù)據(jù)類型#DF數(shù)據(jù)的列數(shù)#DF數(shù)據(jù)的數(shù)據(jù)#DF數(shù)據(jù)的列索引10.1.3訪問DataFrame數(shù)據(jù)元素1.下標(biāo)訪問DataFrame是一個(gè)二維表格結(jié)構(gòu),與二維數(shù)組類似,可以通過下標(biāo)或布爾型索引訪問。語法格式一:DataFrame對象名.loc[行下標(biāo),列下標(biāo)]DataFrame對象名.iloc[行下標(biāo),列下標(biāo)]可以使用索引、標(biāo)簽、切片或列表作為下標(biāo)。iloc表示完全基于位置索引的選擇方式。loc表示完全基于標(biāo)簽名的選擇方式。如果選擇所有行,行下標(biāo)可表示為“:”。如果選擇所有列,列下標(biāo)可表示為“:”,也可以直接省略列下標(biāo)。語法格式二:DataFrame對象名.at[行下標(biāo),列下標(biāo)]DataFrame對象名.iat[行下標(biāo),列下標(biāo)]用于選擇DataFrame中指定位置的一個(gè)值。只能用位置索引或標(biāo)簽作為下標(biāo)。語法格式三:DataFrame對象名[下標(biāo)]用于選擇整行或整列數(shù)據(jù)。下標(biāo)為切片,表示選擇若干行;下標(biāo)為標(biāo)簽或標(biāo)簽列表,表示選擇若干列。10.1.3訪問DataFrame數(shù)據(jù)元素1.下標(biāo)訪問例【10-6】importpandasaspdpd.set_option('display.unicode.east_asian_width',True)data=[['男',185,80],['女',165,60],['女',156,45],['男',175,70]]name=['Strong','Tommy','Berry','Bill']columns=['性別','身高','體重']df=pd.DataFrame(data=data,index=name,columns=columns)print(df.loc[:,['身高','體重']])print(df.iloc[:,[0,2]])print(df.loc[:,'身高':])print(df.iloc[:,:2])#選取'身高'和'體重'兩列數(shù)據(jù)#選取從“身高”到最后一列#選取第1列和第3列使用loc屬性和iloc屬性,讀取指定的列數(shù)據(jù)。#連續(xù)選取從1列開始到第3列,#但不包括第3列10.1.3訪問DataFrame數(shù)據(jù)元素1.下標(biāo)訪問例【10-7】importpandasaspdpd.set_option('display.unicode.east_asian_width',True)data=[['男',185,80],['女',165,60],['女',156,45],['男',175,70]]name=['Strong','Tommy','Berry','Bill']columns=['性別','身高','體重']df=pd.DataFrame(data=data,index=name,columns=columns)print('原數(shù)據(jù):\n',df)print(df.at['Berry','身高'])print(df.iat[2,1])iat[]與.iat[]獲取單個(gè)值。運(yùn)行結(jié)果:原數(shù)據(jù):性別身高體重Strong男18580Tommy女16560Berry女15645Billat和at僅適用于標(biāo)量,因此非常快。較慢的,更通用的功能是iloc和loc。iat和at僅給出單個(gè)值輸出,而iloc和loc可以給出多行輸出。總結(jié)10.1.3訪問DataFrame數(shù)據(jù)元素2.布爾型索引訪問語法格式一:DataFrame對象名.loc[布爾型索引,列下標(biāo)]布爾型索引是指通過一組布爾值(True或False)對DataFrame進(jìn)行取值操作,以選出滿足條件的元素。通常是利用條件運(yùn)算得到一組布爾值,條件表達(dá)式中可以使用關(guān)系運(yùn)算符、邏輯運(yùn)算符以及Pandas提供的條件判斷方法,語法格式二:DataFrame對象名[布爾型索引]10.1.3訪問DataFrame數(shù)據(jù)元素2.布爾型索引訪問Pandas中常用的條件判斷10.1.3訪問DataFrame數(shù)據(jù)元素2.布爾型索引訪問例【10-8】importpandasaspddf=pd.DataFrame(data=[['Strong',185],['Tommy',165],['Berry',156],['Bill',175]],columns=['Name','Height'])print('查看身高(height)超過170:\n',df[df.Height>170])print('查看身高(height)在165和175之間:\n',df[df.Height.between(165,175)])布爾型索引的使用方法。運(yùn)行結(jié)果:查看身高(height)超過170:

NameHeight0Strong1853Bill175查看身高(height)在165和175之間:

NameHeight1Tommy1653Bill17510.1.4修改與刪除DataFrame數(shù)據(jù)元素通過賦值語句,可以直接修改DataFrame中的數(shù)據(jù)或者添加新的數(shù)據(jù)列。若要刪除行或刪除列,可以使用DataFrame對象的drop()方法。語法結(jié)構(gòu):drop(labels,axis,index,columns,inplace)labels:被刪除的行索引或列索引名稱,可傳一個(gè)標(biāo)簽或標(biāo)簽列表axis:0表示行,1表示列,默認(rèn)為0index:被刪除行的行索引。columns:被刪除列的列索引。inplace:布爾型參數(shù)。默認(rèn)inplace=False,表示返回一個(gè)新的DataFrame對象,當(dāng)前DataFrame對象不受影響;inplace=True,表示從當(dāng)前DataFrame對象中直接刪除(即原地刪除,返回空對象None)。參數(shù)說明:10.1.4修改與刪除DataFrame數(shù)據(jù)元素修改與刪除DataFrame數(shù)據(jù)元素示例,DataFrame數(shù)據(jù)如下:importpandasaspdpd.set_option('display.unicode.east_asian_width',True)data=[['男',185,80],['女',165,60],['女',156,45],['男',175,70]]name=['Strong','Tommy','Berry','Bill']columns=['性別','身高','體重']df=pd.DataFrame(data=data,index=name,columns=columns)10.1.4修改與刪除DataFrame數(shù)據(jù)元素修改DataFrame中的數(shù)據(jù)。例【10-9】df.loc['Berry']=['女',165,55]#修改整行數(shù)據(jù)#修改Berry體重為45#修改整列數(shù)據(jù)修改DataFrame對象中的數(shù)據(jù)。#修改Strong身高為156(修改某一處數(shù)據(jù))#修改第3行Berry數(shù)據(jù)(修改某一行的數(shù)據(jù))#所有人的體重減少5(修改某一列的數(shù)據(jù))df.iloc[:,2]=[75,55,40,65]df.loc[:,'身高']=df.loc[:,'身高']+5df.loc['Berry','體重']=45df.iloc[0,1]=156df.iloc[2,:]=['女',160,65]10.1.4修改與刪除DataFrame數(shù)據(jù)元素例【10-10】刪除指定的數(shù)據(jù)信息。drop_columns1=df.drop(['性別'],axis=1,inplace=False)#刪除性別列(刪除某列)#刪除標(biāo)簽為身高的列#刪除columns為體重的列#刪除第1行數(shù)據(jù)#刪除index為Tommy的行數(shù)據(jù)#刪除行標(biāo)簽為Berry的行數(shù)據(jù)df.drop(labels='Berry',axis=0,inplace=True)drop_columns2=df.drop(columns='體重',inplace=False)drop_columns3=df.drop(labels='身高',axis=1,inplace=False)df.drop(['Strong'],inplace=True)df.drop(index='Tommy',inplace=True)刪除DataFrame中的數(shù)據(jù)。10.1.5DataFrame數(shù)據(jù)元素的排序1.按索引排序DataFrame對象既可以按行索引或列索引排序,也可以按數(shù)值排序。使用DataFrame對象的sort_index()方法按行索引或列索引排序。語法結(jié)構(gòu):sort_index(axis,ascending,inplace)axis:排序的軸向。默認(rèn)axis=0,按index排序;axis=1,按columns排序。ascending:排序方式。默認(rèn)ascending=True,按升序排序;ascending=False,按降序排序。inplace:是否為原地排序。默認(rèn)inplace=False,返回新的DataFrame對象。參數(shù)說明:importnumpyasnpimportpandasaspdser_obj=pd.Series(range(10,15),index=[5,3,1,3,2])ser_obj_new1=ser_obj.sort_index()ser_obj_new2=ser_obj.sort_index(ascending=False)df_obj=pd.DataFrame(np.arange(9).reshape(3,3),index=[4,3,5])df_obj_new1=df_obj.sort_index()df_obj_new2=df_obj.sort_index(ascending=False)10.1.5DataFrame數(shù)據(jù)元素的排序1.按索引排序例【10-11】演示如何按索引對Series和DataFrame分別進(jìn)行排序。(部分代碼)#按索引進(jìn)行升序排列#按索引進(jìn)行降序排列#按索引升序排列#按索引降序排列當(dāng)對DataFrame進(jìn)行排序操作時(shí),要注意軸的方向。如果沒有指定axis參數(shù)的值,則默認(rèn)會按照行索引進(jìn)行排序;如果指定axis=1,則會按照列索引進(jìn)行排序??偨Y(jié)10.1.5DataFrame數(shù)據(jù)元素的排序2.按值項(xiàng)排序使用DataFrame對象的sort_values()方法按DataFrame中的數(shù)值排序。語法結(jié)構(gòu):sort_values(by,axis,ascending,inplace,na_position)by:排序依據(jù)。既可以是一項(xiàng)數(shù)據(jù),也可以是一個(gè)列表(表示多級排序)。axis:排序的軸向。默認(rèn)axis=0,縱向排序;axis=1,橫向排序。ascending:排序方式,默認(rèn)ascending=True(升序)。na_position:空值排列的位置。默認(rèn)na_position='last',表示空值排在最后面;na_position='first'表示空值排在最前面。參數(shù)說明:10.1.5DataFrame數(shù)據(jù)元素的排序2.按值項(xiàng)排序importpandasaspdscore=[[89,90,85],[76,98,46],[90,92,64],[78,80,67]]studentlist=['Berry','Jane','Strong','Stone']course=['Python','database','web']df=pd.DataFrame(score,index=studentlist,columns=course)df1=df.sort_index(axis=0,ascending=False)

df2=df.sort_index(axis=1,ascending=True)df3=df.sort_values(by='Python',axis=0)df4=df.sort_values(by='Stone',axis=1)例【10-12】按值項(xiàng)排序應(yīng)用示例。(部分代碼)#按行標(biāo)簽降序排序#按Stone所在行排序#按列標(biāo)簽升序排序#按Python列排序數(shù)據(jù)分析的基本流程10.210.2數(shù)據(jù)分析的基本流程什么是數(shù)據(jù)分析?基本流程是什么?10.2數(shù)據(jù)分析的基本流程數(shù)據(jù)分析是指使用適當(dāng)?shù)慕y(tǒng)計(jì)分析方法(如聚類分析、相關(guān)分析等)對收集來的大量數(shù)據(jù)進(jìn)行分析,從中提取有用信息和形成結(jié)論,并加以詳細(xì)研究和概括總結(jié)的過程。數(shù)據(jù)分析的目的在于,將隱藏在一大批看似雜亂無章的數(shù)據(jù)信息中的有用數(shù)據(jù)集提煉出來,以找出所研究對象的內(nèi)在規(guī)律,其實(shí)質(zhì)就是利用數(shù)據(jù)分析的結(jié)果來解決遇到的問題。根據(jù)解決問題的類型來說,數(shù)據(jù)分析可以概況為分析現(xiàn)狀、發(fā)現(xiàn)原因、預(yù)測未來發(fā)展趨勢三類。用圖表來展示分析結(jié)果,通常通過圖表直觀地表達(dá)數(shù)據(jù)之間的關(guān)系,有效地展示數(shù)據(jù)分析的結(jié)果。對數(shù)據(jù)進(jìn)行探索與分析,采用適當(dāng)?shù)姆治龇椒肮ぞ邔︻A(yù)處理過的數(shù)據(jù)進(jìn)行分析,提取對解決問題有價(jià)值、有意義的信息,形成有效結(jié)論。收集與整合數(shù)據(jù),按照確定的分析框架收集相關(guān)數(shù)據(jù),可以從數(shù)據(jù)庫、不同格式的數(shù)據(jù)文件以及網(wǎng)絡(luò)中采集數(shù)據(jù)。數(shù)據(jù)進(jìn)行清洗、加工和整理,包括數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)抽取、數(shù)據(jù)計(jì)算等處理方法,目的是提高數(shù)據(jù)質(zhì)量,滿足數(shù)據(jù)分析的要求,提升數(shù)據(jù)分析的效果。10.2數(shù)據(jù)分析的基本流程明確目的和思路數(shù)據(jù)收集數(shù)據(jù)處理數(shù)據(jù)分析數(shù)據(jù)展現(xiàn)撰寫報(bào)告要解決什么業(yè)務(wù)問題?以解決業(yè)務(wù)問題為中心,明確分析目的和思路,搭建分析框架。詮釋數(shù)據(jù)分析的起因、過程、結(jié)論和建議,數(shù)據(jù)分析報(bào)告是對分析過程和結(jié)果的總結(jié)和呈現(xiàn),可以供決策者參考。數(shù)據(jù)的導(dǎo)入與導(dǎo)出數(shù)據(jù)的導(dǎo)入數(shù)據(jù)的導(dǎo)出10.310.3.1數(shù)據(jù)的導(dǎo)入1.導(dǎo)入數(shù)據(jù)集利用Pandas進(jìn)行數(shù)據(jù)分析,首先需要將外部數(shù)據(jù)源導(dǎo)入DataFrame數(shù)據(jù)。數(shù)據(jù)處理和數(shù)據(jù)分析的中間結(jié)果或最終結(jié)果也需要保存到文件中。(1)使用read_excel()函數(shù),導(dǎo)入Excel數(shù)據(jù)文件,讀入Excel文件中的數(shù)據(jù)并返回一個(gè)DataFrame對象。read_excel(io,sheet_name,header,names,index_col,usecols)io:要讀取的Excel文件,可以是字符串形式的文件路徑。sheet_name:要讀取的工作表,可以用序號或工作表名稱表示。默認(rèn)sheet_name=0,表示讀取第一張工作表。header:工作表的哪一行作為DataFrame對象的列名。默認(rèn)header=0,表示工作表的第一行(表頭行)作為列名;如果工作表沒有表頭行,則必須顯式指定header=None。names:DataFrame對象的列名,如果工作表沒有表頭行,則可以使用names設(shè)置列名;如果工作表有表頭行,則可以使用names替換原來的列名。index_col:使用工作表的哪一列或哪幾列(列序號表示)作為DataFrame的行索引(工作表的列序號從0開始)。usecols:讀取Excel工作表的哪幾列,默認(rèn)讀取工作表中的所有列。參數(shù)說明:語法結(jié)構(gòu):10.3.1數(shù)據(jù)的導(dǎo)入1.導(dǎo)入數(shù)據(jù)集(2)使用read_csv()函數(shù),導(dǎo)入CSV格式的數(shù)據(jù)文件,讀入csv格式的文件中的數(shù)據(jù)并返回一個(gè)DataFrame對象。read_csv(filepath_or_buffer,sep,header,names,index_col,usecols)filepath_or_buffer:要讀取的數(shù)據(jù)文件。sep:數(shù)據(jù)項(xiàng)之間的分隔符。默認(rèn)是逗號','。其他參數(shù)的含義與read_excel()函數(shù)的相同。參數(shù)說明:語法結(jié)構(gòu):10.3.1數(shù)據(jù)的導(dǎo)入1.導(dǎo)入數(shù)據(jù)集(3)使用read_table()函數(shù),導(dǎo)入通用分隔符格式的數(shù)據(jù)文件。讀入通用分隔符格式的文件中的數(shù)據(jù)并返回一個(gè)DataFrame對象。read_table(filepath_or_buffer,sep,header,names,index_col,usecols)filepath_or_buffer:要讀取的數(shù)據(jù)文件。sep:數(shù)據(jù)項(xiàng)之間的分隔符。默認(rèn)是Tab鍵。其他參數(shù)的含義與read_csv()函數(shù)的相同。參數(shù)說明:語法結(jié)構(gòu):10.3.1數(shù)據(jù)的導(dǎo)入1.導(dǎo)入數(shù)據(jù)集(4)使用read_sql()函數(shù)導(dǎo)入數(shù)據(jù)庫表。讀入SQL查詢結(jié)果集或數(shù)據(jù)庫表中的數(shù)據(jù)并返回一個(gè)DataFrame對象。read_sql(sql,con,index_col)sql:SQL查詢語句或數(shù)據(jù)庫表名。con:SQLAlchemy連接對象。index_col:使用數(shù)據(jù)庫表的哪一列或哪幾列作為DataFrame的行索引。read_sql()函數(shù)中的其他參數(shù)選項(xiàng)及其作用可查閱相關(guān)幫助文檔。參數(shù)說明:語法結(jié)構(gòu):將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入DataFrame需要先建立與數(shù)據(jù)庫的連接。Pandas提供了sqlalchemy方式與MySOL,PostgresOL,Oracle,MSSQLServer,SQLite等主流數(shù)據(jù)庫建立連接。建立連接后,即可使用read_sql()函數(shù)導(dǎo)入數(shù)據(jù)庫中的數(shù)據(jù)。說明10.3.1數(shù)據(jù)的導(dǎo)入2.查看數(shù)據(jù)集導(dǎo)入數(shù)據(jù)集后,可以使用DataFrame對象的相關(guān)屬性和方法了解數(shù)據(jù)集的基本信息、考查數(shù)據(jù)分布情況等。10.3.1數(shù)據(jù)的導(dǎo)入2.查看數(shù)據(jù)集Pandas中的數(shù)據(jù)類型包括數(shù)字(整型、浮點(diǎn)型)、字符串(文本,或文本和數(shù)字的混合)、布爾型(True或False)、日期時(shí)間型、時(shí)間差(兩個(gè)日期時(shí)間的差值)、分類(有限的文本值列表)等。不同類型的字段可以存儲不同的數(shù)據(jù)及執(zhí)行不同的操作。Pandas數(shù)據(jù)類型Python數(shù)據(jù)類型含義objectstr字符串int64int整型float64float浮點(diǎn)型boolbool布爾型datetime64datetime64[ns]日期時(shí)間型timedelta[ns]NA時(shí)間差categoryNA分類10.3.1數(shù)據(jù)的導(dǎo)入2.查看數(shù)據(jù)集例【10-14】importpandasaspddf_order=pd.read_csv(r'./data/Online_Retail_Data.csv')df_order.shapedf_order.head(3)df_()df_order.describe()df_order['Country'].describe()#導(dǎo)入所有列#所有數(shù)值型字段的描述信息#前3條記錄查看“Online_Retail_Data.csv”的DataFrame基本信息。#“Country”字段的描述信息10.3.2數(shù)據(jù)的導(dǎo)出在數(shù)據(jù)處理和分析過程中,常常需要保存處理的中間結(jié)果或最終結(jié)果,可以將DataFrame對象導(dǎo)出為Excel、csv、txt、json、數(shù)據(jù)庫等多種格式的文件。(1)使用to_excel()方法,導(dǎo)出Excel文件。將DataFrame中的數(shù)據(jù)寫入Excel文件的工作表。to_excel(excel_writer,sheet_name,columns,header,index)excel_writer:要寫入的Excel文件。sheet_name:要寫入的工作表。默認(rèn)是“Sheetl”工作表。columns:Excel工作表的列名。默認(rèn)是DataFrame對象的列名。header:指定Excel工作表是否需要表頭。默認(rèn)header=True。index:指定是否將DataFrame對象的行索引寫入Excel工作表。默認(rèn)index=True。to_excel()方法中的其他參數(shù)選項(xiàng)及其作用可查閱相關(guān)幫助文檔。參數(shù)說明:語法結(jié)構(gòu):10.3.2數(shù)據(jù)的導(dǎo)出在數(shù)據(jù)處理和分析過程中,常常需要保存處理的中間結(jié)果或最終結(jié)果,可以將DataFrame對象導(dǎo)出為Excel、csv、txt、json、數(shù)據(jù)庫等多種格式的文件。(2)使用to_csv()方法,導(dǎo)出csv格式的文件。將DataFrame中的數(shù)據(jù)寫入csv格式的文件。to_csv(path_or_buf,sep,columns,header,index)path_or_buf:要寫入的csv格式的文件。sep:數(shù)據(jù)項(xiàng)之間的分隔符。其他參數(shù)的含義與to_excel()方法的相同。to_csv()方法中的其他參數(shù)選項(xiàng)及其作用可查閱相關(guān)幫助文檔。參數(shù)說明:語法結(jié)構(gòu):10.3.2數(shù)據(jù)的導(dǎo)出例【10-15】importpandasaspd#1.生成數(shù)據(jù),字典形式data={'sno':['20220102','20220201'],'sname':['Marry','Strong'],'ssex':['F','M'],'sage':[18,19]}#2.將數(shù)據(jù)轉(zhuǎn)為DataFrame形式df_stuinfo=pd.DataFrame(data)#3.數(shù)據(jù)導(dǎo)出為csv文件,不帶行索引df_stuinfo.to_csv(r'./stuinfo.csv',encoding='gbk',index=False)將DataFrame中的數(shù)據(jù)保存到csv格式的文件中。數(shù)據(jù)預(yù)處理缺失值處理異常值處理重復(fù)值處理其它處理10.410.4數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理包括數(shù)據(jù)清洗和數(shù)據(jù)加工。數(shù)據(jù)清洗主要是發(fā)現(xiàn)和處理原始數(shù)據(jù)中存在的缺失值、重復(fù)值和異常值,以及無意義的數(shù)據(jù),使原數(shù)據(jù)具有完整性、唯一性、權(quán)威性、合法性、一致性等特點(diǎn)。數(shù)據(jù)加工是對原始數(shù)據(jù)的變換,通過對數(shù)據(jù)進(jìn)行計(jì)算、轉(zhuǎn)換、分類、重組等發(fā)現(xiàn)更有價(jià)值的數(shù)據(jù)形式。10.4.1缺失值處理1.查找缺失值缺失值即空值(Null),在pandas中用NaN表示。由于人為失誤或機(jī)器故障,可能會導(dǎo)致某些數(shù)據(jù)丟失。從統(tǒng)計(jì)上說,缺失的數(shù)據(jù)可能會產(chǎn)生有偏估計(jì)。DataFrame對象的isnull()方法判斷是否有缺失值。例【10-16】importpandasaspdpd.set_option('display.unicode.east_asian_width',True)df=pd.read_excel(r'./電器銷售數(shù)據(jù)(有缺失值).xlsx',sheet_name='Sheet1')print(df.isnull())通過isnull()函數(shù)來檢查“電器銷售數(shù)據(jù)(有缺失值).xlsx”缺失值或空值。使用isnull方法,缺失值返回True;非缺失值返回False10.4.1缺失值處理2.處理缺失值當(dāng)樣本數(shù)據(jù)量很大時(shí),可以忽略缺失值,即不對缺失值做任何處理。刪除缺失值是指刪除包含缺失值的整行或整列數(shù)據(jù),如果樣本數(shù)據(jù)充足,則可以采用這種處理方式。在實(shí)際應(yīng)用中,還可以采用填充缺失值的處理方式,例如使用經(jīng)驗(yàn)值、均值、中位數(shù)、眾數(shù)、機(jī)器學(xué)習(xí)的預(yù)測結(jié)果或者其他業(yè)務(wù)數(shù)據(jù)集中的數(shù)據(jù)填充缺失值。處理缺失數(shù)據(jù)一般有3種方法:忽略缺失值、刪除缺失值、填充缺失值10.4.1缺失值處理2.處理缺失值(1)使用DataFrame對象的dropna()方法刪除缺失值,刪除空值所在的行或列。dropna(axis,how,thresh,subset,inplace)axis:刪除操作的軸向。默認(rèn)axis=0,表示刪除記錄;axis=1,表示刪除字段。how:根據(jù)空值數(shù)量執(zhí)行刪除操作??梢栽O(shè)置為'any'(默認(rèn))或'all'。inplace:是否原地刪除。默認(rèn)inplace=False,表示返回一個(gè)新的DataFrame對象;inplace=True,表示原地執(zhí)行刪除操作。參數(shù)說明:語法結(jié)構(gòu):10.4.1缺失值處理2.處理缺失值例【10-17】importpandasaspdpd.set_option('display.unicode.east_asian_width',True)df=pd.read_excel(r'./電器銷售數(shù)據(jù)(有缺失值).xlsx',sheet_name='Sheet1')print(df)print(df.dropna())刪除“電器銷售數(shù)據(jù)(有缺失值).xlsx”中缺失值。#刪除缺失值10.4.1缺失值處理2.處理缺失值(2)使用賦值操作或DataFrame對象的fillna()方法填充缺失值。fillna(value,method,axis,inplace,limit)value:用于填充的值,可以是標(biāo)量或字典、Series、DataFrame類型的數(shù)據(jù)。method:填充方式。默認(rèn),使用value值填充。Method=‘pad’或method=‘ffill’表示使用前一個(gè)有效值填充缺失值;method=‘backfill,或method=‘bfill,表示使用缺失值后的第一個(gè)有效值填充前面的所有連續(xù)缺失值。axis:填充操作的軸向。inplace:是否原地操作。默認(rèn)inplace=False,返回一個(gè)新的DataFrame對象。limit:如果設(shè)置了參數(shù)method,則指定最多填充多少個(gè)連續(xù)的缺失值。參數(shù)說明:語法結(jié)構(gòu):10.4.1缺失值處理2.處理缺失值例【10-18】importpandasaspdpd.set_option('display.unicode.east_asian_width',True)df=pd.read_excel(r'./電器銷售數(shù)據(jù)(有缺失值).xlsx',sheet_name='Sheet1')print(df)print(df.fillna(0))用0填充“電器銷售數(shù)據(jù)(有缺失值).xlsx”中缺失值。#用0填充缺失值#填充不一樣的內(nèi)容df.fillna({'北京總公司':0,'廣州分公司':1})10.4.2異常值處理1.查找異常值異常值是指樣本中的個(gè)別值,其數(shù)值明顯偏離其余的觀測值。異常值也稱離群點(diǎn),異常值的分析也稱為離群點(diǎn)的分析。異常值的查找主要有以下三種方法:根據(jù)給定的數(shù)據(jù)范圍進(jìn)行判斷,不在范圍內(nèi)的數(shù)據(jù)視為異常值。該方法比較簡單。均方差,均方差即標(biāo)準(zhǔn)差(記作σ)。箱形圖,箱形圖是顯示一組數(shù)據(jù)分散情況資料的統(tǒng)計(jì)圖。任何高于上限或低于下限的數(shù)據(jù)都可以認(rèn)為是異常值。10.4.2異常值處理2.處理異常值檢測出異常值后,通常會采用如下四種方式處理這些異常值:直接將含有異常值的記錄刪除。用具體的值來進(jìn)行替換,可用前后兩個(gè)觀測值的平均值修正該異常值。不處理,直接在具有異常值的數(shù)據(jù)集上進(jìn)行統(tǒng)計(jì)分析。視為缺失值,利用缺失值的處理方法修正該異常值。10.4.2異常值處理2.處理異常值replace(to_replace=None,value=None,inplace=False,limit=None,regex=False,method='pad')to_replace:表示查找被替換值的方式。value:用來替換任何匹配to_replace的值,默認(rèn)值None。limit:表示前向或后向填充的最大尺寸間隙。regex:接收布爾值或與to_replace相同的類型,默認(rèn)為False,表示是否將to_replace和value解釋為正則表達(dá)式。method:替換時(shí)使用的方法,pad/ffill表示向前填充,bfill表示向后填充。參數(shù)說明:語法結(jié)構(gòu):使用Pandas中replace()方法替換異常值。10.4.2異常值處理2.處理異常值例【10-19】importpandasaspddf=pd.DataFrame({'姓名':['申凡','石英','史伯','王駿'],'成績':[98,85,765,88]})new_df=df.replace(to_replace=765,value=76.5)print(new_df)利用replace()方法替換某學(xué)生成績的異常值。運(yùn)行結(jié)果:姓名成績0申凡98.01石英85.02史伯76.53王駿88.010.4.3重復(fù)值處理1.查找重復(fù)值重復(fù)值是指不同記錄在同一個(gè)字段上有相同的取值。使用DataFrame對象的duplicated()方法可以檢測重復(fù)值,按照指定的方式判斷數(shù)據(jù)集中是否存在相同的記錄,結(jié)果返回布爾值。duplicated(subset,keep)subset:根據(jù)哪些列來判斷存在重復(fù)的記錄。默認(rèn),所有字段值都相同的記錄為重復(fù)記錄。keep:如何標(biāo)記重復(fù)值。默認(rèn)keep='first',將除第一次出現(xiàn)的重復(fù)數(shù)據(jù)標(biāo)記為True;keep='last',將除最后一次出現(xiàn)的重復(fù)數(shù)據(jù)標(biāo)記為True;keep=False,將所有重復(fù)數(shù)據(jù)都標(biāo)記為True。參數(shù)說明:語法結(jié)構(gòu):10.4.3重復(fù)值處理2.處理重復(fù)值對于不需要的重復(fù)記錄,可以使用DataFrame對象的drop_duplicates()方法將其刪除。drop_duplicates(subset=None,keep='first',inplace=False,ignore_index=False)subset:默認(rèn)為None,去除重復(fù)項(xiàng)時(shí)要考慮的標(biāo)簽,當(dāng)subset=None時(shí)所有標(biāo)簽都相同才認(rèn)為是重復(fù)項(xiàng)keep決定要保留的重復(fù)記錄??梢匀〉闹涤衶‘first’,‘last’,False}inplace:bool,默認(rèn)為Falseignore_index:bool,默認(rèn)為False參數(shù)說明:語法結(jié)構(gòu):10.4.3重復(fù)值處理2.處理重復(fù)值例【10-20】importpandasaspdstudent_info=pd.DataFrame({'id':[1,2,3,4,4,5],'name':['申凡','石英','史伯','王駿','王駿','朱元'],'age':[18,18,19,38,38,16],'height':[160,160,185,175,175,178],'gender':['女','女','男','男','男','男']})print(student_info.duplicated())print(student_info.drop_duplicates())構(gòu)建一個(gè)學(xué)生信息的DataFrame對象,判斷是否有重復(fù),并將重復(fù)數(shù)據(jù)刪除。#判斷是否有重復(fù)#刪除重復(fù)數(shù)據(jù)10.4.4其它處理1.數(shù)據(jù)類型轉(zhuǎn)換根據(jù)數(shù)據(jù)分析的結(jié)果對缺失值、異常值和重復(fù)值進(jìn)行處理后,可能會遇到數(shù)據(jù)類型不一致的問題。針對這種問題,可以在創(chuàng)建Pandas對象時(shí)明確指定數(shù)據(jù)的類型,也可以使用astype()方法和to_numberic()函數(shù)進(jìn)行轉(zhuǎn)換。astype(dtype,copy=True,errors='raise',**kwargs)Dtype:表示數(shù)據(jù)的類型。Copy:是否建立副本,默認(rèn)為True。errors:錯誤采取的處理方式,可以取值為raise或ignore,默認(rèn)為raise。其中,raise表示允許引發(fā)異常,ignore表示抑制異常。參數(shù)說明:通過astype()方法可以強(qiáng)制轉(zhuǎn)換數(shù)據(jù)的類型,語法結(jié)構(gòu):10.4.4其它處理1.數(shù)據(jù)類型轉(zhuǎn)換例【10-21】importpandasaspddf=pd.DataFrame({'姓名':['申凡','石英','史伯','王駿'],'成績':[98,85,76.5,88]})print(df['成績'].astype(dtype='int'))通過astype()方法來強(qiáng)轉(zhuǎn)數(shù)據(jù)的類型。astype()方法雖然可以轉(zhuǎn)換數(shù)據(jù)的類型,但是它存在著一些局限性,只要待轉(zhuǎn)換的數(shù)據(jù)中存在數(shù)字以外的字符,在使用astype()方法進(jìn)行類型轉(zhuǎn)換時(shí)就會出現(xiàn)錯誤。說明10.4.4其它處理1.數(shù)據(jù)類型轉(zhuǎn)換pandas.to_numeric(arg,errors='raise',downcast=None)arg:表示要轉(zhuǎn)換的數(shù)據(jù),可以是list、tuple、Series。errors:錯誤采取的處理方式。參數(shù)說明:to_numeric()函數(shù)可以將傳入的參數(shù)轉(zhuǎn)換為數(shù)值類型,語法結(jié)構(gòu):語法結(jié)構(gòu):10.4.4其它處理1.數(shù)據(jù)類型轉(zhuǎn)換例【10-22】importpandasaspddf=pd.DataFrame({'姓名':['申凡','石英','史伯','王駿'],'成績':['98','85','76.5','88']})print(df['成績'])#轉(zhuǎn)換object類型為float類型print(pd.to_numeric(df['成績'],errors='raise'))將只包含數(shù)字的字符串轉(zhuǎn)換為數(shù)字類型。to_numeric()函數(shù)是不能直接操作DataFrame對象的。說明10.4.4其它處理2.字段拆分與抽取(1)字段抽取字段抽取是指從一個(gè)字段中提取部分信息,并構(gòu)成一個(gè)新字段。字段截取方法:slice(start,stop)importpandasaspddf=pd.read_csv(r'./telinfo.csv')df['tel']=df['tel'].astype(str)bands=df['tel'].str.slice(0,3)areas=df['tel'].str.slice(3,7)nums=df['tel'].str.slice(7,11)#利用astype()先轉(zhuǎn)換為字符型#運(yùn)營商##地區(qū)#號碼段例【10-23】利用slice()方法抽取字段數(shù)據(jù),將手機(jī)號碼分開為運(yùn)營商,地區(qū)和號碼段。10.4.4其它處理1.數(shù)據(jù)類型轉(zhuǎn)換sep:用于分割的字符串n:分割為多少列(不分割n=0,分割為兩列n=1,以此類推)expand:是否展開為數(shù)據(jù)框,默認(rèn)為False,一般都設(shè)置為True參數(shù)說明:(2)字段拆分字段拆分是指將一個(gè)字段分解為多個(gè)字段,類似于excel中的分列功能。字段分割方法:split(sep,n,expand=False)返回值:①如果expand為True,則返回DataFrame②如果expand為False,則返回Series10.4.4其它處理2.字段拆分與抽?。?)字段拆分importpandasaspddf=pd.read_csv(r'./brandnameinfo.csv')new_df=df['name'].str.split('',1,True)new_df.columns=['band','name']print(new_df)#分割為兩列例【10-24】將name列拆分為brand和name兩列。數(shù)據(jù)分析方法基本統(tǒng)計(jì)分析分組分析分布分析交叉分析結(jié)構(gòu)分析相關(guān)分析10.510.5.1基本統(tǒng)計(jì)分析數(shù)據(jù)分析方法是以目的為導(dǎo)向的,通過目的選擇數(shù)據(jù)分析的方法?;窘y(tǒng)計(jì)分析又叫描述性統(tǒng)計(jì)分析,是指運(yùn)用制表和分類,圖形以及計(jì)算概括性數(shù)據(jù)來描述數(shù)據(jù)特征的各項(xiàng)活動,主要包括數(shù)據(jù)的頻數(shù)分析、集中趨勢分析、離散程度分析、分布以及一些基本的統(tǒng)計(jì)圖形。10.5.1基本統(tǒng)計(jì)分析describe(percentiles=None,include=None,exclude=None)percentiles:輸出中包含的百分?jǐn)?shù),位于[0,1]之間。如果不設(shè)置該參數(shù),則默認(rèn)為[0.25,0.5,0.75],返回25%,50%,75%分位數(shù)。include,exclude:指定返回結(jié)果的形式。參數(shù)說明:describe()方法的語法格式如下:利用DataFrame對象的describe()方法可以查看DataFrame中各個(gè)數(shù)值型字段的最小值、最值、均值、標(biāo)準(zhǔn)差等統(tǒng)計(jì)信息。10.5.1基本統(tǒng)計(jì)分析importpandasaspddf=pd.read_excel(r‘./大數(shù)據(jù)211班成績表.xlsx').head(10)df_new=df.iloc[:,0:6]pd.set_option('display.unicode.ambiguous_as_wide',True)pd.set_option('display.unicode.east_asian_width',True)df_obj=df_new.describe()print(df_obj)#解決數(shù)據(jù)輸出時(shí)#列名不對齊的問題例【10-25】取“./大數(shù)據(jù)211班成績表.xlsx”的10位同學(xué)四門課成績,進(jìn)行統(tǒng)計(jì)描述。10.5.2分組分析groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False,**kwargs)by:用于確定進(jìn)行分組的依據(jù)。axis:表示分組軸的方向,可以為0(表示按行)或1(表示按列),默認(rèn)為0。level:如果某個(gè)軸是一個(gè)Multilndex對象(索引層次結(jié)構(gòu)),則會按特定級別或多個(gè)級別分組。as_index:表示聚合后的數(shù)據(jù)是否以組標(biāo)簽作為索引的DataFrame對象輸出,接收布爾值,默認(rèn)為True。sort:表示是否對分組標(biāo)簽進(jìn)行排序,接收布爾值,默認(rèn)為True。參數(shù)說明:在Pandas中,groupby函數(shù)用于將數(shù)據(jù)集按照某些標(biāo)準(zhǔn)(按照一列或多列)劃分成若干個(gè)組一般與計(jì)算函數(shù)結(jié)合使用,實(shí)現(xiàn)數(shù)據(jù)的分組統(tǒng)計(jì),語法格式如下:分組分析是指根據(jù)分組字段將分析對象劃分成不同的部分,以對比分析各組之間差異性的一種分析方法。常用的統(tǒng)計(jì)指標(biāo)有:計(jì)數(shù)、求和、平均值。10.5.2分組分析1.按照一列(列名)分組統(tǒng)計(jì)在Pandas對象中,如果它的某一列數(shù)據(jù)滿足不同的劃分標(biāo)準(zhǔn),則可以將該列當(dāng)做分組鍵來拆分?jǐn)?shù)據(jù)集。例【10-26】讀取“./電器銷售數(shù)據(jù).xlsx”數(shù)據(jù),按照“商品類別”分組統(tǒng)計(jì)銷量和銷售額。(部分代碼)pd.set_option('display.max_columns',100)#設(shè)置數(shù)據(jù)顯示列數(shù)#解決數(shù)據(jù)輸出時(shí)#列名不對齊問題#設(shè)置數(shù)據(jù)顯示寬度#抽取數(shù)據(jù)#分組統(tǒng)計(jì)求和print(df_new.groupby(by=['商品類別']).sum())pd.set_option('display.width',1000)pd.set_option('display.unicode.east_asian_width',True)df=pd.read_excel(r'./電器銷售數(shù)據(jù).xlsx',sheet_name='Sheet1')df_new=df[['商品類別','銷量','銷售額']]10.5.2分組分析2.按照多列分組統(tǒng)計(jì)分組鍵還可以是長度和DataFrame行數(shù)相同的列表或元組,相當(dāng)于將列表或元組看作DataFrame的一列,然后將其分組。例【10-27】讀取“./電器銷售數(shù)據(jù).xlsx”數(shù)據(jù),按照“銷售渠道”“商品類別”(一級分類、二級分類)分組統(tǒng)計(jì)銷量和銷售額。(部分代碼)#抽取數(shù)據(jù)#分組統(tǒng)計(jì)求和print(df_new.groupby(by=['銷售渠道','商品類別']).sum())df_new=df[['銷售渠道','商品類別','銷量','銷售額']]10.5.2分組分析3.分組并按照指定列進(jìn)行數(shù)據(jù)計(jì)算對上述示例按照“商品類別”(二級分類)進(jìn)行匯總,關(guān)鍵代碼如下。#分組統(tǒng)計(jì)求和df_new.groupby('商品類別')['銷量'].sum()10.5.2分組分析4.對分組數(shù)據(jù)進(jìn)行迭代處理通過for循環(huán)對分組統(tǒng)計(jì)數(shù)據(jù)進(jìn)行迭代(遍歷分組數(shù)據(jù))。按照“銷售渠道”(一級分類)分組,并輸出每一類商品的銷量和銷售額,關(guān)鍵代碼如下:forsource,typeindf_new.groupby('銷售渠道'):print(source)print(type)10.5.3分布分析分布分析是指根據(jù)分析的目的,將數(shù)據(jù)(定量數(shù)據(jù))進(jìn)行等距或不等距的分組,研究各組分布規(guī)律的一種分析方法。例【10-28】利用分布分析方法,對成績進(jìn)行分段分析。df['總成績']=df.Python程序設(shè)計(jì)+df.數(shù)據(jù)庫+df.數(shù)據(jù)結(jié)構(gòu)+df.數(shù)據(jù)處理+df.數(shù)據(jù)可視化+df.軍訓(xùn)+df.體育#計(jì)算每個(gè)學(xué)生的總成績#給三段數(shù)據(jù)貼標(biāo)簽#將總成績離散化,根#據(jù)四分位數(shù)分為四段#總分層bins=[min(df['總成績'])-1,498,568,595,max(df['總成績'])+1]labels=['498及其以下','498到568','568到595','595及其以上']df['總分層']=pd.cut(df.總成績,bins,labels=labels)10.5.4交叉分析pivot_table(values,index,columns,aggfunc,fill_value)by:用于確定進(jìn)行分組的依據(jù)。Values:數(shù)據(jù)透視表中的值。Index:數(shù)據(jù)透視表中的行。Columns:數(shù)據(jù)透視表中的列。aggfunc:統(tǒng)計(jì)函數(shù)。fill_value:NA值的統(tǒng)一替換。參數(shù)說明:數(shù)據(jù)交叉分析函數(shù)pivot_table語法格式如下:交叉分析通常用于分析兩個(gè)或兩個(gè)以上分組變量之間的關(guān)系,以交叉表形式進(jìn)行變量間關(guān)系的對比分析。一般分為定量、定量分組交叉;定量、定性分組交叉;定性、定型分組交叉。10.5.4交叉分析分布分析是指根據(jù)分析的目的,將數(shù)據(jù)(定量數(shù)據(jù))進(jìn)行等距或不等距的分組,研究各組分布規(guī)律的一種分析方法。例【10-29】利用pivot_table()方法制作數(shù)據(jù)透視表,分析每周各商品的訂購總金額。df=pd.read_excel(r'./order.xlsx')df1=df.pivot_table(values='金額',index='周次',columns='商品名稱',aggfunc='sum',margins=True)10.5.5結(jié)構(gòu)分析結(jié)構(gòu)分析是在分組以及交叉的基礎(chǔ)上,計(jì)算各組成部分所占的的比重進(jìn)而分析總體的內(nèi)部特征的一種分析方法。這個(gè)分組主要是指定性分組,定性分組一般看結(jié)構(gòu),它的重點(diǎn)在于占總體的比重。10.5.6相關(guān)分析相關(guān)分析研究現(xiàn)象之間是否存在某種依存關(guān)系,并對具體有依存關(guān)系的現(xiàn)象探討其相關(guān)方向以及相關(guān)程度,是研究隨機(jī)變量之間的相關(guān)關(guān)系的一種統(tǒng)計(jì)方法。為了更加準(zhǔn)確地描述變量之間的線性相關(guān)程度,通過計(jì)算相關(guān)系數(shù)來進(jìn)行相關(guān)分析,在二元變量的相關(guān)分析過程中,比較常用的有Pearson相關(guān)系數(shù)、Spearman秩相關(guān)系數(shù)和判定系數(shù)。相關(guān)系數(shù):可以用來描述定量變量之間的關(guān)系。關(guān)系數(shù)|r|取值范圍相關(guān)程度0≤|r|<0.3低度相關(guān)0.3≤|r|<0.8中度相關(guān)0.8≤|r|≤1高度相關(guān)10.5.6相關(guān)分析DataFrame.corr()Series.corr(other)相關(guān)分析函數(shù)如下:如果由DataFrame調(diào)用corr方法,那么將會計(jì)算每列兩兩之間的相似度。如果由序列調(diào)用corr方法,那么只計(jì)算該序列與傳入的序列之間的相關(guān)度。返回值:DataFrame調(diào)用,返回DataFrame;Series調(diào)用,返回一個(gè)數(shù)值型,大小為相關(guān)度。#畝產(chǎn)量(公斤)”和“年降雨量#(毫米)”之間相關(guān)分析df['畝產(chǎn)量(公斤)'].corr(df['年降雨量(毫米)'])DataFrame的合并與連接DataFrame的合并DataFrame的連接10.610.6.1DataFrame的連接concat(objs,axis,ignore_index)objs:要合并的對象,是包含多個(gè)Series或DataFrame對象的序列。axis:沿哪個(gè)軸合并。默認(rèn)axis=0,表示合并記錄;axis=1,表示合并字段。ignore_index:是否忽略原索引,按新的DataFrame重新組織索引。默認(rèn)為False。concat()函數(shù)中的其他參

溫馨提示

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

評論

0/150

提交評論