• 【matplotlib 实战】--漏斗图


    漏斗图,形如“漏斗”,用于展示数据的逐渐减少或过滤过程。
    它的起始总是最大,并在各个环节依次减少,每个环节用一个梯形来表示,整体形如漏斗。
    一般来说,所有梯形的高度应是一致的,这会有助人们辨别数值间的差异。

    需要注意的是,漏斗图的各个环节,有逻辑上的顺序关系。
    同时,漏斗图的所有环节的流量都应该使用同一个度量。

    通过漏斗图,可以较直观的看出流程中各部分的占比、发现流程中的问题,进而做出决策。

    1. 主要元素

    漏斗图的主要元素包括:

    1. 分类:漏斗图中的不同层级或步骤。每个分类代表一个特定的过程、筛选或转化。
    2. 倒梯形:表示在每个阶段中的数据数量或数量的百分比。通常,随着阶段的推进,数据量会逐渐减少。
    3. 数据流:表示数据在不同阶段之间的流动路径。它显示了数据从一个阶段到另一个阶段的转移和过滤过程。
    4. 转化率:表示在每个阶段中数据的转化率或转化的百分比。它反映了数据在不同阶段之间的损失或过滤程度。

    图片来自 antv 官网

    2. 适用的场景

    漏斗图适用的分析场景包括:

    • 销售转化分析:跟踪销售过程中的潜在客户数量,并展示他们在不同阶段的转化率,从而帮助分析销售流程中的瓶颈和改进机会。
    • 市场营销分析:展示市场活动中的潜在客户数量,并显示他们在不同营销阶段的转化率,从而评估市场策略的有效性和改进方向。
    • 用户体验分析:追踪用户在产品或服务使用过程中的转化率,帮助分析用户体验中的瓶颈和提升点,从而优化产品或服务设计。
    • 网站流量分析:展示网站访问者在不同页面或功能模块之间的转化率,帮助分析用户行为和改进网站设计。

    3. 不适用的场景

    然而,漏斗图并不适用于所有分析场景。以下是一些不适合使用漏斗图的情况:

    • 数据无序或重复:如果数据没有明确的阶段或无法按照特定的流程进行过滤或转化,漏斗图可能不适用。
    • 数据缺失或不完整:如果数据在不同阶段之间存在缺失或不完整,漏斗图可能无法准确反映数据流动和转化情况。
    • 多个并行路径:如果数据在不同阶段之间存在多个并行路径,并且无法简单地表示为单一的线性流程,漏斗图可能无法有效展示数据流动。

    4. 分析实战

    本次用漏斗图分析各个学历的毕业生人数,从小学学历到博士学历。

    4.1. 数据来源

    数据来源国家统计局公开的数据,整理好的数据可从下面的地址下载:
    https://databook.top/nation/A0M

    使用其中的文件:A0M0203.csv(各级各类学历教育毕业生数)

    fp = "d:/share/data/A0M0203.csv"
    
    df = pd.read_csv(fp)
    df
    

    image.png

    4.2. 数据清理

    漏斗图不需要时间序列数据,所以,只提取2021年的数据中从小学到博士的6种学历的毕业生人数。

    data = df[df["sj"] == 2021]
    
    #A0M020312: 普通小学毕业生数(万人)
    #A0M02030T: 初中阶段教育毕业生数(万人)	
    #A0M02030J: 普通高中毕业生数(万人)
    #A0M020306: 普通本科毕业生数(万人)	
    #A0M020304: 硕士毕业生数(万人)	
    #A0M020303: 博士毕业生数(万人)
    data = data[
        data["zb"].isin(
            [
                "A0M020312",
                "A0M02030T",
                "A0M02030J",
                "A0M020306",
                "A0M020304",
                "A0M020303",
            ]
        )
    ]
    
    data = data.sort_values("value", ascending=False)
    data
    

    image.png

    4.3. 分析结果可视化

    with plt.style.context("dark_background"):
        fig = plt.figure()
        ax = fig.add_axes([0.1, 0.1, 1, 1])
    
        colors = plt.cm.Set2.colors
        cnt = len(data)
    
        y = [[1 + i * 3, 3.8 + i * 3] for i in range(cnt)]
        y_ticks = [2 + i * 3 for i in range(cnt)]
    
        start_x1 = 5
        start_x2 = -5
        for i in range(cnt):
            ax.fill_betweenx(
                y=y[i],
                x1=[start_x1, data.iloc[i, 4]],
                x2=[start_x2, -1 * data.iloc[i, 4]],
                color=colors[i],
            )
            start_x1 = data.iloc[i, 4]
            start_x2 = -1 * data.iloc[i, 4]
    
        ax.set_xticks([], [])
        ax.set_yticks(y_ticks, data["zbCN"])
    
        for y, value in zip(y_ticks, data["value"]):
            ax.text(
                10,
                y,
                value,
                fontsize=16,
                fontweight="bold",
                color="white",
                ha="center",
            )
    
        ax.grid(False)
        ax.set_title("2021年各学历毕业人数")
    

    image.png

    从图中可以看出,完成9年义务教育的比例很高。
    初中到高中,人数几乎减半,而本科考研,硕士考博的人数比例更是锐减

  • 相关阅读:
    达梦数据库-DW-国产化--九五小庞
    【生成模型】解决生成模型面对长尾类型物体时的问题 RE-IMAGEN: RETRIEVAL-AUGMENTED TEXT-TO-IMAGE GENERATOR
    PTA 7-27 组合数的和
    2023-python-解释器是什么东西?
    PHP连接外部服务器的MySQL参考教程
    C. Raspberries-Codeforces Round 905 (Div. 3)
    Java刷题day23
    android上架备案公钥和md5获取工具
    P4068 [SDOI2016]数字配对
    【数据结构 | 入门】 入坑篇 (浙江大学数据结构学习笔记)
  • 原文地址:https://www.cnblogs.com/wang_yb/p/17781635.html