小AO作为2022年其赛事总决赛的一等奖获奖者,跟各位小伙伴们分享一下总决赛赛的相关题型及相关知识点(大数据分析方面):
1、题型主要是以填空题为主。对区域赛来说还是比较简单的,小AO总决赛拿96.40分,没有满分,希望有小伙伴们提出错误。
2、大数据方面。主要考三个模块:pandas、numpy、matplotlib。了解这三个模块的相关方法以及一些内置函数。如:merge、contains、groupby、replace、apply、map、pivot_table、还有读取数据read_excel都是高频词。同时,对于可视化要了解各个图形的相关方法
一共有四个样卷,总决赛样卷一与样卷二跟区域赛的一样,就不重复,需要的小伙伴可在专栏“全国大学生会计技能竞赛”查看大学生会计技能竞(一)、(二)。赛本文为样卷三,其他样卷可在小AO专栏查看;需要数据的小伙伴们,可以找小AO或者评论区@小AO。
制作财务指标
1.要求根据生成的2022年资产负债表和利润表的期末余额和期初余额,计算相关安全性指标、收益性指标、流动性指标、成长指标。
2.从九九财经包中筛选出案例公司行业批发业2021年指定的安全性指标、收益性指标、流动性指标、成长指标。
3.绘制雷达图,将案例公司与行业均值财务指标对比分析。
一、财务指标制作步骤:
第一步:准备工作,根据先前生成的【2022年12月资产负债表.xlsx】与路径下的【2022年期初资产负债表.xlsx】整合成三列数据【项目】、【期末余额】、【期初余额】。
第二步:准备工作,根据先前生成的【2022年12月利润表.xlsx】与路径下的【2022年1-11月利润表.xlsx】、【2021年年度利润表.xlsx】整合成三列数据【项目】、【期末余额】、【期初余额】。
第三步:准备工作,将资产负债表的【期初余额】、【期末余额】与利润表的【期初余额】、【期末余额】合并。
第四步:根据整理后的数据源,计算相关安全性指标、收益性指标、流动性指标、成长指标。
第五步:从九九财经包中,筛选出批发业2021年指定的安全性指标、收益性指标、流动性指标、成长指标均值。
第六步:将案例公司的行业均值做对比分析,并要求用雷达图的形式展示案例公司与行业在各财务指标的优势与不足。
二、财务指标制作内容:
(一)准备工作
1.导入包。
import pandas as pd
import numpy as np
import os
import onez.finance as finance
#防止科学计数法
np.set_printoptions(suppress=True)
pd.set_option('display.float_format',lambda x : '%.2f' % x)
pd.read_excel('excel/2022BKJS财务数据分析案例/2022年12月资产负债表.xlsx')
pd.read_excel('./excel/2022BKJS财务数据分析案例/2022年期初资产负债表.xlsx')
pd.read_excel('excel/2022BKJS财务数据分析案例/2022年12月利润表.xlsx')
pd.read_excel('./excel/2022BKJS财务数据分析案例/2022年1-11月利润表.xlsx')
2.创建concat_xlsx自定义函数,该函数能根据关键词,合并同一个文件夹下的符合关键词的所有文件。
def concat_xlsx(dir_name,key='关键词'):
dfs = []
for filename in os.listdir(dir_name):#列出指定路径下的文件名字
if key in filename:
full_path = os.path.join(dir_name, filename)
df = pd.read_excel(full_path)
dfs.append(df)
result = pd.concat(dfs,axis=1)#横向合并
return result
3.调用自定义函数concat_xlsx,合并【excel/2022BKJS财务数据分析案例】文件夹下的工作簿名字中含有【资产负债表】的文件。
zc_df = concat_xlsx('excel/2022BKJS财务数据分析案例',key='资产负债表')
zc_df
4.删除相同的列名列。使用duplicated 标记出重复行,并将其剔除。
zc_df = zc_df.T[~zc_df.T.index.duplicated()].T
zc_df
5.筛选出资产负债表左侧报表项目及金额等。使用排除掉列名中不包含【.1】字符串的列。
left_zcdf =zc_df[zc_df.columns[~zc_df.columns.str.contains('.1')]]
left_zcdf
6.筛选出资产负债表右侧报表项目及金额等。筛选出列名中包含【.1】字符串的列。
right_zcdf = zc_df[zc_df.columns[zc_df.columns.str.contains('.1')]]
#修改列名,去掉列名中的【.1】字符串后缀
right_zcdf.columns = right_zcdf.columns.str.rstrip('.1')
right_zcdf
7.将资产负债表左侧内容left_zcdf和右侧内容right_zcdf纵向合并,并删除【行次】这一列,最后将【报表名称】重命名为【项目】。
zcfzb = pd.concat([left_zcdf,right_zcdf])#合并
zcfzb = zcfzb.drop('行次',axis=1)#删除
zcfzb = zcfzb.rename(columns={'报表名称':'项目'})#重命名
zcfzb
8.调用自定义函数concat_xlsx,合并【excel/2022BKJS财务数据分析案例】文件夹下的工作簿名字中含有【利润表】的文件。
【本年累计】为2022年1-11月累计数,【本期金额】为2022年12月本月数,【年末数】为2021年1-12月累计数。
lr_df = concat_xlsx('excel/2022BKJS财务数据分析案例',key='利润表')
lr_df
9.删除相同的列名列。使用duplicated标记出重复行,并将其剔除。
lr_df = lr_df.T[~lr_df.T.index.duplicated()].T
lr_df
10.数据清洗,列出利润表2022年度期末余额,期初余额。其中【期末余额】=【本年累计】+【本期金额】,【期初余额】为【年末数】。
lr_df['期末余额'] = lr_df['本年累计']+lr_df['本期金额']#计算期末余额
lr_df = lr_df.rename(columns={'年末数':'期初余额'})#重命名
lrb = lr_df.drop(['本年累计','本期金额','行次'],axis=1)#删除【本年累计】、【本期金额】、【行次】
lrb
11.将资产负债表zcfzb、利润表lrb纵向合并,并将【项目】设置为索引。
bb_df = pd.concat([zcfzb,lrb])#合并
bb_df = bb_df.set_index('项目')#设置索引
bb_df
12.从财务报表bb_df中提炼出计算指标的报表项目。
流动资产 = bb_df.loc['流动资产合计','期末余额']
速动资产 = bb_df.loc['流动资产合计','期末余额']- bb_df.loc['存货','期末余额']-bb_df.loc['预付款项','期末余额']
流动负债 = bb_df.loc['流动负债合计','期末余额']
负债总额 = bb_df.loc['负债合计','期末余额']
资产总额 = bb_df.loc['资产总计','期末余额']
销售收入 = bb_df.loc['一、营业收入','期末余额']
销售成本 = bb_df.loc['减:营业成本','期末余额']
流动资产平均余额 = (bb_df.loc['流动资产合计','期末余额']+bb_df.loc['流动资产合计','期初余额'])/2
存货平均余额 = (bb_df.loc['存货','期末余额']+bb_df.loc['存货','期初余额'])/2
总资产平均余额 = (bb_df.loc['资产总计','期末余额']+bb_df.loc['资产总计','期初余额'])/2
平均净资产 = (bb_df.loc['所有者权益(或股东权益)合计','期末余额']+bb_df.loc['所有者权益(或股东权益)合计','期初余额'])/2
净利润 = bb_df.loc['四、净利润(净亏损以“-”号填列)','期末余额']
年末净资产 = bb_df.loc['所有者权益(或股东权益)合计','期末余额']
年初净资产 = bb_df.loc['所有者权益(或股东权益)合计','期初余额']
本年净利润 = bb_df.loc['四、净利润(净亏损以“-”号填列)','期末余额']
上年净利润 = bb_df.loc['四、净利润(净亏损以“-”号填列)','期初余额']
本年销售收入= bb_df.loc['一、营业收入','期末余额']
上年销售收入= bb_df.loc['一、营业收入','期初余额']
13.财务指标的计算。
#安全性指标
流动比率 = 流动资产/流动负债
速动比率 = 速动资产/流动负债
资产负债率 = 负债总额/资产总额*100
#收益性指标
总资产净利润率 = (净利润/总资产平均余额)*100
净资产收益率 = (净利润/平均净资产)*100
销售净利率 = (净利润/销售收入)*100
#流动性指标
存货周转率 = 销售成本/存货平均余额
流动资产周转率 = 销售收入/流动资产平均余额
总资产周转率 = 销售收入/总资产平均余额
#成长指标
净利润增长率 = (本年净利润-上年净利润)/上年净利润*100
主营业务收入增长率 = (本年销售收入-上年销售收入)/上年销售收入*100
14.创建存储2022年12月的数据指标的数据表。
data = {'流动比率':[流动比率],
'速动比率':[速动比率],
'资产负债率(%)':[资产负债率],
'总资产净利润率(%)':[总资产净利润率],
'净资产收益率(%)':[净资产收益率],
'销售净利率(%)':[销售净利率],
'存货周转率(次)':[存货周转率],
'流动资产周转率(次)':[流动资产周转率],
'总资产周转率(次)':[总资产周转率],
'净利润增长率(%)':[净利润增长率],
'主营业务收入增长率(%)':[主营业务收入增长率]
}
zbdf = pd.DataFrame(data)#创建表格
zbdf = zbdf.rename(index={0:'2022-12-31'})#重命名,0改为【2022-12-31】
zbdf['名称'] = '久金商贸'#新增【名称】列。
zbdf
15.新增变量industry :批发业,根据行业属性从九九财经包中获取批发业财务指标数据。
industry = '批发业'
json = finance.getIndustry(industry,'财务指标')
figIndDf = pd.DataFrame(json)
figIndDf
16.将批发业财务指标数据中的报表日期、名称设为索引。
figIndDf = figIndDf.set_index(['报表日期','名称'])
figIndDf
17.筛选财务指标,只保留与我们案例企业相同的指标。
figIndDf = figIndDf[figIndDf.columns[figIndDf.columns.isin(zbdf.columns)]]
#处理异常数据 免得无法计算报错
figIndDf= figIndDf[figIndDf.columns].apply(pd.to_numeric, errors='coerce', axis=1)
figIndDf = figIndDf.reset_index()#索引重置
figIndDf
18.新增变量startDate:2021-12-31,筛选数据,只保留21年的财务指标数据。
startDate='2021-12-31'
figIndDf = figIndDf[figIndDf['报表日期']==startDate]
figIndDf
19.计算批发业行业财务指标均值,并新增名称列注明为批发业。
meandf = figIndDf.groupby('报表日期').mean()#分组统计
meandf['名称'] = industry#新增名称列
meandf
20.将案例公司zbdf2022年财务指标与行业2021年财务指标均值合并。
zhdf = pd.concat([zbdf,meandf])
zhdf
21.将名称设为索引,并且计算案例公司久金商贸与行业均值的对比值。
zhdf = zhdf.set_index('名称')
zhdf.loc['对比值'] = zhdf.loc['久金商贸']-zhdf.loc[industry]
zhdf
22.使用雷达图展示综合评价案例公司与行业在各财务指标的优势与不足。
#从matplotlib库导入pyplot模块并将其命名为plt
import matplotlib.pyplot as plt
plt.rcParams['font.family']='kaiTi' # 用楷体显示中文
plt.rcParams['axes.unicode_minus']=False # 正常显示负号
plt.figure(figsize=(8,6),dpi=90,facecolor='w')
plt.subplot(111, polar=True) #构建图例
data_length = len(zhdf.columns)
# 将极坐标根据数据长度进行等分
angles = np.linspace(0, 2*np.pi, data_length, endpoint=False)
labels = zhdf.columns#标签
data1 = zhdf.values[0]#值
data2 = zhdf.values[1]
data3 = zhdf.values[2]
# 使雷达图数据封闭
data1 = np.concatenate((data1, [data1[0]]))
data2 = np.concatenate((data2, [data2[0]]))
data3 = np.concatenate((data3, [data3[0]]))
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))
# 绘制雷达图
plt.polar(angles, data1, color='b')
plt.polar(angles, data2, color='r')
plt.polar(angles, data3, color='g')
plt.fill(angles,data1,'b',alpha = 0.55)#填充
plt.fill(angles,data2,'r',alpha = 0.55)#填充
plt.fill(angles,data3,'g',alpha = 0.55)#填充
plt.xticks(angles,labels)
plt.title('关键指标分析')#设置标题
plt.legend(zhdf.index, loc='upper left')
plt.show()#展示图例