數據透視:Excel數據透視和Python數據透視

  • 2022 年 2 月 28 日
  • 筆記

©作者 | leo

早於90年代初,數據透視的概念就被提出,主要的應用場景是處理大量數據的互動式匯總查詢,它實現了行或列的移動,使得行可以移到列上,列移到行上,從而根據使用者的訴求取對關注的數據子集進行排序,分組,篩選,匯總等等,它以強大而靈活的數據查詢方式被廣泛推廣開來,人們可以自定義計算公式,展開或者摺疊需要關注的結果數據集,查看數據摘要資訊。

今天我們討論的是兩個均有數據透視功能的工具,也是時下最為常見和流行的數據分析工具:Excel和Python,希望能夠通過本文讓您加深對數據透視的理解和使用。文中也會在合適的地方講二者進行對比,希望能對讀者有一定啟發。

首先我們來介紹下Excel中的數據透視表的使用方法。

01 Excel數據透視簡介

數據源的基本要求:

Excel使用的數據源是有一定的格式要求的,並非任何數據都能夠直接進行數據透視,這點來說,python對數據的選擇則更為靈活。

● 數據源首行需要是標題行

如果沒有標題行,則在後面的欄位匯總就會產生問題,因此這是首要條件。

● 不能包含空行和空列

因為透視表的數據截取是以空行和空列作為停止的條件的。

● 不能包含空的單元格

數據透視主要是對數值型進行匯總、文本型計數,空的單元格會對匯總結果產生影響。

● 不能包含合併單元格

合併的單元格會導致讀取失敗。

● 不能包含同類欄位

02 數據透視表使用方法

創建數據透視表

下面介紹如何快速建立數據透視表,首先通過ctrl+shift+⬇和ctrl+shift+向左箭頭選中數據區域,然後單擊菜單欄下的插入-數據透視表,在彈出框中選擇透視表的位置是在新的工作表還是現有工作表的某個區域,位置欄旁邊的箭頭用於設定區域。

 

新生成的透視表允許我們對不同的欄位進行各種數學匯總,只需要將不同的維度欄位拖入對應的欄目中即可,比如查看不同月份、季度的銷量、銷售額情況可以將銷售日期欄位拖入行中,將銷售數量拖入值中,並選擇加和匯總。

 

數據刷新

Excel數據透視表使用的是快取數據,當數據源有更新時,並不會自動刷新數據,需要手動刷新數據源,根據改動類型分為:數據變動,數據區域變動。

數據變動

指的是在現有的數據區域內,對數據做了改動,需要在透視表上面進行更新。可以通過手動刷新,可以通過點擊透視表選項下的刷新按鈕自動更新數據。

 

數據區域變動

指的是有新的數據添加,此時數據區域發生了變化,無法通過手動刷新數據來實現數據的更新。此時,可以通過刷新按鈕旁邊的【更改數據源】選項,重新選擇數據區域來實現。

 

數據分組

數值和文本分組

如果我們想將不同年齡段的人群進行分組,不同姓氏的人群分組,這時就需要應用到數值和文本分組了。

如下圖,屬於文本型分組,需要選擇需要的欄位,連續欄位直接圈選,非連續欄位可以使用ctrl鍵。

 

對於數值型分組,由於數值是有規律的,因此選擇創建組之後會自動進行分組。

日期分組

在透視表上面右擊日期項,根據需要的時間頻度進行選擇。

 

常用的值顯示方式

Excel透視表提供值顯示方式,可以滿足多種不同的數據對比和數據構成計算分析。

 

下面介紹常用的幾種計算方式:

● 總計的百分比

每個數據占所在行列總和的百分比

● 行/列總百分比

每個數據占所在行或列所有項總和的百分比

● 百分比

根據某個欄位完成百分比對比計算

● 父行匯總百分比

每個數據項占該列父級項總和的百分比

● 父級匯總百分比

每個數據項占該列和行父級項總和的百分比

● 差異百分比

每個欄位與固定被選取欄位的差百分比

03 切片的使用

切片器是Excel2010引入的新功能,它提供了更為強大的數據交互能力,比起單純的數據篩選,使用更加流暢和靈活。

多表聯動篩選

使用前提

Excel2013版本以上,使用同一份數據源建立的透視表才能進行多表聯動。

使用方法

在透視表選項卡下選擇插入切片器,然後選擇要呈現的欄位,切片器會自動將數據載入到切片窗口。

 

設置多表聯動,右擊切片器窗口,選擇報錶鏈接,就可以選擇切片器關聯的透視表了。

 

2.1 Python數據透視功能簡介

Python的數據透視功能主要通過pivot_table()函數實現,接下來主要介紹它的相關使用。

pivot_table()函數參數介紹

在python中,主要通過pandas裡面pivot_table()函數來進行數據透視,讓我們首先了解下該方法的主要參數功能:

完整的pivot_table()表達式如下

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

● data

數據源dataframe對象

● index

指定分組的列,相當於行索引

pt = pd.pivot_table(p_data,index=[‘銷售日期’])

 

● values

需要進行聚合運算的數值欄位

pt = pd.pivot_table(p_data,index=[‘銷售日期’],values=[‘銷售數量’])

 

● aggfunc

指定聚合方法,默認求和,既可以使用字典的形式對不同欄位進行不同的運算方法,也可以對同個欄位進行不同的運算方法,同時也可以使用自定義函數來作為聚合方法運算。

pt = pd.pivot_table(p_data,index=[‘銷售日期’],values=[‘銷售數量’],aggfunc=[np.mean,len])

 

● columns

添加列索引,更細化的展示數據的匯總情況

pt = pd.pivot_table(p_data,index=[‘銷售日期’],columns=[‘產品名稱’], values=[‘銷售數量’],aggfunc=[np.mean,len])

 

● fill_value

用於填充缺失值

pt = pd.pivot_table(p_data,index=[‘銷售日期’],fill_value=0,columns=[‘產品名稱’], values=[‘銷售數量’],aggfunc=[np.mean,len])

 

通過了解pivot_table()函數的基本參數,可以發現,通過index和columns參數,能夠自由的選取不同欄位進行Excel當中的行列互換匯總計算,比如百分比的計算,我們可以通過自定義函數,添加到aggfunc參數中,應用到所有相關欄位。

高級透視功能

一旦通過上述設置得到透視數據後,就可以使用高級透視功能進行數據過濾。

比如想查看Manger欄位是Debra Henley下的所有數據

pt.query(‘Manager == [“Debra Henley”]’)

 

篩選status(狀態)是”pending”和”won”的數據資訊

pt.query(‘Status == [“pending”,”won”]’)

 

通過以上展示,可以發現Excel在處理數據透視方便具有更好的交互性和數據呈現能力,缺點是數據的匯總相對比較固定,不具備更多的靈活度,因此對於數據分析並不複雜的應用場景,選擇Excel比較合適。

而Python在處理數據透視方面,計算能力和欄位的靈活組合方面遠遠勝於Excel,因此如果需要複雜的數據透視功能,可以通過python來實現。

此外,python相較於Excel透視更為強大的一點是python的時間處理功能,也就是時間序列的處理,對於金融從業者來說,python的時間序列處理能夠更為精細化的展示數據透視結果,限於篇幅不做進一步展開。