Python數(shù)據(jù)分析與可視化(第2版) 課件第4章 利用pandas進行數(shù)據(jù)分析_第1頁
Python數(shù)據(jù)分析與可視化(第2版) 課件第4章 利用pandas進行數(shù)據(jù)分析_第2頁
Python數(shù)據(jù)分析與可視化(第2版) 課件第4章 利用pandas進行數(shù)據(jù)分析_第3頁
Python數(shù)據(jù)分析與可視化(第2版) 課件第4章 利用pandas進行數(shù)據(jù)分析_第4頁
Python數(shù)據(jù)分析與可視化(第2版) 課件第4章 利用pandas進行數(shù)據(jù)分析_第5頁
已閱讀5頁,還剩191頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章利用pandas進行數(shù)據(jù)分析4-1數(shù)據(jù)的排序與排名pandas除了可以對數(shù)據(jù)進行預(yù)處理之外,還可以進一步對數(shù)據(jù)進行分析,如對數(shù)據(jù)進行排序排名、描述統(tǒng)計、分組分段、交叉透視,正態(tài)分析、相關(guān)分析等。第4章知識圖譜在數(shù)據(jù)分析時,對數(shù)據(jù)進行排序和排名是常用的一種操作。通過數(shù)據(jù)的排序和排名,比較容易發(fā)現(xiàn)數(shù)據(jù)的特征或趨勢,找到解決問題的線索。除此之外,排序和排名還有助于對數(shù)據(jù)檢查糾錯,為數(shù)據(jù)的分組或分段等提供方便。數(shù)據(jù)排序是指數(shù)據(jù)按一定方式進行排列,通過數(shù)據(jù)排序可以更為方便地看出數(shù)據(jù)特征。DataFrame排序可以分為按索引排序和按某列值排序。一、數(shù)據(jù)排序索引排序是指按照DataFrame索引的值升序或降序的方式重新排列數(shù)據(jù),而按列值排序是指可以按照DataFrame某一列的值升序或降序的方式重新排列數(shù)據(jù)。利用sort_index函數(shù)可對索引進行排序,而利用sort_values函數(shù)可對值進行排序。一、數(shù)據(jù)排序1.按索引排序按索引排序是指DataFrame按照索引進行排序,索引排序可以使用sort_index函數(shù),sort_index函數(shù)的一般用法如下:sort_index(ascending,inplace)其中,ascending表示排序方式,True為升序排列,F(xiàn)alse為降序排列,默認是True,即默認是升序排序。一、數(shù)據(jù)排序1.按索引排序一、數(shù)據(jù)排序示例代碼如下:importnumpyasnpimportpandasaspdarr=np.arange(1,10).reshape(3,3)data=pd.DataFrame(arr,columns=['a','b','c'])data['d']=[3,4,2]data=data.set_index('d')print("初始數(shù)據(jù)為:\n",data)data_sort_index_1=data.sort_index(inplace=False)print("按索引升序排序的結(jié)果為:\n",data_sort_index_1)data_sort_index_2=data.sort_index(ascending=False,inplace=False)print("按索引降序排序的結(jié)果為:\n",data_sort_index_2)1.按索引排序一、數(shù)據(jù)排序2.按列值排序按列值排序是DataFrame按照某一列的值進行排序,值排序序可以使用sort_values函數(shù),sort_values函數(shù)的一般用法為:sort_values(by,ascending,inplace)其中,by表示表示按照某一列或幾列得值進行排序。ascending表示排序方式,True為升序排列,F(xiàn)alse為降序排列,默認是True,即默認是升序排序。一、數(shù)據(jù)排序2.按列值排序一、數(shù)據(jù)排序示例代碼如下:data=data.reset_index()#取消用戶自定義索引,恢復(fù)成自動索引data['e']=[2,3,2]data=data[['a','b','c','d','e']]#重新排列原來的列print("初始數(shù)據(jù)為:\n",data)data_sort=data.sort_values(by=['e','d'],ascending=[False,False])print("按e、d兩列降序排序的結(jié)果為:\n",data_sort)2.按列值排序一、數(shù)據(jù)排序按e、d兩列降序排序時,即先按e列降序排序,再按d列降序排序。只有當e列的值相同時(都為2),才會再按d列的值排序。在實際工作中,經(jīng)常需要對數(shù)據(jù)進行排名,比如對客戶的銷售金額進行排名,查看重點客戶名單。排名函數(shù)在很多數(shù)據(jù)分析軟件都有,如Excel中的rank函數(shù)。而在pandas中,也有類似的rank函數(shù),該函數(shù)可以對DataFrame按照某列進行排名。二、數(shù)據(jù)排名rank函數(shù)的一般用法:rank(method,ascending)其中,method表示重復(fù)數(shù)值排名的處理方法。average表示整個相同排名組中平均排名。min表示整個相同排名組中的最小排名。max表示整個相同排名組中的最大排名。ascending表示排名順序,True表示升序排列,F(xiàn)alse表示降序排列,默認是True。二、數(shù)據(jù)排名如一組數(shù)據(jù)6、5、5、2,在降序的情況下,數(shù)值6排名第1,數(shù)值2排名第4,重復(fù)的數(shù)值5占據(jù)排名第2和第3。如果按照平均排名,兩個數(shù)值5都是排名2.5;如果按照最小排名,兩個數(shù)值5都是排名2;如果按照最大排名,兩個數(shù)值5都是排名3。在利用rank函數(shù)對數(shù)據(jù)進行排名時,還有一點需要注意,就是在對某一列進行排名,需要對該列進行去空處理,否則會報錯。二、數(shù)據(jù)排名二、數(shù)據(jù)排名示例代碼如下:print("初始數(shù)據(jù)為:\n",data)data['e_rank_avg']=data['e'].rank(method='average',ascending=False)print("降序排名時按平均排名的結(jié)果:\n",data)data.drop(labels='e_rank_avg',axis=1,inplace=True)data['e_rank_min']=data['e'].rank(method='min',ascending=False)print("降序排名時按最小排名的結(jié)果:\n",data)data.drop(labels='e_rank_min',axis=1,inplace=True)data['e_rank_max']=data['e'].rank(method='max',ascending=False)print("降序排名時按最大排名的結(jié)果:\n",data)二、數(shù)據(jù)排名任務(wù)實訓4-1:利用read_excel導入supermarket.xlsx(supermarket.xlsx存放在c:\data路徑中)中的“銷售統(tǒng)計”工作表(第1張工作表),導入時將“客戶ID”列設(shè)為索引,將導入數(shù)據(jù)命名為data1,完成:(1)按索引升序排序,輸出前5個數(shù)據(jù)。(2)按列進行排序,先按“折扣”列降序排序,再按照“折扣金額”升序排序,輸出前5個數(shù)據(jù)。任務(wù)實訓4-1(1)具體代碼如下:pd.set_option('display.max_columns',None)pd.set_option('display.width',None)pd.set_option('display.unicode.east_asian_width',True)data1=pd.read_excel("c:\data\supermarket.xlsx",index_col='客戶ID')print("導入的數(shù)據(jù)為:\n",data1.head())result_sort_1=data1.sort_index().head()print("按索引升序排序的結(jié)果為:\n",result_sort_1)任務(wù)實訓4-1(1)任務(wù)實訓4-1(2)具體代碼如下:result_sort_2=data1.sort_values(by=['折扣','折扣金額'],

ascending=[False,True]).head()print("先按'折扣'列降序排序再按照'折扣金額'升序排序的結(jié)為:\n",

result_sort_2)任務(wù)實訓4-1(2)任務(wù)實訓4-2:將任務(wù)1的結(jié)果data1重新命名為data2,在“銷售金額”列降序排序的情況下,統(tǒng)計“數(shù)量”列的排名,“數(shù)量”列排名方式為降序,如果“數(shù)量”列數(shù)據(jù)出現(xiàn)重復(fù),采用最小排名。任務(wù)實訓4-2具體代碼如下:data2=data1data2=data2.sort_values(by='銷售金額',ascending=False)data2['數(shù)量排名']=data2['數(shù)量'].

rank(method='min',ascending=False)print("排序和排名處理結(jié)果為:\n",data2.head())任務(wù)實訓4-2鞏固訓練:利用read_csv導入c:\data\score.csv,利用前10行作為數(shù)據(jù),完成:(1)將“area”列中的“江蘇-蘇州”替換為0,“江蘇-鹽城”替換為1,“江蘇-連云港”替換為2,“江蘇-常州”替換為3,“山東-濟南”替換為4,按照“area”列升序排序。(2)生成一個新列,列名為“all”,計算公式:all=math+Chinese+English。按照第1關(guān)鍵字“all”列降序排序,再按照第2關(guān)鍵字“computer”列升序排序。(3)去掉“all”列中的帶有空值的行,按“all”列降序排名,如果排名相同,全部取最小排名。謝謝!第4章利用pandas進行數(shù)據(jù)分析4-2數(shù)據(jù)的統(tǒng)計與描述數(shù)據(jù)的統(tǒng)計與描述可以用來概括和表示數(shù)據(jù)的狀況,通過一些統(tǒng)計指標可以方便地表示一組數(shù)據(jù)的集中趨勢、離散程度、頻數(shù)分布等特征。數(shù)值型字段是指該字段是用數(shù)值來描述的,如身高、體重、成績等。數(shù)值型字段的描述性統(tǒng)計主要包括計算最小值、最大值、均值、中位數(shù)、四分位數(shù)、極差、方差、標準差等統(tǒng)計指標。一、數(shù)值型字段的統(tǒng)計與描述1.直接利用統(tǒng)計指標進行計算pandas提供了很多方法來計算數(shù)值型字段的各類指標。一、數(shù)值型字段的統(tǒng)計與描述方法名稱說明方法名稱說明mean均值max最大值median中位數(shù)min最小值mode眾數(shù)ptp極差quantile四分位數(shù)std標準差sum總和cumsum累加和skew偏度kurt峰度數(shù)值型數(shù)據(jù)統(tǒng)計指標1.直接利用統(tǒng)計指標進行計算其中,quantile表示四分位數(shù),是指通過三個分割點將全部數(shù)據(jù)等分為四部分,其中每部分包含25%的數(shù)據(jù),這三個分割點就是四分位數(shù)。中間的四分位數(shù)就是中位數(shù),而處在25%位置上的四分位數(shù)稱為下四分位數(shù),處在75%位置上的四分位數(shù)稱為上四分位數(shù)。一、數(shù)值型字段的統(tǒng)計與描述1.直接利用統(tǒng)計指標進行計算skew表示偏度,是描述分布偏離對稱性程度的一個特征數(shù)。當分布左右對稱時,偏度系數(shù)為0。當偏度系數(shù)大于0時,該分布為右偏。當偏度系數(shù)小于0時,該分布為左偏。一、數(shù)值型字段的統(tǒng)計與描述1.直接利用統(tǒng)計指標進行計算kurt表示峰度,是指用來反映頻數(shù)分布曲線頂端尖峭或扁平程度的指標。峰度大于0表示該數(shù)據(jù)分布與正態(tài)分布相比較為陡峭,為尖頂峰;峰度小于0表示該數(shù)據(jù)分布與正態(tài)分布相比較為平坦,為平頂峰。一、數(shù)值型字段的統(tǒng)計與描述1.直接利用統(tǒng)計指標進行計算cumsum表示累加和,是指對列數(shù)據(jù)進行累加,其結(jié)果也是一列數(shù)據(jù)。一、數(shù)值型字段的統(tǒng)計與描述1.直接利用統(tǒng)計指標進行計算直接利用統(tǒng)計指標進行計算的一般方法為:DataFrame[column].統(tǒng)計指標一、數(shù)值型字段的統(tǒng)計與描述1.直接利用統(tǒng)計指標進行計算一、數(shù)值型字段的統(tǒng)計與描述示例代碼如下:importnumpyasnpimportpandasaspdarr=np.arange(1,17).reshape(4,4)data=pd.DataFrame(arr,columns=['a','b','c','d'])print("初始數(shù)據(jù)為:\n",data)print("a列的最大值=",data['a'].max())print(“b列的平均值=",data[‘b'].mean())print("c列的標準差值=%.2f"%(data['c'].std()))print("----------")data['e']=data['d'].cumsum()print("d列的累加和結(jié)果為e列:\n",data[['d','e']])1.直接利用統(tǒng)計指標進行計算一、數(shù)值型字段的統(tǒng)計與描述2.利用describe函數(shù)進行計算pandas提供了describe函數(shù)用來一次性計算數(shù)值型字段的八個統(tǒng)計指標。一、數(shù)值型字段的統(tǒng)計與描述方法名稱說明count非空個數(shù)mean均值std標準差min最小值25%25%分位數(shù)50%50%分位數(shù),即中位數(shù)75%75%分位數(shù)max最大值數(shù)值型字段的describe函數(shù)統(tǒng)計結(jié)果2.利用describe函數(shù)進行計算在調(diào)用describe函數(shù)計算統(tǒng)計指標時,還可以采用describe()[i](i=0,1,2,…)的方法調(diào)用某個統(tǒng)計指標。如用describe()[0]調(diào)用第1個統(tǒng)計指標count,describe()[1]調(diào)用第2個統(tǒng)計指標mean。同時,還可以利用指標名稱來調(diào)用指標,如describe()['25%']表示調(diào)用25%分位數(shù),即調(diào)用下四分位數(shù)。一、數(shù)值型字段的統(tǒng)計與描述2.利用describe函數(shù)進行計算一、數(shù)值型字段的統(tǒng)計與描述示例代碼如下:des=data['a'].describe()print("a列的describe函數(shù)計算結(jié)果:\n",round(des,2))#利用round函數(shù)保留所有2位小數(shù)print("a列的平均值=",des[1])print("a列的25%分位數(shù)=",des['25%'])2.利用describe函數(shù)進行計算一、數(shù)值型字段的統(tǒng)計與描述分類型字段是指該字段的具有分類作用,如省份名、城市名、商品類別等,分類型字段統(tǒng)計與描述主要是頻數(shù)統(tǒng)計。二、分類型字段的統(tǒng)計與描述1.利用value_counts函數(shù)進行統(tǒng)計分析pandas提供了value_counts函數(shù)用來統(tǒng)計分類型字段的頻數(shù),value_counts函數(shù)的一般用法為:value_counts(normalize,ascending)其中,normalize表示是否按頻率顯示,True表示按頻率顯示,F(xiàn)alse表示按頻數(shù)顯示,默認為False,即默認按按頻數(shù)顯示。二、分類型字段的統(tǒng)計與描述1.利用value_counts函數(shù)進行統(tǒng)計分析二、分類型字段的統(tǒng)計與描述示例代碼如下:data['f']=['A','B','B','C']print("初始數(shù)據(jù)為:\n",data)print("按頻數(shù)統(tǒng)計f列降序的結(jié)果:\n",

data['f'].value_counts(ascending=False))print("按頻率統(tǒng)計f列升序的結(jié)果:\n",

data['f'].value_counts(normalize=True,ascending=True))1.利用value_counts函數(shù)進行統(tǒng)計分析二、分類型字段的統(tǒng)計與描述2.利用describe函數(shù)進行統(tǒng)計分析pandas中describe函數(shù)除了可以對數(shù)值型字段進行統(tǒng)計描述,還可以對分類型字段進行統(tǒng)計描述。對于分類型字段,describe函數(shù)可以統(tǒng)計分類數(shù)目、最多頻數(shù)類別等結(jié)果。二、分類型字段的統(tǒng)計與描述2.利用describe函數(shù)進行統(tǒng)計分析二、分類型字段的統(tǒng)計與描述方法名稱說明count表示非空數(shù)目。unique表示數(shù)據(jù)的種類。top表示出現(xiàn)最多的類型。freq表示出現(xiàn)最多的類型的數(shù)目。字符型數(shù)據(jù)describe函數(shù)統(tǒng)計結(jié)果2.利用describe函數(shù)進行統(tǒng)計分析二、分類型字段的統(tǒng)計與描述示例代碼如下:des=data['f'].describe()print("f列describe函數(shù)統(tǒng)計結(jié)果為:\n",des)print("f列的類別數(shù)量=",des[1])print("f列頻數(shù)最多的類別為:%s,該類別出現(xiàn)的次數(shù)為:%d“

%(des['top'],des['freq']))任務(wù)實訓4-3:利用read_excel導入supermarket.xlsx(supermarket.xlsx存放在c:\data路徑中)中的“銷售統(tǒng)計”工作表(第1張工作表),導入時將“客戶ID”列設(shè)為索引,將導入數(shù)據(jù)命名為data1,完成:(1)直接計算“銷售金額”列的平均值和中位數(shù)以及偏度,并根據(jù)這些統(tǒng)計指標判斷數(shù)據(jù)的大致分布。(2)通過describe函數(shù)生成“數(shù)量”列統(tǒng)計指標,再單獨輸出其平均值。任務(wù)實訓4-3(1)具體代碼如下:pd.set_option('display.max_columns',None)pd.set_option('display.width',None)pd.set_option('display.unicode.east_asian_width',True)data1=pd.read_excel("c:\data\supermarket.xlsx",index_col='客戶ID')print("導入的數(shù)據(jù)為:\n",data1.head())mean=data1['銷售金額'].mean()median=data1['銷售金額'].median()skew=data1['銷售金額'].skew()print("銷售金額的平均值=%.2f\n銷售金額的中位數(shù)=%.2f\n銷售金額的偏度=%.2f\n"%(mean,median,skew))任務(wù)實訓4-3任務(wù)實訓4-3銷售金額的平均值遠大于中位數(shù),并且偏度為2.59,遠大于0,說明數(shù)據(jù)是右偏的,即銷售金額存在著大量的極大值,也就是說在數(shù)據(jù)中,有一些客戶貢獻了極高的銷售金額,這一點也比較符合“帕累托法則”?!芭晾弁蟹▌t”也叫“二八法則”,它是指在任何特定群體中,重要因子通常只占少數(shù),而不重要的因子卻占多數(shù),因此只要能控制具有重要性的少數(shù)因子即能控制全局。即80%的價值是來自20%的因子,其余的20%的價值則來自80%的因子。經(jīng)濟學家認為,20%的人掌握著80%的財富。推而廣之,在任何大系統(tǒng)中,約80%的結(jié)果是由該系統(tǒng)中約20%的變量產(chǎn)生。任務(wù)實訓4-3(2)具體代碼如下:des=data1['數(shù)量'].describe()print("'數(shù)量'列的describe結(jié)果為:\n",round(des,2))

#利用round函數(shù)保留所有2位小數(shù)print("'數(shù)量'列的平均值=",des[1])任務(wù)實訓4-3(2)任務(wù)實訓4-4:根據(jù)任務(wù)1的導入數(shù)據(jù),重新命名為data2,計算貢獻所有銷售金額的前80%的訂單筆數(shù)占總筆數(shù)的比例。任務(wù)實訓4-4具體代碼如下:data2=data1data2=data2.reset_index()data2.sort_values(by='銷售金額',ascending=False,inplace=True)data2['訂單銷售金額占比']=data2['銷售金額']/data2['銷售金額'].sum()#計算訂單成交額占比data2['訂單銷售金額累計占比']=data2['訂單銷售金額占比'].cumsum()#計算訂單成交額的累計占比print("訂單銷售金額累計占比前5條數(shù)據(jù)為:\n",data2.head())key=data2.loc[data2['訂單銷售金額累計占比']>0.8].index[0]#找到累計占比超過80%的第1個用戶print("----------")任務(wù)實訓4-4print("訂單銷售金額累計占比超過80%的臨界數(shù)據(jù)的索引編號=",key)print("----------")data2_80=data2.loc[:key]print("訂單銷售金額累計占比接近80%的最后5條數(shù)為:\n",data2_80.tail())print("----------")print("銷售金額累計占比超過80%訂單筆數(shù)=",data2_80.shape[0])result=data2_80.shape[0]/data2.shape[0]print("銷售金額累計占比超過80%%訂單筆數(shù)占總比數(shù)的比例=%.2f%%"%(result*100))#在輸出語句中,%%是格式符表示百分號%任務(wù)實訓4-4任務(wù)實訓4-5:根據(jù)任務(wù)1的導入數(shù)據(jù),重新命名為data3,完成:(1)利用value_counts函數(shù)統(tǒng)計訂單數(shù)量排名前5的客戶姓名。(2)利用describe函數(shù)統(tǒng)計訂單數(shù)量最多的省份,并統(tǒng)計次數(shù)。任務(wù)實訓3data3=data1result=data3['客戶姓名'].value_counts(ascending=False).head()print("訂單數(shù)量排名前5的客戶姓名:\n",result)print("---------")des=data3['省'].describe()print("訂單數(shù)量最多的省份為:%s,其頻數(shù)為:%d"%(des['top'],des['freq']))任務(wù)實訓4-5鞏固訓練:利用read_excel導入supermarket.xlsx中的“銷售統(tǒng)計”工作表(第1張工作表),完成:(1)去掉折扣為0的數(shù)據(jù)后,計算平均折扣。(2)計算“折扣金額”的中位數(shù)。(3)統(tǒng)計訂單數(shù)量最多的城市,并統(tǒng)計次數(shù)。謝謝!第4章利用pandas進行數(shù)據(jù)分析4-3數(shù)據(jù)的分組與分段在數(shù)據(jù)分析時,對數(shù)據(jù)進行分組和分段是常用的一種操作,通過分組和分段可以挖掘出更多數(shù)據(jù)的內(nèi)在信息。數(shù)據(jù)分組的作用是可以快速對所有分組進行統(tǒng)計計算,比如計算男女學生的平均成績時,可以先按性別分組,然后再按成績統(tǒng)計各組的平均數(shù)。數(shù)據(jù)分段作用在于可以將連續(xù)的數(shù)據(jù)離散化,比如將成績分為不同的成績等級,將年齡分為不同的年齡段,這樣就可以通過不同數(shù)據(jù)段的統(tǒng)計分析挖掘出一些更加有用的信息。分組是指將DataFrame按照某列劃分為多個不同的組,然后再按另外一列計算每組的一些統(tǒng)計指標,這一點類似于Excel的分類匯總,分組統(tǒng)計時只要確定分組字段、統(tǒng)計字段和統(tǒng)計方法就可以執(zhí)行。一、數(shù)據(jù)分組統(tǒng)計分析1.數(shù)據(jù)分組pandas提供了一個靈活高效的groupby函數(shù),通過groupby函數(shù)可以對DataFrame進行分組操作,進而再對每一組進行統(tǒng)計分析,如計算最大值、最小值、平均值、中位數(shù)等。一、數(shù)據(jù)分組統(tǒng)計分析1.數(shù)據(jù)分組(1)按某列對DataFrame進行分組通過groupby函數(shù)執(zhí)行分組操作,返回一個GroupBy對象,該對象實際上并沒有進行任何計算,其僅僅是中間數(shù)據(jù)。groupby函數(shù)的一般用法為:DataFrame.groupby(by=分組列)其中,by表示分組的列,即DataFrame按照這一列進行分組,但是其結(jié)果只是一個中間數(shù)據(jù),不產(chǎn)生任何的統(tǒng)計結(jié)果。一、數(shù)據(jù)分組統(tǒng)計分析1.數(shù)據(jù)分組(1)按某列對DataFrame進行分組一、數(shù)據(jù)分組統(tǒng)計分析示例代碼如下:importnumpyasnpimportpandasaspdarr=np.arange(1,17).reshape(4,4)data=pd.DataFrame(arr,columns=['a','b','c','d'])data['e']=['A','B','B','A']print("初始數(shù)據(jù)為:\n",data)group=data.groupby(by='e')print("按e列分組的結(jié)果為:",group)print("分組結(jié)果的類型為:",type(group))1.數(shù)據(jù)分組(1)按某列對DataFrame進行分組一、數(shù)據(jù)分組統(tǒng)計分析1.數(shù)據(jù)分組(2)查看分組結(jié)果按某列對DataFrame進行分組后的結(jié)果是一個可以迭代的對象,通過循環(huán)語句可以查看每一組的情況。一、數(shù)據(jù)分組統(tǒng)計分析1.數(shù)據(jù)分組(2)查看分組結(jié)果一、數(shù)據(jù)分組統(tǒng)計分析示例代碼如下:print("按e列分組后的每一組的結(jié)果為:")forgingroup:print(g)1.數(shù)據(jù)分組(2)查看分組結(jié)果一、數(shù)據(jù)分組統(tǒng)計分析利用grougby對data按照e列進行分組后,所有“A”為一組,所有“B”為一組,共分成了兩組,這些分組的信息都被存儲在DataFrameGroupBy的數(shù)據(jù)類型中,通過循環(huán)語句就可以查看每一組的結(jié)果。2.分組統(tǒng)計在DataFrame中,按照某一列進行分組后,還可以再對指定的列進行統(tǒng)計分析,其一般方法為:DataFrame.groupby(by=分組列)[統(tǒng)計列].統(tǒng)計方法一、數(shù)據(jù)分組統(tǒng)計分析2.分組統(tǒng)計一、數(shù)據(jù)分組統(tǒng)計分析示例代碼如下:print("初始數(shù)據(jù)為:\n",data)data_result1=data.groupby(by='e')['a'].mean()data_result2=data.groupby(by='e')['b'].max()print("按e列分組再按a列統(tǒng)計平均值的結(jié)果為:\n",data_result1)print("按e列分組再按b列統(tǒng)計最大值的結(jié)果為:\n",data_result2)2.分組統(tǒng)計一、數(shù)據(jù)分組統(tǒng)計分析在數(shù)據(jù)分析中,常常需要將連續(xù)數(shù)據(jù)離散化,這就是數(shù)據(jù)分段。數(shù)據(jù)分段就是指在連續(xù)數(shù)據(jù)取值范圍內(nèi)設(shè)置一些離散的分段點,而將連續(xù)數(shù)據(jù)按照這些分段點進行分段。如將年齡按照四個分段點7、18、35、65就可以分為五個年齡段,分別是:童年、少年、青年、中年、老年。二、數(shù)據(jù)分段統(tǒng)計分析pandas中的cut函數(shù)可以實現(xiàn)將連續(xù)型數(shù)據(jù)轉(zhuǎn)換為分段型數(shù)據(jù),cut函數(shù)的一般用法為:pandas.cut(x,bins,labels)其中,x表示要分段的列。bins表示用于分段的分段點,這些分段點可以組成分段區(qū)間,并且這些區(qū)間是左開右閉區(qū)間(除了第1個區(qū)間),如bins=[0,10,20,30,40]表示四個分段區(qū)間:[0,10]、(10,20]、(20,30]、(30,40]。labels表示每個分段的標簽。二、數(shù)據(jù)分段統(tǒng)計分析二、數(shù)據(jù)分段統(tǒng)計分析示例代碼如下:arr=np.arange(3,50,3).reshape(4,4)data=pd.DataFrame(arr,columns=['a','b','c','d'])print("初始數(shù)據(jù)為:\n",data)data['a_cut']=pd.cut(data['a'],bins=[0,9,19,29,39,49],

labels=['0+','10+','20+','30+','40+'])print("a列分段后的結(jié)果:\n",data)二、數(shù)據(jù)分段統(tǒng)計分析因為分段區(qū)間是左開右閉區(qū)間,所以29到39是(29,39],即從30到39,而這一數(shù)據(jù)分段對應(yīng)的標簽是“30+”,因此39屬于“30+”。任務(wù)實訓4-6:利用read_excel導入supermarket.xlsx(supermarket.xlsx存放在c:\data路徑中)中的“銷售統(tǒng)計”工作表(第1張工作表),導入時將“客戶ID”列設(shè)為索引,將導入數(shù)據(jù)命名為data1,完成:(1)統(tǒng)計平均銷售金額最少的3個省。(2)統(tǒng)計折扣金額總和排名前5的客戶名單。任務(wù)實訓4-6具體代碼如下:pd.set_option('display.max_columns',None)pd.set_option('display.width',None)pd.set_option('display.unicode.east_asian_width',True)data1=pd.read_excel("c:\data\supermarket.xlsx",index_col='客戶ID')print("導入的數(shù)據(jù)為:\n",data1.head())data1_result1=data1.groupby(by='省')['銷售金額'].mean()data1_result1=data1_result1.sort_values().head(3)print("平均銷售金額最少的3個省的結(jié)果為:\n",data1_result1)data1_result2=data1.groupby(by='客戶姓名')['折扣金額'].sum()data1_result2=data1_result2.sort_values(ascending=False).head()print("折扣金額總和排名前5的客戶名單的結(jié)果為:\n",data1_result2)任務(wù)實訓4-6因為每個客戶都有很多訂單,所以要統(tǒng)計折扣金額排名前10的客戶名單,首先需要對數(shù)據(jù)按照客戶進行分組,才能進行后續(xù)的統(tǒng)計分析。任務(wù)實訓4-7:根據(jù)任務(wù)1的導入數(shù)據(jù),重新命名為data2,將“銷售金額”列進行分段并生成新列,新列命名為“客戶等級”。具體分段方法為:將銷售金額的25%分位數(shù)、50%分位數(shù)、75%分位數(shù)設(shè)為三個分段點,并以此將分為4段,“D”、“C”、“B”、“A”。輸出前10個數(shù)據(jù),查看分段的效果。任務(wù)實訓4-7具體代碼如下:data2=data1des=data2['銷售金額'].describe()cut_bins=[0,des['25%'],des['50%'],des['75%'],data2['銷售金額'].max()]cut_labels=['D','C','B','A']data2['客戶等級']=pd.cut(data2['銷售金額'],

bins=cut_bins,labels=cut_labels)print(data2.head(10))任務(wù)實訓4-7鞏固訓練:利用read_csv導入c:\data\score.csv,完成:(1)按“class”(班級)分組,計算各班“math”列的平均數(shù)和中位數(shù)。(2)將“math”列進行分段,成績段分段方法為:0-59設(shè)為“不及格”,60-74為“合格”,75-89為“良好”,90-100為“優(yōu)秀”,并將結(jié)果生成新列“math_cut”。謝謝!第4章利用pandas進行數(shù)據(jù)分析4-4數(shù)據(jù)的交叉與透視數(shù)據(jù)交叉透視分析是數(shù)據(jù)分析中常用方法之一,通過交叉透視分析可以用來判斷不同字段之間是否存在相互關(guān)聯(lián)。頻數(shù)交叉表是一種用于計算分組頻率的表格,頻數(shù)交叉表只統(tǒng)計行與列字段交叉出現(xiàn)的頻數(shù),因為表格統(tǒng)計的內(nèi)容是有限的,所以行字段和列字段的取值不能過多,一般都是字符型分類字段。一、頻數(shù)交叉表比如判斷分析性別與商品類別之間是否存在關(guān)聯(lián),就可以把性別與商品類別可以分別作為行字段和列字段,進而統(tǒng)計交叉字段出現(xiàn)的頻數(shù),并判斷不同性別選擇不同商品時是否存在明顯差異。一、頻數(shù)交叉表比如一共有20個客戶,其中男性和女性客戶各占10個,而使用A手機和B手機各占10個客戶,如果僅僅分析性別或商品類別的話,看不出明顯的規(guī)律。但是如果將兩個字段進行交叉分析的話,就可以進一步統(tǒng)計不同性別選擇不同商品類別的頻數(shù),將各個頻數(shù)繪制在表格中。一、頻數(shù)交叉表一、頻數(shù)交叉表

AB小計男2810女8210小計101020不同性別選擇不同商品結(jié)果購買A手機的客戶中,女性客戶明顯多于男性客戶,而B手機的客戶中,男性客戶明顯多于女性客戶,而這些規(guī)律是無法僅通過一個字段看出的,只有通過字段的交叉統(tǒng)計才能看出。如果要把數(shù)值型字段作為交叉表的行字段或列字段,可以先將數(shù)值型字段通過分段函數(shù)轉(zhuǎn)化成分類型字段,進而再進行統(tǒng)計分析,比如直接繪制年齡和商品類別的交叉表意義不大,因為年齡的取值過多。此時,可以對年齡進行分段,再制作年齡段和商品類別的交叉表。一、頻數(shù)交叉表一、頻數(shù)交叉表頻數(shù)交叉表結(jié)果

行字段行字段=①行字段=②列字段列字段=③①和③頻數(shù)②和③頻數(shù)列字段=④①和④頻數(shù)②和④頻數(shù)pandas提供了crosstab函數(shù)用來制作頻數(shù)交叉表,crosstab函數(shù)的一般用法為:pd.crosstab(index,columns,margins)其中,index表示交叉表行字段。columns表示交叉表列字段。margins表示匯總(Total)功能的開關(guān),設(shè)為True后結(jié)果會出現(xiàn)名為“ALL”的行和列,默認為False。一、頻數(shù)交叉表一、頻數(shù)交叉表示例代碼如下:importpandasaspdpd.set_option('display.unicode.east_asian_width',True)dict={'性別':[0,1,1,1,1,1,0,0,0,0],'商品類別':[0,0,0,0,0,1,1,1,1,1]}data=pd.DataFrame(dict)data['性別']=data['性別'].replace({0:'男',1:'女'})#將性別中的0替換為男,將1替換為女data['商品類別']=data['商品類別'].replace({0:'商品A',1:'商品B'})#將商品類別中的0替換為商品A,將1替換為商品Bprint("初始數(shù)據(jù)為:\n",data)result_crosstab_1=pd.crosstab(index=data['性別'],columns=data['商品類別'])print("頻數(shù)交叉表的結(jié)果為:\n",result_crosstab_1)result_crosstab_2=pd.crosstab(index=data['性別'],columns=data['商品類別'],margins=True)print("添加匯總行與匯總列后頻數(shù)交叉表的結(jié)果為:\n",result_crosstab_2)一、頻數(shù)交叉表頻數(shù)交叉表只能統(tǒng)計行與列字段交叉出現(xiàn)的頻數(shù),而如果還要再統(tǒng)計行與列字段以外的第3個字段,就需要用到數(shù)據(jù)透視表。pandas中的數(shù)據(jù)透視表類似于Excel中的數(shù)據(jù)透視表,需要找到行字段、列字段以及統(tǒng)計字段,再確定統(tǒng)計方法就可以繪制數(shù)據(jù)透視表。比如年份與地區(qū)可以分別作為行字段和列字段,進而再統(tǒng)計銷售金額的各種指標,就可以制作數(shù)據(jù)透視表。二、數(shù)據(jù)透視表頻數(shù)交叉表只能統(tǒng)計行與列字段交叉出現(xiàn)的頻數(shù),而如果還要再統(tǒng)計行與列字段以外的第3個字段,就需要用到數(shù)據(jù)透視表。pandas中的數(shù)據(jù)透視表類似于Excel中的數(shù)據(jù)透視表,需要找到行字段、列字段以及統(tǒng)計字段,在確定統(tǒng)計方法就可以繪制數(shù)據(jù)透視表。比如年份與地區(qū)可以分別作為行字段和列字段,進而再統(tǒng)計銷售金額的各種指標,就可以制作數(shù)據(jù)透視表。二、數(shù)據(jù)透視表二、數(shù)據(jù)透視表

行字段行字段=①行字段=②列字段列字段=③①和③統(tǒng)計字段的統(tǒng)計指標②和③統(tǒng)計字段的統(tǒng)計指標列字段=④①和④統(tǒng)計字段的統(tǒng)計指標②和④統(tǒng)計字段的統(tǒng)計指標函數(shù)交叉表結(jié)果pandas提供了制作數(shù)據(jù)透視表的函數(shù)pivot_table,pivot_table函數(shù)的一般用法為:pd.pivot_table(data,index,columns,values,aggfunc,margins)各個參數(shù)的作用如下:data表示待分析的DataFrame。index表示數(shù)據(jù)透視表的行字段。columns表示數(shù)據(jù)透視表的列字段。二、數(shù)據(jù)透視表pd.pivot_table(data,index,columns,values,aggfunc,margins)各個參數(shù)的作用如下:values表示數(shù)據(jù)透視表的統(tǒng)計字段。aggfunc表示統(tǒng)計指標。如np.sum表示計算總和,np.mean表示計算平均數(shù),使用前需要導入numpy。margins表示匯總(Total)功能的開關(guān),設(shè)為True后結(jié)果集中會出現(xiàn)名為“ALL”的行和列。默認為False。二、數(shù)據(jù)透視表二、數(shù)據(jù)透視表示例代碼如下:importnumpyasnpdata['銷售金額']=np.arange(11,1,-1)print("初始數(shù)據(jù)為:\n",data)result_pivot_1=pd.pivot_table(data=data,index='性別',

columns='商品類別',values='銷售金額',aggfunc=np.sum)print("數(shù)據(jù)透視表1的結(jié)果為:\n",result_pivot_1)result_pivot_2=pd.pivot_table(data=data,index='性別',

columns='商品類別',values='銷售金額',aggfunc=np.mean,margins=True)print("數(shù)據(jù)透視表2的結(jié)果為:\n",result_pivot_2)二、數(shù)據(jù)透視表從結(jié)果可以看出,購買商品A的男性客戶的平均銷售金額明顯大于女性客戶,而購買商品B的女性客戶平均銷售金額明顯大于男性客戶。任務(wù)實訓4-8:利用read_excel導入supermarket.xlsx(supermarket.xlsx存放在c:\data路徑中)中的“銷售統(tǒng)計”工作表(第1張工作表),導入時將“客戶ID”列設(shè)為索引,完成:(1)從“訂單ID”列中提取年份,并將結(jié)果存放到新列“年”中。(2)制作數(shù)據(jù)交叉表,統(tǒng)計不同年份的不同省份的頻數(shù),并統(tǒng)計匯總結(jié)果。(3)從“產(chǎn)品ID”中提取產(chǎn)品類別,如從“辦公用-用品-10002717”提取出“用品”,并將結(jié)果存放到新列“產(chǎn)品類別”中。將“銷售金額”進行分段,銷售金額75%分位數(shù)以上的數(shù)據(jù)命名為“優(yōu)質(zhì)客戶”,銷售金額75%分位數(shù)以下的數(shù)據(jù)命名為“一般客戶”,并將結(jié)果存放到新列“客戶等級”中。(4)制作數(shù)據(jù)交叉表,統(tǒng)計不同年份不同客戶等級的頻數(shù),并統(tǒng)計匯總結(jié)果。任務(wù)實訓4-8(1)具體代碼如下:pd.set_option('display.max_columns',None)pd.set_option('display.width',None)pd.set_option('display.unicode.east_asian_width',True)data1=pd.read_excel("c:\data\supermarket.xlsx",index_col='客戶ID')print("導入的數(shù)據(jù)為:\n",data1.head())data1['年']=data1['訂單ID'].str.split('-',expand=True)[1]print("生成新列'年'的結(jié)果為:\n",data1.head())任務(wù)實訓4-8(1)任務(wù)實訓4-8(2)具體代碼如下:crosstab_result1=pd.crosstab(index=data1['省'],

columns=data1['年'],margins=True)print(crosstab_result1)任務(wù)實訓4-8(2)從結(jié)果中可以看出,江蘇、遼寧、重慶、黑龍江等省份近三年的訂單有明顯地上升。廣東、甘肅、福建等省份地訂單有下降地趨勢。任務(wù)實訓4-8(3)具體代碼如下:data1['產(chǎn)品類別']=data1['產(chǎn)品ID'].str.split('-',expand=True)[1]des=data1['銷售金額'].describe()data1['客戶等級']=pd.cut(data1['銷售金額'],bins=[0,des['75%'],

des['max']],labels=['一般客戶','優(yōu)質(zhì)客戶'])print("生成新列'產(chǎn)品類別'和'客戶等級'的結(jié)果為:\n",data1.head())任務(wù)實訓4-8(3)任務(wù)實訓4-8(4)具體代碼如下:crosstab_result2=pd.crosstab(index=data1['產(chǎn)品類別'],

columns=data1['客戶等級'],margins=True)print(crosstab_result2)任務(wù)實訓4-8(4)從結(jié)果中可以看出,雖然優(yōu)質(zhì)客戶的人數(shù)較少,但是“器具”、“復(fù)印”、“椅子”、“電話”、“設(shè)備”等產(chǎn)品有至少一半訂單來自于優(yōu)質(zhì)客戶。任務(wù)實訓4-9:將任務(wù)1的結(jié)果重新命名為data2,制作數(shù)據(jù)透視表,統(tǒng)計分析不同年份的不同產(chǎn)品類別對應(yīng)的平均銷售金額。任務(wù)實訓4-9具體代碼如下:data2=data1result_pivot=pd.pivot_table(data=data2,index='產(chǎn)品類別',

columns='年',values='銷售金額',aggfunc=np.mean)print(round(result_pivot,0))任務(wù)實訓4-9鞏固訓練:利用read_excel導入c:\data\score.xls,完成:(1)將“area”列拆分成兩個新列,將其中的省份生成新列“province”,將其中的城市生成新列“city”。(2)制作頻數(shù)交叉表,統(tǒng)計不同省份不同性別的頻數(shù)。(3)制作數(shù)據(jù)透視表,統(tǒng)計不同城市不同性別對應(yīng)的數(shù)學的平均分。謝謝!第4章利用pandas進行數(shù)據(jù)分析4-5數(shù)據(jù)的正態(tài)性分析正態(tài)分布是最重要的一種概率分布,正態(tài)分布概念是由德國的數(shù)學家和天文學家棣莫佛于1733年首次提出的,但由于德國數(shù)學家高斯率先將其應(yīng)用于天文學家研究,故正態(tài)分布又叫高斯分布。正態(tài)分布有極其廣泛的實際背景,生產(chǎn)與科學實驗中很多隨機變量的概率分布都可以近似地用正態(tài)分布來描述。例如成年人的血壓、人群的身高或體重、人群的鞋碼、某個地區(qū)的年降水量等。1.正態(tài)分布的概念正態(tài)分布在幾何上的表現(xiàn)就是正態(tài)曲線,正態(tài)曲線是一個鐘型曲線,如標準正態(tài)分布均值為0,標準差為1對應(yīng)的標準正態(tài)曲線如圖所示。一、數(shù)據(jù)的正態(tài)分布1.正態(tài)分布的概念正態(tài)分布就是指隨機變量服從一個位置參數(shù)和尺度參數(shù)的概率分布,位置參數(shù)就是均值,尺度參數(shù)就是標準差。均值決定了正態(tài)曲線中心位置,當均值為正且絕對值越大時,說明曲線整體向右移動的距離就越大;反之,當均值為負且絕對值越大時,曲線整體向左移動的距離就越大。標準差決定了曲線的形狀,即標準差決定了曲線的“高矮胖瘦”。一、數(shù)據(jù)的正態(tài)分布1.正態(tài)分布的概念標準正態(tài)分布曲線下面積分布規(guī)律是:在

1.96~+1.96范圍內(nèi)曲線下的面積等于95%(即取值在這個范圍的概率為95%),在

2.58~+2.58范圍內(nèi)曲線下面積為99%(即取值在這個范圍的概率為99%)。因此,由np.random.randn()函數(shù)所產(chǎn)生的隨機樣本基本上取值主要在

1.96~+1.96之間,當然也不排除存在較大值的情形,只是概率較小而已。一、數(shù)據(jù)的正態(tài)分布2.正態(tài)分布曲線特點(1)集中性:正態(tài)曲線的高峰位于正中央,即均數(shù)所在的位置。(2)對稱性:正態(tài)曲線以均數(shù)為中心,左右對稱,曲線兩端永遠不與橫軸相交。(3)均勻變動性:正態(tài)曲線由均數(shù)所在處開始,分別向左右兩側(cè)逐漸均勻下降。一、數(shù)據(jù)的正態(tài)分布偏度和峰度是描述數(shù)據(jù)分布的兩個常用概念,可以用來描述數(shù)據(jù)分布與正態(tài)分布的偏離程度。二、正態(tài)分布的描述1.偏度用來描述數(shù)據(jù)分布的對稱性,正態(tài)分布的偏度為0。計算數(shù)據(jù)樣本的偏度,當偏度<0時,稱為負偏,數(shù)據(jù)出現(xiàn)左側(cè)長尾;當偏度>0時,稱為正偏,數(shù)據(jù)出現(xiàn)右側(cè)長尾;當偏度為0時,表示數(shù)據(jù)相對均勻的分布在平均值兩側(cè)。pandas提供了skew函數(shù)用來計算Series數(shù)據(jù)的偏度,skew函數(shù)的一般用法為:Series.skew()二、正態(tài)分布的描述2.峰度又稱峰態(tài)系數(shù),用來描述總體中所有取值分布形態(tài)陡緩程度的統(tǒng)計量,反映了峰部的尖度。當峰度系數(shù)大于0時,說明兩側(cè)極端數(shù)據(jù)較少,分布曲線更高更瘦,為尖頂曲線;當峰度系數(shù)小于0時,說明表示兩側(cè)極端數(shù)據(jù)較多,分布曲線更矮更胖,為平頂曲線。pandas提供了kurt函數(shù)用來計算Series數(shù)據(jù)的峰度,kurt函數(shù)的一般用法為:Series.kurt()二、正態(tài)分布的描述二、正態(tài)分布的描述因為計算峰度和偏度的數(shù)據(jù)是隨機生成,所以每一次運行的結(jié)果可能都會有所不同。數(shù)據(jù)服從正態(tài)分布是很多分析方法使用的前提條件,在進行假設(shè)檢驗、方差分析、回歸分析等分析操作前,一般首先要對數(shù)據(jù)的正態(tài)性進行分析。如果不滿足正態(tài)性特質(zhì),則需要考慮使用其他方法或?qū)?shù)據(jù)進行處理。三、正態(tài)分布的驗證1.通過直方圖進行正態(tài)性檢驗直方圖是一種統(tǒng)計報告圖,由一系列高度不等的縱向線段表示數(shù)據(jù)分布的情況,常用于驗證數(shù)據(jù)是否服從正態(tài)分布。服從正態(tài)分布的直方圖一般都有“中間高,兩邊對稱”的特點。三、正態(tài)分布的驗證1.通過直方圖進行正態(tài)性檢驗Python中繪圖庫matplotlib中的hist函數(shù)可以用來繪制直方圖,其中參數(shù)bins表示直方圖的柱形的數(shù)量,如果不設(shè)置也可以用默認設(shè)置。繪制直方圖的一般方法為:importmatplotlib.pyplotaspltdata.hist(bins=num)plt.show()三、正態(tài)分布的驗證importmatplotlib.pyplotasplt表示導入matplotlib庫種模塊pyplot。bins=num表示設(shè)置直方圖的柱形的數(shù)量。plt.show()表示顯示繪圖結(jié)果。1.通過直方圖進行正態(tài)性檢驗三、正態(tài)分布的驗證示例代碼如下:importmatplotlib.pyplotaspltdata.hist()plt.show()2.通過正態(tài)性檢驗指標進行正態(tài)性檢驗數(shù)據(jù)是否服從正態(tài)分布,僅僅通過直方圖來觀察是不夠的,一般還需要通過一些具體的方法來驗證,如正態(tài)分布的K-S(Kolmogorov-Smirnov)檢驗。正態(tài)分布的K-S檢驗是基于累計分布函數(shù),通過對兩個分布之間的差異進行分析,用以檢驗對象是否服從正態(tài)分布。三、正態(tài)分布的驗證1.通過直方圖進行正態(tài)性檢驗三、正態(tài)分布的驗證因為繪圖的數(shù)據(jù)集來自于隨機標準正態(tài)分布,所以根據(jù)標準正態(tài)分布曲線分布規(guī)律,有99%數(shù)據(jù)都集中在-3到3之間,從最終的結(jié)果來看,也符合這一規(guī)律。2.通過正態(tài)性檢驗指標進行正態(tài)性檢驗Scipy庫stats模塊提供了kstest函數(shù)可以執(zhí)行K-S檢驗。當K-S檢驗計算結(jié)果概率值p大于0.05時,說明服從正態(tài)分布。當K-S檢驗計算結(jié)果概率值p小于0.05時,說明不服從正態(tài)分布。三、正態(tài)分布的驗證2.通過正態(tài)性檢驗指標進行正態(tài)性檢驗kstest函數(shù)的一般用法為:fromscipy.statsimportkstestkstest(rvs,cdf)其中,rvs表示檢驗數(shù)據(jù),一般為DataFrame中一列數(shù)據(jù)。cdf表示檢驗方法,這里取“norm”,即表示正態(tài)性檢驗。Kstest的結(jié)果有兩個值,其中第2個值是概率值p,數(shù)據(jù)是否服從正態(tài)正態(tài)分布主要看這個值,如果大于0.05,說明服從正態(tài)分布。三、正態(tài)分布的驗證2.通過正態(tài)性檢驗指標進行正態(tài)性檢驗三、正態(tài)分布的驗證示例代碼如下:fromscipy.statsimportkstestks_result=kstest(data,'norm')p=ks_result[1] #取出kstest計算結(jié)果的第2個值ifp>0.05:print("正態(tài)性k-s檢驗的p值=%.4f,所以數(shù)據(jù)服從正態(tài)分布。"%p)else:print("正態(tài)性k-s檢驗的p值=%.4f,所以數(shù)據(jù)不服從正態(tài)分布。"%p)2.通過正態(tài)性檢驗指標進行正態(tài)性檢驗三、正態(tài)分布的驗證任務(wù)實訓4-10:利用numpy,完成:(1)模擬拋擲10000次2個骰子,統(tǒng)計2個骰子的和,根據(jù)結(jié)果生成一個Series,并查看前10條數(shù)據(jù)。(2)統(tǒng)計Series所有結(jié)果的頻數(shù),并分析其規(guī)律。(3)計算該Series的峰度和偏度,并分析其特點。任務(wù)實訓4-10(1)具體代碼如下:data1_1=np.random.randint(1,7,10000)data1_2=np.random.randint(1,7,10000)data1=pd.Series(data1_1+data1_2)print("初始數(shù)據(jù)為:\n",data1[:10])任務(wù)實訓4-10(1)任務(wù)實訓4-10(2)具體代碼如下:result=data1.value_counts().sort_index(ascending=True)print("兩個骰子和的統(tǒng)計結(jié)果為:\n",result)任務(wù)實訓1(2)根據(jù)概率學,兩個骰子和為2、3、4、5、6、7、8、9、10、11、12的概率分別為:1/36、2/36、3/36、4/36、5/36、6/36、5/36、4/36、3/36、2/36、1/36,其中概率最大為7點,這也正如統(tǒng)計的頻數(shù)結(jié)果,7點出現(xiàn)次數(shù)最多。任務(wù)實訓4-10(3)具體代碼如下:print("偏度=",data1.skew())print("峰度=",data1.kurt())任務(wù)實訓1(3)偏度非常接近與0,說明沒有左偏和右偏的趨勢,從統(tǒng)計的頻數(shù)中也可以大致看出分布是較為均勻的,分別向左右兩側(cè)逐漸均勻下降。峰度明顯小于0,說明中間的數(shù)據(jù)并不是非常集中在中間位置,而是較為分散,是平頂曲線。這一點也可以從統(tǒng)計的頻數(shù)中看出,和為7是中間位置,其頻數(shù)最高,和為7兩邊的頻數(shù)并沒有迅速減少,而是慢慢減少。任務(wù)實訓4-11:將data1重新命名為data2,繪制直方圖,分別設(shè)置直方圖柱形數(shù)量為9、10、11、12,并比較其效果。任務(wù)實訓4-11具體代碼如下:data2=data1foriinrange(9,13):data2.hist(bins=i)plt.title("bin=%d"%i)#plt.title表示設(shè)置圖表的標題

plt.show()任務(wù)實訓4-11在繪制直方圖時,直方圖的柱形數(shù)量參數(shù)bins最好等于數(shù)據(jù)的類別數(shù)量,比如任務(wù)2中的兩個骰子和的結(jié)果只有11種,所以將bins設(shè)為11為宜。如果將bins設(shè)為其他值,也可以繪制直方圖,但是左右對稱的效果會略差。任務(wù)實訓4-12:利用read_excel導入supermarket.xlsx(supermarket.xlsx存放在c:\data路徑中)中的“銷售統(tǒng)計”工作表(第1張工作表),導入時將“客戶ID”列設(shè)為索引,完成:(1)繪制“單價”列的直方圖,判斷“單價”列是否服從正態(tài)分布。(2)定義函數(shù)ks_normal,該函數(shù)有一個參數(shù)input,input表示需要判斷的數(shù)據(jù)列,函數(shù)ks_normal的作用可以通過正態(tài)性ks判斷是否正態(tài)分布。(3)利用函數(shù)ks_p判斷“單價”列是否服從正態(tài)分布。任務(wù)實訓3(1)具體代碼如下:pd.set_option('display.max_columns',None)pd.set_option('display.width',None)pd.set_option('display.unicode.east_asian_width',True)data3

=pd.read_excel("c:\data\supermarket.xlsx",index_col='客戶ID')print("導入的數(shù)據(jù)為:\n",data3.head())data3['單價'].hist()plt.show()任務(wù)實訓4-12(1)從直方圖來看,有300筆以上訂單的單價較低,說明低價產(chǎn)品占了絕大多數(shù),所以“單價”列并不符合正態(tài)分布。任務(wù)實訓4-12(2)具體代碼如下:defks_normal(input):fromscipy.statsimportkstestp=kstest(input,'norm')[1]ifp>0.05:print("正態(tài)性k-s檢驗的p值=%.4f,所以數(shù)據(jù)服從正態(tài)分布。"%p)else:print("正態(tài)性k-s檢驗的p值=%.4f,所以數(shù)據(jù)不服從正態(tài)分布。"%p)任務(wù)實訓4-12(3)具體代碼如下:print("'單價'列的正態(tài)性檢驗結(jié)果為:")ks_normal(data3['單價'])任務(wù)實訓4-12(3)從k-s檢驗結(jié)果來看,“單價”列并不符合正態(tài)分布,這一結(jié)論與直方圖的結(jié)論一致。鞏固訓練:利用read_excel導入c:\data\score.xls,完成:(1)繪制“math”列的直方圖,判斷“math”列是否服從正態(tài)分布。(2)通過K-S檢驗判斷“math”列是否服從正態(tài)分布。謝謝!第4章利用pandas進行數(shù)據(jù)分析4-6數(shù)據(jù)的相關(guān)性分析自然界許多事物之間總是相互聯(lián)系的,并可以通過一定的數(shù)量關(guān)系反映出來,這種依存關(guān)系一般可以分為兩種:函數(shù)關(guān)系和相關(guān)關(guān)系。函數(shù)關(guān)系是指事物之間存在著嚴格的依存關(guān)系,變量之間可以用函數(shù)y=f(x)表示出來,如V=IR,S=πR2等。如果所研究的事物或現(xiàn)象之間,存在著一定的數(shù)量關(guān)系,即當一個變量取一定數(shù)值時,另外幾個與之相對應(yīng)的變量按照某種規(guī)律在一定的范圍內(nèi)變化,這就是相關(guān)關(guān)系。變量之間不穩(wěn)定、不精確的變化關(guān)系稱為相關(guān)關(guān)系。相關(guān)關(guān)系反映出變量之間雖然相互影響,具有依存關(guān)系,但彼此之間卻不像函數(shù)那樣一一對應(yīng),如人的身高與和體重、學生成績與智商。一、相關(guān)關(guān)系的概念在復(fù)雜的社會中,各種事物之間的聯(lián)系大多體現(xiàn)為相關(guān)關(guān)系,而不是函數(shù)關(guān)系,這主要是因為影響一個變量的因素往往有很多,而其中的一些因素還沒有被完全認識,因此,這些偶然因素導致了變量之間的不確定性。一、相關(guān)關(guān)系的概念相關(guān)分析是研究兩個或兩個以上處于同等地位變量之間的相關(guān)關(guān)系的統(tǒng)計分析方法。例如人的身高和體重,相關(guān)分析在工農(nóng)業(yè)、水文、氣象、社會經(jīng)濟和生物學等方面都有應(yīng)用。二、相關(guān)分析相關(guān)分析通常有2種方法,一種是散點圖,另一種是相關(guān)系數(shù)。散點圖以橫軸表示自變量,以縱軸表示因變量,將兩個變量之間的對應(yīng)關(guān)系以坐標點的形式逐一標在直角坐標系中。相關(guān)系數(shù)是一個研究變量之間相關(guān)程度的統(tǒng)計指標。二、相關(guān)分析1.利用散點圖進行相關(guān)分析(1)強相關(guān)和弱相關(guān)相關(guān)關(guān)系從強弱程度上分,分為強相關(guān)和弱相關(guān)。若兩個變量的關(guān)系較為密切,就稱為強相關(guān),若兩個變量的關(guān)系較為疏遠,就稱為弱相關(guān)。從散點圖來看,如果呈現(xiàn)窄長且密集時,就是強相關(guān);如果散點圖呈現(xiàn)寬松且稀疏時,就是弱相關(guān)。二、相關(guān)分析1.利用散點圖進行相關(guān)分析(2)正相關(guān)和負相關(guān)如果散點分布在一條直線附件,稱為線性相關(guān),線性相關(guān)屬于強相關(guān)。線性相關(guān)從相關(guān)方向上可分為正相關(guān)和負相關(guān)。正相關(guān)是指一個變量增加,另一個變量隨之增加,或一個變量數(shù)值減少,另一個變量隨之減少,即兩個變量的變化方向是相同的。負相關(guān)是指一個變量增加,另一個變量反而減少,或一個變量減少,另一個變量反而增加,即兩個變量的變化方向是相反的。二、相關(guān)分析1.利用散點圖進行相關(guān)分析(2)正相關(guān)和負相關(guān)從圖形上來看,當散點圖呈現(xiàn)“左下→右上”趨勢的時候,就是

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論