close

【Pandas】pandas.pivot_table資料透視:python的樞紐分析表

一、前言

Excel的樞紐分析表很好用!其實python的pandas套件中也有快速建立樞紐分析表的方法,

而且更快速且更靈活,接下來就帶大家進入pandas中pivot_table函數的世界吧!

等等的教學分為兩部分:1.樞紐分析表的概念、2.用python建立樞紐分析表(pandas.pivot_table)

 

進入教學前,不要忘了訂閱按讚分享唷!

部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ

 

 

 

二、樞紐分析表組成:資料透視概念


其實基本的觀念很簡單,今天你有一張dataframe(資料表,df),且你想自由的透視裡面的資料。

這樣說可能很模糊,這邊說的透視就是橫斷面的窺探資料,假如你的df裡面有一堆欄位,而今天你想自由的拆解並重組這些欄位,就需要用到樞紐分析表。

舉例如下圖,你的資料表有close欄位裡面放著報酬率,有month欄位裡面放著月份等等

image

 

而今天你想知道這檔股票在哪一年的哪個月份有最高的報酬,

你會希望index的地方放年份,在columns的地方放著月份。

而裡面的資料是當年份且當月報酬率的加總最吧!就像下面這樣。

如此一來就能一目了然的知道哪年哪月有著最好的報酬,同時也能進行季節性分析。

image

 

 

三、用python建立樞紐分析表(pandas.pivot_table)


就繼續使用上面的例子來進行簡單教學(詳細的季節性分析及檢定之後會出篇文章給大家參考)。

完整程式碼

import pandas
import numpy
import datetime
import investpy

# 下載股價資料
df = investpy.get_stock_historical_data(stock='2330',
                                        country='Taiwan',
                                        from_date='01/01/2010',
                                        to_date='01/01/2020')

df = df[['Close']] # 只要收盤價


df_C = df.copy() # 


df_C = (df_C - df_C.shift(1)) / df_C.shift(1) # 計算每日報酬
df_C['year'] = df_C.index.year # 取得日期年
df_C['month'] = df_C.index.month # 取得日期月
df_C['season'] = 5 - (df_C['month'] <= 3)*1 - (df_C['month'] <= 6)*1 - (df_C['month'] <= 9)*1 - (df_C['month'] <= 12)*1 # 季


df_pt = df_C.pivot_table('Close', ['year'], ['month'], 'sum') # 建立樞紐分析表

使用investpy來取得台積電資料,還不會的可以參考下面文章:https://pixnashpython.pixnet.net/blog/post/27855906

(【Python量化資料】用Python抓取Yahoo Finance、investing.com股價資料 python抓取資料最輕鬆的兩大方法)

dataframe基本的資料處理還不熟可以參考,這邊就不多說了:https://pixnashpython.pixnet.net/blog/post/28343118

看到樞紐分析表的部分,在pandas套件中有一個方法pivot_table,用法也相當簡單,

df_C.pivot_table('Close', ['year'], ['month'], 'sum') 可以看成 >>> 資料表.pivot_table(要運算的值,的欄位 [放在index的欄位], [放在columns的欄位], 值運算的方法),

既然用list括號起來表示裡面的欄位是可以放多層的,也就是multiindex的部分,還不清楚可以參考:https://pixnashpython.pixnet.net/blog/post/46551190

然後值運算的方法有提供內建幾種,常用到的像是mean、sum等,但同時也是可以自己定義放進去,很靈活的~

 

 

四、後記


大家pandas是一個非常好用的套件,但卻有很多眉眉角角,也是資料分析的好夥伴,大家還有遇上什麼問題可以留言給我唷!

其他更多pandas教學:https://pixnashpython.pixnet.net/blog/category/461784

 

部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ

arrow
arrow

    恩哥Python 發表在 痞客邦 留言(0) 人氣()