用Python搭建简单自动化报表(漏斗模型)
前言
你是否每日都花费大量时间做着各种报表,被小伙伴们亲切的称为:“表哥”“表姐”
你是否经历过数据太大导致Excel程序卡死,做了一上午的成果付诸东流(额的神啊 ̄へ ̄)
你是否经历过因长时间盯着各种表导致眼花缭乱,弄错公式,数据出错,闹出笑话
如果以上几个场景你都经历过,或是正处在这个阶段,那么这篇文章可能对你有点帮助。
本文结合实际工作场景,从数据获取一数据清洗—模型搭建(计算)—数据可视化,展现自动化展示的完整过程,过程虽简单,希望大家可以由简入深,各有所得。
注:文章所有数据均为虚拟数据
正文
工具及第三方库:MySQL Jupter Notebook ;Pandas numpy pyecharts
在文章开始之前,先简要介绍一下业务场景及整体思路:
业务场景:
在线教育行业,用户转化关键指标主要有:用户注册数、用户试听数、用户成单数,由此制作一个漏斗图可以很直观的展示连续业务流程节点转化情况。
整体思路:
一、获取数据
首先从数据库中导出“注册表”“试听表”“成单表”,然后使用Pandas导入等待处理
import pandas as pd
import numpy as np
from datetime import datetime
#导入数据表:“员工表”“注册表”“试听表”“成单表”
employee=pd.read_excel('C:/Users/young/Desktop/自动化report/业务员明细表.xlsx')
register=pd.read_excel(r'C:/Users/young/Desktop/自动化report/注册表.xlsx')
audition=pd.read_excel('C:/Users/young/Desktop/自动化report/试听表.xlsx')
contract=pd.read_excel('C:/Users/young/Desktop/自动化report/成单表.xlsx')
#查看register表是否导入成功
employee.head()
#查看数据量
employee.shape
#其他表也是通过该方式查看
#通过查看,这几张表都已成功导入
二、数据清洗
这里的数据清洗最关键的是,因需要统计特定部门业绩,所以这里需要通过部门员工ID匹配三张业绩表,从而得到只属于特定部门的业绩数据。我们做漏斗统计,只需要计数即可,所以有很多的字段是用不到的,我们可以只选择原表中需要的字段进行匹配即可,这样可以减少内存使用空间,提高处理速度
#选取各个原表中需要的字段
register_1=register['ID','create_time']
auditon_1=audition['ID','time','status']
contract_1=contract['ID','values']
#匹配注册表,因为要匹配特定员工业绩所以这里使用left连接
register_s=pd.merge(employee,register_1,left_on='id',right_on='ID',how='left')
#同样的,试听表及成单表也是同样的处理方式
audition_s=pd.merge(employee,audition_1,left_on='id',right_on='ID',how='left')
contract_s=pd.merge(employee,contract_1,left_on='id',right_on='ID',how='left')
三、数据计算
#总注册数
Tr=register_s['ID'].count()
Tr=Tr.astype(float)#转化数据类型
#总试听数
#满足状态才算是试听,这里起到过滤的作用
ad=audition_s.loc[(audition_s.status.isin(['system','no_system']))]
Ta=ad['ID'].count()
Ta=Ta.astype(float)
#总成单数
Tc=contract_s['ID'].count()
Tc=Tc.astype(float)
Tc
四、数据可视化
把上面计算所得的数据构建一个DataFrame数据结构
report = pd.DataFrame([Tr,Ta,Tc],
index = ["总客户数","总试听数",'总成单数']
report.reset_index().rename(columns={'index':'类目',0:'统计'})#修改列名
类目 统计
总客户数 65000
总试听数 10000
总成单数 5000
'''
制作漏斗图
pyecharts版本已更新至一个全新的版本v1,且向下不兼容,也就是说之前用低版本写的东西全部无效了,所以本文用的是最新版本的pyecharts
附上官方文档:
from pyecharts import options as opts
from pyecharts.charts import Funnel, Page
m=["总注册数","总试听数",'总签约数']
n=[Tr,Ta,Tc]
funnel=(