点击关注我 然后看我资料 + 群 可以免费获取学习资料哈

帕累托分析法是基于帕累托法则的一种分析法。

先来说说什么是帕累托法则,其原型是19世纪意大利经济学家帕累托所创的库存理论。帕累托运用大量的统计资料分析当时的一些社会现象,概括出一种关键的少数和次要的多数的理论,并根据统计数字画成排列图,后人把它称为帕累托曲线图。简单的说,帕累托法则其实就是我们常说的二八法则,在经济学定律中说的是80%的财富掌握在20%的人手中,而在运营中说的则是80%的贡献度来自于20%的用户。

而基于帕累托法则的帕累托分析法(Pareto Analysis)是制定决策的统计方法,用于从众多任务中选择有限数量的任务以取得显著的整体效果。

下图是我基于Pandas随机模拟出的一组产品数据,并结合Matplotlib来展现这组数据的相关帕累托曲线图。

如图可见,蓝色的条形柱状图代表了每款产品的销售金额,每一个橘色百分点标记代表了从左往右的销售累计占比。其中红色的垂直虚线则是一条数据占>=80%的分界线,也就代表了这条分界线之前的7款产品(即,'G7', 'MX3', 'R9Plus' , 'A37', 'Note5', 'X5Pro', 'A50')占到了总销售额中83.91%的销售份额,之后其余的3款产品占比只有16.09%。假如放到现实场景中,就可以根据市场情况制定某些决策,如是否要撤销某些产品的研发。

接下来为了更好的理解代码是如何实现的,我将分解代码成若干段来说说明。首先我用Pandas模拟10组虚拟产品数据。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt%matplotlib inline
%config InlineBackend.figure_format = 'retina'# 创建模拟数据,10个品类产品的销售额
data = pd.Series(np.random.randn(10)*500+1000,  index=['A37','A50','R7S','Note5','G7','R9_Plus','5C','X5_Pro','MX3','M5'])
print(data)

通过输出data变量值查看如下,左侧的index是我们虚拟的10组产品名称,而右侧对应的数值则是通过random.randn随机产生的10组基于标准正态分布的伪数据。

A37        1784.729567
A50         198.971079
R7S         985.258417
Note5      1348.619119
G7         1330.237773
R9_Plus     188.307306
5C         2105.157302
X5_Pro     1225.447782
MX3         957.038300
M5         1346.797999
dtype: float64

接着,我们将所有的数据从大到小降序排列并以此构建柱状图。

其中要注意的一点是,为什么需要降序排列呢?因为考虑到我们要制作的是累计占比,同样是计算累计相加值满足>=80%,从小到大升序排列 与 从大到小降序排列 相比 降序排列能以更少的数据个数预先满足累计相加值>=80%,也就能体现帕累托法则的二八法则,少数掌握多数的原理。

# 将数值按照从大到小排序
data.sort_values(ascending=False, inplace=True)
# 构建画布
plt.figure(figsize=(10,6))# 先构建一个从大到小排列的,标准柱状图。
data.plot(kind='bar', colormap='GnBu_r', width=0.6, edgecolor='black', rot=0)plt.xlim(-1,11)
plt.ylim(0,2000)plt.xlabel('产品名')
plt.ylabel('销售金额')
plt.title('销售情况')
plt.legend(['销售金额'], loc='upper right')

输出图如下:

之后,需要绘制另一条累计占比的百分比图。首先需要通过cumsum函数得到每个产品时的当前累计值,并用这个累计值去除以总销售金额得到的就是该产品当前的累计占比的百分比数值。得到每个产品当前的累计占比的百分比数值后就可以通过布尔索引筛选出>=80%的产品名称。有了这个产品名称就可以获得该产品的索引位置编号,而这个索引位置十分重要,因为这有助于我们之后用来标注那条红色分界线的具体位置。

# 累加值 除以 总数值 得到每个阶段累加值的占比值。
proportion = data.cumsum() / data.sum()# 用布尔索引列出大于等于0.8的数值列表,而列表里第一行就是大于80%的关键点,我们取得它的索引名称。
key = proportion[proportion >= 0.8].index[0]# 根据之前得到的索引名称,就可以从data数据中得到该名称的索引位置。
key_number = data.index.tolist().index(key)proportion.plot(style='--ko', secondary_y=True, color='#FFA500')plt.axvline(key_number, linestyle='--', color='red')for x, y, s in zip(range(len(data)), proportion.values, proportion):  if x == key_number:plt.text(key_num+0.2, y-0.035, '累计占比为 {:.2%}'.format(s), color='red', fontsize=12)else:plt.text(x+0.3, y-0.035, "{:.2%}".format(s), fontsize=12, horizontalalignment='center', color='black')plt.ylabel('销售(比例)')
plt.legend(['累积占比'], loc='upper center')

之后将两段代码合并,也就是两张图合并为一张图就形成了我们一开始提到的帕累托曲线图。

最后放上完整代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt%matplotlib inline
%config InlineBackend.figure_format = 'retina'# 创建模拟数据,10个品类产品的销售额
data = pd.Series(np.random.randn(10)*500+1000,  index=['A37','A50','R7S','Note5','G7','R9_Plus','5C','X5_Pro','MX3','M5'])# 将数值按照从大到小排序
data.sort_values(ascending=False, inplace=True)
# 构建画布
plt.figure(figsize=(10,6))# 先构建一个从大到小排列的,标准柱状图。
data.plot(kind='bar', colormap='GnBu_r', width=0.6, edgecolor='black', rot=0)
plt.xlim(-1,11)
plt.ylim(0,2000)
plt.xlabel('产品名')
plt.ylabel('销售金额')
plt.title('销售情况')
plt.legend(['销售金额'], loc='upper right')# 累加值 除以 总数值 得到每个阶段累加值的占比值。
proportion = data.cumsum() / data.sum()# 用布尔索引列出大于等于0.8的数值列表,而列表里第一行就是大于80%的关键点,我们取得它的索引名称。
key = proportion[proportion >= 0.8].index[0]# 根据之前得到的索引名称,就可以从data数据中得到该名称的索引位置。
key_number = data.index.tolist().index(key)proportion.plot(style='--ko', secondary_y=True, color='#FFA500')plt.axvline(key_number, linestyle='--', color='red')for x, y, s in zip(range(len(data)), proportion.values, proportion):  if x == key_number:plt.text(key_num+0.2, y-0.035, '累计占比为 {:.2%}'.format(s), color='red', fontsize=12)else:plt.text(x+0.3, y-0.035, "{:.2%}".format(s), fontsize=12, horizontalalignment='center', color='black')plt.ylabel('销售(比例)')
plt.legend(['累积占比'], loc='upper center')

总结

画帕累托图最重要的几点是要将数据从大到小排序,这主要是为了能体现帕累托法则的二八法则,少数掌握多数的原理。当数据以降序的方式排列后,计算每个列数据累计占比百分比数值。有了百分比数值,我们就可以将数据可视化,可视化后可以很清楚的从图中来区分哪些对应的产品满足了>=80%的贡献。

数据特征分析 - 帕累托分析法相关推荐

  1. 10.Excel数据特征分析-帕累托分析法

    文章目录 1.什么是帕累托分析 2.帕累托分析法案例 3.数据透视表与帕累托分析结合具体步骤 3.1数据透视表建立 3.2 帕累托图的建立 3.3 调整帕累托图 3.3.1调整坐标轴 3.3.2 调整 ...

  2. 数据特征分析-帕累托分析

    帕累托分析(贡献度分析):即二八定律 目的:通过二八原则寻找属于20%的关键决定性因素. 随机生成数据 df = pd.DataFrame(np.random.randn(10)*1000+3000, ...

  3. SQL如何进行帕累托分析?(窗口函数、累计百分比分类)

    帕累托分析法是指定决策的统计方法,包含按降序排序的列和表示累积总百分比的线条 [面试题]有一张"学生成绩表",包含3个字段:学号.课程.成绩. 问题:找出每门课程A类和B类的学生, ...

  4. 数据特征分析之帕累托分析以及python实现

    帕累托分析(贡献度分析) → 帕累托法则:20/80定律 "原因和结果.投入和产出.努力和报酬之间本来存在着无法解释的不平衡.一般来说,投入和努力可以分为两种不同的类型: 多数,它们只能造成 ...

  5. Power BI应用案例:销售帕累托分析(28法则)

    一.应用背景 帕累托法则往往称为二八原理,即百分之八十的问题是百分之二十的原因所造成的.帕累托图在项目管理中主要用来找出产生大多数问题的关键原因,用来解决大多数问题.本文利用Power BI进行帕累托 ...

  6. Power BI产品帕累托分析

    效果图一: 说明: 1.x轴为每个产品的销售金额,按照从大到小排序 2.y轴为这些产品累积的销售金额占比,也就是 到产品的累积销售金额 除以 所有产品总的销售金额 3.红色框部分表示,累积销售金额占比 ...

  7. python数据分析之帕累托分析

    帕累托分析 帕累托图在概念上与帕累托法则有关.帕累托法则认为,相对少量的原因通常造成大多数的问题或缺陷.该法则通常称为80/20原则,即80%的问题是由20%的原因导致的.帕累托图也用于汇总各种类型的 ...

  8. 帕累托分析中的累计优化

    帕累托分析又称ABC分析,也许有些人是第一次听到这样的叫法,实际它就在我们的身边.比如世界上百分之九十的财富掌握在十个人手里:头部商品占了公司80%的营业额:项目中应该把80%的时间投入到那80%重要 ...

  9. 笔记-高项案例题-2019年下-质量管理-帕累托分析

    2019年下半年信息系统项目管理师考试下午真题 这一题没拿到高分,难怪当年不过了. [说明] 2019年3月某公司中标当地轨道交通的车载广播系统项目,主要为地铁列车提供车载广播.报警.对讲及电子地图系 ...

  10. Powerbi实现帕累托分析

    完整文档 主要实现功能: 1.任意选择城市数量 2.任意选择时间区间 3.除参与排名的城市,其他城市用[其他]代替,且颜色标注出来 实现效果: ![GIF 2022-3-17 14-27-06.gif ...

最新文章

  1. mybatis plus 使用函数_这些Mybatis-Plus使用技巧,太火了
  2. 一行代码不用写,就可以训练、测试、使用模型,这个 star 量 1.5k 的项目帮你做到...
  3. OSChina 周三乱弹——节前综合症来袭,简直无法抵抗了
  4. CF718E Matvey‘s Birthday(状压、bfs、暴力、分类讨论)
  5. 通过demo搞懂encode_utf8和decode_utf8
  6. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.11
  7. 没有ADC的MCU如何实现音频播放?
  8. 办公室计算机应用简单知识,新入职办公室人员基础电脑操作知识.doc
  9. word去掉标题前面的黑点
  10. 小米机顶盒显示网络无法连接服务器,小米盒子无线网络连接不上怎么回事 - 卡饭网...
  11. 前台传入数据后台被转义问题解决
  12. 视频号容易被官方封号的违规操作,你中招了吗?
  13. 什么是软件测试及其分类?
  14. 记一次 .NET 某桌面奇侠游戏 非托管内存泄漏分析
  15. 父进程和子进程之间的关系
  16. FXO和FXS的区别
  17. Spring、SpringMVC、Mybatis常见面试题总结
  18. 小程序扫码在线点餐系统源码开源分享
  19. linux启动进程 c,Linux启动新进程的三种方法
  20. S7-200SMART PLC如何使用MicroSD存储卡来进行程序传输和固件更新?

热门文章

  1. 计算机合并单元格怎么操作,excel怎么合并单元格,教您excel合并单元格的方法
  2. 面向初学者的 Python IDE:Thonny,你值得一试
  3. 开源项目——小Q聊天机器人V1.2
  4. BUG记录——解析程序包出现错误
  5. 小丁是怎样入门git的
  6. JBOSS启动错误:Not pointing to a directory
  7. |9 其他(linux特定的), 用来存放内核例行程序的文档.,Linux常用操作指令
  8. Day621.Spring Test 常见错误 -Spring编程常见错误
  9. html安全区怎么设置,[GEE引擎]自定义安全区形状的设置方法
  10. 怎样玩魔方,魔方口诀,魔方玩法