大学生会计技能竞赛总决赛(四)

小AO作为2022年其赛事总决赛的一等奖获奖者,跟各位小伙伴们分享一下总决赛赛的相关题型及相关知识点(大数据分析方面):
1、题型主要是以填空题为主。对区域赛来说还是比较简单的,小AO总决赛拿96.40分,没有满分,希望有小伙伴们提出错误。
2、大数据方面。主要考三个模块:pandas、numpy、matplotlib。了解这三个模块的相关方法以及一些内置函数。如:merge、contains、groupby、replace、apply、map、pivot_table、还有读取数据read_excel都是高频词。同时,对于可视化要了解各个图形的相关方法
一共有四个样卷,总决赛样卷一与样卷二跟区域赛的一样,就不重复,需要的小伙伴可在专栏“全国大学生会计技能竞赛”查看大学生会计技能竞(一)、(二)。赛本文为样卷四,其他样卷可在小AO专栏查看;需要数据的小伙伴们,可以找小AO或者评论区@小AO。

制作内部经营数据分析
运用python语言,对公司的产品做库存管理分析,分析库存结构,结合商品销售帕累托分析原则为库存产品分类分析,A类产品重点把控;分析存货周转情况,辅助判断增加存货行为的正确性,判断是否需要根据风险即使调整等应对策略。

一、内部经营数据制作步骤:
第一步:读取【义乌久金商贸有限责任公司业财资料.xlsx】工作簿,根据给定的【期初余额】中的统计【总账科目-库存商品】的【期初数量】、【借方余额】创建为【qcye_df】表;

第二步:读取【义乌久金商贸有限责任公司业财资料.xlsx】工作簿,根据给定的【记账凭证】中的统计【总账科目-库存商品】的【入库数量】、【借方金额】创建为【buy_data】表;

第三步:将【qcye_df】与【buy_data】拼接为【kc_data】表,可以计算得出【期初与本期入库数量】、【期初与本期进价】;

第四步:读取【义乌久金商贸有限责任公司业财资料.xlsx】工作簿,根据给定的【记账凭证】中的统计【总账科目-主营业务收入&预计负债】的【出库数量】【贷方金额】创建为【sale_data】表;

第五步:商品销售帕累托分析,把产品划分为ABC三类。先按销售额排序,然后计算累计值,最后计算累计占比,根据累计占比自定义规则划分A类B类C类产品。

第六步:把【kc_data】表中【期初与本期入库数量】【期初与本期进价】列与的【sale_data】表中【销售数量】【销售额】拼接为【data】表,计算出【月末一次加权平均单价】列;

第七步:库存分析,统计最终库存金额、售出率、存货周转率、存货周转天数。

第八步:根据公司自定义存货周转天数规则,查看各产品的库存状态。

第九步:根据公司自定义存货周转率规则,分类产品是属于高周转率产品或低周转率产品。

二、内部经营数据制作内容:
1.导入包。

import pandas as pd

2.读取【义乌久金商贸有限责任公司业财资料.xlsx】中的【期初余额】表,内容只保留【总账科目】中时【库存商品】的行次。

file = 'excel/2022BKJS财务数据分析案例/义乌久金商贸有限责任公司业财资料.xlsx'#文件路径
qcye_df = pd.read_excel(file,sheet_name='期初余额',header=1)#读取
qcye_df = qcye_df[qcye_df['总账科目'].str.contains('库存商品')]#筛选出总账科目包含库存商品的数据
qcye_df

3.紧接着根据【明细账科目】分组,【期初数量】、【借方余额】求和。

qcye_df = qcye_df.groupby(['明细账科目'])[['期初数量','借方余额']].sum()
qcye_df

4.读取【义乌久金商贸有限责任公司业财资料.xlsx】中的【记账凭证】工作表。

jzpz_df = pd.read_excel(file,sheet_name='记账凭证')#读取
jzpz_df

5.分析采购数量,那么我们锁定需要采集的对象是【总账科目】中包含【库存商品】的行次。

buy_data =jzpz_df[jzpz_df['总账科目'].str.contains('库存商品')]
buy_data = buy_data[['明细科目','入库数量','借方金额']]
buy_data

6.buy_data表根据【明细科目】分组,求和。

buy_data = buy_data.groupby(['明细科目']).sum()#分组求和
buy_data 

7.先将记录期初库存数据的【qcye_df】和本期入库数据的【buy_data 】拼接,再新增【期初与本期入库数量】、【期初与本期进价】列。

kc_data = pd.merge(qcye_df,buy_data ,right_index=True,left_index=True,how='outer')#两表拼接的并集
kc_data['期初与本期入库数量'] =kc_data['期初数量']+kc_data['入库数量']
kc_data['期初与本期进价'] =kc_data['借方余额']+kc_data['借方金额']
kc_data

8.分析销量、销售额,那么我们锁定需要采集的对象是【总账科目】中包含【主营业务收入】或者【预计负债】的行次。

sale_data =jzpz_df[(jzpz_df['总账科目'].str.contains('主营业务收入'))|(jzpz_df['总账科目'].str.contains('预计负债'))]
sale_data =sale_data[['明细科目','出库数量','贷方金额']]#筛选出需要的内容
sale_data[['明细科目','产品明细']] = sale_data['明细科目'].str.split('-',1,expand=True)#将明细科目内容根据-分割成2个列表
sale_data = sale_data.groupby(['产品明细']).sum()#分组求和
sale_data

9.列名重命名,【出库数量】改为【销售数量】,【贷方金额】改为【销售额】。

sale_data = sale_data.rename(columns={'出库数量':'销售数量','贷方金额':'销售额'})
sale_data

10.商品销售帕累托分析,一般把对象划分为ABC三类,所以又称ABC分类法。 其表现形式为,在分析图表中,几个长方形以显示各产品的销量,一条曲线作为累计值呈现。

#产品ABC判断,统计汇总
sale_data.sort_values(by='销售额',ascending=False,inplace=True)#销售额按大到小排序
sale_data['累计总额'] = sale_data['销售额'].cumsum()#根据销售额计算累计销售额
sale_data['累计占比'] = sale_data['累计总额']/sale_data['销售额'].sum()#计算累计占比
sale_data

11.创建自定义函数classify,将【累计占比】分为三级,则与之相对应的产品分为三类:
A类,发生频率为0%~60%。 B类,发生频率为60%~85%。C类,发生频率为85%以上。

'''
累计占比在0%~60%之间的,为最重要的A类产品;
累计占比在60%~85%之间的,为次重要的B类产品;
累计占比在85%~100%之间的,为不重要的C类产品。
'''
def classify(x):
    if x<=0.6:
        return 'A类产品'
    elif x<=0.85:
        return 'B类产品'
    else:
        return 'C类产品'
sale_data['产品ABC判断'] = sale_data['累计占比'].map(lambda x : classify(x))
sale_data

12.根据【产品ABC判断】分组,统计【销售数量】的个数。

count_number = sale_data.groupby('产品ABC判断')['销售数量'].sum()
count_number

13.绘制环形图,显示ABC分类产品的占比;绘制折柱混合图,根据商品销售帕累托分析法有利于找出主次矛盾,可以有针对地采取措施。

#从matplotlib库导入pyplot模块并将其命名为plt
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='kaiTi' # 用楷体显示中文
plt.rcParams['axes.unicode_minus']=False # 正常显示负号 
plt.rcParams["font.size"] = 12 #设置字体大小
plt.figure(figsize=(20,6),dpi=100,facecolor='w')

#绘制ABC分类产品环形图
#获取需要填充的颜色
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
ax1 = plt.subplot(1,2,1)
ax1.pie(count_number,#设置各个角的标签
        labels = count_number.index,
        colors = outer_colors,
        autopct='%1.2f%%',#设置精度为小数点后两位
        pctdistance=0.9,#设置百分比标签和圆心的距离
        labeldistance=1.2,#设置标签和圆心的距离
        radius=0.8,#设置半径为0.8
        wedgeprops=dict(width=0.3,edgecolor='w'))#设置饼弧宽度和边框颜色
ax1.set_title('ABC比例设置')

#绘制商品销售帕累托分析图
ax2 = plt.subplot(1,2,2)
x = sale_data.index
y = sale_data['销售额']
z = sale_data['累计占比']
h = pd.Series(0.6,index=x)
ax2.bar(x,y,label='销售额',width=0.5,color='c')
ax2.legend()
ax2.set_title('品类ABC分析')
a2 = ax2.twinx()
a2.plot(x,z,label='累计占比',color='r')
a2.plot(x,h,label='累计占比0.6',color='grey',ls='-.')
#添加x坐标轴刻度
a2.set_xticks(x[::4])
a2.set_xticklabels(x[::4])
a2.legend()
plt.show()#展示图

14.将记载销售数量的sale_data表【销售数量】【销售额】和kc_data表拼接之后,新增【月末一次加权平均单价】列。

data = pd.merge(sale_data[['销售数量','销售额']],kc_data,right_index=True,left_index=True,how='outer')#两表拼接的并集
data = data.fillna(0)#缺失值用0填充
data['月末一次加权平均单价'] = (data['期初与本期进价']/data['期初与本期入库数量']).round(2)
data

15.库存分析,统计最终库存金额、售出率、存货周转率、存货周转天数。

kc_data = data[['月末一次加权平均单价','期初数量','入库数量','销售数量']]
kc_data['期末数量'] = kc_data['期初数量']+kc_data['入库数量']-kc_data['销售数量']
kc_data['库存金额'] =  kc_data['期末数量']*kc_data['月末一次加权平均单价']
kc_data['售出率'] = kc_data['销售数量']/(kc_data['期初数量']+kc_data['入库数量'])
kc_data['存货周转率'] = kc_data['销售数量']/((kc_data['期初数量']+kc_data['期末数量'])/2)*12#月存货周转率*12转为以年单位的存货周转率
kc_data['存货周转天数'] = 360/kc_data['存货周转率']
kc_data

16.创建自定义函数difference,根据公司自定义存货周转天数规则,查看各产品的库存状态。

'''
存货周转天数<20天 库存不足
存货周转天数<45天 库存正常
45天<=存货周转天数<60天 库存积压
存货周转天数>60天 库存严重积压
'''
def difference(a):
    if a<20:
        return '库存不足'
    elif a<45:
        return '库存正常'
    elif 45<=a<60:
        return '库存积压'
    else:
        return '库存严重积压'

kc_data['备注'] = kc_data['存货周转天数'].map(lambda a :difference(a))
kc_data

17.创建自定义函数divide,根据公司自定义存货周转率规则,分类产品是属于高周转率产品或低周转率产品。

'''
存货周转率>10,为高周转率
存货周转率<5,为低周转率
'''
def divide(b):
    if b>10:
        return '高存货周转率产品'
    if b<5:
        return '低存货周转率产品'

kc_data['划分'] = kc_data['存货周转率'].map(lambda b:divide(b))
kc_data

18.根据【划分】分组统计低存货周转率产品、高存货周转率产品个数。

zzl = kc_data.groupby('划分')['存货周转率'].count()/kc_data['存货周转率'].count()*100
zzl = zzl.map(lambda x:round(x,2))#计算结果保留两位小数
zzl

19.绘制环形图,显示低存货周转率产品、高存货周转率产品分布;绘制散点图,展示库存周转率分析。

plt.figure(figsize=(20,5),dpi=85,facecolor='w')
#绘制高存货周转率产品环形图
ax1 = plt.subplot(1,3,1)
data = [zzl[1], 100-zzl[1]]
wedgeprops = {'width': 0.3, 'edgecolor': '#000033', 'lw': 3}
patches, _ = ax1.pie(data, wedgeprops=wedgeprops, startangle=90, colors=['#FF7F00', 'white'])
patches[1].set_zorder(0)
patches[1].set_edgecolor('w')
ax1.set_title('高存货周转率产品', fontsize=24, loc='center')
ax1.text(0, 0, f"{data[0]}%", ha='center', va='center', fontsize=32)

#绘制低存货周转率产品环形图
ax2 = plt.subplot(1,3,2)
data1 = [zzl[0], 100-zzl[0]]
wedgeprops = {'width': 0.3, 'edgecolor': 'black', 'lw': 3}
patches, _ = ax2.pie(data, wedgeprops=wedgeprops, startangle=90, colors=['#5DADE2', 'white'])
patches[1].set_zorder(0)
patches[1].set_edgecolor('w')
ax2.set_title('低存货周转率产品', fontsize=24, loc='center')
ax2.text(0, 0, f"{data1[0]}%", ha='center', va='center', fontsize=32)

#绘制存货周转率分析散点图
ax3 = plt.subplot(1,3,3)
x = kc_data['库存金额']
y = kc_data['存货周转率']
colors = x#根据y值得的大小生成不同的颜色
ax3.scatter(x,y,s=200,c=colors, cmap='rainbow')
ax3.set_xlabel('库存周转率')
ax3.set_ylabel('库存金额')
ax3.set_title('库存周转率分析', fontsize=22)
plt.show()#展示图

你可能感兴趣的:(全国大学生会计技能竞赛,python,数据分析,开发语言)