帕累托分析

帕累托分析(贡献度分析) → 帕累托法则:20/80定律

“原因和结果、投入和产出、努力和报酬之间本来存在着无法解释的不平衡。
一般来说,投入和努力可以分为两种不同的类型:
多数,它们只能造成少许的影响;少数,它们造成主要的、重大的影响。”
→ 一个公司,80%利润来自于20%的畅销产品,而其他80%的产品只产生了20%的利润

例如:

世界上大约 80% 的资源是由世界上 15% 的人口所耗尽的
世界财富的80%为25%的人所拥有;在一个国家的医疗体系中
20% 的人口与 20% 的疾病,会消耗 80% 的医疗资源。

一个思路:通过二八原则,去寻找关键的那20%决定性因素!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline

# 帕累托分布分析 
data = pd.Series(np.random.randn(10)*1200+3000,
                index = list('ABCDEFGHIJ'))
print(data)
print('------')
# 创建数据,10个品类产品的销售额

data.sort_values(ascending=False, inplace= True)
# 由大到小排列

plt.figure(figsize = (10,4))
data.plot(kind = 'bar', color = 'g', alpha = 0.5, width = 0.7)  
plt.ylabel('营收_元')
# 创建营收柱状图

p = data.cumsum()/data.sum()  # 创建累计占比,Series
key = p[p>0.8].index[0]  
key_num = data.index.tolist().index(key) 
print('超过80%累计占比的节点值索引为:' ,key)
print('超过80%累计占比的节点值索引位置为:' ,key_num)
print('------')
# 找到累计占比超过80%时候的index
# 找到key所对应的索引位置

p.plot(style = '--ko', secondary_y=True)  # secondary_y → y副坐标轴
plt.axvline(key_num,hold=None,color='r',linestyle="--",alpha=0.8)  
plt.text(key_num+0.2,p[key],'累计占比为:%.3f%%' % (p[key]*100), color = 'r')  # 累计占比超过80%的节点
plt.ylabel('营收_比例')
# 绘制营收累计占比曲线

key_product = data.loc[:key]
print('核心产品为:')
print(key_product)
# 输出决定性因素产品

答案:

A    4377.396859
B    4646.306400
C    5046.403470
D     999.850611
E    2408.016058
F    4318.273353
G    3893.589001
H    2486.025654
I    2176.618725
J    3589.327506
dtype: float64
------

超过80%累计占比的节点值索引为: H
超过80%累计占比的节点值索引位置为: 6
------
核心产品为:
C    5046.403470
B    4646.306400
A    4377.396859
F    4318.273353
G    3893.589001
J    3589.327506
H    2486.025654
dtype: float64

在这里插入图片描述
自我学习:

  1. data.sort_values(ascending=False, inplace= True)
  • sort_values()函数的具体参数
    • DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
参数说明
by指定列名(axis=0或'index')或索引值(axis=1或'columns')
axis若axis=0或'index',则按照指定列中数据大小排序; 若axis=1或'columns',则按照指定索引中数据大小排序,默认axis=0
ascending是否按指定列的数组升序排列,默认为True,即升序排列
inplace是否用排序后的数据集替换原来的数据,默认为False,即不替换
na_position{‘first',‘last'},设定缺失值的显示位置
  1. p = data.cumsum()/data.sum()
  • .cumsum() 累计(累加)
  • .sum() 加总
  1. key_num = data.index.tolist().index(key)
  • .tolist() 转换成列表
  1. p.plot(style = ‘–ko’, secondary_y=True)
  • secondary_y=True → 为y轴添加y副坐标轴
  1. plt.axvline(key_num,hold=None,color=‘r’,linestyle="–",alpha=0.8)
  • plt.axvline(x=0, ymin=0, ymax=1, hold=None, **kwargs) 和 plt.axhline(y=0, xmin=0, xmax=1, hold=None, **kwargs) 绘制一条横跨当前图表的垂直/水平辅助线
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值