基于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日

相关文章

  • Python基于pyecharts实现关联图绘制

    Python基于pyecharts实现关联图绘制是一种挺常用的数据可视化方式,可以很清晰地展示数据之间的关联关系。下面我将为您提供一个完整的攻略,帮助您学会如何用Python的pyecharts库绘制关联图。 1. 安装相关库 如果您还没有安装pyecharts和pandas等库,可以通过以下命令安装: pip install pyecharts panda…

    python 2023年5月14日
    00
  • 寻找Pandas数据框架列的四分位数和十分位数等级

    要寻找一个Pandas数据框架列的四分位数和十分位数等级,可以依次执行以下步骤: 1. 导入Pandas库 import pandas as pd 2. 创建数据框架 本次实例中,我们可以使用Seaborn库自带的Iris数据集作为示例数据,具体代码如下: import seaborn as sns iris = sns.load_dataset(‘iris…

    python-answer 2023年3月27日
    00
  • Python pandas入门系列之众数和分位数

    以下是“Python pandas入门系列之众数和分位数”的完整攻略。 什么是众数和分位数 众数 众数是统计学中的一个概念,表示在一组数据中出现频率最高的那个数值。 例如,一组包含 1、2、2、3、4、4、4、5 的数据,4 就是这组数据的众数。 在 Python 中,我们可以使用 pandas 库的 .mode() 方法来求众数。该方法会返回一个包含众数的…

    python 2023年5月14日
    00
  • 删除python pandas.DataFrame 的多重index实例

    下面是删除 Pandas DataFrame 的多重 index 实例的详细攻略及示例说明: 1. 使用 reset_index() 函数删除多重 index reset_index() 函数可用于将数据帧的多重 index 转换为单一 index,从而简化数据的操作和处理。具体示例代码如下: import pandas as pd # 创建包含多重 ind…

    python 2023年5月14日
    00
  • 详解pandas获取Dataframe元素值的几种方法

    详解pandas获取Dataframe元素值的几种方法 pandas是Python中非常常用的数据处理工具,常用于数据分析和数据处理。在pandas的操作中,经常需要获取Dataframe中的元素或者某几行/列数据。下面将详细介绍pandas中如何获取Dataframe中的元素值和某一系列数据的几种方法。 1. 使用iloc函数 iloc函数可以根据Data…

    python 2023年5月14日
    00
  • Python Pandas创建Dataframe数据框的六种方法汇总

    下面我将对「Python Pandas创建Dataframe数据框的六种方法汇总」进行详细讲解。 标题一:使用列表创建DataFrame 我们可以使用Python中的列表来创建DataFrame。可以通过在DataFrame函数中传递列表来创建一个简单的DataFrame。 具体步骤如下:1. 导入pandas模块 import pandas as pd2.…

    python 2023年5月14日
    00
  • numpy库与pandas库axis=0,axis= 1轴的用法详解

    numpy库和pandas库都是进行数据处理和分析常用的库,其中包含了对数据的计算和操作。在进行数据分析或处理时,就需要很好的掌握numpy和pandas的常用函数和参数,其中,axis参数就是非常重要的一个参数。 1. numpy库的axis用法详解 numpy库的axis用来指定对某一个维度进行操作,比如我们常见的矩阵操作中,如果我们要对每一行进行操作,…

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

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

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