小AO作为2022年其赛事的一等奖的获奖者,跟各位小伙伴们分享一下区域赛的相关题型及相关知识点(大数据分析方面):
1、题型主要是以填空题为主。对区域赛来说还是比较简单的,小AO区域赛能拿满分,这是幸运的。
2、大数据方面。主要考三个模块:pandas、numpy、matplotlib。了解这三个模块的相关方法以及一些内置函数。如:merge、contains、groupby、replace、apply、map、pivot_table、还有读取数据read_excel都是高频词。同时,对于可视化要了解各个图形的相关方法
一共有四个样卷,本文为样卷二,其他样卷可在小AO专栏查看;需要数据的小伙伴们,可以找小AO或者评论区@小AO
制作财务报表
要求根据【天津同杉商贸有限责任公司业财资料.xlsx】工作簿中的【期初余额】、【记账凭证】以及在第一环节制作的【2022年3月科目余额表】生成资产负债表、利润表两张财务报表。
一、财务报表制作步骤
(一)利润表制作步骤:
第一步:读取【天津同杉商贸有限责任公司业财资料.xlsx】工作簿,取出【记账凭证】中最后一笔结转损益业务;
第二步:将结转损益业务按【总账科目】进行【借方金额】【贷方金额】汇总,得到一份本期损益类科目发生额表;
第三步:读取【天津同杉商贸有限责任公司业财资料.xlsx】工作簿,根据给定的【利润表科目映射】与损益类科目发生额表拼接;
第四步:拼接之后进行处理,计算【本期金额】,再按照【行次】【项目】进行分类汇总,这边注意需要对有些项目内容要手动调整、填充;
第五步:将生成的2022年3月利润表导出,放在路径为【excel/2022BKQY财务数据分析案例】文件夹下。
(二) 资产负债表制作步骤:
第一步:读取【天津同杉商贸有限责任公司业财资料.xlsx】中的【资产负债表左侧科目映射】与上一步完成的【2022年3月科目余额表】根据映射表内容拼接成左侧的【zc_left_df】数据表;
第一步:读取【天津同杉商贸有限责任公司业财资料.xlsx】中的【资产负债表右侧科目映射】与上一步完成的【2022年3月科目余额表】根据映射表内容拼接成右侧的【zc_right_df】数据表;
第三步:将左侧的【zc_left_df】数据表与右侧的【zc_right_df】数据表合并;
第四步:将生成的2022年3月资产负债表导出,放在路径为【excel/2022BKQY财务数据分析案例】文件夹下。
二、财务报表制作内容
(一)利润表制作内容:
1.导入包。
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings("ignore")
2.读取【天津同杉商贸有限责任公司业财资料.xlsx】工作簿中的【记账凭证】工作表
path = 'excel/2022BKQY财务数据分析案例/天津同杉商贸有限责任公司业财资料.xlsx'#文件路径
bq_data = pd.read_excel(path,sheet_name='记账凭证')
bq_data
3.筛选出需要分析的【业务摘要】【总账科目】【明细科目】【借方金额】【贷方金额】这几列,发现每笔业务的业务摘要它只有第一行有内容,其他行空缺,那需要给它填充。
bq_data = bq_data[['业务摘要','总账科目','明细科目','借方金额','贷方金额']]#筛选列
bq_data['业务摘要'] = bq_data['业务摘要'].fillna(method='ffill')#使用缺失值的前一个元素填充
bq_data
4.我们根据最后一笔结转损益来编制利润表,因为结转损益业务里面包含了所有损益类科目,所以我们以这个为切入点。
bq_data = bq_data[bq_data['业务摘要'].str.contains('结转损益')]#根据业务摘要包含结转损益的关键字的记录筛选出来
'''
业务中如果财务费用中包含了利息收入或利息支出,那么利润表中这两列是要单独填写的。
那么这边我们将如果总账科目是财务费用的,我们把它的总账科目用总账科目和明细科目填充,其他总账科目还是保留原样
这样做我们才能够明确财务费用中哪些是利息支出、哪些是利息收入
'''
bq_data['总账科目'] = np.where(bq_data['总账科目'].str.contains('财务费用'),bq_data['总账科目']+bq_data['明细科目'],bq_data['总账科目'])
bq_data = bq_data.groupby(['总账科目']).sum()#根据总账科目分组求和
bq_data = bq_data.reset_index()#索引重置
bq_data
5.读取【天津同杉商贸有限责任公司业财资料.xlsx】工作簿中的【利润表科目映射】工作表,拼接的时候我们保留右边的【利润表科目映射】所有数据。
lrys_data = pd.read_excel(path,sheet_name='利润表科目映射')#读取
lr_data = pd.merge(bq_data,lrys_data,how='right') #根据右表拼接
lr_data
6.新增【本期金额】列,如果属性为【加项】的【借方金额】减【贷方金额】,反之就是【贷方金额】减【借方金额】。
lr_data['本期金额'] = np.where(lr_data['属性']=='加项',
lr_data['借方金额']-lr_data['贷方金额'],
lr_data['贷方金额']-lr_data['借方金额'])
lr_data
7.构建数据透视表将【行次】【项目】设为索引,值为【本期金额】求和。
lr_data = lr_data.pivot_table(index=['行次','项目'],values=['本期金额'],aggfunc='sum')
lr_data = lr_data.reset_index()#索引重置
lr_data
8.利润表初步制作完成,不过有些项目栏存在结果问题,比如说第6行的【财务费用】、第18行的【营业利润】、第21行的【利润总额】。
财务费用 = lr_data.loc[6,'本期金额']+lr_data.loc[7,'本期金额']-lr_data.loc[8,'本期金额'] #财务费用那栏的数据是工本及手续费+利息支出-利息收入
利润总额 = lr_data.loc[22,'本期金额']+lr_data.loc[23,'本期金额']#利润总额=净利润+所得税费用
营业利润 = lr_data.loc[22,'本期金额']+lr_data.loc[23,'本期金额']-lr_data.loc[19,'本期金额']#营业利润=利润总额+营业外支出-营业外收入
lr_data.loc[6,'本期金额'] = 财务费用
lr_data.loc[18,'本期金额'] = 营业利润
lr_data.loc[21,'本期金额'] = 利润总额
lr_data
9.现在可以将制作好的【2022年3月利润表】以工作簿的形式导出到【excel/2022BKQY财务数据分析案例】文件夹下。
lr_data.to_excel('excel/2022BKQY财务数据分析案例/2022年3月利润表.xlsx',index=False)
(二)资产负债表制作内容:
1.读取【天津同杉商贸有限责任公司业财资料.xlsx】工作簿中的【资产负债表左侧科目映射】工作表。
left_ys_data = pd.read_excel(path,sheet_name='资产负债表左侧科目映射')
left_ys_data
2.读取先前生成的【2022年3月科目余额表】工作表,只需要保留余额表中期末数据,即【总账科目】【期末借方余额】【期末贷方余额】。
file = 'excel/2022BKQY财务数据分析案例/2022年3月科目余额表.xlsx'
km_data = pd.read_excel(file)
km_data = km_data[['总账科目','期末借方余额','期末贷方余额']]
km_data
3.根据【总账科目】将【left_ys_data】与【km_data】拼接,保留【left_ys_data】数据定义为【zc_left_data】,再根据【期末借方余额】【期末贷方余额】计算【期末余额】。
zc_left_data = pd.merge(km_data,left_ys_data,how='right')#以右表为基础,左表往右表上拼接
zc_left_data['期末余额'] = zc_left_data['期末借方余额']-zc_left_data['期末贷方余额']
zc_left_data = zc_left_data[['报表名称','行次','期末余额','属性']]#去掉【期末借方余额】【期末贷方余额】
zc_left_data
4.根据【zc_left_data】中的【行次】【报表名称】构建数据透视表,【期末余额】求和。
zc_left_df = zc_left_data.pivot_table(index=['行次','报表名称'],values='期末余额',aggfunc='sum')
zc_left_df = zc_left_df.reset_index()#索引重置
zc_left_df
5.根据【zc_left_data】计算【流动资产】【非流动资产】合计数。
cal_left_data = zc_left_data.groupby(['属性']).sum() #根据属性分组求和
cal_left_data
6.将资产负债表左侧的空值的行补充值。
流动资产合计 = cal_left_data.loc['流动资产','期末余额']
非流动资产合计 = cal_left_data.loc['非流动资产','期末余额']
资产总计 = 流动资产合计+非流动资产合计
zc_left_df.loc[13,'期末余额'] = 流动资产合计
zc_left_df.loc[32,'期末余额'] = 非流动资产合计
zc_left_df
7.根据上面的步骤制作资产负债表右侧部分,根据【资产负债表右侧科目映射】内容拼接。
right_ys_data = pd.read_excel(path,sheet_name='资产负债表右侧科目映射')#读取文件内容
zc_right_data = pd.merge(km_data,right_ys_data,how='right')#保留右边的数据
zc_right_data['期末余额'] = zc_right_data['期末贷方余额']-zc_right_data['期末借方余额']
zc_right_data = zc_right_data[['行次','报表名称','期末余额','属性']]#筛选出需要分析的【行次】【报表名称】【期末余额】【属性】
zc_right_data
8.根据【zc_right_data】中的【行次】【报表名称】构建数据透视表,【期末余额】求和。
zc_right_df = zc_right_data.pivot_table(index=['行次','报表名称'],values='期末余额',aggfunc='sum')
zc_right_df = zc_right_df.reset_index()#索引重置
zc_right_df
9.根据【zc_right_data】计算【所有者权益】【流动负债】【非流动负债】合计数。
cal_right_data = zc_right_data.groupby(['属性']).sum()#根据属性分组求和
cal_right_data
10.将资产负债表右侧的空值的行补充完整。
流动负债合计 = cal_right_data.loc['流动负债','期末余额']
非流动负债合计 = cal_right_data.loc['非流动负债','期末余额']
负债合计 = 流动负债合计+非流动负债合计
所有者权益合计 = cal_right_data.loc['所有者权益','期末余额']
负债和所有者权益总计 = 负债合计+所有者权益合计
zc_right_df.loc[13,'期末余额'] = 流动负债合计
zc_right_df.loc[24,'期末余额'] = 非流动负债合计
zc_right_df.loc[25,'期末余额'] = 负债合计
zc_right_df.loc[36,'期末余额'] = 所有者权益合计
zc_right_df.loc[37,'期末余额'] = 负债和所有者权益总计
zc_right_df
11.将资产负债表右侧和左侧内容合并,由于右侧内容要比左侧的内容要少两行,那么我们需要手动添加一下左侧的最后一行【资产总计】。
zc_df = pd.concat([zc_left_df,zc_right_df],axis=1)#横向合并
zc_df.iloc[37,0] = 'A34'
zc_df.iloc[37,1] = '资产总计'
zc_df.iloc[37,2] = 资产总计
zc_df
12.现在可以将制作好的【2022年3月资产负债表】以工作簿的形式导出到【excel/2022BKQY财务数据分析案例】文件夹下。
zc_df.to_excel('excel/2022BKQY财务数据分析案例/2022年3月资产负债表.xlsx',index=False)