背景
Boss要出一份数据,需要每天定时定点发送到微信干部群里面。之前我都是从后台导出数据,然后在Excel的基础表里面粘贴导出的数据,接着打开展示表,从表格中把数据复制出来,一张一张发到微信群中。这样就有这么几个缺点:
1、导出数据繁琐,如果从8个数据表中分别导出8份数据,每次都需要手动选择日期和条件,然后导出数据。
2、Excel在处理数据较大且公式比较多的原始数据时,表现不是很好,很卡。
3、每天花在这份数据上的时间过多,影响其他的分析工作。
于是我决定用Python把数据处理过程简化,因为任何因为数据处理而非分析造成的加班,都是无效加班。
于是我把我的工作流程拆解分为5个部分,然后分别对每个部分进行程序编写:
1、从系统中导出数据
2、从导出的数据中找出需求数据
3、把数据填写到表格中
4、把表格复制为图片
5、图片发送到微信群中
6、发送完之后用短信提醒我
从系统中导出数据
从系统中导出数据,我是利用Python request模块把我的cookie和我的表单信息post到系统当中,得到我要的下载链接,然后用pandas直接读取这个Excel下载链接,生成一个DataFrame。我是在征求过了系统研发同意之后才写的爬虫,如果各位谁想去爬取公司的数据,一定要去征求同意,以免造成不必要的问题。因涉及公司的信息,我就不放出我写的代码了。至此我得到了系统中的数据,并且已经把数据变成了易处理的DataFrame格式。
从导出的数据中找出需求数据
我们已经从系统中找出原始数据,那么现在就需要对数据进行处理,这里就需要利用pandas的去处理数据。我这里涉及的操作有:
1、匹配数据。比如说系统中只有城市数据,但是我需要对省份进行筛选,于是我需要用原始数据和另一个数据进行匹配,相当于SQL中的left join。
2、筛选数据。筛选出广东省出发的所有出境线路的订单。
3、分类汇总。根据部门进行分类汇总,包括营收和交易额。
map_province和map_depart是从系统中读取的两个映射表,一个城市-省份映射表,用于匹配二是目的地城市-部门映射表,用于匹配部门。
把数据填写到表格中
已经得到了所需要的数据了,那么就是看用什么作为载体,去发送数据。我还是沿用老习惯,用Python在Excel表格中填写查询到的数据。处理Excel的Python库有很多,有xlrd、xlwt、xluntils和pyExcelerator等库,但是我偏向于win32com,用这个库去操作Excel,基本上是跟VBA语法一致。
函数fillData的作用是把保存在列表中的数据,一次填写在表格之中,他的四个参数表示:工作表、开始的位置、要填充的列表和需要填写的数据。dealExcel函数的作用是用来把数据填充进去。
把图片复制为图片
这个就很简单,先把复制的表格转化成图片,然后把图片复制到粘贴板上面,再利用PIL读取粘贴板上面的图片,接着保存到特定的文件夹中(存档)。
图片发送到微信群中
有了本地图片之后,可以利用itchat把数据发送到特定的微信群中。
这个有很大的扩展性,你可以把你所有的程序都包含在这个函数里面,当你的微信机器人得到你的暗语,他就会自己运行程序,然后发出数据。也可以加一个while循环,每天隔一段时间发数据。
但是他的缺点也有很多,比如说对中文不友好、要微信扫码登录和偶尔断掉服务器,需要重新登录等等。但是不管怎样,如果你的工作沟通工具是微信,那它肯定是你的一大助力。
发完数据之后用短信提醒我
这个只是一个可选项,用来实时知道自己的数据是否发送。我用的twilio服务,只需要写几行代码就能做到发送信息给你的手机当中。
总结
任何关于数据处理的过程,很多都可以用程序去解决。我是一个比较“懒”的人,机械的工作当然是用机器去做,把时间留着去做一些更有意思的事情,比如分析数据。