ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【matplotlib 实战】--漏斗图 [打印本页]

作者: 惊雷无声    时间: 2023-11-14 10:22
标题: 【matplotlib 实战】--漏斗图
漏斗图,形如“漏斗”,用于展示数据的逐渐减少或过滤过程。
它的起始总是最大,并在各个环节依次减少,每个环节用一个梯形来表示,整体形如漏斗。
一般来说,所有梯形的高度应是一致的,这会有助人们辨别数值间的差异。
需要注意的是,漏斗图的各个环节,有逻辑上的顺序关系。
同时,漏斗图的所有环节的流量都应该使用同一个度量。
通过漏斗图,可以较直观的看出流程中各部分的占比、发现流程中的问题,进而做出决策。
1. 主要元素

漏斗图的主要元素包括:

2. 适用的场景

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

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

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

数据来源国家统计局公开的数据,整理好的数据可从下面的地址下载:
https://databook.top/nation/A0M
使用其中的文件:A0M0203.csv(各级各类学历教育毕业生数)
  1. fp = "d:/share/data/A0M0203.csv"
  2. df = pd.read_csv(fp)
  3. df
复制代码

4.2. 数据清理

漏斗图不需要时间序列数据,所以,只提取2021年的数据中从小学到博士的6种学历的毕业生人数。
  1. data = df[df["sj"] == 2021]
  2. #A0M020312: 普通小学毕业生数(万人)
  3. #A0M02030T: 初中阶段教育毕业生数(万人)       
  4. #A0M02030J: 普通高中毕业生数(万人)
  5. #A0M020306: 普通本科毕业生数(万人)       
  6. #A0M020304: 硕士毕业生数(万人)       
  7. #A0M020303: 博士毕业生数(万人)
  8. data = data[
  9.     data["zb"].isin(
  10.         [
  11.             "A0M020312",
  12.             "A0M02030T",
  13.             "A0M02030J",
  14.             "A0M020306",
  15.             "A0M020304",
  16.             "A0M020303",
  17.         ]
  18.     )
  19. ]
  20. data = data.sort_values("value", ascending=False)
  21. data
复制代码

4.3. 分析结果可视化
  1. with plt.style.context("dark_background"):
  2.     fig = plt.figure()
  3.     ax = fig.add_axes([0.1, 0.1, 1, 1])
  4.     colors = plt.cm.Set2.colors
  5.     cnt = len(data)
  6.     y = [[1 + i * 3, 3.8 + i * 3] for i in range(cnt)]
  7.     y_ticks = [2 + i * 3 for i in range(cnt)]
  8.     start_x1 = 5
  9.     start_x2 = -5
  10.     for i in range(cnt):
  11.         ax.fill_betweenx(
  12.             y=y[i],
  13.             x1=[start_x1, data.iloc[i, 4]],
  14.             x2=[start_x2, -1 * data.iloc[i, 4]],
  15.             color=colors[i],
  16.         )
  17.         start_x1 = data.iloc[i, 4]
  18.         start_x2 = -1 * data.iloc[i, 4]
  19.     ax.set_xticks([], [])
  20.     ax.set_yticks(y_ticks, data["zbCN"])
  21.     for y, value in zip(y_ticks, data["value"]):
  22.         ax.text(
  23.             10,
  24.             y,
  25.             value,
  26.             fontsize=16,
  27.             fontweight="bold",
  28.             color="white",
  29.             ha="center",
  30.         )
  31.     ax.grid(False)
  32.     ax.set_title("2021年各学历毕业人数")
复制代码

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4