目的:给某互联网客服中心搭建自动可视化报表供运营层使用;
使用对象:运营总监、经理、主管; 此使用对象决定底层表最小粒度;
该项目使用工具:Hive sql、MySQL、Python、power BI、Windows自带任务计划程序;
方案:
结合使用对象,用SQL获取你想要的原始数据,比如使用对象决定表的最小粒度是员工层,但是向上钻需要到小组、大组、部门、整个客服中心,所以前面提到的这几个字段都是需要的;另外如果想展示sku的top咨询情况,那么就需要到sku粒度;一般情况下如果只是量与量直接做计算,不涉及具体的咨询id或者订单号,推荐先将各字段group by后再进行full join,这时候会得到一张大宽表,在这个宽表上再进行加减乘除的指标运算;
在这里我有用到只有工作量的表,同时也会有明细,因为对于待跟进case员工是需要one by one的跟进的;如:
import pandas as pd
import os
from sqlalchemy import create_engine
file_dir=u'D:\\桌面\\印尼\\file from jbox\\for mysql\\pending_detail_for_mysql\\'
list1=os.listdir(file_dir)
list1.sort(key=lambda fn: os.path.getmtime(file_dir+fn) if not os.path.isdir(file_dir+fn) else 0)
a=file_dir+list1[-1]
op=open(a,'rb')
data=pd.read_csv(op,encoding='utf-8')
connerting=create_engine('mysql+pymysql://root:031710Trplb@@localhost:3306/idcs?charset=utf8')
pd.io.sql.to_sql(data,'afs_pending_audit_final', connerting, schema='idcs', if_exists='append',index=False)
op.close()
file_dir=u'D:\\桌面\\印尼\\file from jbox\\case_qty_daily\\'
list1=os.listdir(file_dir)
list1.sort(key=lambda fn: os.path.getmtime(file_dir+fn) if not os.path.isdir(file_dir+fn) else 0)
a=file_dir+list1[-1]
op=open(a,'rb')
data=pd.read_csv(op,encoding='utf-8')
connerting=create_engine('mysql+pymysql://root:031710Trplb@@localhost:3306/idcs?charset=utf8')
pd.io.sql.to_sql(data,'case_quantity', connerting, schema='idcs', if_exists='append',index=False)
op.close()
代码解析:
import:导入pandas、os、sqlalchemy库;
os.listdir():列出路径里面的所有文件;
list1.sort(key=lambda fn: os.path.getmtime(file_dir+fn) if not os.path.isdir(file_dir+fn) else 0)
a=file_dir+list1[-1]
这两句是找到创建时间最新的那个文件;
open():打开文件,后面参数rb,已只读形式打开;
pd.read_csv():文件是CSV的,所以会用这个把打开的文件读取到dataframe里,当然如果是excel文件或者其他的,也可以用对应的读取方法;
create_engine:这里是我的本地mysql的账号等信息,按格式填进去即可;
create_engine('mysql+pymysql://root:031710Trplb@@localhost:3306/idcs?charset=utf8')
'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
to_sql:
pd.io.sql.to_sql(data,'afs_pending_audit_final', connerting, schema='idcs', if_exists='append',index=False)
调取pd.io.sql.to_sql这个函数,将之前的dataframe文件data按连接connerting(我之前定义的)导入到mysql中库名为“idcs” 表名为“afs_pending_audit_final”表中,导入方式append为如果库中没有这个表则新建一个表,如果有则在最后增加你导入的内容,index=false表明不把dataframe里面的index列一起导入;
*这里需要注意的是,使用sqlalchemy需要先安装,下载地址点击这里,安装方法点击这里;
另外,因为自动导入mysql会自己给字段选一种类型,所以需要在表设计中修改,我都统一改为varchar;
程序或脚本是python解释器的名称;起始于是python解释器的目录;添加参数是你的python程序的完整路径
以上,底层数据算是搭建好了,下面要进行可视化设计;