这个专栏用来记录我在学习和实践《Python数据分析与挖掘实战》一书时的一些知识点总结和代码实现。
文章目录
背景和目标
用户在使用家用电器过程中,会因为地区气候、不同区域、用户年龄性别差异,形成不同的使用习惯。家电企业若嫩更深入了解不同用户群的使用习惯,开发新功能,就能开拓新市场。
本案例基于热水器采集的时间序列数据,将顺序排列的离散的用水时间节点根据水流量
和停顿时间间隔
划分成为不同大小的时间区间,每个区间是一个可理解的完整用水时间。以热水器一次完整用水时间作为一个基本时间,将时间序列数据划分为独立的用水时间并识别出其中属于洗浴的时间。
基于以上工作,该厂商可以从热水器智能操作和节能运行等多方面对产品进行优化。
需要做以下几个事情:
1)根据热水器采集到的的数据,
划分一次完整用水时间
2)在划分好的一次完整用水时间中,识别出洗浴事件
数据
热水器属性说明
属性名称 | 属性说明 |
---|---|
热水器编码 | |
发生时间 | 记录热水器处于某状态的时刻 |
开关机状态 | |
加热中 | |
保温中 | |
有无水流 | |
实际温度 | |
热水量 | |
水流量 | |
节能模式 | |
加热剩余时间 | |
当前设置温度 |
本数据的特点是数据量设计上万个客户且美俄用户每天的用水数据多达数万条,存在缺失值、与分析主题无关的属性或未直接反映用水时间的属性等。采用缺失值处理、数据规约和属性构造来解决这些问题。
4类属性指标的构建表
指标分类 | 指标项 |
---|---|
时长指标 | 用水开始时间、用水结束时间、总用水时长、用水时长、停顿时长、总停顿时长、平均停顿时长、用水时长/总用水时长 |
频率指标 | 停顿次数 |
用水量化指标 | 总用水量 |
用水波动指标 | 水流量波动、停顿时长波动 |
脚本
divide_event.py
#-*- coding: utf-8 -*-
# 用水事件划分
import pandas as pd
threshold = pd.Timedelta('4 min') # 阈值为分钟
inputfile = '../data/water_heater.xls' # 输入数据路径,需要使用Excel格式
outputfile = '../tmp/dividsequence.xls' # 输出数据路径,需要使用Excel格式
data = pd.read_excel(inputfile)
data[u'发生时间'] = pd.to_datetime(data[u'发生时间'], format='%Y%m%d%H%M%S')
data = data[data[u'水流量'] > 0] # 只要流量大于0的记录
d = data[u'发生时间'].diff() > threshold # 相邻时间作差分,比较是否大于阈值
data[u'事件编号'] = d.cumsum(