文章目录
前言
善始者繁多,克终者盖寡。
数据分析大抵可以分为数据收集、数据预处理、数据分析、数据可视化四个环节,今天以某公司财务数据为例,可视化该公司的负债能力以及资金分布情况。
详细模块中含有大量print语句,主要用于观察程序运行结果;完整代码中无此项。
一、数据清洗
原始数据文件中包含大量无关数据,在绘图前需要将其处理掉。
import pandas
from matplotlib import pyplot
#步骤一:读取数据文件
数据 = pandas.read_excel("数据.xlsx",sheet_name="sheet1")
print(数据)
print(数据.columns)
#步骤二:将行列转置
行索引 = 数据.columns
列索引 = 数据["资产负债表"]
数据 = pandas.DataFrame(数据.values.T,index=行索引,columns=列索引)
print(数据)
#步骤三:删除无用的行和列
数据.drop(["资产负债表","REPORTDATE"],axis=0,inplace=True)
print(数据)
数据.dropna(axis=1,inplace=True)
print(数据)
二、偿债能力可视化
2.1 偿债能力计算
从已经清理过的数据中取出对应的列,计算公司的资产负债率以及流动比率。
'''
步骤四:计算各季度的负债率及流动比率
资产负债率 = 负债总额/资产总额
流动比率 = 流动资产总额/流动负债总额
'''
print(数据.columns)
数据["资产负债率"] = 数据["负债合计"]/数据["资产总计"]
print(数据)
数据["流动比率"] = 数据["流动资产合计"]/数据["流动负债合计"]
print(数据)
2.2 偿债能力可视化
先从数据表中取出"资产负债率"、"流动比率"两列,接着祛除行标签中冗长的时间显示,最后绘制折线图。
#步骤五:取出资产负债率、流动比率两列
数据 = 数据[["资产负债率","流动比率"]]
print(数据)
#步骤六:将行索引中多余的时间去掉
新的行索引 = 数据.index.str[0:10]
数据.index = 新的行索引
print(数据)
#步骤八:调整折线图参数
#让中文汉字显示出来
pyplot.rcParams["font.sans-serif"]=["SimHei"]
pyplot.rcParams["axes.unicode_minus"] = False
#设置图片大小
pyplot.figure(figsize=(20,5))
#调整x坐标中文字旋转角度,防止字重合
pyplot.xticks(rotation=60)
#放入数据,绘制图像,此时图片并不会显示出来
pyplot.plot(数据)
#添加图例
pyplot.legend(["资产负债率","流动比率"])
#添加标题
pyplot.title("中国软件")
#设置x坐标
pyplot.xlabel("季度")
#设置y坐标
pyplot.ylabel("比率")
#显示图片
pyplot.show()
2.3 完整代码
import pandas
from matplotlib import pyplot
数据 = pandas.read_excel("数据.xlsx",sheet_name="sheet1")
行索引 = 数据.columns
列索引 = 数据["资产负债表"]
数据 = pandas.DataFrame(数据.values.T,index=行索引,columns=列索引)
数据.drop(["资产负债表","REPORTDATE"],axis=0,inplace=True)
数据.dropna(axis=1,inplace=True)
数据["资产负债率"] = 数据["负债合计"]/数据["资产总计"]
数据["流动比率"] = 数据["流动资产合计"]/数据["流动负债合计"]
数据 = 数据[["资产负债率","流动比率"]]
新的行索引 = 数据.index.str[0:10]
数据.index = 新的行索引
pyplot.rcParams["font.sans-serif"]=["SimHei"]
pyplot.rcParams["axes.unicode_minus"] = False
pyplot.figure(figsize=(20,5))
pyplot.xticks(rotation=60)
pyplot.plot(数据)
pyplot.legend(["资产负债率","流动比率"])
pyplot.title("中国软件")
pyplot.xlabel("季度")
pyplot.ylabel("比率")
pyplot.show()
2.4 效果图
三、资产占比可视化
3.1 资产占比计算
#步骤四:取出货币资金、应收账款、存货、预付款项、固定资产、无形资产、长期待摊费用、资产总计8列
数据 = 数据[["货币资金","应收账款","存货","预付款项","固定资产","无形资产","长期待摊费用","资产总计"]]
print(数据)
#步骤五:转置
行索引 = 数据.columns
列索引 = 数据.index
数据 = pandas.DataFrame(数据.values.T,index=行索引,columns=列索引)
#祛除行索引上的名字
数据.index.name = None
print(数据)
#步骤六:计算二零年六月份各项资金占比
数据["二零年六月占比"] = 数据["2020/6/30 0:00:00"]/数据["2020/6/30 0:00:00"]["资产总计"]
二零年六月数据 = 数据["二零年六月占比"][0:7]
print(二零年六月数据)
#步骤七:计算“其他”项目占比
其他项目占比 = 1 - 二零年六月数据.sum()
二零年六月数据.loc["其他"] = 其他项目占比
print(二零年六月数据)
3.2 资金占比可视化
使用饼图显示各项目占比情况。
#步骤九:为饼图添加细节
#让中文汉字显示出来
pyplot.rcParams["font.sans-serif"]=["SimHei"]
pyplot.rcParams["axes.unicode_minus"] = False
#设置图片大小
pyplot.figure(figsize=(8,8))
#多做一步,单独列出数据
饼图数据 = 二零年六月数据.tolist()
'''
下面这么长,其实只是一行代码,为了显示方便才分行写
labels是对每块扇形的说明;
autopct是每块扇形内数据的显示方式
%3.1%%表示以百分数显示数字,数字总长度为3,其中小数占1位;
explode用于突出显示某块扇形区域,数据个数与扇形个数对应,0表示不突出;
starttangle用于设置饼图旋转角度防止字重合。
'''
pyplot.pie(
饼图数据,
labels=二零年六月数据.index,
autopct="%3.1f%%",
explode=(0,0,0.1,0,0,0,0,0),
startangle=60
)
#设置饼图标题
pyplot.title("中国软件产业结构分析")
#显示图像
pyplot.show()
3.3 完整代码
import pandas
from matplotlib import pyplot
数据 = pandas.read_excel("数据.xlsx",sheet_name="sheet1")
行索引 = 数据.columns
列索引 = 数据["资产负债表"]
数据 = pandas.DataFrame(数据.values.T,index=行索引,columns=列索引)
数据.drop(["资产负债表","REPORTDATE"],axis=0,inplace=True)
数据.dropna(axis=1,inplace=True)
数据 = 数据[["货币资金","应收账款","存货","预付款项","固定资产","无形资产","长期待摊费用","资产总计"]]
行索引 = 数据.columns
列索引 = 数据.index
数据 = pandas.DataFrame(数据.values.T,index=行索引,columns=列索引)
数据.index.name = None
数据["二零年六月占比"] = 数据["2020/6/30 0:00:00"]/数据["2020/6/30 0:00:00"]["资产总计"]
二零年六月数据 = 数据["二零年六月占比"][0:7]
其他项目占比 = 1 - 二零年六月数据.sum()
二零年六月数据.loc["其他"] = 其他项目占比
pyplot.rcParams["font.sans-serif"]=["SimHei"]
pyplot.rcParams["axes.unicode_minus"] = False
pyplot.figure(figsize=(8,8))
饼图数据 = 二零年六月数据.tolist()
pyplot.pie(
饼图数据,
labels=二零年六月数据.index,
autopct="%3.1f%%",
explode=(0,0,0.1,0,0,0,0,0),
startangle=60
)
pyplot.title("中国软件产业结构分析")
pyplot.show()