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

yizhihongxing

基于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中把一个庞大的文件加载成小块

    加载庞大的文件时,Pandas提供了一种称为分块(chunking)的技术,它可以将大型数据集划分成若干个小块进行读取和处理。下面是将一个CSV文件分块加载为小块的代码示例: import pandas as pd chunk_size = 1000 # 设定每个小块的行数 csv_file_path = ‘data.csv’ # CSV文件路径 chunk…

    python-answer 2023年3月27日
    00
  • Python数据分析库pandas基本操作方法

    下面是针对“Python数据分析库pandas基本操作方法”的完整攻略,包括pandas的基本数据结构、数据导入与输出、数据清洗、数据统计分析等方面的基本操作方法。 一、pandas的基本数据结构 pandas的基本数据结构主要有两种,即Series和DataFrame。其中,Series相当于一维数组,包含数据以及数据对应的索引;DataFrame则是二维…

    python 2023年5月14日
    00
  • pandas apply多线程实现代码

    下面我将详细讲解如何使用Pandas的apply方法实现多线程代码。 1. 多线程原理 在单线程模型中,代码的执行是按照先后顺序逐个执行。而在多线程模型中,代码的执行可以同时进行多个线程的处理,从而提高代码运行效率。 在Python中实现多线程时,推荐使用threading库。 2. Pandas.apply方法 Pandas是Python中最流行的数据处理…

    python 2023年5月14日
    00
  • Python对数据进行插值和下采样的方法

    Python中常用的数据插值和下采样方法有很多,比较常用的有线性插值、三次样条插值和下采样方法有平均下采样和最大池化下采样。下面将详细讲解其中的几种方法。 线性插值 在Python中可以使用scipy库中的interp方法实现线性插值。具体使用方法如下: from scipy.interpolate import interp1d import numpy …

    python 2023年6月13日
    00
  • Pandas替换及部分替换(replace)实现流程详解

    Pandas替换及部分替换(replace)实现流程详解 replace()方法 str.replace()方法 总结 Pandas替换及部分替换(replace)实现流程详解 在数据清洗的过程中,替换成为常用的操作之一。Pandas提供了多种替换实现方式,如replace()和str.replace()等方法。 1. replace()方法 replace…

    python 2023年5月14日
    00
  • Pandas – 合并两个具有不同列的数据框架

    当我们需要整合不同数据源、不同数据集时,常常需要进行数据框架间的合并。在Pandas中,通过merge()函数可以较为方便地实现数据框架间的合并。在两个具有不同列的数据框架合并时,我们需要注意以下几个方面: 合并键:在两个数据框架合并的过程中,我们需要指定合并键。合并键可以是某一个或某几个相同的标识符,将数据框架按照这个标识符进行合并。在指定合并键时,需要注…

    python-answer 2023年3月27日
    00
  • 如何利用Pandas查询选取数据

    下面是如何利用Pandas查询选取数据的完整攻略,包含以下几个部分: Pandas库介绍 Pandas数据结构介绍 Pandas查询选取数据的方法 示例说明 1. Pandas库介绍 Pandas是一个基于NumPy的数据处理库,提供了高效、易用的数据结构和数据分析工具,包括Series、DataFrame和Panel等数据结构。Pandas可以实现数据的导…

    python 2023年5月14日
    00
  • 聊聊python dropna()和notnull()的用法区别

    聊聊Python dropna()和notnull()的用法区别 引言 在使用Pandas进行数据处理和分析时,我们常常需要过滤掉数据中带有缺失值的行或列。在Pandas中,我们通常会使用 dropna() 和 notnull() 这两个方法来实现这个目的。本篇文章将会讲解这两个方法的用法,并且对它们的区别做出详细的解析。 dropna()方法 什么是dro…

    python 2023年6月13日
    00
合作推广
合作推广
分享本页
返回顶部