2022年4月9日 星期六

[挑戰用python寫一支股票工具] Day3 抓取現金流量表之營業現金流、投資現金流和籌資現金流

現金流量表是分析財務報表中重要的一環,使用python定期抓取現金流量表能達到監控財務體質的狀態。


公開資訊站裡現金流量表的入口網站為:https://mops.twse.com.tw/mops/web/t164sb05

在抓取資料前,了解資料的格式能幫助後續資料的處理和整理。 先以搜尋條件: 普萊德(6263) 110年度第二季,撈出的資料表格如下:

公開資訊站-現金流量表查詢 (普萊德110年度Q2)

可以觀察到查詢的表個會有兩欄,左欄為110年度1月到6月的現金流量表,右欄為去年1月到6月的現金流量表。

由於現金流量表的紀錄為一段間內的現金流量,因此若單純要知道第二季(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月的現金流量啦。

今天的範例就到這囉~下回見。







沒有留言:

張貼留言

[讀時光] 教養與自我的情緒克- 薩提爾的親子情緒課 (李儀婷 著)

周末花時間一口氣看完了薩提爾的親子情緒課一書。雖然目前還是準爸爸,實際等到要教養自己的小孩也是兩三年之後,但我覺得這本書其實闡述了一些很重要的溝通法則,這些通則或許偶爾不那麼合用在現實成人世界上,但卻有助於內化自省,讓自己成為更好的人。即使沒有小孩需要教養,依然可以把它當成一本心...