专栏名称: CDA数据分析师
CDA数据分析师品牌官方微信,开放、创新、分享。
目录
相关文章推荐
大数据分析和人工智能  ·  从构思到成稿:全网最全的论文流程和指令 ·  昨天  
软件定义世界(SDX)  ·  北京大学DeepSeek内部资料 ·  3 天前  
CDA数据分析师  ·  Deepseek来袭,数据分析师会失业吗? ·  3 天前  
玉树芝兰  ·  新学期,给你自己配一个好用的 AI ... ·  昨天  
51好读  ›  专栏  ›  CDA数据分析师

【干货】Pyecharts的帕累托分析技术实现,3步学会

CDA数据分析师  · 公众号  · 大数据  · 2025-02-28 09:00

正文

一、帕累托分析原理与应用

1.1 核心原理

帕累托分析(Pareto Analysis)源于经济学家维尔弗雷多·帕累托提出的"二八法则",其核心原理是通过识别导致80%结果的20%关键因素,帮助决策者聚焦资源解决主要矛盾。

具体实施步骤包含:

  1. 数据收集与分类
  2. 按影响程度降序排列
  3. 计算累计百分比
  4. 识别关键因素(通常为累计占比70-80%的前端因素)

1.2 典型应用场景

在管理和质量控制领域,帕累托分析(Pareto Analysis)是一种决策工具,用于识别少数重要因素对总体影响的程度。除此之外还可以有如下应用:

  • 供应链管理:分析库存积压主因
  • 客户投诉分析:定位核心服务问题
  • 销售优化:聚焦高贡献产品线
  • 故障排查:锁定高频故障点

今天我们基于简单的实验数据,使用Python中的Pyecharts库来开发一个帕累托分析图

二、基于Pyecharts的技术实现

使用前需安装,代码运行的pyecharts版本是2.0.5

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts==2.0.5

2.1 环境配置与数据准备

首先,我们需要导入Pyecharts中的 Bar Line 图表类,以及options类,用于实现对各个图标的配置,此外如果代码需要在jupyter notebook中展示图形还需要从globals中导入CurrentConfig, NotebookType做执行环境的配置,对于新版本的jupyter notebook统一设置为NotebookType.JUPYTER_LAB。

from pyecharts.charts import Bar, Line
from pyecharts import options as opts

# from pyecharts.globals import CurrentConfig, NotebookType
# CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB

# 定义原始数据
categories = ["产品质量问题""送货延迟""客户服务不满""价格不公""其他"]
counts = [40302055]

技术细节说明

  • 需确保数据已按降序排列(本示例已预处理)
  • 累计百分比计算需基于有序数据

2.2 核心计算逻辑

total_counts = sum(counts)  # 计算总量
cumulative_percents = [sum(counts[:i+1])/total_counts for i in range(len(counts))]  # 累进计算

计算过程解析

  1. sum(counts) 获取总投诉量100次
  2. 列表推导式逐项累加:40/100=0.4 → (40+30)/100=0.7 → ... → 1.0
  3. 输出结果:[0.4, 0.7, 0.9, 0.95, 1.0]

2.3 可视化组件构建

(1) 柱状图初始化

bar = (
    Bar()
    .add_xaxis(categories)
    .add_yaxis("投诉次数", counts)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="帕累托分析图"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross")
    )
)
bar.render_notebook()


关键技术点

  • 交互式提示工具配置增强数据可读性

(2) 折线图构建

line = (
    Line()
    .add_xaxis(categories)
    .add_yaxis(
        "累计百分比"
        cumulative_percents, 
        linestyle_opts=opts.LineStyleOpts(color="red", width=4),
        label_opts=opts.LabelOpts(is_show=True, color="red")
    )
)
line.render_notebook()


视觉优化设计

  • 红色粗线(width=4)提升视觉优先级
  • 显示数值标签辅助精确读数

2.4 图表合成与优化

帕累托图需将以上两张图组合在一起,可以使用overlap实现

bar.overlap(line) # 图层叠加
bar.render_notebook()


可以看到图形很奇怪,因为折线图对应的数据与柱形图对应的数据 量纲 相差很大。那如何优化?

bar = (
    Bar()
    .add_xaxis(categories)
    .add_yaxis("投诉次数", counts, yaxis_index=0# 设置使用哪个y轴左边的是第一个0  右边的是第二个1
    # 优化点1 添加副y轴
    .extend_axis(
        yaxis=opts.AxisOpts(
            type_="value"
            name="累计百分比",
            min_=0.3
            max_=1.1,
            interval=0.2
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="帕累托分析图"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross")
    )
)

line = (
    Line()
    .add_xaxis(categories)
    .add_yaxis(
        "累计百分比"
        cumulative_percents, 
        yaxis_index=1# 设置使用哪个y轴左边的是第一个0  右边的是第二个1
        linestyle_opts=opts.LineStyleOpts(color="red", width=4),
        label_opts=opts.LabelOpts(is_show=True, color="red")
    )
)

bar.overlap(line)  

# 调整图层渲染顺序不然折线图被柱形图遮挡
bar.options["series"][1]["z"] = 1  # 折线图层
bar.options["series"][0]["z"] = 0  # 柱状图层
bar.render_notebook()



深度优化说明

  • extend_axis 创建次坐标轴,范围设置为30%-110%以留出视觉缓冲
  • yaxis_index=0 指定主坐标轴
  • yaxis_index=1 绑定次坐标轴
  • overlap() 实现双坐标系叠加
  • z 参数控制图层层级(数值越大显示越上层)
  • 默认柱状图在前会遮挡折线,故需调整层序

2.5 输出与展示

# bar.load_javascript() # 最新版jupyter notebook需要这样
bar.render_notebook()  # Jupyter内嵌展示
# bar.render("pareto.html")  # 生成独立HTML文件

多环境支持

  • Jupyter环境使用 render_notebook()
  • 独立运行环境建议输出HTML文件
  • 可通过 options 继续添加更多交互配置

三、实现效果与业务解读

3.1 生成图表分析

帕累托分析效果图

  1. 前两项(质量+送货)占比70%,符合关键因素标准
  2. 累计曲线斜率变化点指示改善阈值
  3. 最后两项仅占10%,可暂缓处理

3.2 生产环境扩展建议

  • 动态数据绑定:对接数据库实时更新
  • 自动化排序:添加数据预处理模块
  • 阈值标注:添加80%参考线
  • 导出功能:集成报告生成模块

    大家如果觉得自己的可视化技能训练的不错了,可以实操起来,CDA小程序里有很多模拟题,根据给定的要求来测试自己的完成效果。
    图片

四、完整代码汇总

本实现方案通过Pyecharts高效构建了交互式帕累托分析图表,将技术实现与业务分析有机结合,为决策者提供直观的数据支持。开发者可根据具体业务需求扩展功能模块,构建完整的决策分析系统。绘制帕累托的流程相对固定,因此这些代码也可以封装为函数方便后续的复用。

# 完整实现代码
def get_plt(categories,counts):
    import pandas as pd
    df = pd.DataFrame({"categories":categories,"counts":counts})
    categories = list(df.sort_values("counts")["categories"])
    counts = list(df.sort_values("counts")["counts"]) 
    from pyecharts.charts import Bar, Line
    from pyecharts import options as opts
    bar = (
        Bar()
        .add_xaxis(categories)
        .add_yaxis("投诉次数", counts, yaxis_index=0# 设置使用哪个y轴左边的是第一个0  右边的是第二个1
        # 优化点1 添加副y轴
        .extend_axis(
            yaxis=opts.AxisOpts(
                type_="value"
                name="累计百分比",
                min_=0.3
                max_=1.1,
                interval=0.2
            )
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="帕累托分析图"),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross")
        )
    )

    line = (
        Line()
        .add_xaxis(categories)
        .add_yaxis(
            "累计百分比"
            cumulative_percents, 
            yaxis_index=1# 设置使用哪个y轴左边的是第一个0  右边的是第二个1
            linestyle_opts=opts.LineStyleOpts(color="red", width=4),
            label_opts=opts.LabelOpts(is_show=True, color="red")
        )
    )

    bar.overlap(line)  

    # 调整图层渲染顺序不然折线图被柱形图遮挡






请到「今天看啥」查看全文