首页 > 其他分享 >【matplotlib 实战】--漏斗图

【matplotlib 实战】--漏斗图

时间:2023-10-23 09:22:07浏览次数:41  
标签:-- 数据 matplotlib start 毕业生 漏斗 ax data

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

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

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

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年义务教育的比例很高。
初中到高中,人数几乎减半,而本科考研,硕士考博的人数比例更是锐减

标签:--,数据,matplotlib,start,毕业生,漏斗,ax,data
From: https://www.cnblogs.com/wang_yb/p/17781635.html

相关文章

  • Excel 生成 MS SQL 插入脚本
    背景:有1份Excel表内有一字段是中英文混合(前部分中文+后部分英文),现需要拆分中文和英文,并按记录条数插入到数据库中。关键功能点:1、一个字符串拆分为中文和英文。2、去除字符串前后空格。3、去除换行符。4、生成MSSQLINSERT脚本。Excel的每行数据对应一条插入脚本。方案一:1、......
  • CSP-S 2023游记
    CSP-S2023游记Day-1考前一天集训。快下课的时候全机房一起用SPFA写全源最短路,然后我一个手残在SLF的时候写了一个dis[q.front()]<dis[v]而我的dis是一个二维数组,然后就变成了比较地址,竟然还把最卡我们的那个点跑过去了,神秘。Day0没啥事干,父亲大人上班没把电脑带回......
  • 10月23日粘包学习以及struct模块和json模块
    目录粘包如何解决粘包问题呢?struct模块json模块粘包粘包:tcp会把数据量较小,时间间隔较短的数据,当做同一个包发送粘包问题图粘包问题说白了就是客户端传给服务器的数据到服务器的时候有部分数据粘在了一块,而不是一条条的显示粘包产生情况大致图如何解决粘包问题呢?简单的方......
  • Programming abstractions in C阅读笔记:p181-p183
    《ProgrammingAbstractionsInC》学习第61天,p181-p183总结。一、技术总结1.linearsearchalgorithm2.lexicographicorder(字典顺序)3.binarysearchalgorithm(二分查找算法)/**1.二分查找也应用了递归的思想。*2.这里的代码只是demo*/#include<stdio.h>#incl......
  • 轻松合并Excel工作表:Java批量操作优化技巧
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如,学校给老师统计课时,医院给医护人员统计班次等。传统的手工方式需要......
  • 并查集 - 亲戚
     #include<iostream>#include<vector>usingnamespacestd;vector<int>fa{-1};intfind(inti){if(fa[i]!=i)fa[i]=find(fa[i]);returnfa[i];}voidmerge(inti,intj){fa[find(i)]=find(j);}intmain(){i......
  • 其他知识
    劳动争议有起诉时间限制吗?劳动争议有起诉时间限制。根据中国法律,劳动争议案件的诉讼时效是15日,即案件当事人如对劳动争议仲裁委员会的仲裁裁决书或不予受理决定书、通知书不服,应当在收到裁决书或决定书、通知书之日起15日内向人民法院提起诉讼。 企业可以以简历工作经历不符为......
  • 每日总结(c/s架构简单的登录模块)
    单一职责原则实例——登录模块 登录模块在实际项目开发中很常见,请按照教材28页利用单一职责原则重构后的类图实现这一模块。1、新建 javaproject 2、导入jar包mysql-connector-java-8.0.22.jar    *此处注意jar包的版本不能过低,否则数据库连接失败3、......
  • 计算机图形:图形软件
    目录坐标图形功能软件标准OpenGL简介OpenGL语法相关库头文件GLUT窗口管理一个典型的OpenGL程序OpenGL出错处理图形软件有2类:专用软件包、通用编程软件包。专用软件包:为非程序员设计,在某些应用中能用来生成图形、表格,而不必关心图形函数。接口通常是一组菜单,用户通过菜单与程序......
  • 【RocketMQ】数据的清理机制
    Broker在启动的时候会注册定时任务,定时清理过期的数据,默认是每10s执行一次,分别清理CommitLog文件和ConsumeQueue文件:publicclassDefaultMessageStoreimplementsMessageStore{//CommitLog清理类privatefinalCleanCommitLogServicecleanCommitLogService;......