通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python中如何绘制帕累托图

python中如何绘制帕累托图

在Python中绘制帕累托图可以使用多种方法,其中最常用的是使用Pandas库与Matplotlib库进行数据处理和绘图。主要步骤包括数据整理、计算累计百分比、绘制条形图和折线图。下面详细介绍这些步骤,并通过一个示例说明如何在Python中绘制帕累托图。

一、数据整理

帕累托图是一种特殊类型的条形图,通常用于展示不同类别的数据频数,并按降序排列。首先需要整理数据,确保数据按类别统计并排序。

import pandas as pd

示例数据

data = {'Category': ['A', 'B', 'C', 'D', 'E'],

'Frequency': [50, 30, 15, 10, 5]}

创建DataFrame

df = pd.DataFrame(data)

按频数降序排序

df = df.sort_values(by='Frequency', ascending=False).reset_index(drop=True)

在这一步中,我们创建了一个包含类别和频数的DataFrame,并按频数降序排序。

二、计算累计百分比

帕累托图的关键在于展示累计百分比,因此需要计算每个类别的累计百分比。

# 计算累计百分比

df['Cumulative Percentage'] = df['Frequency'].cumsum() / df['Frequency'].sum() * 100

三、绘制条形图和折线图

使用Matplotlib库绘制条形图和折线图。

import matplotlib.pyplot as plt

创建图形和坐标轴

fig, ax1 = plt.subplots()

绘制条形图

ax1.bar(df['Category'], df['Frequency'], color='C0')

ax1.set_xlabel('Category')

ax1.set_ylabel('Frequency', color='C0')

ax1.tick_params(axis='y', labelcolor='C0')

创建第二个坐标轴共享x轴

ax2 = ax1.twinx()

绘制折线图

ax2.plot(df['Category'], df['Cumulative Percentage'], color='C1', marker='o')

ax2.set_ylabel('Cumulative Percentage', color='C1')

ax2.tick_params(axis='y', labelcolor='C1')

ax2.axhline(y=80, color='gray', linestyle='--')

显示图形

plt.show()

四、总结

通过以上步骤,我们可以在Python中成功绘制帕累托图。主要步骤包括数据整理、计算累计百分比、绘制条形图和折线图。使用Pandas进行数据处理,使用Matplotlib进行绘图,这是最常见的做法。

扩展内容

1、使用Seaborn库

除了Matplotlib,还可以使用Seaborn库来绘制更加美观的帕累托图。

import seaborn as sns

设置Seaborn样式

sns.set(style="whitegrid")

创建图形和坐标轴

fig, ax1 = plt.subplots()

绘制条形图

sns.barplot(x='Category', y='Frequency', data=df, ax=ax1, color='C0')

ax1.set_xlabel('Category')

ax1.set_ylabel('Frequency', color='C0')

ax1.tick_params(axis='y', labelcolor='C0')

创建第二个坐标轴共享x轴

ax2 = ax1.twinx()

绘制折线图

sns.lineplot(x='Category', y='Cumulative Percentage', data=df, ax=ax2, color='C1', marker='o')

ax2.set_ylabel('Cumulative Percentage', color='C1')

ax2.tick_params(axis='y', labelcolor='C1')

ax2.axhline(y=80, color='gray', linestyle='--')

显示图形

plt.show()

2、处理更大的数据集

对于更大的数据集,可以通过Pandas的groupby方法进行数据汇总和排序,然后再计算累计百分比和绘图。

# 示例数据

data = {'Category': ['A', 'B', 'C', 'D', 'E', 'A', 'B', 'C', 'D', 'E'],

'Frequency': [50, 30, 15, 10, 5, 20, 25, 10, 5, 15]}

创建DataFrame

df = pd.DataFrame(data)

按类别汇总频数

df = df.groupby('Category').sum().reset_index()

按频数降序排序

df = df.sort_values(by='Frequency', ascending=False).reset_index(drop=True)

计算累计百分比

df['Cumulative Percentage'] = df['Frequency'].cumsum() / df['Frequency'].sum() * 100

绘图

fig, ax1 = plt.subplots()

ax1.bar(df['Category'], df['Frequency'], color='C0')

ax1.set_xlabel('Category')

ax1.set_ylabel('Frequency', color='C0')

ax1.tick_params(axis='y', labelcolor='C0')

ax2 = ax1.twinx()

ax2.plot(df['Category'], df['Cumulative Percentage'], color='C1', marker='o')

ax2.set_ylabel('Cumulative Percentage', color='C1')

ax2.tick_params(axis='y', labelcolor='C1')

ax2.axhline(y=80, color='gray', linestyle='--')

plt.show()

三、数据可视化的意义

帕累托图在数据分析中具有重要意义,尤其是在质量管理和项目管理中。它帮助识别出最重要的问题或因素,使团队能够集中精力解决对整体影响最大的部分。例如,在产品质量管理中,帕累托图可以揭示出最常见的缺陷类型,从而指导改进工作,提高产品质量。

四、定制化帕累托图

在实际应用中,可能需要对帕累托图进行定制,以满足特定需求。可以通过调整颜色、标签、线条样式等方式进行定制。

# 自定义帕累托图

fig, ax1 = plt.subplots(figsize=(10, 6))

条形图颜色和标签

bars = ax1.bar(df['Category'], df['Frequency'], color='skyblue', edgecolor='gray')

ax1.set_xlabel('Category', fontsize=14)

ax1.set_ylabel('Frequency', fontsize=14, color='skyblue')

ax1.tick_params(axis='y', labelcolor='skyblue', labelsize=12)

ax1.tick_params(axis='x', labelsize=12)

折线图颜色和样式

line = ax2.plot(df['Category'], df['Cumulative Percentage'], color='orange', marker='o', linestyle='-', linewidth=2, markersize=8)

ax2.set_ylabel('Cumulative Percentage', fontsize=14, color='orange')

ax2.tick_params(axis='y', labelcolor='orange', labelsize=12)

ax2.axhline(y=80, color='gray', linestyle='--', linewidth=1)

ax2.axhline(y=50, color='gray', linestyle='--', linewidth=1)

添加数据标签

for bar in bars:

height = bar.get_height()

ax1.text(bar.get_x() + bar.get_width() / 2.0, height, '%d' % int(height), ha='center', va='bottom', fontsize=10)

for i in range(len(df)):

ax2.text(i, df['Cumulative Percentage'][i], f"{df['Cumulative Percentage'][i]:.1f}%", ha='center', va='bottom', fontsize=10, color='orange')

显示图形

plt.title('Custom Pareto Chart', fontsize=16)

plt.show()

五、总结

Python中绘制帕累托图的过程包括数据整理、计算累计百分比、绘制条形图和折线图,以及根据需要进行定制。通过这些步骤,可以高效地分析和展示数据,帮助识别关键问题并指导决策。无论是使用Matplotlib还是Seaborn,都能实现清晰、美观的帕累托图。

相关问答FAQs:

如何在Python中绘制帕累托图?
在Python中绘制帕累托图通常可以使用Matplotlib和Pandas库。首先,您需要准备数据,确保数据按照降序排列。接下来,可以使用Matplotlib绘制柱状图,并在同一图表中添加累积百分比线。以下是一个简单的示例代码:

import pandas as pd
import matplotlib.pyplot as plt

data = {'类别': ['A', 'B', 'C', 'D', 'E'],
        '值': [50, 30, 15, 5, 2]}
df = pd.DataFrame(data)

# 排序
df = df.sort_values(by='值', ascending=False)

# 计算累积百分比
df['累积百分比'] = df['值'].cumsum() / df['值'].sum() * 100

# 绘制柱状图
fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.bar(df['类别'], df['值'], color='blue')
ax2.plot(df['类别'], df['累积百分比'], color='orange', marker='o')

ax1.set_xlabel('类别')
ax1.set_ylabel('值', color='blue')
ax2.set_ylabel('累积百分比 (%)', color='orange')

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

在绘制帕累托图时,数据的准备有什么注意事项?
确保数据的质量至关重要。应收集准确的数值,并根据需要进行分类。数据应按照降序排列,以便能够有效地展示主要因素对整体的影响。此外,考虑数据的完整性,确保没有遗漏重要的类别或数值。

帕累托图主要用于哪些场景?
帕累托图广泛应用于质量管理、项目管理和业务分析等领域。它帮助识别主要问题或机会,通常用于确定哪些因素对结果的影响最大。例如,在销售数据分析中,可以帮助发现哪些产品或客户群体贡献了最多的收入,从而为资源分配提供依据。

如何解释帕累托图中的累积百分比线?
累积百分比线表示各类别对总体的贡献程度。通过观察这条线,您可以快速识别出大多数效应来自少数几个类别。例如,如果累积百分比在80%附近时,意味着80%的效果来自20%的类别。这一观察可以帮助决策者集中精力在最重要的因素上,以优化资源配置。

相关文章