數(shù)據(jù)分析—一文看懂?dāng)?shù)據(jù)透視表(Excel&Pandas-pivot_table實(shí)現(xiàn))

【導(dǎo)語】也許大多數(shù)人都知道Excel中的數(shù)據(jù)透視表,也體會(huì)到了它的強(qiáng)大功能,那么Pandas也提供了一個(gè)類似的功能,也就是pivot_table。因?yàn)榭紤]到直接學(xué)pivot_table會(huì)有點(diǎn)難度,所以本篇文章將由淺入深的先通過excel實(shí)現(xiàn)透視表,慢慢地過渡到利用pandas來實(shí)現(xiàn)。

一、 什么是數(shù)據(jù)透視表

透視表是一種可以對(duì)數(shù)據(jù)動(dòng)態(tài)排布并且分類匯總的表格格式。利用透視表可以快速地進(jìn)行分類匯總,自由組合字段聚合計(jì)算。

二、使用excel透視表和pandas實(shí)現(xiàn)的區(qū)別

  • excel:
    只需要拖拉拽就能實(shí)現(xiàn),簡單易操作
  • pandas:
    更快(一旦設(shè)置之后)
    自行說明(通過查看代碼,你將知道它做了什么)
    易于生成報(bào)告或電子郵件
    更靈活,因?yàn)槟憧梢远ㄖ凭酆虾瘮?shù)

使用數(shù)據(jù)透視表的一個(gè)挑戰(zhàn)是,你需要確保你理解你的數(shù)據(jù),并清楚地知道你想通過透視表解決什么問題。其實(shí),雖然pivot_table看起來只是一個(gè)簡單的函數(shù),但是它能夠快速地對(duì)數(shù)據(jù)進(jìn)行強(qiáng)大的分析。

三、excel實(shí)現(xiàn)數(shù)據(jù)透視表

1、創(chuàng)建數(shù)據(jù)透視表

其實(shí)非常的簡單,只需要選定我們想要進(jìn)行透視的表,然后點(diǎn)擊菜單欄中的插入透視表。

透視表中有五個(gè)基本概念:
篩選:你想要將什么進(jìn)行分組,比如我想看一下不同供應(yīng)商的一些信息,那么就是按照供應(yīng)商進(jìn)行篩選
:列值,一般是用時(shí)間序列值
:行值,你想要對(duì)什么內(nèi)容進(jìn)行展開,比如我想看不同時(shí)間段的不同原料
:具體要看什么值,比如銷售額等

在本文中,將會(huì)跟蹤一個(gè)銷售渠道(也稱為漏斗)?;镜膯栴}是,一些銷售周期很長(可以想一下“企業(yè)軟件”、“資本設(shè)備”等),而管理者想更詳細(xì)地了解它一整年的情況。



其實(shí)我們只需要將不同的字段拖入到不同的區(qū)域中即可,為了方便展示數(shù)據(jù),我們可以右鍵關(guān)鍵字段,然后將其選擇上移,這樣我們可以實(shí)現(xiàn)數(shù)據(jù)的多級(jí)展示。


這里我們注意一個(gè)左下角的功能,叫做延遲布局更新,這個(gè)當(dāng)我們的數(shù)據(jù)量比較大的時(shí)候,比如說十萬個(gè)數(shù)據(jù),我們就可以選定這個(gè)延遲更新,其實(shí)就是設(shè)置當(dāng)我們的字段設(shè)置完成之后才進(jìn)行數(shù)據(jù)更新,可以最大程度保證我們操作的流暢性。

如果我們對(duì)數(shù)據(jù)透視表的順序有些不滿意,那我們就要按照我們自己的意愿進(jìn)行順序的修改,比如說我們選擇升序和降序。



當(dāng)然了,我們也可以直接在選定區(qū)域的時(shí)候直接選擇插入一個(gè)透視圖,一般默認(rèn)是柱狀圖。

所以我們可以與透視表進(jìn)行對(duì)比一下:
篩選:你想要將什么進(jìn)行分組,比如我想看一下不同供應(yīng)商的一些信息,那么就是按照供應(yīng)商進(jìn)行篩選
:其實(shí)就是透視表當(dāng)中的列值,橫坐標(biāo)軸是什么,一般是用時(shí)間序列值
圖例:也就是系類,等同于透視表當(dāng)中的行值,你想要對(duì)什么內(nèi)容進(jìn)行展開,比如我想看不同時(shí)間段的不同原料
:具體要看什么值,比如合格量等


這就是數(shù)據(jù)透視表與數(shù)據(jù)透視圖的基本操作,這是比較簡單的基礎(chǔ)內(nèi)容。

2、更改數(shù)據(jù)源

數(shù)據(jù)透視表可以隨時(shí)隨地進(jìn)行數(shù)據(jù)源的更改,數(shù)據(jù)源變更后進(jìn)行簡單的更新就可反映到數(shù)據(jù)報(bào)表中,有兩種方式,第一種是數(shù)據(jù)透視表刷新:如果數(shù)據(jù)源中的數(shù)值進(jìn)行了更新,刷新即可。如果是數(shù)據(jù)源的結(jié)構(gòu)或布局變更了,這時(shí)就采用更改數(shù)據(jù)源的方式。


3、插入計(jì)算字段

計(jì)算字段極大擴(kuò)展了數(shù)據(jù)透視表的計(jì)算功能,比如原始數(shù)據(jù)表中有一列數(shù)據(jù)為銷售單價(jià),有一列數(shù)據(jù)為數(shù)量。那么在數(shù)據(jù)透視表中可以通過計(jì)算字段輸入公式”=單價(jià)*數(shù)量“,來求出銷售額。



區(qū)域是數(shù)據(jù)透視表的核心部分,通過數(shù)據(jù)透視表提供的強(qiáng)大數(shù)據(jù)計(jì)算功能,可以使用多種匯總方式和值顯示方式來計(jì)算值字段數(shù)據(jù)。比如,百分比,各種比率等。

上面就是用excel來實(shí)現(xiàn)數(shù)據(jù)透視表的過程,它不僅可以按照不同的方式匯總數(shù)據(jù),還可以按照不同的方式顯示數(shù)據(jù),從而更清晰的看出數(shù)據(jù)之間的關(guān)系和邏輯。

四、pandas實(shí)現(xiàn)數(shù)據(jù)透視表

pandas中的函數(shù)pivot_table可以實(shí)現(xiàn)數(shù)據(jù)透視表,它的參數(shù)如下,下面我們來一個(gè)個(gè)的學(xué)習(xí)。我們的數(shù)據(jù)源和上面excel的一樣。

pivot_table(data, values=None, index=None, columns=None,aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

  • 參數(shù)解釋【注:values、index、columns、aggfunc、最為關(guān)鍵,它們分別對(duì)應(yīng)excel透視表中的值、行、列、值匯總方式】
data:dataframe 格式的數(shù)據(jù)
values:需要匯總計(jì)算的列,可多選,多選用[ ]
index:行分組鍵,一般是用于分組的列名,作為結(jié)果DataFrame的行索引
columns:列分組鍵,一般是用于分組的列名,作為結(jié)果DataFrame的列索引
aggfunc:聚合函數(shù)或函數(shù)列表,默認(rèn)為平均值!
fill_value:設(shè)定缺失替換值
margins:是否添加行列的總計(jì)
dropna:默認(rèn)為True,如果列的所有值都是NaN,將不作為計(jì)算列,F(xiàn)alse時(shí),被保留
margins_name:匯總行列的名稱,默認(rèn)為All

1、讀取數(shù)據(jù)
import pandas as pd
import numpy as np
df = pd.read_excel("./sales-funnel.xlsx")
df.head()

我們將上表中“Status”列定義為category,并按我們想要的查看方式設(shè)置順序(可選)

df["Status"] = df["Status"].astype("category")
df["Status"].cat.set_categories(["won","pending","presented","declined"],inplace=True)
df.info()
2、建立簡單索引
pd.pivot_table(df,index=["Name"])

此外,可以有多個(gè)索引。實(shí)際上,大多數(shù)的pivot_table參數(shù)可以通過列表獲取多個(gè)值。

pd.pivot_table(df,index=["Name","Rep","Manager"])
3、實(shí)現(xiàn)數(shù)據(jù)聚合

我們上面將“Name”,“Rep”列和“Manager”列進(jìn)行對(duì)應(yīng)分組,那么現(xiàn)在來實(shí)現(xiàn)數(shù)據(jù)聚合。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"])

“Price”列會(huì)自動(dòng)計(jì)算數(shù)據(jù)的平均值,但是我們也可以對(duì)該列元素進(jìn)行計(jì)數(shù)或求和。要添加這些功能,使用aggfunc和np.sum就很容易實(shí)現(xiàn)。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],aggfunc=np.sum)
pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],aggfunc=[np.mean,len])

aggfunc可以包含很多函數(shù),下面就讓我們嘗試一種方法,即使用numpy中的函數(shù)mean和len來進(jìn)行計(jì)算。


4、定義列

如果我們想通過不同產(chǎn)品來分析銷售情況,那么變量“columns”將允許我們定義一個(gè)或多個(gè)列。
pivot_table中一個(gè)令人困惑的地方是“columns(列)”和“values(值)”的使用。我們只要記住,變量“columns(列)”是可選的,它提供一種額外的方法來分割你所關(guān)心的實(shí)際值。然而,聚合函數(shù)aggfunc最后是被應(yīng)用到了變量“values”中你所指定的字段上。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],
               columns=["Product"],aggfunc=[np.sum])

結(jié)果里有很多NaN,如果想移除它們,我們可以使用“fill_value”將其設(shè)置為0。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],
               columns=["Product"],aggfunc=[np.sum],fill_value=0)
5、查看總和

如何查看一些總和數(shù)據(jù)呢?相當(dāng)于excel中的總計(jì),通過“margins=True”就可以為我們實(shí)現(xiàn)這種功能。

pd.pivot_table(df,index=["Manager","Rep","Product"],
               values=["Price","Quantity"],
               aggfunc=[np.sum,np.mean],fill_value=0,margins=True)

下面,讓我們以更高的管理者角度來分析此渠道。根據(jù)我們前面對(duì)category的定義,注意現(xiàn)在“Status”是如何排序的。

pd.pivot_table(df,index=["Manager","Status"],values=["Price"],
               aggfunc=[np.sum],fill_value=0,margins=True)
6、不同值執(zhí)行不同的函數(shù)

為了對(duì)你選擇的不同值執(zhí)行不同的函數(shù),你可以向aggfunc傳遞一個(gè)字典。

table = pd.pivot_table(df,index=["Manager","Status"],columns=["Product"],values=["Quantity","Price"],
               aggfunc={"Quantity":len,"Price":[np.sum,np.mean]},fill_value=0)
table
7、透視表過濾

如果只想查看一個(gè)管理者(例如Debra Henley)的數(shù)據(jù),可以這樣過濾:

table.query('Manager == ["Debra Henley"]')

查看所有的暫停(pending)和成功(won)的交易,如下:

table.query('Status == ["pending","won"]')

實(shí)現(xiàn)同時(shí)過濾多個(gè)條件:

希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,每天進(jìn)步一點(diǎn)點(diǎn),加油?。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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