利用pyecharts自动化绘制漏斗图保姆级教程

目录

前言

一、批量获取数据

[1. 什么是工作薄和工作表?](#1. 什么是工作薄和工作表?)

[2. 什么是单元格?](#2. 什么是单元格?)

[3. 使用openpyxl读取xlsx文件](#3. 使用openpyxl读取xlsx文件)

二、绘制柱状图

小结

三、绘制漏斗图

[1. 漏斗图的概念](#1. 漏斗图的概念)

[2. 漏斗图的指标和计算方法](#2. 漏斗图的指标和计算方法)

[3. 从Excel中读数据绘制单个漏斗图。](#3. 从Excel中读数据绘制单个漏斗图。)

四、读取数据并绘制漏斗图

前言

浩宇是一家公司的HR,一般使用漏斗图来展示各个环节的进入的人数,在进行绘制之前需要得到各个环节的转化率。公司有多个部门以及多个岗位,利用excel处理又慢又累,如果部门的部分数据更改就需要重新绘制,面对繁琐的画图流程,浩宇想要实现自动化绘制。

一、批量获取数据

浩宇要查看岗位在不同环节的通过率,并批量读取数据绘制漏斗图。

首先,我们先学习批量读取数据的方法,绘制用于展示总体招聘情况的图表

如何选择合适的图表呢?不妨简单分析一下,每个岗位都有初筛、一面、二面等多个环节,要查看简历数量随着招聘环节的变化。折线图和柱状图都能反映数量的变化,考虑到岗位数量很多,折线图绘制出来以后会比较混乱,这里我们采用柱状图。

本节的学习目标:

  1. 了解Excel文档的工作簿和工作表;

  2. 学习读取工作簿、工作表和行读取的操作;

  3. 定义函数,绘制多y轴柱状图。

1. 什么是工作薄和工作表?

一个Excel文档就叫做工作簿(Workbook),图中是Excel文档,该文档的后缀名为.xlsx,所以工作簿的名称为候选人跟进.xlsx。

一个工作簿中包含一个或多个工作表(Worksheet)。

2. 什么是单元格?

一个工作表由单元格(Cell)组成。Excel的数据存储在单元格中。

我们可以通过列号(Column)和行号(Row)对单元格进行定位。

3. 使用openpyxl读取xlsx文件

要使用Python对Excel表格进行读取,我们需要安装一个用于读取数据的工具 openpyxl 。

在终端输入以下指令,利用pip安装openpyxl模块

python 复制代码
pip install openpyxl

接着导入openpyxl模块开始读取数据,读取路径下的Excel文档,需要用到openpyxl.load_workbook()函数,将文件路径传入函数中,就读取了这个文档的数据。

python 复制代码
import openpyxl
path = "E:\pyTest\数据可视化学习\7-1\caicai\岗位信息表.xlsx"
wb = openpyxl.load_workbook(path)
position = wb["岗位序列"]

浩宇需要绘制柱状图,柱状图的格式要求横纵坐标以列表的形式存储数据。

这里我们先读取第一行的标题作为横坐标;读取第二行的数据作为纵坐标

python 复制代码
title = position[1]
print(title)

得到以下结果

可以看到他输出的只是第一行的单元格名称,不能看到具体的标题,我们使用value属性来找到真实的数据。

python 复制代码
title = position[1]
for i in title:
    print(i.value)

我们又又又发现问题了,第一个单元格表格是空的,我们需要去掉他

python 复制代码
x_list = []
for i in title:
    x_list.append(i.value)
print(x_list[1:])

到这里,相信大家对openpyxl库处理excel文件有一定了解了,大家试着把第二行的数据处理一下。

  1. 读取第二行数据;

  2. 定义一个列表用于存储该行的内容;

  3. 使用切片从第二个元素开始遍历;

  4. 使用 .value 取单元格的值;

  5. 使用 append() 将内容追加到列表中,这里就不再重复了。

可是数据有多行,我们不需要写很多重复的代码,我们可以利用函数封装起来,将每个岗位的行数当成参数,调用该函数就可以完成多y轴柱状图的绘制。

python 复制代码
def read_ex(row):
    y_list = []
    total = position[row]
    for i in total[1:]:
        y_list.append(i.value)
    return (total[0].value,y_list)

完成函数的定义后,我们需要读取文档中第1行到第7行的数据,这里我们可以使用 for循环和 range() 函数来循环获取1~7的数字,以达到逐个获取行数据的目的。

python 复制代码
for i in range(1,8):
    print(read_ex(i))

元组的第一个元素是空值/岗位名称,元组的第二个元素是x轴/y轴的数据,我们将返回的第一个元素赋值给name,第二个元素赋值给num。

python 复制代码
for i in range(1,8):
    data = read_ex(i)
    name = data[0]
    num = data[1]
    print(name,num)

这样我们的数据就处理好了,我们开始绘制柱状图

二、绘制柱状图

python 复制代码
import pyecharts.charts import Bar
bar = Bar()
#读取数据后画表格
for i in range(1,8):
    data = read_ex(i)
    name = data[0]
    num = data[1]
    if i == 1:
        bar.add_xaxis(num)
    else:
        bar.add_yaxis(series_name = name, y_axis = num)
bar.render(r"E:\pyTest\数据可视化学习\可视化图表\岗位序列.html")

得到以下结果:

这样我们就画好了柱状图。

小结

处理数据我们用到的是openpyxl模块,首先利用load_workbook函数读取工作簿,紧接着读取了工作表,再根据工作表里的内容处理了数据并封装成了函数,最后将转化后的数据绘制成了柱状图

三、绘制漏斗图

1. 漏斗图的概念

漏斗图(Funnel Chart)图形样式与漏斗类似,能够直观展示各环节业务数据的变化情况。

每个阶段的数据自上而下减少,有助于快速发现和定位问题所处环节。

比较常用在电商网站分析中,通过展示各环节转化,了解用户看到商品至下单的每个步骤的转化情况。
漏斗图举例

如何绘制呢?

使用 pyecharts 绘制漏斗图,需要导入Funnel 模块。

python 复制代码
from pyecharts.charts import Funnel

绘制柱状图或折线图时,需要传入x轴和y轴数据,和绘制漏斗图传入的数据类型有些区别。

漏斗图不区分x轴和y轴,需要传入一个二维列表,简单来说就是列表中的每个元素也是列表。

2. 漏斗图的指标和计算方法

那么,当我们拿到的是一个数量列表时,如何计算每个环节的百分比呢?

因为我们拿到数据是上一环节得到的,所以我们只需要和上一环节去比就行了。

利用for循环配合 range() 函数遍历列表中的每项n:

当元素为第一项时,设置百分比为100%;

当元素为其他项时,取 n/(n-1) ,计算结果,使用 round() 保留小数点后一位。

python 复制代码
from pyecharts.charts import Funnel
label = ["展现", "点击", "访问", "咨询", "订单"]
num = [1000, 880, 264, 52.8, 5.28]
for i in range(5):
    if i== 0:
        print("100%")
    else:
        rate = (num[i]/num[i-1])*100
        per = round(rate,1)
        print(f"{per}%")

我们对数据进一步处理

python 复制代码
from pyecharts.charts import Funnel
label = ["展现", "点击", "访问", "咨询", "订单"]
num = [1000, 880, 264, 52.8, 5.28]
total = []
for i in range(5):
    temp = []
    if i== 0:
        temp.append(label[i]+"100%")
    else:
        rate = (num[i]/num[i-1])*100
        per = round(rate,1)
        temp.append(label[i]+f"{per}%")
    temp.append(num[i])
    total.append(temp)
print(total)
'''
输出:[['展现100%', 1000], ['点击88.0%', 880], ['访问30.0%', 264], ['咨询20.0%', 52.8], ['订单10.0%', 5.28]]
'''

3. 从Excel中读数据绘制单个漏斗图。

数据处理好后,我们开始绘制漏斗图:

生成漏斗图,需要调用 add() 函数,该函数用于设置漏斗图的图例名称、数据和间距。

add() 需要传入三个参数:

  1. series_name="图例名称" 用于设置图例名称;

  2. data_pair=data 表示传入的数据;

  3. 设置 gap=n(n>=0) 用于展示漏斗图每条间的间距。

python 复制代码
funnel = Funnel()
funnel.add(series_name = "漏斗图",data_pair = total,gap = 10)
funnel.render(r"E:\pyTest\数据可视化学习\可视化图表\漏斗图.html")

在这里我们扩展一下知识,就是如何利用options隐藏图例配置项

python 复制代码
funnel.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))

源码在这:

python 复制代码
from pyecharts.charts import Funnel
label = ["展现", "点击", "访问", "咨询", "订单"]
num = [1000, 880, 264, 52.8, 5.28]
total = []
for i in range(5):
    temp = []
    if i== 0:
        temp.append(label[i]+"100%")
    else:
        rate = (num[i]/num[i-1])*100
        per = round(rate,1)
        temp.append(label[i]+f"{per}%")
    temp.append(num[i])
    total.append(temp)
funnel = Funnel()
funnel.add(series_name = "漏斗图",data_pair = total,gap = 10)
funnel.render(r"E:\pyTest\数据可视化学习\可视化图表\漏斗图.html")

四、读取数据并绘制漏斗图

结合上面的知识,我们来练习一下(数据文件可以私聊我领取):

python 复制代码
from pyecharts.charts import Funnel
import openpyxl
path = r"E:\pyTest\数据可视化学习\7-1\caicai\岗位信息表.xlsx"
wb = openpyxl.load_workbook(path)
ws = wb["岗位序列"]
label = ws[1]
num = ws[2]
total = []
for i in range(1,7):
    title = label[i].value
    nums = num[i].value
    temp = []
    if i == 1:
        temp.append(title+"100%")
    else:
        rate = (nums/num[i-1].value)*100
        per = round(rate,1)
        temp.append(title+f"{per}%")
    temp.append(nums)
    total.append(temp)
funnel = Funnel()
funnel.add(series_name = "漏斗图",data_pair = total,gap = 10)
funnel.render(r"E:\pyTest\数据可视化学习\可视化图表\漏斗图2.html")

本文的学习到此结束啦!很感谢你看完了本文,鼓励自己一下吧!
简单比复杂更难。 ------ 苹果创始人 乔布斯

相关推荐
这就是佬们吗1 小时前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
卷无止境1 小时前
提升 Python 代码健壮性的方法大盘点
后端·python
asdzx671 小时前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf
LadenKiller2 小时前
近期AI训练量化表达,解释改写检查要按顺序
人工智能·python
邓码农0072 小时前
批量发布 + 数据分析横评|聚媒通、融媒宝、新榜小豆芽、矩阵通优缺点全面拆解
矩阵·数据挖掘·数据分析
李昊哲小课2 小时前
咖啡工坊 · FastAPI 22 章教程合集
服务器·人工智能·python·fastapi
卷无止境2 小时前
Python 异常处理:从入门到工程实践
后端·python
garuda herb2 小时前
生成专题页Blog--建立并返回 MySQL 数据库连接
python·mysql
ONE_SIX_MIX2 小时前
qwenpaw-plugin-file-tools QwenPaw增强文件工具 更新 v1.1.1
python·qwenpaw