关于Python数据分析进行整理柱状图加百分比

问题分析

Python数据分析作为现在时兴的技术,有着以下几种优势:
1、面向对象语言。(相对于面向过程的语言拥有可维护性、可读性)
2、强大的标准库,代码量极少。
3、海量第三方模块

在这里我们使用Python数据分析来完成产品贡献度分析的工作,作为柱状图和百分比的分析图表也具有更直观的分析体验。对于数据可视化的应用也有着重要的意义。
贡献度分析也称为帕累托分析,其原理简单来说就是20/80定律,即为80%的利润常常来自于20%的产品,那么为了能够更好的推广产品,加大力度进行投入资金、重点宣传对于企业来说可以带来更大的收入。那么,我们在实际应用中应该如何进行分析、找到这20%的产品并且用图表进行显示就成为了企业更关注的问题。

解决方案

首先我们了解一个公式:
累计贡献率(%)=(累加销售收入/销售总收入)×100%
通过上面的公式,累计贡献率在接近80%的时候,找到该产品在图标中相应的位置进行标注。
(注明:我们说的80/20法则只能说是一个比喻和实用的标准,真正的比例不一定正好是80%:20%,80/20法则表明在多数情况下该关系很可能是不平衡的,并且接近80/20。)

在Python的Matplotlib图表中提供了一个方法:annotate()方法,这种方法常常用于给图标上的数据添加文本标注,并且支持带箭头的划线工具,方便我们在合适的位置添加描述信息。常用的参数如下:

s:标注文本的内容
xy:设置箭头尖的座标(传入一个元组)
xytest:设置标注内容显示的起始位置(传入一个元组)
arrowprops:用来设置箭头的样式
facecolor:设置箭头的颜色
headlength:箭头头部的长度
headwidth:箭头头部的宽度
width:箭头的宽度

下面是代码:

import pandas as pd
import matplotlib.pyplot as plt
aa = 'r./data/data1.xls'
df = pd.DataFrame(pd.read_excel(aa))
# 分组统计排序
# 通过reset_index()函数将groupby()的分组结果重新设置索引
df1 = df.groupby(["图书编号"])[买家实际支付金额].sum().reset_index()
df1 = df1.set_index('图书编号')	# 设置索引
df1 = df1[u'买家实际支付金额'].copy()
df2 = df1.sort_values(ascending = False)
# 图表字体为华文细黑,字号10
plt.rc('font', family = 'SimHei', size = 10)
plt.figure('贡献度分析')
df2.plot(kind = 'bar')
plt.ylabel(u'销售收入(元)')
p = 1.0*df2.cumsum() / df2.sum()
print(p)
p.plot(color = 'r', secondary_y = True, style = '-o', linewidth = 0.5)
plt.annotate(format(p[9],'.4%'), xy = (9,p[9]), xytext = (9*0.9, p[9]*0.9),
	    # 添加标记,并且指定箭头样式
	    arrowprops = dict(arrowstyle = "->",connectionstyle = "arc3,rad = .1"))
plt.ylabel(u'收入(比例)')
plt.show()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章