大数跨境
0
0

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

【干货】Pyecharts的帕累托分析技术实现,3步学会 CDA数据分析师
2025-02-27
2

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

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中的BarLine图表类,以及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)  

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


往期干货文章:

Deepseek来袭,数据分析师会失业吗?

用Deepseek处理复杂数据效果好吗?小白搞得定吗?

【干货】数据可视化很难?不存在的!一文弄懂PyEcharts可视化技术

【干货】5分钟学会数据可视化:使用Pyecharts绘制地图

【资料】腾讯&字节等大厂110道数据分析面试题,后悔没早点刷到

【干货】5分钟讲透数据分析之【对比分析】

【干货】Deepseek教我数据可视化看板实时更新

【干货】2步学会构成分析,找到业务增长关键

【干货】画用户画像与找相亲对象一样简单

【干货】用半监督学习方法处理标签(上)Label Propagation

【干货】半监督学习(下)Label Spreading

【干货】掌握这50个常用Excel函数,你的Excel就无敌了

 20000字!一文学会Python数据分析

【测一测】解锁数据分析潜力!量身定制的测试挑战等你来战!

【干货】7类常见的统计分析错误

【干货】7款超强大的AI数据分析工具,再也不用痛苦背函数了,建议收藏

【干货】12种实用数据分析模型,强烈建议收藏!

【干货】字节大神:讲透数据指标体系搭建的3个关键步骤

【面试】秋招年薪50万,央企数据分析岗成功上岸!

【干货】百试不爽,提高思维能力的5个数据分析模型

【干货】大厂数据分析师面试,最常犯的2个技术错误

【干货】2年银行数据分析师:大数据部门工作重点及技能要求

【声明】内容源于网络
0
0
CDA数据分析师
🌸全国30万数据分析从业人员,有10万在CDA数据分析师 🌺CDA会员俱乐部有1000个数据库,成为持证人即可获得相关数据信息 🌹未来两样东西最有价值:一个是数据,一个是GPU
内容 9451
粉丝 0
CDA数据分析师 🌸全国30万数据分析从业人员,有10万在CDA数据分析师 🌺CDA会员俱乐部有1000个数据库,成为持证人即可获得相关数据信息 🌹未来两样东西最有价值:一个是数据,一个是GPU
总阅读2.1k
粉丝0
内容9.5k