建构公司仪表板 以雷达图为例

Photo by Firmbee.com on Unsplash

本文重点概要

  • 文章难度:★★☆☆☆
  • 建立雷达图
  • 阅读建议: 本文以百分位数的方式,规模化各项重要财务指标以便呈现在雷达图上,故能一目了然公司相对于同产业的表现。而由于本文主要采用的是财务数据,因此尚未熟悉捞取财务数据流程的读者,建议先阅读财务数据捞取,再回来一步一步建构自己专属的仪表板!

前言

所谓仪表板,即是用视觉效果、单一页面的方式去传达重要的资讯,让使用者能在很短的时间内观察出某个趋势与做出相关推论。而一个设计良好的仪表板,除了外观直觉与画面不杂乱,最精华、最想传达出的内容也必须要精准地呈现,才不至于让使用者找不出该仪表板的重点与价值何在。

雷达图为仪表板上常见的图表,也是常用于分析财务报表的方式。透过比较公司其他年度、或是同产业公司的表现,可以了解公司相关财务指标的趋势,与同期同产业公司的相对表现,因此对于基本面分析相当有帮助。

编辑环境及模组需求

本文使用 Windows OS 并以 Jupyter Notebook 作为编辑器

#功能模组
import pandas as pd
import numpy as np
#视觉化模组
import plotly.graph_objects as go
#TEJ API
import tejapi
tejapi.ApiConfig.api_key = 'Your Key'
tejapi.ApiConfig.ignoretz = True

资料库使用

资料处理

Step 1. 财务数据捞取

database = tejapi.get('TWN/AIM1A',
                    mdate = {'gte':'2020-01-01'},
                    paginate = True,
                    opts = {'pivot':True, 'columns': ['coid','mdate','4151','R106','R502', 'R503', 'R509', 'R631', 'K632', 'R103']},
                    chinese_column_name = True)

从TEJ的财务资料库里,捞取所有公司自2020年以来的数据,因为本文雷达图上呈现的将会是相对表现,而不是单一公司的绝对数值。这边选取的科目是现金股利、营业利益率、速动比率、利息支出率、借款依存度、收款天数、售货天数以及ROE

database

Step 2. 处理现金股利

dps_date = database[database['财报年月'].dt.month == 12].groupby(by = '公司代码').last()['财报年月'].mode().values[0]

因为现金股利为年频率资料,所以仅12月份有资料。接著利用groupby将资料以公司进行分群,每群的最后一笔资料last为该公司最新的资料。而为了避免部分公司先行公布资料,而有可比公司过少的问题,这里再利用[‘财报年月’].mode取得出现次数最多最新日期,来当作我们的比较基准日

dps_date
                                        dps_date
dps_radar= database[database['财报年月'] == dps_date].loc[:,['公司代码','普通股每股现金股利(盈余及公积)']].reset_index(drop=True)

再以此日期,筛选出2020年所有公司的现金股利资料

dps_radar

Step 3. 处理其余季频率的资料

database = database.drop(axis =1, columns = '普通股每股现金股利(盈余及公积)')
com_date = database.groupby(by = '公司代码').last()['财报年月'].mode().values[0]
adj_radar = database[database['财报年月'] == com_date].reset_index(drop=True)

先删除现金股利栏位,而校正比较基准日期的方式如同 Step2

adj_radar

Step 4. 合并资料并进行排序

adj_radar = adj_radar.merge(dps_radar, on = '公司代码')
adj_radar = adj_radar.dropna().reset_index(drop=True)
ranked_radar = adj_radar.loc[:, ['普通股每股现金股利(盈余及公积)', '营业利益率','速动比率','利息支出率','借款依存度','季底收款天数','季底售货天数','ROE(A)-税后']].rank(pct=True)
ranked_radar.insert(0, '公司代码', adj_radar['公司代码'])

首先将所有财务数据合并成一表并删除有缺失值的资料,接著利用 rank(pct=True)将各栏的数值转成 0 ~ 1之间的百分位数,举例来说,若有5间公司的现金股利分别为1, 2.5, 3.3, 4.2, 35,则透过转换后,会变成 0.2, 0.4, 0.6, 0.8, 1,最后再用 insert 补上公司栏位

ranked_radar

视觉化

Step 1. 选择欲查询公司与对应产业表现

firm_radar_list = ranked_radar[ranked_radar['公司代码'] == '2330'].iloc[0, 1:].tolist()

这里选择台积电 (2330),并将规模化后的财务数据转成列表储存

firms = tejapi.get('TWN/AIND',
                  paginate = True,
                  opts = {'columns':['coid','tejind2_c']},
                  chinese_column_name = True)
industry = firms[firms['公司简称'] == '2330'].iloc[0,1]
peers = firms[firms['TEJ产业名'] == industry]['公司简称'].tolist()

接著到TEJ资料库捞取该公司所属产业 industry,接著再以此产业选出同产业所有公司的股票代码 peers

peers 部分内容
peers 部分内容
industry_radar = ranked_radar[ranked_radar['公司代码'].isin(peers)].loc[:, ['普通股每股现金股利(盈余及公积)', '营业利益率','速动比率','利息支出率','借款依存度','季底收款天数','季底售货天数','ROE(A)-税后']].mean()
industry_radar_list = industry_radar.tolist()

接著计算同侪公司的平均百分位,用以代表整体产业的表现

industry_radar_list
industry_radar_list

Step 2. 画出雷达图

categories = ['现金股利','营业利益率','速动比率', '利息支出率','借款依存度', '收款天数', '售货天数', 'ROE']
fig = go.Figure()
fig.add_trace(go.Scatterpolar( r= firm_radar_list,
                           theta= categories,
                            fill='toself',
                            name='公司'))
fig.add_trace(go.Scatterpolar( r=industry_radar_list,
                           theta=categories,
                            fill='toself',
                            name='产业'))
fig.show()

首先定义 catogories,科目名称的顺序必须对应到firm_radar_listindustry_radar_list 列表里的数值,为雷达上显示的文字,并使用 toself 将图形内颜色涂满

建构公司仪表板:雷达图

有了上述雷达图,即可得到许多讯息,其一是整个半导体产业的财务数据表现,其二是台积电的营业利益率、现金股利与ROE明显优于同业,收款天数也较短,但借款依存度却高于同业。

结论

借由TEJ的财务资料库,即可利用上述方式建构雷达图,而财务指标的选择、资料标准化的方式、产业的分类方式都可以按照自身需求进行调整,虽然本文以同期、不同公司为基础绘出雷达图,但读者也可以试著以同公司、不同期的雷达图来看出公司的变化趋势。透过这个雷达图,将能以更宏观的角度看待一家公司,若想多了解财报细节,推荐读者参加TEJ于TibaMe上推出的课程,快速培养出财务分析能力。而读者若对于本文使用的资料库有兴趣,也欢迎到TEJ E-Shop 选取最适合的方案,做出自己专属的仪表板!

完整程式码

延伸阅读

相关连结

返回总览页