基于Python实现帕累托图的示例详解

基于Python实现帕累托图的示例详解

什么是帕累托图

帕累托图(Pareto Chart)也叫帕累托分析法,是利用帕累托原理(二八法则)和梯度图的基础上绘制出的图形,又称二八图。它是管理质量控制和精益制造中的一种工具,目的是通过图形的形式使人们能够快速地了解哪些因素是最重要的。它可以在产品设计、质量改进、进度控制等方面获得广泛应用。
帕累托图通常由两个轴组成,左侧轴表示项目的数量或百分比,右侧轴表示项目的重要性或效益。条形图用来表示每个项目的数量或百分比,而累积百分比曲线则表示项目的重要性或效益。所有的项目按其重要性或效益降序排列,列出其累计百分比,最终在最左侧的轴上形成巴雷图或堆积图的效果,这就是帕累托图。

如何使用Python实现帕累托图

在Python中,可以使用Matplotlib库来实现帕累托图的绘制。下面是帕累托图绘制的详细过程:

步骤一:导入必要的库

import pandas as pd
import matplotlib.pyplot as plt

在这个示例中,我们使用了pandas和matplotlib两个库,其中pandas库用于数据的读取和处理,matplotlib库用于绘制图形。

步骤二:读取数据

在这个示例中,我们使用了一个示例数据集,该数据集包含了某公司的销售数据。

data = pd.read_excel("sales_data.xlsx")

步骤三:计算各项指标

在绘制帕累托图之前,我们需要计算各项指标,包括每个销售分类的销售额、总销售额、销售额的累计百分比和销售分类的累计百分比。下面是示例代码:

# 计算每个销售分类的销售额
data["SalesAmount"] = data["Quantity"] * data["Price"]

# 计算总销售额
total_sales = data["SalesAmount"].sum()

# 计算销售额的累计百分比和销售分类的累计百分比
data["CumulativeSalesPercent"] = data["SalesAmount"].cumsum() / total_sales
data["CumulativeCategoryPercent"] = (data.index + 1) / len(data)

步骤四:绘制帕累托图

绘制帕累托图的过程相对比较复杂,需要分别绘制条形图和累计百分比曲线,然后将这两个图形重叠在一起。下面是绘制帕累托图的示例代码:

# 绘制条形图
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.bar(data.index, data["SalesAmount"], color="C0")
ax1.set_xlabel("Sales Category")
ax1.set_xticklabels(data["Category"], rotation=90)
ax1.set_ylabel("Sales Amount")

# 绘制累计百分比曲线
ax2.plot(data.index, data["CumulativeSalesPercent"], color="C1", marker="D", ms=7)
ax2.set_ylabel("Cumulative Sales Percent")

# 添加帕累托线
pareto_line_y = data["SalesAmount"].sum() * 0.8
pareto_line_x = data[data["SalesAmount"].cumsum() <= pareto_line_y].index.max()
ax1.axvline(pareto_line_x + 0.5, color="r", linestyle="--")
ax1.text(pareto_line_x + 0.5, pareto_line_y, "80%", ha="center")

plt.title("Pareto Chart of Sales Categories")
plt.show()

在这个示例中,我们使用了两个轴,左侧轴用于绘制条形图,右侧轴用于绘制累计百分比曲线。在添加帕累托线时,我们使用了80%阈值,并将阈值的位置设为红色虚线的形式。

示例一:基于销售数据的帕累托图

以上步骤仅为帕累托图绘制的基本过程,接下来我们将通过一个具体的示例来说明如何绘制基于销售数据的帕累托图。假设我们的数据集包含了某公司的销售数据,其中有不同的销售分类,每个分类的销售额不同。我们的目标是绘制出帕累托图,以便找出销售额最高的分类。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel("sales_data.xlsx")

# 计算每个销售分类的销售额
data["SalesAmount"] = data["Quantity"] * data["Price"]

# 计算总销售额
total_sales = data["SalesAmount"].sum()

# 计算销售额的累计百分比和销售分类的累计百分比
data["CumulativeSalesPercent"] = data["SalesAmount"].cumsum() / total_sales
data["CumulativeCategoryPercent"] = (data.index + 1) / len(data)

# 绘制条形图
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.bar(data.index, data["SalesAmount"], color="C0")
ax1.set_xlabel("Sales Category")
ax1.set_xticklabels(data["Category"], rotation=90)
ax1.set_ylabel("Sales Amount")

# 绘制累计百分比曲线
ax2.plot(data.index, data["CumulativeSalesPercent"], color="C1", marker="D", ms=7)
ax2.set_ylabel("Cumulative Sales Percent")

# 添加帕累托线
pareto_line_y = data["SalesAmount"].sum() * 0.8
pareto_line_x = data[data["SalesAmount"].cumsum() <= pareto_line_y].index.max()
ax1.axvline(pareto_line_x + 0.5, color="r", linestyle="--")
ax1.text(pareto_line_x + 0.5, pareto_line_y, "80%", ha="center")

plt.title("Pareto Chart of Sales Categories")

plt.show()

执行以上代码后,将绘制出一个包含销售额条形图和累计百分比曲线的帕累托图,我们可以根据帕累托图找出销售额最高的分类。

示例二:基于贡献度数据的帕累托图

除了销售数据外,帕累托图还可以用于绘制贡献度数据。假设我们有一个销售团队,我们想要计算每个销售员的销售额及其贡献度,以便找出贡献度最高的销售员。我们可以使用类似的方法,先计算出每个销售员的销售额和贡献度,然后绘制出帕累托图。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel("sales_data.xlsx", sheet_name="SalesTeam")

# 计算每个销售员的销售额和贡献度
data["SalesAmount"] = data["Quantity"] * data["Price"]
data["SalesPercent"] = data["SalesAmount"] / data["SalesAmount"].sum()
data["CumulativeSalesPercent"] = data["SalesPercent"].cumsum()

# 绘制条形图
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.bar(data.index, data["SalesAmount"], color="C0")
ax1.set_xlabel("Sales Team")
ax1.set_xticklabels(data["Name"], rotation=90)
ax1.set_ylabel("Sales Amount")

# 绘制累计百分比曲线
ax2.plot(data.index, data["CumulativeSalesPercent"], color="C1", marker="D", ms=7)
ax2.set_ylabel("Cumulative Sales Percent")

# 添加帕累托线
pareto_line_y = data["SalesAmount"].sum() * 0.8
pareto_line_x = data[data["SalesPercent"].cumsum() <= 0.8].index.max()
ax1.axvline(pareto_line_x + 0.5, color="r", linestyle="--")
ax1.text(pareto_line_x + 0.5, pareto_line_y, "80%", ha="center")

plt.title("Pareto Chart of Sales Team by Contribution")

plt.show()

运行以上代码后,我们将绘制出一个包含销售额条形图和累计百分比曲线的帕累托图,可以用于找出贡献度最高的销售员。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python实现帕累托图的示例详解 - Python技术站

(1)
上一篇 2023年6月13日
下一篇 2023年6月13日

相关文章

  • 如何计算Pandas数据框架中某一列的NaN出现次数

    计算 Pandas 数据框架中某一列的 NaN 出现次数,可以使用 Pandas 库自带的 isna() 和 sum() 方法。下面是具体的步骤: 读取数据 首先,我们需要读取数据,可以使用 Pandas 的 read_csv() 方法。读取的数据应该是一个 Pandas 数据框架。 import pandas as pd df = pd.read_csv(…

    python-answer 2023年3月27日
    00
  • Python函数中定义参数的四种方式

    Python函数中定义参数的四种方式如下: 位置参数 位置参数是指在函数定义中定义参数时,参数的个数、顺序、类型必须与在调用函数时提供的参数的个数、顺序以及类型一一对应。这是最常用的一种参数定义方式,示例代码如下: def add(x, y): return x + y print(add(1, 2)) # 输出 3 在这个示例中,add 函数中定义的 x …

    python 2023年5月14日
    00
  • 检查Pandas的失踪日期

    讲解 Pandas 的缺失日期检查的完整攻略,以下是具体步骤。 步骤一:导入 Pandas 首先需要导入 Pandas 库,可以使用以下代码: import pandas as pd 步骤二:读取数据 可以使用 Pandas 的 read_csv() 函数或其他适当的函数读取数据集。例如,读取一个名为 data.csv 的数据集,可以使用以下代码: data…

    python-answer 2023年3月27日
    00
  • Pandas – 如何洗牌DataFrame的行数

    Pandas是Python中一个强大的数据分析库,而数据分析中常常需要对数据进行洗牌操作,也就是要对数据的行或列进行随机重排。本文将为大家详细讲解如何使用Pandas对DataFrame的行数进行洗牌,包括以下几个方面: 洗牌DataFrame的行数的原理 Pandas中洗牌DataFrame的行数的方法 代码示例及结果说明 洗牌DataFrame的行数的原…

    python-answer 2023年3月27日
    00
  • 如何在Python数据框架中显示不为零的行和列

    在Python中,使用数据框架(DataFrames)进行数据分析是一个非常常见的需求。其中,显示不为零的行和列也是一个关键的处理方式。下面是在Python数据框架中显示不为零的行和列的详细攻略: 确定数据框架 在Python中,我们可以使用pandas包中的数据框架(DataFrames)进行数据处理。首先,我们需要读取数据并创建数据框架,例如: impo…

    python-answer 2023年3月27日
    00
  • Python matplotlib之折线图的各种样式与画法总结

    Python matplotlib之折线图的各种样式与画法总结 1. 简介 matplotlib 是 Python 语言下的一个绘图库,它提供了一种类似 MATLAB 的绘图方式。matplotlib 不仅能够简单方便地生成各种折线图,而且还支持很多自定义样式和参数设置。 本文将围绕 matplotlib 绘制折线图进行详细的讲解,包括: 如何安装 matp…

    python 2023年6月13日
    00
  • 如何将Pandas DataFrame导出到CSV文件

    将Pandas DataFrame导出到CSV文件可以使用Pandas库中的to_csv()方法。以下是详细的操作步骤: 1. 载入Pandas库 import pandas as pd 2. 创建一个Pandas DataFrame df = pd.DataFrame({‘姓名’: [‘张三’, ‘李四’, ‘王五’], ‘年龄’: [20, 25, 30…

    python-answer 2023年3月27日
    00
  • 如何将Pandas数据框架写入多个Excel表

    当需要将Pandas数据框架写入多个Excel表时,可以使用Python的xlsxwriter库。xlsxwriter库提供了Worksheet类,支持创建和格式化Excel工作表。我们可以即使使用Worksheet类的add_table()方法将Pandas数据框架写入Excel。 以下是详细的步骤: 引入必要的Python库和模块,包括Pandas、xl…

    python-answer 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部