【python科研绘图】绘制帕累托图(Pareto)步骤解析,并封装后直接调用

article/2025/10/4 8:36:42

python绘制帕累托图

  • 1 帕累托图
  • 2 python实现
    • 2.1 数据准备
    • 2.2 特征因素数值排序
    • 2.3 计算累计频率百分比
    • 2.4 标记累计百分比80%特征因素的位置
    • 2.5 输出核心的特征因素信息
    • 2.6 绘制帕累托图
  • 3 封装
    • 3.1 全部代码
    • 3.2 应用示例

手动反爬虫: 原博地址 https://blog.csdn.net/lys_828/article/details/113746366

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

如若转载,请标明出处,谢谢!

1 帕累托图

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

“原因和结果、投入和产出、努力和报酬之间本来存在着无法解释的不平衡。一般来说,投入和努力可以分为两种不同的类型:多数,它们只能造成少许的影响;少数,它们造成主要的、重大的影响。”

比如:一个公司,80%利润来自于20%的畅销产品,而其他80%的产品只产生了20%的利润

帕累托图基本构成:

  • (1)双y轴图,左侧y轴表示频数,右侧y轴表示频率百分比,x轴表示特征因素
  • (2)左侧y轴数据对应柱状图,右侧y轴数据对应点线图
  • (3)点线图中超过80%的第一个因素进行标记,左侧就为核心特征因素

在这里插入图片描述

2 python实现

2.1 数据准备

程序运行前先导入相关的第三方库,代码是在jupyter notebook中运行。

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

使用的数据采用随机数进行生成

data = pd.Series(np.random.randn(10)*5000 + 10000,index = list('ABCDEFGHIJ'))
data

输出结果为:(每次运行生成的随机数的结果都会不一致)

A     5748.099899
B    10463.000272
C     5172.031773
D    17338.362775
E    11225.537785
F    12372.527636
G    19367.945373
H     4703.089439
I    14747.208553
J    13076.519903
dtype: float64

2.2 特征因素数值排序

数据的类型是Series数据,直接对值进行排序(由大到小)

data.sort_values(ascending=False,inplace = True)
data

输出结果为:

G    19367.945373
D    17338.362775
I    14747.208553
J    13076.519903
F    12372.527636
E    11225.537785
B    10463.000272
A     5748.099899
C     5172.031773
H     4703.089439
dtype: float64

顺便也可以查看一下特征因素统计情况

#查看数据频数
plt.figure(figsize=(12,8))
data.plot(kind = 'bar', color = 'g', alpha = 0.8, width = 0.6,rot=0)

输出结果为:
在这里插入图片描述

2.3 计算累计频率百分比

上面计算了左侧y轴对应的频数,接下来就要计算右侧y轴对应的数据

#计算累计营收占比
p = data.cumsum()/data.sum()
p

输出结果为:(最后一个特征因素的结果一定为1)

G    0.169575
D    0.321381
I    0.450500
J    0.564991
F    0.673318
E    0.771603
B    0.863211
A    0.913539
C    0.958822
H    1.000000
dtype: float64

2.4 标记累计百分比80%特征因素的位置

上面求解出累计百分比的大小,这里标记的是百分比大于等于80%的第一个特征因素的位置

key = p[p>0.8].index[0]
key_num = data.index.tolist().index(key)
print('超过80%占比的节点值索引为:',key)
print('超过80%占比的节点值索引位置为:',key_num)

输出结果为:

超过80%占比的节点值索引为: B
超过80%占比的节点值索引位置为: 6

2.5 输出核心的特征因素信息

对于低于累计百分比80%的特征因素就是我们要筛选的结果

key_product = data.loc[:key]
print('核心产品为:')
print(key_product)

输出结果为:(索引在80%占比的节点值索引位置之前的内容)

核心产品为:
G    19367.945373
D    17338.362775
I    14747.208553
J    13076.519903
F    12372.527636
E    11225.537785
B    10463.000272
dtype: float64

2.6 绘制帕累托图

至此绘制帕累托图所需要的数据全部准备完毕,直接绘制

plt.figure(figsize=(12,4))
data.plot(kind = 'bar', color = 'g', alpha = 0.8, width = 0.6,rot=0)
p.plot(style = '--ko',secondary_y = True)plt.axvline(key_num,color='r',linestyle="--",alpha=0.8)  
plt.text(key_num+0.2,p[key],'累计占比为:%.3f%%' % (p[key]*100), color = 'r') 

输出结果为:(基本上满足要求)
在这里插入图片描述
这里可以发现左右两侧只显示了一半的内容,可以通过plt.xlim()方法解决
在这里插入图片描述

3 封装

整个过程中梳理完毕后,发现共有三个功能需要实现,也就是2.4-2.6的部分,因此可以设置一个类, 添加三个函数,完成绘制帕累托图的代码封装。

直接给出代码,注意的是传入的数据是Series数据,因为对于DataFrame数据,单独取一列研究特征因素对应的数据类别就是Series数据

3.1 全部代码

class Pareto_analysis:def __init__(self,series_data):self.series_data = series_datadef get_key_factor_location(self):data.sort_values(ascending=False,inplace = True)p = data.cumsum()/data.sum()key = p[p>0.8].index[0]key_num = data.index.tolist().index(key)print('超过80%占比的节点值索引为:',key)print('超过80%占比的节点值索引位置为:',key_num)def get_key_factor_information(self):key_product = data.loc[:key]print('核心因素为:')print(key_product)def plot_figure(self):plt.figure(figsize=(12,4),dpi=500)data.plot(kind = 'bar', color = 'g', alpha = 0.8, width = 0.6,rot=0)plt.ylabel('频数')plt.xlabel('特征因素')p.plot(style = '--ko',secondary_y = True)plt.axvline(key_num,color='r',linestyle="--",alpha=0.8)  plt.text(key_num+0.2,p[key],'累计占比为:%.3f%%' % (p[key]*100), color = 'r')  # 累计占比超过80%的节点plt.ylabel('频率累计百分比')#这里根据特征因素的数量进行边距的设置plt.xlim(-0.5,len(data)-0.5)

3.2 应用示例

(1)标记累计百分比80%特征因素的位置
在这里插入图片描述
(2)标记累计百分比80%特征因素的位置
在这里插入图片描述
(3)绘制帕累托图
在这里插入图片描述

直接一个函数调用,不想整那么麻烦的话

def Pareto_analysis(data):data.sort_values(ascending=False,inplace = True)p = data.cumsum()/data.sum()key = p[p>0.8].index[0]key_num = data.index.tolist().index(key)print('More than 80% of the node values are indexed as:',key)print('More than 80% of the node values index position is:',key_num)key_product = data.loc[:key]print('The key factors are:')print(key_product)plt.figure(figsize=(12,4),dpi=500)data.plot(kind = 'bar', color = 'g',edgecolor = 'black', alpha = 0.8, width = 0.6,rot=0)plt.ylabel('Frequency')plt.xlabel('Characteristic factor')p.plot(style = '--ko',secondary_y = True)plt.axvline(key_num,color='r',linestyle="--",alpha=0.8)  plt.text(key_num+0.2,p[key],'The cumulative proportion is:%.3f%%' % (p[key]*100), color = 'r')  plt.ylabel('Cumulative percentages')plt.xlim(-0.5,len(data)-0.5)

调用函数,输出结果为:
在这里插入图片描述

至此利用python绘制帕累托图的过程就梳理完毕了!


http://chatgpt.dhexx.cn/article/6tVskyMK.shtml

相关文章

多目标优化——帕累托最优Pareto

多目标优化——帕累托最优Pareto 0.前言 本文是本人在学习过程中为便于记忆利用博客进行总结,期待与各位大佬共同学习交流 什么是多目标优化 在了解帕累托最优之前,我们先来讨论一下,什么是多目标优化(Multiobjective Optimiz…

【多目标进化优化】Pareto 定义及基于 Pareto 的多目标进化算法的算法流程

声明 本文内容来源于 《多目标进化优化》 郑金华 邹娟著,非常感谢两位老师的知识分享,如有侵权,本人立即删除,同时在此表示,本文内容仅学习使用,禁止侵权,谢谢! 0 前言 多目标优化…

【数字孪生百科】可视化图表知识科普——Pareto图(Pareto Chart)

简介 Pareto图(Pareto Chart)又称帕累托图、排列图,是一种特殊类型的条形图。图中标绘的值是按照事件发生的频率排序而成,显示由于各种原因引起的缺陷数量或不一致的排列顺序。Pareto图是根据 Vilfredo Pareto 命名的,…

帕累托图 (Pareto Chart)

帕累托图用于识别最有可能考虑影响过程或结果的变量行为的因子类别。流程改进团队使用Pareto图表来确定其工作的优先级。 在帕累托图中,垂直条通常代表每个类别,条形图上方的累积折线图确定了最有可能成为研究重要目标的因素。 优点 使用和理解的简单…

多目标优化中的帕累托(Pareto)相关概念

本文整理自: 多目标优化之帕累托最优 - 知乎、多目标优化---帕累托(Pareto)_纯粹的博客-CSDN博客、百度百科 1、多目标优化 在现实生活中有很多的问题都是由互相冲突和影响的多个目标组成,这些目标不可能同时达到最优的状态&am…

Pareto(帕累托)

转自:https://blog.csdn.net/scutwjh/article/details/46129405 由于最近看到了一篇社交网络中的论文提高了Pareto相关知识,所以整理了下网上关于Pareto相关理论的讲解,供大家参考: 维弗雷多帕雷托 (Villefredo Pareto) 在1987年…

Pareto 问题详解

Pareto 问题详解 1 Pareto1.1 Pareto 问题1.1.2 Pareto Improvement1.1.3 Pareto Front1.1.4 Pareto Analysis 1.2 Pareto 解1.2.1 解A优于解B (解A强 Pareto 支配解B)1.2.2 解A无差别于解B(解A能 Pareto 支配解B)1.2.3 最优解与Pareto 最优解1) 最优解2) Pareto 最优解3) 理解…

Pareto最优解排序

•1879年,经济学家意大利人维弗雷多帕雷托(Villefredo Pareto) 提出:社会财富的80%是掌握在20%的人手中,而余下的80%的人只占有20%的财富。渐渐地,这种“关键的少数(vital few)和次要的多数(tri…

多目标优化---帕累托(Pareto)

参考与这个链接的博客https://blog.csdn.net/paulfeng20171114/article/details/82454310 多目标优化—帕累托(Pareto) 1 多目标优化简介 2多目标优化数学语言描述 3 多目标优化的Pareto占优 1 多目标优化简介: 在现实生活中有很多的问题都…

Pareto最优解 Pareto分布

1.该定律是指绝大多数的问题或缺陷产生于相对有限的起因。就是常说的二八定律,即20%的原因造成80%的问题。 在帕累托分布中,如果X是一个随机变量, 则X的概率分布如下面的公式所示: 其中x是任何一个大于xmin的数,xmin是…

手机取证技术路线图

Andriod手机取证的难度,其实在于一个门槛。最高人民检察院司法鉴定中心是国家级司法鉴定中心,他们对手机取证的总结,还是挺全面和震撼的。感谢本图原创作者:Friez Wittenfeld。 图片较大、较长,请您受累把手机横起来看…

无人机取证——飞行日志分析取证

前言 随着科技发展日新月异,利用无人机犯罪的途径和案例越来越多,无人机除了拍照录像的用途外,亦可能被有心人士用于运送违法物品等不法行为,甚至,若是绑上自制炸弹,刻意飞去冲撞人或车或建筑物&#xff0…

【Android取证篇】华为手机OTG备份密码重置教程

【Android取证篇】华为手机OTG备份密码重置教程 ​ 提取华为设备遇到OTG备份出来的数据信息软件无法正常解析时,排除数据提取不完整、软件设备等问题,可考虑重置华为的备份密码,重新备份数据再分析—【suy】 文章目录 【Android取证篇】华为…

安卓手机微信数据恢复取证研究 EnMicroMsg.db FTS5IndexMicroMsg_encrypt.db

一、记录级恢复 对于安卓手机微信数据恢复取证,大部分用户删除微信数据时,只对部分消息进行针对性的删除,实际上仅仅删除了EnMicroMsg.db文件message数据表中的局部内容,由于没有覆盖新数据,在安卓微信5.2版本前可以通…

电子数据取证-流程与技术

推荐公众号:安全猎人 专注于全栈攻防,学习笔记等; 原文url:https://mp.weixin.qq.com/s/hwpBcp-55ycXnSdObEffGg 电子数据取证流程与技术 根据某大佬经验,汇总出一系列取证流程、理论和模型; 在模型中&a…

计算机取证科普性基础

内容为美亚柏科公开课笔记。 1 Windows系统与取证 1.1 存储介质取证概述 专业名词 未分配空间文件残留区 物理大小逻辑大小文件大小物理大小-逻辑大小 临时文件 C:\Windows\Temp*.tmpC:\Documents and Settings\Username\Local Setting\Temporary Internet FilesC:\Documen…

逆向开发学习手机取证之钉钉取证分析

一、钉钉取证分析 钉钉是阿里巴巴专为中国企业推出的一款企业级应用。其主要支持视频会议、商户电话、聊天、企业通讯录以及企业办公协同等功能。其采用AES加密算法与第三方加密相结合,来提高用户数据的安全等级,旨在为企业员工间的交流、协同提供一个安…

电子取证

前言:比赛看到取证类的题目,但是没了解过,所以很尴尬。比赛那道题没做出来,没有什么思路,所以等下师傅们的wp看看之后在进行复现。然后就在CTF平台上找了取证类的题目,进行学习一下。 知识了解 取证方法 …

【Android取证篇】三星手机开启开发者模式

【Android取证篇】三星手机开启开发者模式 三星开发者模式—【suy】 文章目录 【Android取证篇】三星手机开启开发者模式三星手机开启开发者模式测试设备 (一)Android通用->版本号路径:设置--->关于手机--->版本号 (二&…

微信电子取证

微信电子取证 一键提取本地PC所有的微信信息 微信电子取证 电子取证 | wechat_info_collect,一款针对微信客户端的信息收集工具, 能够自动化提取本地PC所有的微信信息 包括微信号, 手机号等,使用python写的,mac需要安装requests库&#x…