Python編程&數(shù)據(jù)科學(xué)入門 Lesson6

第六課 Pandas 進(jìn)階

* 本課主要內(nèi)容:數(shù)據(jù)的分組和聚合

01.分組和聚合的思想

  • 通過統(tǒng)計多篇文章詞頻的例子,來了解分組和聚合的思想方法。

02.鳶尾花案例

  • groupby 方法
  • agg方法
  • apply方法

03.嬰兒姓名案例

  • 每年最流行的男孩女孩名字所占的百分比變化趨勢如何?
  • 為何這一趨勢逐年降低的?

01.分組和聚合的思想

數(shù)據(jù)的分組&聚合 -- 什么是groupby 技術(shù)?

  • 在數(shù)據(jù)分析中,我們往往需要在將數(shù)據(jù)拆分,在每一個特定的組里進(jìn)行運(yùn)算。比如根據(jù)教育水平和年齡段計算某個城市的工作人口的平均收入。
  • pandas中的groupby提供了一個高效的數(shù)據(jù)的分組運(yùn)算。
  • 我們通過一個或者多個分類變量將數(shù)據(jù)拆分,然后分別在拆分以后的數(shù)據(jù)上進(jìn)行需要的計算
  • 我們可以把上述過程理解為三部:
    *1.拆分?jǐn)?shù)據(jù)(split)
    *2.應(yīng)用某個函數(shù)(apply)
    *3.匯總計算結(jié)果(aggregate)


    Paste_Image.png

寫成代碼的話:

Paste_Image.png

02.案例一 :Iris鳶尾花數(shù)據(jù)集

a.導(dǎo)入pandas包
* import pandas as pd
b.導(dǎo)入鳶尾花數(shù)據(jù)
* Iris = pd.read_csv( 'iris.txt' )
*iris.head() # 前五行數(shù)據(jù)
Paste_Image.png
c. 統(tǒng)計每個品種的數(shù)據(jù)量
* iris.species.value_counts()
Paste_Image.png

2.1 分組運(yùn)算 groupby 方法 -- 使用內(nèi)置函數(shù)

鳶尾花數(shù)據(jù)中包括了3個不同的品種150個觀測對象,數(shù)據(jù)分析中我們往往對一個品種的特性更感興趣而不是每一個個體的數(shù)據(jù)描述。
假如一個植物園管理員提出這個問題:

按品種劃分,每個品種的花萼,花瓣的長度和寬度的最大值分別是多少?

我們應(yīng)該如何回答?

使用上述groupby的思想,我們可以將數(shù)據(jù)劃分為3個小塊,每個小塊包含50個觀測數(shù)據(jù)。然后使用max函數(shù)得到各個測量值的最大值,然后進(jìn)行匯總。

Paste_Image.png

* size方法查看每個group的大小*

2.2 使用自定義函數(shù)進(jìn)行聚合運(yùn)算 -- agg 方法

  • 當(dāng)計算變得復(fù)雜時,內(nèi)置函數(shù)可能無法處理
  • 我們需要自定義一個函數(shù)來進(jìn)行計算, 傳入一個數(shù)組做參數(shù),返回一個標(biāo)量的結(jié)果。
  • groupby對象的agg/aggregate方法可以實(shí)現(xiàn)上述功能。
    計算每個品種所有屬性(花瓣、花萼的長度和寬度)數(shù)值的跨度范圍,即最大值減去最小值
Paste_Image.png

我們還可以同時引用多個函數(shù),將函數(shù)名字放入一個列表即可,內(nèi)置函數(shù)名需要用引號

Paste_Image.png

針對不同的列,應(yīng)用不同的聚合函數(shù)

Paste_Image.png

2.3 更廣泛的分組運(yùn)算 -- apply方法

  • agg 方法將一個函數(shù)使用在一個數(shù)列上,然后返回一個標(biāo)量的值。
  • apply 是一個更一般化的方法:將一個數(shù)據(jù)分拆-應(yīng)用-匯總
    提取每個品種前n個觀測值作為一個樣本
Paste_Image.png

使用agg會報錯,試一下apply方法:

Paste_Image.png

階段小結(jié):

  • 上面的例題主要學(xué)習(xí)了如何將數(shù)據(jù)根據(jù)某些條件分拆為幾個子數(shù)據(jù),然后在每個子數(shù)據(jù)上進(jìn)行計算從而得到所要的結(jié)果。
  • 主要思想是分拆-應(yīng)用-匯總。
  • 對于一些簡單的計算,比如最大值最小值的計算,我們可以直接使用groupby之后采用相應(yīng)的內(nèi)置方法。
  • 對于一些更為復(fù)雜的計算,我們需要自己定義函數(shù)然后應(yīng)用到拆分后的子數(shù)據(jù)上。根據(jù)具體要求來決定使用agg方法還是apply方法。

03.案例2:美國嬰兒名字?jǐn)?shù)據(jù)

Paste_Image.png

運(yùn)行以后的結(jié)果(前五行)

Paste_Image.png

利用info查看數(shù)據(jù)信息:

Paste_Image.png

根據(jù)多個屬性分組數(shù)據(jù)

Paste_Image.png

在不同的年份不同性別中,計算每個名字所占的百分比

Paste_Image.png

增加排序(rank)

Paste_Image.png

每年最流行的男孩女孩名字所占的百分比變化趨勢如何?

  • 思路:可以使用matlibplot畫出rank1的男孩女孩的名字每年所占總?cè)藬?shù)的百分比

使用Matplotlib工具繪圖

  • 下面的線圖(line plot)由matlibplot實(shí)現(xiàn),我們可以逐漸添加比如圖標(biāo)題,x軸和y軸的標(biāo)簽等等使圖形更加美觀
Paste_Image.png

繪制圖形

Paste_Image.png

女生的名字流行折線圖

Paste_Image.png

為什么歷史上最流行的男孩女孩名字所占的比重逐年降低?

Paste_Image.png

使用to_farme將series轉(zhuǎn)化為DataFrame格式

Paste_Image.png

使用reset_index()

Paste_Image.png

作圖

Paste_Image.png

運(yùn)行

Paste_Image.png

結(jié)論:可選擇的名字逐年增加,所以流行名字的占比逐年降低

  • 從數(shù)據(jù)中快速看到一個現(xiàn)象是我們學(xué)習(xí)數(shù)據(jù)分析的一個必要技能,讓數(shù)據(jù)告訴我們發(fā)生的現(xiàn)象。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容