Table of Contents
財務數據為公司每季公布的財務面資料,或是以此為基礎的延伸出的指標。一般常見的數據主要是源自於資產負債表、損益表、現金流量表等財務報表,除此之外, TEJ API 財務資料庫亦涵蓋財務比率、關係人交易、存貨明細等更全面的資訊,搭配著規格化的資料格式,可以更有效率地進行財務分析、基本面篩選公司或是實證研究,因此本週我們將介紹如何撈取財務資料,以及示範基本的財務數據操作。
本文章使用 Windows OS 並以 Jupyter Notebook 作為編輯器
import tejapi import pandas as pd tejapi.ApiConfig.api_key = "Your Key" tejapi.ApiConfig.ignoretz = True
註解一 : 例如想在試用資料庫取得 2000 多筆資料,直接呼叫撈取的話只會取得前 1000 筆即停止。故建議撈取時習慣加入
paginate = True
以確保最後資料的完整性
註解二 : 單次呼叫
tejapi.get()
的總資料筆數上限。如果要解決這個問題,可以參考【新手上路(四)】TEJ REST API 使用手冊 裡的魔鬼藏在細節區塊。建議當資料量龐大時,可以for
迴圈進行多次呼叫,並逐圈合併每次結果
註解三 :
pivot
轉置功能將使得會計科目以更清楚方式呈現,且格式上更為方便進行資料處理與分析,以下將有更詳細的介紹。
Note: 舉例來說,單季 Q2 僅有第二季期間的財務數據;而累計 Q2 代表的是從第一季累計到第二季的財務數據,以此類推
au_no_pivot = tejapi.get('TWN/AIM1A', coid = '2409', paginate = True, chinese_column_name = True)
以撈取友達 (2409) 所有年度的累計財務數據為例
可以看到僅有四欄,其中日期欄的 03/01 、06/01 、09/01 與 12/01 分別代表累計 Q1 、 Q2 、 Q3 與 Q4;會計科目則以代號呈現,整體而言並不太直觀且不好操作。因此,我們必須加上付費財務資料庫專屬的 pivot
轉置功能,使得會計科目以獨立欄方式呈現
au_pivot = tejapi.get('TWN/AIM1A', coid = '2409', paginate = True, opts = {'pivot':True}, chinese_column_name = True)
在參數中增加 opts = {‘pivot’:True}
後,公司各季度的所有會計科目數值一目了然
panel = ['2409', '3481', '6116']
panel
列表存放的是欲撈取的公司代碼,這邊我們選擇的是面板三雄,友達 ( 2409 )、群創 ( 3481) 與彩晶 (6116)
finance = pd.DataFrame()
首先我們建立一個空的表格,用以當作每個迴圈撈取結果的容器
for firm in panel: finance = finance.append(tejapi.get('TWN/AIM1A', coid = firm, paginate = True, opts = {'pivot':True}, chinese_column_name = True))
使用 for
迴圈,搭配 append()
累加每次呼叫撈取結果,而每次撈取的是一家公司的所有財務數據
可以發現三家公司撈取的資料時間就有一點久了,所以我們必須事先選取需要的會計科目,以加速整個撈取速度。為了達到以上目的,首先要查詢會計科目的代碼
accounting = tejapi.get('TWN/AIACC', id = 'AIM1A', paginate = True, chinese_column_name = True)
這邊使用到的是財務會計科目說明檔資料庫,比較特別的是這邊加上 id = ‘AIMIA’
,代表我們只要IFRS以合併為主簡表 ( 累計 ) — 全產業 ( TWN/AIM1A ) 的會計科目
可以看到所有會計科目代碼與中英文全稱、表次,因此可以利用資料篩選的方式,找尋我們要的科目代碼。舉例來說,若想要查看折舊相關科目,可利用中文全稱欄位搭配 str.contains()
來達成。
depreciation = accounting[accounting['中文全稱'].str.contains('折舊')]
若找不到預期科目,可改用英文全稱欄位以英文查詢。如果篩選後資料筆數仍多,可利用中英文表次再進行進一步篩選,例如我們要的是現金流量表裡的折舊
depreciation[depreciation['中文表次'].str.contains('現金流量')]
此時即可確認折舊的會計科目代碼為 7211。如果今日我們要的是資產負債表的所有科目代碼,可從中文表次欄搜尋資產負債相關的資料。
balance_sheet = accounting[accounting['中文表次'].str.contains('資產負債')]
此時顯示的會計科目皆是源自於資產負債表
BS_list = balance_sheet['會計科目'].tolist()
接著針對會計科目欄,將所有值儲存成一個 BS_list
列表
finance = pd.DataFrame() for firm in panel: finance = finance.append(tejapi.get('TWN/AIM1A', coid = firm, paginate = True, opts = {'pivot':True, 'columns': ['coid','mdate'] + BS_list}, chinese_column_name = True))
接著將 BS_list
列表附加到 opts
選取欄位的列表裡,此時這些會計科目的欄位就會出現在公司代碼與財報年月欄位之後
fin = finance.copy()
備份的目的在於避免進行資料整理時,不小心修改到原資料而需要重新撈取,尤其是當資料量一大時,重新撈取不但浪費時間,也可能會因此超過當日資料量下載上限。而備份後以 fin
備份檔進行操作,若要重置成原資料內容,從這行開始重新執行即可
fin['月'] = fin['財報年月'].dt.month
首先利用 dt.month
提取出日期欄位的月份,並額外形成新的一欄
fin = fin[fin['月'] == 12]
因為是累計財務資料,所以只要選出累計 Q4 ( 12 月),即可得到年資料
fin = fin.sort_values(by = ['財報年月'], ascending = True)
利用 sort_values()
針對日期以 ascending = True
升冪方式排序
如果想要在同一日期中,進一步以資產總額由大至小 (降冪) 排序
fin = fin.sort_values(by = ['財報年月','資產總額'], ascending = [True, False])
可以看到排序後,索引整個被打亂,因此排序完通常會重置索引
fin = fin.reset_index(drop=True)
財務數據可用於評估企業的財務狀況與經營成果,進而影響投資人的投資決策。因此財務數據越全面、越直觀,越有利於進行量化分析,於是今日我們示範如何使用 TEJ API付費資料庫的轉置功能、一次撈取多家公司資料並進行簡單的資料整理。若讀者有興趣,可到 E-shop 選取符合自身需求的方案,在眾多財務數據中挖掘出更多有價值的資訊!
電子報訂閱