現金流量表是分析財務報表中重要的一環,使用python定期抓取現金流量表能達到監控財務體質的狀態。
公開資訊站裡現金流量表的入口網站為:https://mops.twse.com.tw/mops/web/t164sb05
在抓取資料前,了解資料的格式能幫助後續資料的處理和整理。 先以搜尋條件: 普萊德(6263) 110年度第二季,撈出的資料表格如下:
公開資訊站-現金流量表查詢 (普萊德110年度Q2) |
可以觀察到查詢的表個會有兩欄,左欄為110年度1月到6月的現金流量表,右欄為去年1月到6月的現金流量表。
而文章一開始有提及,由於公開資訊站的資料,第二季的範圍從1月~6月,故若想要知道4月~6月的現金流量表,則必須扣除1月~3月份。 所以這時候可以使用dataframe的diff函數,默認會將第一列扣除第零列。 使用dropna將na的列刪除後可以得到如下資訊
由於現金流量表的紀錄為一段間內的現金流量,因此若單純要知道第二季(4月~6月)的現金流量紀錄,則必須先查詢1~6月現金流量表後再扣除1~3月現金流量表。
以此邏輯的運作,我們可以將程式拆解,分別取得Q1,Q2,Q3,Q4此段時間內的現金流量。
Q1: 直接擷取表內的現金流量
Q2: 程式中必須同時抓取Q1和Q2的現金流量,再用Q2減去Q1即可得Q2此段時間內的現金流量
Q3: 程式中必須同時抓取Q2和Q3的現金流量,再用Q3減去Q2即可得Q3此段時間內的現金流量
Q4: 程式中必須同時抓取Q3和Q4的現金流量,再用Q4減去Q3即可得Q4此段時間內的現金流量
由於要一次抓取營業、投資和籌資現金流,可以創建一個空的dataframe之後,再將資料放入。
創建空的dataframe範例如下:
#創造一個空的dataframe
cashflow = pd.DataFrame(columns = ['ocf', 'icf', 'fcf'])
其中,ocf/icf/fcf分別代表了營業現金流、投資現金流與籌資現金流。 創建後的空dataframe如下
所示,此時只有column name已經被賦予,但資料仍是空的。
創建空的dataframe |
這時候,當我們要開始新增資料時,就可以使用dataframe裡的append方法:
cashflow = cashflow.append({'ocf' :dfinfo.loc[filter_ocf].iloc[0,1],
'icf' :dfinfo.loc[filter_icf].iloc[0,1],
'fcf' :dfinfo.loc[filter_fcf].iloc[0,1]},
ignore_index = True)
我分別將已經撈取到的值放入一個一個column name裡面。 結果如下:
賦予值到已創建的dataframe內 |
這樣就完成了第一季現金流量表資料的抓取了。
接著,第二季現金流量表的抓取,可以寫一個for 迴圈一口氣抓取兩季的現金流量表,並一樣將資料存入到空的dataframe裡。
for 迴圈的寫法很簡單,可以用range規範一個範圍,而range(1,3) 代表變數season會輪流跑1和2這個值,也就是第一季和第二季。
將第一季和第二季的資料賦予到創建好的dataframe裡 |
而文章一開始有提及,由於公開資訊站的資料,第二季的範圍從1月~6月,故若想要知道4月~6月的現金流量表,則必須扣除1月~3月份。 所以這時候可以使用dataframe的diff函數,默認會將第一列扣除第零列。 使用dropna將na的列刪除後可以得到如下資訊
第二季扣除第一季所得到的現金流量表 |
於是乎,我們就可以得到Q2 4~6月的現金流量啦。
今天的範例就到這囉~下回見。
沒有留言:
張貼留言