【matplotlib 实战】--漏斗图
漏斗图,形如“漏斗”,用于展示数据的逐渐减少或过滤过程。
它的起始总是最大,并在各个环节依次减少,每个环节用一个梯形来表示,整体形如漏斗。
一般来说,所有梯形的高度应是一致的,这会有助人们辨别数值间的差异。
需要注意的是,漏斗图的各个环节,有逻辑上的顺序关系。
同时,漏斗图的所有环节的流量都应该使用同一个度量。
通过漏斗图,可以较直观的看出流程中各部分的占比、发现流程中的问题,进而做出决策。
1. 主要元素
漏斗图的主要元素包括:
- 分类:漏斗图中的不同层级或步骤。每个分类代表一个特定的过程、筛选或转化。
- 倒梯形:表示在每个阶段中的数据数量或数量的百分比。通常,随着阶段的推进,数据量会逐渐减少。
- 数据流:表示数据在不同阶段之间的流动路径。它显示了数据从一个阶段到另一个阶段的转移和过滤过程。
- 转化率:表示在每个阶段中数据的转化率或转化的百分比。它反映了数据在不同阶段之间的损失或过滤程度。

2. 适用的场景
漏斗图适用的分析场景包括:
- 销售转化分析:跟踪销售过程中的潜在客户数量,并展示他们在不同阶段的转化率,从而帮助分析销售流程中的瓶颈和改进机会。
- 市场营销分析:展示市场活动中的潜在客户数量,并显示他们在不同营销阶段的转化率,从而评估市场策略的有效性和改进方向。
- 用户体验分析:追踪用户在产品或服务使用过程中的转化率,帮助分析用户体验中的瓶颈和提升点,从而优化产品或服务设计。
- 网站流量分析:展示网站访问者在不同页面或功能模块之间的转化率,帮助分析用户行为和改进网站设计。
3. 不适用的场景
然而,漏斗图并不适用于所有分析场景。以下是一些不适合使用漏斗图的情况:
- 数据无序或重复:如果数据没有明确的阶段或无法按照特定的流程进行过滤或转化,漏斗图可能不适用。
- 数据缺失或不完整:如果数据在不同阶段之间存在缺失或不完整,漏斗图可能无法准确反映数据流动和转化情况。
- 多个并行路径:如果数据在不同阶段之间存在多个并行路径,并且无法简单地表示为单一的线性流程,漏斗图可能无法有效展示数据流动。
4. 分析实战
本次用漏斗图分析各个学历的毕业生人数,从小学学历到博士学历。
4.1. 数据来源
数据来源国家统计局公开的数据,整理好的数据可从下面的地址下载:
https://databook.top/nation/A0M
使用其中的文件:A0M0203.csv(各级各类学历教育毕业生数)
fp = "d:/share/data/A0M0203.csv"
df = pd.read_csv(fp)
df

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

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年各学历毕业人数")

从图中可以看出,完成9年义务教育的比例很高。
初中到高中,人数几乎减半,而本科考研,硕士考博的人数比例更是锐减。
【matplotlib 实战】--漏斗图的更多相关文章
- python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)
最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...
- 【Highcharts】 绘制饼图和漏斗图
1.outModel类设计 设计outModel类首先研究下Highcharts中series的data数据格式,发现饼图和漏斗图都可以使用这样格式的数据 series: [{ name: 'Uniq ...
- arcpy.mapping实战-专题图制图自动化
arcpy.mapping实战-专题图制图自动化 by 李远祥 最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现 ...
- Matplotlib学习---用matplotlib画雷达图(radar chart)
雷达图常用于对多项指标的全面分析.例如:HR想要比较两个应聘者的综合素质,用雷达图分别画出来,就可以进行直观的比较. 用Matplotlib画雷达图需要使用极坐标体系,可点击此链接,查看对极坐标体系的 ...
- python使用matplotlib绘制折线图教程
Matplotlib是一个Python工具箱,用于科学计算的数据可视化.借助它,Python可以绘制如Matlab和Octave多种多样的数据图形.下面这篇文章主要介绍了python使用matplot ...
- [实战] SSH 图形化转发
[实战] SSH 图形化转发 一.介绍 Unix Like操作系统不是只能进行服务器的架设而已,在美编.排版.制图.多媒体应用上也是有其需要的.这些需求都需要用到图形介面(Graphical User ...
- ECharts学习总结(二)-----图表组件漏斗图(funnel)
今天在学习ECharts时,想要在ECharts图表的原生态Demo中抠出漏斗图,却不知如何下手,经过一番研究,特总结如下: 首先我们需要这样做 1.拷贝出两个js文件:esl.js 和echarts ...
- python matplotlib imshow热图坐标替换/映射
今天遇到了这样一个问题,使用matplotlib绘制热图数组中横纵坐标自然是图片的像素排列顺序, 但是这样带来的问题就是画出来的x,y轴中坐标点的数据任然是x,y在数组中的下标, 实际中我们可能期望坐 ...
- 小白学Python(9)——pyecharts 绘制漏斗图 Funnel
根据pyecharts的介绍一直没有研究明白def和return的用法,无法显示完整的漏斗图,还请各位指点. 根据上文绘制bar的方法,我更改了代码,做出了漏斗图,不过和demo不一样,而且数据也会随 ...
- Python pyecharts绘制漏斗图
一.pyecharts绘制漏斗图方法简介 funnel.add()方法简介add(name, attr, value, funnel_sort="ascending", funne ...
随机推荐
- 【HDC.Cloud 2023】华为云区块链分论坛内容值得再读!
摘要:在Web3时代,基础设施不仅仅是传统意义上的服务器.网络等,还包括了区块链节点.智能合约等,这些基础设施的稳定性和可信度直接影响着Web3的发展. 本文分享自华为云社区<[HDC.Clou ...
- 【Python】Beautiful Soup
简介 Beautiful Soup 对象 我全部使用soup表示: Beautiful Soup 简介: 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据. ...
- kali下对压缩包的压缩与解压(转)
kali linux 压缩文件解压缩命令(包含7z) tar tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包 ...
- Asp-Net-Core学习笔记:单元测试和集成测试
前言 我在使用 AspNetCore 的这段时间内,看了很多开源项目和博客,发现各种 .Net 体系的新技术很多人都有关注和使用,但却很少有人关注测试. 测试是软件生命周期中的一个非常重要的阶段,对于 ...
- Axios向后段请求数据GET POST两种方法的不同之处
GET请求 向后端请求时,通过URL向后端传递参数 axios({ url:'http://127.0.0.1:9000/get-user-list/', type:'json', //GET方法携带 ...
- 二 APPIUM Android自动化 环境搭建(转)
1.安装JAVA运行环境 2.安装Android开发环境 3.安装nodejs 下载地址:https://nodejs.org/en/ 下载完成之后双击安装. 4.安装APPIUM,Appium服务端 ...
- Cesium-加载3D飞机模型沿指定路线前进
https://blog.csdn.net/Apple_Coco/article/details/108882146
- 最全linux基础知识
linux基础知识 [root@localhost ~]# 各位置表示什么意识 root:表示用户名 (现在的用户是root切换为test便是张三) localhost:表示主机名 (当前主机名切换为 ...
- Elasticsearch 保姆级入门篇
Elasticsearch 是一个分布式的.面向生产规模工作负载优化的搜索引擎. Kibana 可以将 Elasticsearch 中的数据转化为直观的图表.图形和仪表盘. 这篇文章,您将学习本地安装 ...
- java多线程使用详解与案例,超详细
一.创建线程的方式 1.继承Thread类 让子类继承Thread线程类 子类必须重写Thread类的run方法 创建一个自己定义的线程对象 调用start()方法启动线程 //测试类 /** * 1 ...