利用pyecharts自动化绘制漏斗图保姆级教程 目录前言一、批量获取数据1. 什么是工作薄和工作表2. 什么是单元格3. 使用openpyxl读取xlsx文件二、绘制柱状图小结三、绘制漏斗图1. 漏斗图的概念2. 漏斗图的指标和计算方法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模块pip install openpyxl接着导入openpyxl模块开始读取数据读取路径下的Excel文档需要用到openpyxl.load_workbook()函数将文件路径传入函数中就读取了这个文档的数据。import openpyxl path E:\pyTest\数据可视化学习\7-1\caicai\岗位信息表.xlsx wb openpyxl.load_workbook(path) position wb[岗位序列]浩宇需要绘制柱状图柱状图的格式要求横纵坐标以列表的形式存储数据。这里我们先读取第一行的标题作为横坐标读取第二行的数据作为纵坐标title position[1] print(title)得到以下结果可以看到他输出的只是第一行的单元格名称不能看到具体的标题我们使用value属性来找到真实的数据。title position[1] for i in title: print(i.value)我们又又又发现问题了第一个单元格表格是空的我们需要去掉他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轴柱状图的绘制。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() 函数来循环获取17的数字以达到逐个获取行数据的目的。for i in range(1,8): print(read_ex(i))元组的第一个元素是空值/岗位名称元组的第二个元素是x轴/y轴的数据我们将返回的第一个元素赋值给name第二个元素赋值给num。for i in range(1,8): data read_ex(i) name data[0] num data[1] print(name,num)这样我们的数据就处理好了我们开始绘制柱状图二、绘制柱状图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(rE:\pyTest\数据可视化学习\可视化图表\岗位序列.html)得到以下结果这样我们就画好了柱状图。小结处理数据我们用到的是openpyxl模块首先利用load_workbook函数读取工作簿紧接着读取了工作表再根据工作表里的内容处理了数据并封装成了函数最后将转化后的数据绘制成了柱状图三、绘制漏斗图1. 漏斗图的概念漏斗图Funnel Chart图形样式与漏斗类似能够直观展示各环节业务数据的变化情况。每个阶段的数据自上而下减少有助于快速发现和定位问题所处环节。比较常用在电商网站分析中通过展示各环节转化了解用户看到商品至下单的每个步骤的转化情况。漏斗图举例如何绘制呢使用 pyecharts 绘制漏斗图需要导入Funnel 模块。from pyecharts.charts import Funnel绘制柱状图或折线图时需要传入x轴和y轴数据和绘制漏斗图传入的数据类型有些区别。漏斗图不区分x轴和y轴需要传入一个二维列表简单来说就是列表中的每个元素也是列表。2. 漏斗图的指标和计算方法那么当我们拿到的是一个数量列表时如何计算每个环节的百分比呢因为我们拿到数据是上一环节得到的所以我们只需要和上一环节去比就行了。利用for循环配合 range() 函数遍历列表中的每项n当元素为第一项时设置百分比为100%当元素为其他项时取 n/(n-1) 计算结果使用 round() 保留小数点后一位。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}%)我们对数据进一步处理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_pairdata 表示传入的数据3. 设置 gapn(n0) 用于展示漏斗图每条间的间距。funnel Funnel() funnel.add(series_name 漏斗图,data_pair total,gap 10) funnel.render(rE:\pyTest\数据可视化学习\可视化图表\漏斗图.html)在这里我们扩展一下知识就是如何利用options隐藏图例配置项funnel.set_global_opts(legend_optsopts.LegendOpts(is_showFalse))源码在这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(rE:\pyTest\数据可视化学习\可视化图表\漏斗图.html)四、读取数据并绘制漏斗图结合上面的知识我们来练习一下数据文件可以私聊我领取from pyecharts.charts import Funnel import openpyxl path rE:\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(title100%) else: rate (nums/num[i-1].value)*100 per round(rate,1) temp.append(titlef{per}%) temp.append(nums) total.append(temp) funnel Funnel() funnel.add(series_name 漏斗图,data_pair total,gap 10) funnel.render(rE:\pyTest\数据可视化学习\可视化图表\漏斗图2.html)本文的学习到此结束啦很感谢你看完了本文鼓励自己一下吧简单比复杂更难。 —— 苹果创始人 乔布斯