泰迪智能科技(数据挖掘平台:TipDM数据挖掘平台)最新推出的数据挖掘实战专栏

专栏将数据挖掘理论与项目案例实践相结合,可以让大家获得真实的数据挖掘学习与实践环境,更快、更好的学习数据挖掘知识与积累职业经验

专栏中每四篇文章为一个完整的数据挖掘案例。案例介绍顺序为:先由数据案例背景提出挖掘目标,再阐述分析方法与过程,最后完成模型构建,在介绍建模过程中同时穿插操作训练,把相关的知识点嵌入相应的操作过程中。

为方便读者轻松地获取一个真实的实验环境,本专栏使用大家熟知的Python语言对样本数据进行处理以进行挖掘建模。
————————————————

分析方法与过程

热水器用户用水事件划分与识别案例的总体流程如下图所示。

tidm数据挖掘 tipdm数据挖掘平台怎么用_时间间隔

图1 热水器用户用水识别建模总体流程

热水器用户用水事件划分与识别案例主要包括以下5个步骤。

(1) 对热水用户的历史用水数据进行选择性抽取,构建专家样本。

(2) 对步骤(1)形成的数据集进行数据探索分析与预处理,包括探索水流量的分布情况,删除冗余属性,识别用水数据的缺失值,并对缺失值作处理,根据建模的需要进行属性构造等。根据以上处理,对用水样本数据建立用水事件时间间隔识别模型和划分一次完整的用水事件模型,再在一次完整用水事件划分结果的基础上,剔除短暂用水事件缩小识别范围等。

(3) 在步骤(2)得到的建模样本数据基础上,建立洗浴事件识别模型,对洗浴事件识别模型进行模型分析评价。

(4) 对步骤(3)形成的模型结果应用并对洗浴事件划分进行优化。

(5) 调用洗浴事件识别模型,对实时监控的热水器流水数据进行洗浴事件自动识别。

数据探索分析

在热水器的使用过程中,热水器的状态会经常发生改变,比如开机和关机、由加热转到保温、由无水流到有水流、水温由50℃变为49℃等。而智能热水器在状态发生改变或者水流量非零时,每两秒会采集一条状态数据。由于数据的采集频率较高,并且数据来自大量用户,数据总量非常大。本案例对原始数据采用无放回随机抽样法抽取200家热水器用户从2014年1月1日至2014年12月31日的用水记录作为原始建模数据。由于用户不仅使用热水器来洗浴,而且包括了洗手、洗脸、刷牙、洗菜、做饭等用水行为,所以热水器采集到的数据来自各种不同的用水事件。

热水器采集的用水数据包含12个属性:热水器编码,发生时间,开关机状态,加热中,保温中,有无水流,实际温度,热水量,水流量,节能模式,加热剩余时间和当前设置温度。其解释说明如表1所示。

表1  热水器数据属性说明

tidm数据挖掘 tipdm数据挖掘平台怎么用_数据挖掘_02

探索分析热水器的水流量状况,其中有无水流和水流量属性最能直观体现热水器的水流量情况,对这两个属性进行探索分析,如代码清单1所示。

代码清单1  探索分析热水器的水流量状况

import pandas as pd
import matplotlib.pyplot as plt
inputfile = './demo/data/original_data.xls'  # 输入的数据文件
data = pd.read_excel(inputfile)  # 读取数据
# 查看有无水流的分布
# 数据提取
lv_non = pd.value_counts(data['有无水流'])['无']
lv_move = pd.value_counts(data['有无水流'])['有']
# 绘制条形图
fig = plt.figure(figsize=(6 ,5))  # 设置画布大小
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
plt.bar(left=range(2), height=[lv_non,lv_move], width=0.4, alpha=0.8,
      color='skyblue')
plt.xticks([index for index in range(2)], ['无','有'])
plt.xlabel('水流状态')
plt.ylabel('记录数')
plt.title('不同水流状态记录数')
plt.show()
plt.close()
# 查看水流量分布
water = data['水流量']
# 绘制水流量分布箱型图
fig = plt.figure(figsize=(5 ,8))
plt.boxplot(water,
            patch_artist=True,
            labels = ['水流量'],  # 设置x轴标题
            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色
plt.title('水流量分布箱线图')
# 显示y坐标轴的底线
plt.grid(axis='y')
plt.show()

通过代码清单1得到不同水流状态的记录的条形图,如图2所示,无水流状态的记录明显比有水流状态的记录要多。

tidm数据挖掘 tipdm数据挖掘平台怎么用_数据挖掘_03

图2 不同水流状态记录条形图

通过代码清单1得到不同水流状态的记录的条形图,如图3所示,箱体贴近0,说明无水流量的记录较多,水流量的分布与水流状态的分布一致。

tidm数据挖掘 tipdm数据挖掘平台怎么用_tidm数据挖掘_04

图3 水流量分布箱线图

用水停顿时间间隔定义为一条水流量不为0的流水记录同下一条水流量不为0的流水记录之间的时间间隔。根据现场实验统计,两次用水的过程的用水停顿的间隔时长一般在不大于4分钟。为了探究用户真实用水停顿时间间隔的分布情况,统计用水停顿的时间间隔并做频率分布表。通过频率分布表分析用户用水停顿时间间隔的规律性,具体的数据如表2所示。

表2  用水停顿时间间隔频数分布表(单位:分钟)

tidm数据挖掘 tipdm数据挖掘平台怎么用_数据_05

分析表2可知,停顿时间间隔为0~0.3分钟的频率很高,根据日常用水经验可以判断其为一次用水时间中的停顿;停顿时间间隔为6~13分钟的频率较低,分析其为两次用水事件之间的停顿间隔。两次用水事件的停顿时间间隔分布在3~7分钟。根据现场实验统计用水停顿的时间间隔近似。

下一篇将推出:利用BP神经网络算法进行用户行为分析(三)