Python帕累托图(Pareto Chart): 从数据排序到决策优化

news2025/3/24 4:52:22

帕累托图(Pareto Chart)是一种基于80/20法则的经典数据可视化工具,广泛应用于质量管理、项目管理、业务分析等领域。本文将从其原理、构成、实现方法到应用场景进行全面解析,并附Python代码示例。


一、帕累托图的定义与起源

帕累托图以意大利经济学家维尔弗雷多·帕累托(Vilfredo Pareto)命名,最初用于描述社会财富分配的不平等现象(即20%的人掌握80%的财富)。后由质量管理专家朱兰(Joseph M. Juran)引入工业领域,用于识别影响质量的关键少数因素。
其核心思想是:80%的问题由20%的原因导致。通过帕累托图,可快速定位优先级最高的改进方向。


二、帕累托图的核心构成

帕累托图由以下要素组成(见图示示例):

  1. 双纵轴
    • 左侧纵轴:表示频数(如缺陷数量、损失金额等)。
    • 右侧纵轴:表示累积百分比(0%~100%)。
  2. 柱状图:按问题频率从高到低排列,显示各分类项的贡献值。
  3. 累积百分比折线:从第一个柱状右上角起点开始,连接各分类项的累积百分比点。
  4. 80%参考线:标记累积百分比首次超过80%的位置,其左侧的少数因素即关键原因。

三、帕累托图的制作步骤

1. 数据收集与分类

  • 确定分析目标(如质量问题、客户投诉类型等),按类别(如4M:人、机、料、法)收集数据。
  • 若存在多个“次要因素”,可合并为“其他”类别,置于最后。

2. 排序与计算

  • 按频数降序排列数据。
  • 计算各分类的累积频数累积百分比
    在这里插入图片描述

3. 绘制图表

  1. 柱状图:横轴为分类项,纵轴为频数,按降序排列。
  2. 折线图:叠加累积百分比折线,右纵轴刻度对应百分比。
  3. 标记关键点:在累积百分比首次超过80%处绘制垂直参考线,并标注关键因素。

四、应用场景与优势

  1. 质量管理:识别导致80%缺陷的关键原因(如生产中的常见缺陷类型)。
  2. 项目管理:优化资源分配,优先解决影响项目进度的核心问题。
  3. 业务分析:分析客户投诉、销售数据,聚焦高价值产品或服务。
  4. 持续改进:对比改善前后的帕累托图,验证措施有效性。

五、Python实现示例

以下代码使用matplotlibpandas生成帕累托图:

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

# 生成示例数据
data = pd.Series(np.random.randn(10) * 5000 + 10000, index=list('ABCDEFGHIJ'))

def pareto_analysis(data):
    data = data.sort_values(ascending=False)
    cumulative_sum = data.cumsum()
    cumulative_percent = cumulative_sum / data.sum() * 100

    # 标记80%关键点
    key_index = cumulative_percent[cumulative_percent >= 80].index[0]
    key_position = data.index.get_loc(key_index)

    # 绘图
    fig, ax1 = plt.subplots(figsize=(12, 6))
    ax1.bar(data.index, data, color='skyblue', alpha=0.7, label='频数')
    ax1.set_xlabel('分类项')
    ax1.set_ylabel('频数')

    ax2 = ax1.twinx()
    ax2.plot(data.index, cumulative_percent, 'ro--', label='累积百分比')
    ax2.axhline(80, color='red', linestyle='--', alpha=0.5)
    ax2.set_ylabel('累积百分比 (%)')

    # 标注关键点
    plt.axvline(key_position, color='green', linestyle='--')
    plt.text(key_position + 0.1, 80, f'关键因素: {key_index}\n累积占比: {cumulative_percent[key_index]:.1f}%')

    plt.title('帕累托图分析')
    plt.show()

pareto_analysis(data)

代码说明

  • 数据按降序排列后生成柱状图和累积百分比折线。
  • 通过axvline标记关键因素位置,并添加注释。
    帕累托图

六、帕累托图的进阶应用

多数据集对比

在实际分析中,我们可能需要对比不同时间段或不同部门的数据。例如,比较两个季度的产品缺陷情况,以评估改进措施的效果。以下是实现多数据集对比的代码示例:

import matplotlib.pyplot as plt
import numpy as np

# 数据准备
defects = ['A', 'B', 'C', 'D', 'E']
q1_counts = [50, 30, 15, 4, 1]
q2_counts = [40, 25, 20, 10, 5]

# 创建条形图
plt.figure(figsize=(12, 6))
x = np.arange(len(defects))
width = 0.35

bars1 = plt.bar(x - width/2, q1_counts, width, label='Q1', color='skyblue')
bars2 = plt.bar(x + width/2, q2_counts, width, label='Q2', color='salmon')

# 添加累计百分比折线
cumulative_percent_q1 = np.cumsum(q1_counts) / sum(q1_counts) * 100
cumulative_percent_q2 = np.cumsum(q2_counts) / sum(q2_counts) * 100

line1, = plt.plot(x - width/2, cumulative_percent_q1, color='darkblue', marker='o', linestyle='--', label='Q1 Cumulative')
line2, = plt.plot(x + width/2, cumulative_percent_q2, color='darkred', marker='o', linestyle='--', label='Q2 Cumulative')

# 设置图表标题和坐标轴标签
plt.title('Product Defect Pareto Chart Comparison')
plt.xlabel('Defect Type')
plt.ylabel('Frequency')

# 设置x轴刻度标签
plt.xticks(x, defects)

# 添加网格线和图例
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend()

# 显示图表
plt.show()

代码解析

  1. 数据准备:我们定义了两个季度的缺陷数据,分别存储在两个列表中。
  2. 创建条形图:使用np.arange()函数生成x轴的位置数组,并设置条形的宽度。使用plt.bar()函数分别绘制两个季度的条形图,设置不同的颜色和位置偏移。
  3. 添加累计百分比折线:分别计算两个季度的累计百分比,并使用plt.plot()函数绘制折线,设置不同的颜色、标记和线型。
  4. 设置图表标题和坐标轴标签:使用plt.title()plt.xlabel()plt.ylabel()函数设置图表的标题和坐标轴标签。
  5. 设置x轴刻度标签:使用plt.xticks()函数设置x轴的刻度标签为缺陷类型。
  6. 添加网格线和图例:使用plt.grid()函数添加网格线,并设置样式和透明度。使用plt.legend()函数添加图例,以便区分不同季度的数据。
  7. 显示图表:使用plt.show()函数显示最终绘制的对比帕累托图。

在这里插入图片描述

帕累托图在数据分析中的其他应用

帕累托图在数据分析中还有许多其他应用,以下是一些示例:

  1. 财务分析

    • 收入分布分析:分析不同产品、客户或地区的收入分布,识别出贡献大部分收入的关键因素。
    • 成本控制分析:分析不同成本项目的分布,识别出占总成本大部分的关键成本项目,以便进行成本控制。
  2. 客户关系管理

    • 客户投诉分析:分析客户投诉的原因,识别出导致大部分投诉的关键问题,以便采取措施提高客户满意度。
    • 客户价值分析:分析不同客户的购买金额或频率,识别出贡献大部分价值的关键客户群体,以便进行针对性的营销和客户服务。
  3. 市场营销

    • 营销渠道分析:分析不同营销渠道的转化率或销售额,识别出效果最好的关键渠道,以便优化营销资源的分配。
    • 广告效果分析:分析不同广告活动的效果,识别出带来大部分流量或转化的关键广告活动。

代码实例:帕累托图在财务分析中的应用

以下是一个使用Python绘制帕累托图的代码实例,用于分析不同产品的收入分布:

import matplotlib.pyplot as plt
import numpy as np

# 数据准备
products = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
revenue = [150000, 100000, 75000, 50000, 25000]

# 数据排序
sorted_products = [x for _, x in sorted(zip(revenue, products), reverse=True)]
sorted_revenue = sorted(revenue, reverse=True)

# 计算累计百分比
total_revenue = sum(sorted_revenue)
cumulative_percent = np.cumsum(sorted_revenue) / total_revenue * 100

# 绘制帕累托图
plt.figure(figsize=(10, 6))
bars = plt.bar(sorted_products, sorted_revenue, color='skyblue')
line = plt.plot(sorted_products, cumulative_percent, color='red', marker='o')

# 设置图表标题和坐标轴标签
plt.title('Product Revenue Pareto Chart')
plt.xlabel('Products')
plt.ylabel('Revenue')

# 添加网格线和百分比标签
plt.grid(True, linestyle='--', alpha=0.7)
for i, v in enumerate(cumulative_percent):
    plt.text(i, v + 1, f'{v:.1f}%', ha='center')

# 显示图表
plt.show()

确保帕累托图的数据准确性

确保帕累托图的数据准确性是至关重要的,以下是一些关键步骤和代码实例:

  1. 数据验证

    • 检查数据完整性:确保所有数据点都已包含在分析中,没有遗漏。
    • 检查数据一致性:确保数据在不同的时间段或不同的数据源之间是一致的。
  2. 数据清洗

    • 处理缺失值:识别并处理缺失值,可以使用插值或删除等方法。
    • 处理异常值:识别并处理异常值,可以使用统计方法或数据可视化工具。

代码实例:数据验证和清洗

以下是一个使用Python进行数据验证和清洗的代码实例:

import pandas as pd
import numpy as np

# 创建一个示例数据框
data = {
    'products': ['Product A', 'Product B', 'Product C', 'Product D', 'Product E'],
    'revenue': [150000, 100000, 75000, 50000, 25000]
}
df = pd.DataFrame(data)

# 检查数据完整性
print("检查数据完整性:")
print(df.info())

# 检查数据一致性
print("\n检查数据一致性:")
print(df.describe())

# 处理缺失值
print("\n处理缺失值:")
df['revenue'].fillna(df['revenue'].mean(), inplace=True)

# 处理异常值
print("\n处理异常值:")
q1 = df['revenue'].quantile(0.25)
q3 = df['revenue'].quantile(0.75)
iqr = q3 - q1
df = df[~((df['revenue'] < (q1 - 1.5 * iqr)) | (df['revenue'] > (q3 + 1.5 * iqr)))]

通过以上步骤和代码实例,可以确保帕累托图的数据准确性,从而提高分析结果的可靠性。


七、帕累托图中的关键因素

帕累托图中的关键因素是指那些对结果有显著影响的少数因素。帕累托图基于帕累托原则(也称为80/20法则),该原则指出,在许多情况下,大约80%的效果来自20%的原因。在帕累托图中,这些“20%的原因”就是关键因素。

帕累托图通过将数据按影响大小排序并绘制累计百分比曲线,帮助我们直观地识别出这些关键因素。通常,关键因素是那些在图表中占据前20%的位置,但贡献了约80%的效果。

关键因素的应用场景

关键因素的概念可以应用于许多领域,以下是一些常见的应用场景:

  1. 质量管理

    • 产品缺陷分析:在生产过程中,通过帕累托图识别出导致大多数产品缺陷的关键因素,如原材料问题、设备故障或操作失误等。企业可以集中资源解决这些关键问题,从而显著提高产品质量。
    • 客户投诉分析:通过分析客户投诉的原因,找出导致大多数投诉的关键问题,如产品性能、服务态度或交付延迟等。企业可以针对性地改进这些方面,提高客户满意度。
  2. 项目管理

    • 任务优先级排序:在项目中,通过帕累托图识别出对项目成功影响最大的关键任务,确保这些任务得到优先处理和足够的资源支持。
    • 风险管理:通过帕累托图识别出对项目风险影响最大的关键因素,如技术难题、资源不足或市场需求变化等。项目团队可以针对性地制定风险应对策略,降低项目风险。
  3. 市场营销

    • 销售渠道优化:通过帕累托图分析不同销售渠道的销售贡献,找出贡献最大的关键渠道,优化资源分配,提高营销效果。
    • 客户细分:通过帕累托图分析客户群体的购买行为,找出贡献大部分销售额的关键客户群体,制定针对性的营销策略,提高客户忠诚度和销售额。
  4. 财务管理

    • 成本控制:通过帕累托图分析不同成本项目的分布,找出占总成本大部分的关键成本项目,如原材料成本、人力成本或设备维护成本等。企业可以针对性地采取成本控制措施,降低整体成本。
    • 收入分析:通过帕累托图分析不同产品或服务的收入贡献,找出贡献大部分收入的关键产品或服务,优化资源配置,提高盈利能力。
  5. 供应链管理

    • 供应商管理:通过帕累托图分析供应商的供货表现,找出对供应链影响最大的关键供应商,加强与这些供应商的合作,确保供应链的稳定性和可靠性。
    • 库存管理:通过帕累托图分析库存商品的销售情况,找出占用库存空间最多的关键商品,优化库存策略,减少库存成本。
  6. 医疗领域

    • 医疗成本控制:通过帕累托图分析医疗成本的构成,找出占总成本大部分的关键成本因素,如药品费用、设备维护费用或人力资源成本等。医疗机构可以针对性地采取成本控制措施,降低运营成本。
    • 医疗服务质量提升:通过帕累托图分析医疗服务质量问题的主要原因,如医护人员不足、设备故障或流程不合理等。医疗机构可以集中资源解决这些关键问题,提高医疗服务质量。

通过识别和管理这些关键因素,组织可以在资源有限的情况下实现最大的效益,提高决策的科学性和有效性。

八、注意事项

  1. 数据准确性:确保数据分类清晰,避免因数据错误导致分析偏差。
  2. 动态更新:项目进展中需定期更新数据,反映最新状态。
  3. 结合其他工具:与鱼骨图(因果图)结合,深入分析关键因素。
  4. 避免过度依赖:某些低频高影响事件可能无法通过帕累托图捕捉,需结合业务实际判断。

总结

帕累托图通过直观的“二八法则”可视化,帮助用户快速定位核心问题。无论是质量改进、项目管理还是业务分析,它都是优先级排序的高效工具。掌握其原理与实现方法,能够显著提升决策效率。在Python中,通过使用matplotlib库,我们可以方便地绘制帕累托图,并根据实际需求进行定制和扩展。无论是单数据集的分析还是多数据集的对比,帕累托图都能为我们提供直观且有价值的洞察。希望本文的介绍能够帮助读者更好地理解和应用帕累托图,在数据分析的道路上更进一步。

参考资料

  • 帕累托图的原理与意义(考试百科)
  • QC工具中的帕累托图制作步骤(搜狐)
  • Python实现帕累托图(CSDN)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python---数据分析(Pandas六:二维数组DataFrame,DataFrame的创建,DataFrame的属性)

一、 二维数组DataFrame DataFrame 是 Pandas 中的一个表格型的数据结构&#xff0c;包含有多列的数据&#xff0c;每列可以是不同的值类型(数值、字符串、布尔型等)&#xff0c;DataFrame 即有行索引也有列索引&#xff0c;可以被看做是由 Series 组成的字典。 二、DataFrame的…

内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP

1.WinRM&WinRS 条件&#xff1a; 双方开启winrm winrs服务 2008版本以上默认开启&#xff0c;win 7默认关闭 检测使用cs内置端口扫描5985开放情况 进行连接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.内网-spn shell setspn -T …

深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!

&#x1f6e1;️ 深入理解 < 和 >&#xff1a;HTML 实体转义的核心指南 &#x1f6e1;️ 在编程和文档编写中&#xff0c;< 和 > 符号无处不在&#xff0c;但它们也是引发语法错误、安全漏洞和渲染混乱的头号元凶&#xff01;&#x1f525; 本文将聚焦 <&#…

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件&#xff0c;一种是R3D&#xff0c;一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构&#xff0c;使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件&#xff0c;这种文件解码需要使…

关于TVS管漏电流的问题?

问题描述&#xff1a; 在量产的带电池故事机生产中&#xff0c;工厂产线测试电流时&#xff0c;有1台机器电流比正常机器大10mA左右。 原因分析&#xff1a; 1、分析电路原理图&#xff0c;去除可能出现问题的电压或器件&#xff08;不影响系统&#xff09;&#xff0c;发现…

区块链交易所平台开发全解析

在数字化飞速发展的今天&#xff0c;区块链技术已成为金融领域的核心驱动力之一。作为数字货币交易的关键平台&#xff0c;区块链交易所的开发不仅涉及复杂的技术环节&#xff0c;还需要兼顾用户体验、安全性、合规性等多个方面。本文将深入探讨区块链交易所平台的开发流程、关…

蓝桥杯_拔河_java

佬们能不能对思路二提供点建议&#xff0c;一直过不了T_T。 题目 思路 首先感觉有个坑点&#xff0c;就是可以不用把所有学生都选上&#xff0c;但是一定要保证两个部分学生的编号是连续的。比如一共5个人&#xff0c;编号是{1&#xff0c;2&#xff0c;3&#xff0c;4&#xf…

fastapi 实践(三)Swagger Docs

fastapi 实践&#xff08;一&#xff09;基础 fastapi 实践&#xff08;二&#xff09;异常捕获 fastapi 实践&#xff08;三&#xff09;Swagger Docs fastapi Swagger 1. FastAPI 交互式 API 文档2. 故障解决2.1. FastAPI 访问 docs 显示空白/加载失败2.2. Swagger 报错&…

每日一题力扣3248.矩阵中的蛇c++

3248. 矩阵中的蛇 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands) {int i 0;int j 0;for (int k0;k<commands.size();k) {if (commands[k] "RIGHT")j;else if (comma…

Channel-wise Knowledge Distillation for Dense Prediction论文阅读和

paper&#xff1a;https://arxiv.org/pdf/2011.13256.pdf code&#xff1a;https://github.com/open-mmlab/mmrazor 这篇paper主要是商汤开源的mmrazor中提及在detection有效果&#xff0c;我之前记录的几篇sota文章虽然在各自的paper中在detection领域都有提及有增益&#…

centos 7 搭建FTP本地用户

在 CentOS 7 系统上基于本地用户搭建 FTP 服务&#xff0c;可按以下步骤操作&#xff1a; 1. 安装 vsftpd 服务 vsftpd 是一款常用的 FTP 服务器软件&#xff0c;可借助 yum 来安装&#xff1a; bash yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash systemct…

混元视频与万相2.1全面对比分析

混元视频与万相2.1全面对比分析&#xff08;2025版&#xff09; 一、模型背景与技术定位 混元视频&#xff08;HunYuan Video&#xff09; 由腾讯开源&#xff0c;定位为“影视级AI视频生成工具”。核心能力集中在图生视频领域。模型架构基于13B参数规模&#xff0c;强调导演级…

20250318在ubuntu20.04中安装向日葵

rootrootrootroot-X99-Turbo:~$ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb rootrootrootroot-X99-Turbo:~$ sudo apt-get install -f rootrootrootroot-X99-Turbo:~$ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 20250318在ubuntu20.04中安装向日葵 2025/3…

如何记录Matlab程序运行过程中所占用的最大内存(续)

在上一篇博客中&#xff0c;我们讨论了如何记录Matlab程序运行过程中所占用的最大内存。 博客原文&#xff1a;如何记录Matlab程序运行过程中所占用的最大内存-CSDN博客 但经过测试发现&#xff0c;这与实际有非常大的差异。运行如下例子&#xff1a; clear;clc; profile on…

自动驾驶背后的数学:多模态传感器融合的简单建模

上一篇博客自动驾驶背后的数学:特征提取中的线性变换与非线性激活 以单个传感器为例,讲解了特征提取中的线性变换与非线性激活。 这一篇将以多模态传感器融合为例,讲解稍复杂的线性变换和非线性激活应用场景。 (一)权重矩阵的张量积分解 y = W x + b = [ w 11 ⋯ w 1 n ⋮…

12 File文件对象:创建、获取基本信息、遍历文件夹、查找文件;字符集的编解码 (黑马Java视频笔记)

文章目录 File >> 存储数据的方案1. 认识File2. File操作2.1 创建File对象2.2 File操作1&#xff09;对文件对象的信息的操作2&#xff09;文件/文件夹的创建/删除3&#xff09;⭐⭐对文件夹的遍历 3. 方法递归3.1 认识递归3.2 递归算法及其执行流程1) 案例&#xff1a;2…

HTML应用指南:利用GET请求获取猫眼电影日票房信息——以哪吒2为例

2025年春节档期&#xff0c;国产动画电影《哪吒之魔童闹海》&#xff08;以下简称《哪吒2》&#xff09;以颠覆性的叙事风格与工业化制作水准震撼登场&#xff0c;不仅刷新了中国动画电影的票房纪录&#xff0c;更成为全球影史现象级作品。影片凭借春节档期的爆发式开局、持续5…

荣耀手机卸载应用商店、快应用中心等系统自带的

1.下载abd ADB Download - Get the latest version of ADB and fastboot 2.手机打开开发者选项 3.手机接电脑打开USB调试 4.下载MT管理器查看系统包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 这边是…

苍穹外卖学习笔记

整体概述 1).用户层 本项目中在构建系统管理后台的前端页面&#xff0c;我们会用到H5、Vue.js、ElementUI、apache echarts(展示图表)等技术。而在构建移动端应用时&#xff0c;我们会使用到微信小程序 2).网关层 Nginx是一个服务器&#xff0c;主要用来作为Http服务器&…

每日一题力扣2974.最小数字游戏c++

2974. 最小数字游戏 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> numberGame(vector<int>& nums) {vector<int> arr(nums.size());sort(nums.begin(),nums.end());for(size_t i0;i<nums.size();i2){arr[i]nums[i1]…