你的假期余额已不足,在假期的最后一天,大家可能还在担心开学之后要交的一堆堆作业吧,对于咱们专业的同学们来说,可能最让人抓狂的除了画图,还有另一个让人抓狂不已的作业,就是国庆放假前夕生态学实验留的一个数据处理分析的作业了,这是一份什么样的作业呢,我们来看看。
简而言之,有个地方有个生态数据观测站,这个观测站每5分钟会记录一组观测到的数据,具体的指标有PM10,PM2.5,SO2等一共八个指标,数据以excel的形式存储,每个月的数据会放到一个excel,大概一个excel有那么多行:
这次我们的任务是一共处理2017年8月到2018年8月的数据,也就是一共13个excel表,所有数据一共10w+行,大概就是这样:
可能最关心的问题是我们要处理成什么样的一个结果吧,我在这里大概解释一下,因为我们处理这些数据的目的是要通过这些观测值的几个指标在一定时期内的均值和标准差来反映出这个地方的植物对于这个地方的生态环境的影响,所以我们最终需要的有这么一些指标:
1. 每个月各个指标的月均值和标准差
2. 每一天的各个指标的日均值和标准差
3. 每个季节(春夏秋冬)的每个周的日均值和日标准差(即每个季节周一到周日的总体日均值和标准差)
4. 每个季节(春夏秋冬)的每24小时内的时均值和时标准差(即每个季节每天每个小时内的总体均值和标准差)
哇,啥意思呢,看前面两条是不是感觉还是蛮容易的,无非就是excel里面整合一下,几个函数的问题,无非就是花费一些时间和精力,但是当我们看到后面两条感觉就有些麻烦了,这感觉靠人力excel可能完全搞下来不说正确率如何保证,电脑不爆炸人也先爆炸了吧!最蛋疼的还在后面,我们来看一下这些数据的具体情况:
我们看到这些数据有很多地方由于一些客观原因导致数据缺失,还有一些连续的9999.99和连续的0这样的错误数据:
不仅如此,我们不妨把2017年8月份的数据信息用python打印出来看一下:
啥意思啊,就是说这些数据不仅有缺失的,错误的,还有格式错误的(比如空格什么的),数据类型错误的(比如本应该是浮点型或整型数据,却是字符串型的),这样的话如果不进行数据类型的转换,即使使用excel进行计算也会出错,计算出来的是一些不准确的结果。
综上所述,这次任务如果要获得一个非常准确的结果,不仅要耗费大量的时间和精力,如果把这些数据本身存在的错误全部进行人工清洗,将是一个非常困难的工作,显然这种靠蛮力的重复性劳动我是打死都不会去干的!但是作业要交啊!于是,我开始尝试使用python来解决这个棘手的问题,既然是重复性又要求精确性的工作,就是最适合程序来干的,而python的pandas和numpy不就是为这种事情而生的吗?
于是国庆假期,除了玩乐我开始了为期三天的脚本程序编写工作,其实在开始这项任务之前,我完全没有把握能够写出一个完美的程序来系统的解决这一类型的问题,对python数据分析的两个最主要的库pandas和numpy也是处于小白状态,所以也是在摸索中解决了一个个棘手的问题,最开始一天大致看了一下pandas和numpy的官方文档,然后开始着手编写程序,一遍遍的反复测试,虽然bug频出让我很是痛苦,但是在看到自己写的方法一个个测试成功后,心里还是备受鼓舞的,想到如果同样为此困扰的同学或者相关研究工作者如果因为自己写的程序能够节约出来大部分的时间和精力,也算对得起自己这三天的努力,好啦,下面是关于脚本程序的介绍和用法。
这个程序最大的特点是它的处理过程是完全基于时间序列的!啥意思呢?就是说,如果的数据某几分钟或者某几个小时或者某几天缺失,它会自动清洗排除;在计算某个指标的的均值和标准差的时候,如果有错误值,包括数据缺失,数据类型错误,它也能自动进行清洗排除或者对输入的数据进行数据类型推测进行数据转换得到正确的数据类型加入计算,最终所得结果是完全准确的!源代码一共673行,下面是部分截图。
除此之外,我还开放了两个日期接口,即开始时间和结束时间,这样一来你就可以计算任意时间期间内的这些指标值,比如下图你只需要修改start_date为“2018-1-1”,end_date为“2018-6-31”,键入你的数据目录点击运行,它就会自动计算出2018年1月1号到2018年6月31日期间内上述四个问题的所有结果并帮你格式化写入excel!哇!是不是感觉又可赛艇了呢!
如下是测试结果,数据为2017-8-1到2018-8-31的数据,为了后期作图方便,我把各个指标的均值和标准差分门别类放在了各个sheet中了如下图红框所示:
而这些数据的获得花了多久呢?
131.7秒,也就差不多两分钟左右!也就是,当以后只要是这个工作站的数据,无论几十几百几千个excel表,你只需要修改一下想要获得的开始和结束日期和数据目录点击运行之后,就可以坐着喝茶陪男/女票去啦,你所花费的时间和精力再也不用呈指数型增长,这,就是程序的优雅之处,python的优雅之处。
写在最后
程序运行环境需求:python 3.5+
所需的第三方依赖包:Pandas,Numpy,Xlrd,Xlwd,Openpyxl
(所有的包通过命令行pip安装即可)
关注本公众号,回复data即可下载此程序源代码和数据文件
最后,祝大家开学愉快!!!