1 介绍
====
1.1 帕累托法则:20/80定律。
1.2 在数据特征分析中,又叫:帕累托分析(贡献度分析),是一项很重要的数据分析方法。
1.3 是由维尔弗雷多·帕累托(Vilfredo Pareto)(1848年7月15日 - 1923年8月19日)提出的。
1.4 帕累托是意大利土木工程师、经济学家和社会学家,经典精英理论的创始人。
2 帕累托法则
==========
2.1 不是自然规律,而是一种观察:
20%的商店产生80%的收入;
20%的软件错误导致80%的系统崩溃;
20%的产品功能驱动80%的销售;
一个公司,80%利润来自于20%的畅销产品,而其他80%的产品只产生了20%的利润;
在一个国家的医疗体系中,20%的人口与20%的疾病,会消耗80%的医疗资源;
男性约会成功,80%的女性会争夺20%的最具吸引力的男性;
2.2 一个思路:通过二八原则,去寻找关键的那20%决定性因素!
2.3 企业高管长期以来一直将其用于战略规划和决策。
2.4 受到广泛欢迎,善于分析的企业尝试在他们自己的商业世界中找到这样的帕累托法则。通过这种方式,他们可以计划并确定其行动的优先顺序。事实上,今天,数据科学在筛选大量复杂数据,以助识别未来帕累托场景方面发挥着重要作用。
3 帕累托图
========
3.1 是一种包含条形图和折线图的图表,其中各个值均以条形降序形式表示,上升的累计总计由线条来表示。
3.2 帕累托法则是一个非常简单但功能非常强大的管理工具。
3.3 python-matplotlib的代码
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt# 创建数据,10个品类产品的销售额data = pd.Series(np.random.randn(10)*1200+3000, index = list('ABCDEFGHIJ'))#由大到小排列data.sort_values(ascending = False,inplace = True)#创建营收柱状图plt.figure(figsize = (12,4))data.plot.bar(color = 'y',alpha = 0.8,width = 0.6,rot = 0)#计算累计占比,关键点p = data.cumsum()/data.sum()key = p[p>0.8].index[0]key_num = data.index.tolist().index(key)#画累计占比曲线(secondary_y = True创建第二坐标轴)p.plot(kind = 'line',style = '--o',color = 'k',secondary_y = True)#标注plt.axvline(key_num,linestyle = '--',color = 'r')plt.text(key_num,p[key_num],'sun percent:{:.2f}%'.format(p[key_num]*100),color = 'r',fontdict = {'size':15})#图标标题plt.title('Pareto Chart')plt.show()
3.4 图
4 读取xls做数据可视化
=================
4.1 注意matplotlib中文设置法:建议采用一劳永逸法
参考文章《强!3种方法实现python-matplotlib显示中文》
4.2 数据:举例
4.3 数据:假设数据:catering_dish_profit.xls
菜品名盈利A19321A25782A35543A44321A53765A63542A73324A82783A92567A102341
4.4 代码:python3.8+linux操作系统
import pandas as pdimport matplotlib.pyplot as plt#读取数据data=pd.read_excel('/home/xgj/Desktop/Pareto/catering_dish_profit.xls',index_col='菜品名') data=data['盈利'].copy() #图标定义plt.figure() #必须放在这里,才有效plt.xlabel('菜品名',fontsize=20) #这里的字体大小就是x坐标轴的柱状图数据标签大小data.plot(kind='bar',fontsize=20) plt.ylabel('盈利(元)',fontsize=20) p=1.0*data.cumsum()/data.sum() #右侧y刻度数字设置p.plot(color='r',secondary_y=True,style='-o',linewidth=2,fontsize=20) #标注设置plt.annotate(format(p[6],'.4%'),fontsize=20,xy=(6,p[6]),xytext=(5.4,p[6]*0.9),arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) plt.ylabel('盈利百分比',fontsize=20) #放在这里,无法设置x坐标轴标签字体大小#plt.xlabel('菜品名',fontsize=20) plt.show()
4.5 图
5 小结
非常完整,适合收藏。