大用户用水量分析讲解.docx
《大用户用水量分析讲解.docx》由会员分享,可在线阅读,更多相关《大用户用水量分析讲解.docx(23页珍藏版)》请在冰豆网上搜索。
大用户用水量分析讲解
业组作习器学小机
机器学习作业之大用户用水量分析题目
作者姓名
作者学号
指导教师
学科专业
所在学院
提交日期
大用户表
数据处理
首先对大用户表进行合并排序,同时对每1000条数据(因为kettle是以1000条数据导入一次)进行一次简单去重,减少之后去重数据量
接着,我们对数据进行过滤,将null值去除后排序去除重复数据(本来是想优化的,也即是不去掉数据而是将数据修改成符合前后数据情况的,但是发现实现有点困难)。
这时原来1500万条数据只剩下816万条数据了。
接着是计算临近时间的用户的用水量
这时对用水量再次进行一次过滤,将用水量为负和正累积流量为负的值去掉
然后除杂(这里使用的是增量和标准差以及单位时间内用水量来去杂)
除杂主要是以网络上找到的资料进行的除杂,我用增长量、每天使用水量、按天算出的标准差等值来进行数据进一步过滤处理,从不同的维度来进行数据的清洗。
综上所述,清洗数据主要是以null、负值、异常数据(判断是以网络上提供的数据进行的。
主要是用增长量、每天用水量、用户按天算出的用水标准差等)。
在这里,由于用户的时间间隔不稳定,有的是10分钟,有的只有1秒,还有的是4个小时,这里统一了时间间隔是1天,也即是说我将1天作为统计量来统计用户的每日用水量和标准差(标准差是用来看此用户每日是否用水偏差很大,然后便于过滤数据的),之后我再以星期几、月份、季度等划分用户用水情况,进一步寻找用户的用水规律,在总表中,我将用户的id、用水总量、用水月份的用水平均量、周几的用水平均量、用水时间占有率、用水标准差、平均值、.
季度的用水平均量作为字段,这样方便我更好的了解用户的用水规律,以及划分用户情况,同时也可以通过用户总用水量的标准差来判断用户用水是否不规律或者用问题,从而进一步排除问题数据。
这里我本来是想将数据时间清洗的更小,通过规律时间(比如都为4小时)来对每天的用水规律进行分析的,但是由于数据间隔问题太大,所以我用了天来进行用户数据分隔,下面是用户各个时期的用水统计表:
按天来划分的用水数据
按周一、周二……来划分的用水数据
按月份来划分的用水数据
按季度来划分的用水数据
总表:
通过用户id来划分的用水数据
下面先进行用户分类
用户分类实际上用很多种方法,一种是按照每天用水量来分类,这样我们可以通过聚类分出四种用户:
从上图weka分析可以看出,大用户的用水量上,小水量的用户占了50%左右,这也就是说,绝大多数用户的用水还是有限制的,从平均值和标准差上看,大多数用户偏离程度不高,也就意味着他们用水按天来算的话是有规律的,比较稳定的。
由于之前求得值中存在很多表头读数问题,所以在这里也许也会影响情况。
下图是用sum去聚类的效果,从这里可以看出,以用水量来聚类会看出大用户之间也存在着很大的用水量差异。
下面的是用水量与偏差之间存在的聚类情况,从这里看出,大多数用水量大的用户,他的每日用水偏差也很大,这里存在着散点,这说明之前统计的数据过滤了,但是还有很多不好的数据,不然的话聚类会集中点,也不会有很大的偏差值,这是由于统计的不规律性决定的,首先,统计的时间间隔不是规律的,由于数据太大,之前的过滤主要是以删除为主,而不是使用的添加修改为主,不然的话数据处理完会很好,其次,用户的用水量统计问题很多,没有一个统一的标准去去除数据,导致一些之前就有问题的数据没有被过滤掉,从而保存在了数据中,还有就是用户用水的不规律性,这之后会通过按日统计的表进行说明。
我在数据的统计时,还加入了用户用水时间百分比(按天统计),下图就是按照用水百分比进行的聚类情况(纵轴是表示的用户不用水的日占总天数的比例),这在一定程度上将用户分为了经常用水、有时用水有时不用水、不经常用水,这里面我看了171条数据,发现最多的是经常用水的人,占了65%以上,也即是有112个人是一直在用水的(当然,由于水头度数等外部情况引起的并没有什么能够确定是因为这些情况的数据都保留了,所以可能会有些不准),这与下图的第一个聚类情况接近,所以这个聚类情况基本符合事实,当然,最好是能够将完全不用水的给分出来,这样更好的去进行分类,准确度也会更高点。
从下图我们可以看出,大用户在用水方面还是很频繁的,不会像小用户那样出现很多经常不用水的情况,当然,这些不用水的用户我们还需要分析的,这需要在按天排序的表中进行,下面会给出详细说明的。
.
用水规律分析
由于时间间隔和表头以及时间段用水规律统计不合理,数据不能够进行更进一步的优化,所以我做了这几个用水规律统计,按天来进行用户规律分析、按星期进行用户用水规律统计、按月进行用户用水规律分析、按季度进行用户用水规律统计。
下面从大到小一次来进行分析:
首先来看看季度用水规律图:
通过使用excel表来看171个用户季度用水量情况发现,第2、3季度用水量普遍高于别的季度情况,第二、三季度,几乎占据了所有的峰顶,这也就意味着大用户第二、三季度用水量要比别的季度用水量多很多,从时间角度分析,这也是说得通的,毕竟这两个季度处在春夏之间,春天需要浇灌等,夏天天气热,经常需要洗澡等,这两个季度都是忙碌的季度,所以用水量比别的高也是很正常,这也就意0的,但是从季度用水量统计情况来看,有些大用户的季度用水量为
味着用户很可能已经搬走了或者表坏了,这会造成上面图不太准,所以不排除这些因素的影响情况,但是总体来看还是可靠地,毕竟数据前期已经过滤充足了。
接着来看看月用水规律:
这是选取了18个用户来进行绘图的,这里可以清楚看出来2月份是用水低谷,大用户在二月份的用水量明显下折,这说明用户在二月份很少用水,而在6-9月份中,这几个月的用户用水量会有高峰,也即是说在这一部分用户用水量达到顶峰,这也符合实际情况,用户在2月份的冷天,几乎不怎么太长用水,而在6-9月份的夏天经常洗澡、洗衣服等,这些会使得用水量猛增,达到峰值也是正常的。
到这里大用户的分析结束了一半,下面是按照星期来分析的:
在这里我们选取了18个用户来进行分析,其中大多数用户在星期3、5这两个地方会有一个比较大的用水量,而周四除了个别的用户,大多数都是一个下降这就说明了用户用水多的时候大多集中周六也是一个较低点位,而周二、点位,
在周三、周五这两天,具体原因不明,但是有参考意义,可以针对这些来设计用水方法等,也可以设计节约水资源的方案。
下面是对大用户进行按天分析,在这一部分,我们可以将通知用户不规则用水进行提醒:
从上面的图可以看出,此用户在一段时间后的某些天会有大量用水现象,这超出了正常用水波动情况,正常用水量/日不会超过200,但是图中标注的几个点位都在200以上,所以我们可以通过这些情况来通知用户异常用水,给用户警示。
这是第二个用户的日用水量情况,从图中可以看出,这个用户用水规律很杂乱,从总体上看,他的用水是基本在一条水平线上的,但是在某些时刻会出现用水急速上升和急速下降的情况,所以应该在图上画出圈的地方基于用户警示,告诉用户你在这些时候用水不规律了,是不是水龙头没关好或者水表坏了。
.
这是第三个用户,这个用户一开始的用水量是0,而中间也是陆陆续续的0,这也就意味着这个用户几乎不怎么用水,而在图中的最高峰出出现了急剧增大,这就意味着用户的水表出现故障或者水龙头未关,这也是一个用户不经常用水的样例。
上面举了三个用户的例子,我们发现,不经常用水的用户,每日用水量经常出现0,而且用水量也是比较小的,而经常用水的用户,他们在一些时候会出现用水量急剧上升的趋势,而且大多数时候用水量会在一个小范围波动,一旦超出这个小范围,我们就应该给用户发警示,让用户注意自己的用水量和水表情况。
大用户用水规律预测
从不同的cluster来选取用户,这样选取到的用户的用水量预测才具有代表性。
首先选取一个按天进行统计的用户的用水量,将其放入csv的一个变量中。
之后将此变量利用ts函数转为时间序列对象,并画出时间序列对象。
接着利用auto.arima将数据进行自动获得模型:
得到模型arima(1,1,1),此模型原型为ARIMA(p,d,q)。
因此,此处p=1表示了自相关性,d=1表示数据进行了一次差分,q=1表示偏相关性。
再利用Forecast利用此模型对未来14天进行预测:
之后会画出预测后的结果,如下图,蓝色线为未来7天的预测结果,灰色区间是置信区间,其中深色小范围是置信区间为80%的区间,而浅灰色区间即更大的是置信区间为95%的区间。
基本从此图不能看出预测模型的好坏。
因此,下面从理论还实际进行验证。
理论验证:
从ARIMA模型定义来看,当模型预测后的预测误差(也叫残差)是一个均值为0,方差为常数的正态分布函数,且基本是不相关。
就可表明此模型使一个合理的模型。
利用acf函数对自相关进行检测
得到检测结果图如下:
从上可以看出,预测误差即残差基本是不自相关。
因为上图中在滞后1-20阶(lags1-20)中样本自相关值都没有超出显著(置信)边界,在实施的时候使用的是10阶就够用的了。
下面开始是用户用水量正式预测:
下图是对用户05793-20-00086663进行的预测,后面的阴影部分是预测趋势(预测天数为14天)
验证结果情况:
下图是对用户05793-20-00086669进行的预测,后面的阴影部分是预测趋势(预测天数为14天)
验证结果情况:
下图是对用户05793-20-00094850进行的预测,后面的阴影部分是预测趋势(预测天数为14天)
验证结果情况:
下图是对用户05793-20-00094854进行的预测,后面的阴影部分是预测趋势(预测天数为14天)
验证结果情况:
总结:
通过这次实验,知道了如何去处理数据,对数据过滤需要从不同的角度去进行清洗,如果数据量少,可以采用一个数据一个数据的清洗,如果数据量过大,那么查找资料来设定顾虑范围。
同时,还要注意使用不同的方法进行判断值是否是误差,例如:
方差、单位时间平均值等,这些方法可以使得数据更加精准,减少了之后处理数据的麻烦。
后面的分析是通过excel作图来进行的,以后要能够使用数据进行直接分析,预测部分使用的是R语言来完成的,通过之前的聚类(使用的是weka),然后选定不同聚类的一些值来进行预测,这里的预测只能对一个人进行,所以之后可以考虑同时对多个近似用户进行预测,当然,我这里一直想用线性回归和曲线拟合来做,或者用随机森林,但是对别的语言了解过少,时间有限,所以预测只是使用的简单的随机匹配函数来写的,这是一个不足点,希望以后能多多注意!
.