Python数据挖掘019-家庭用水行为分析

本项目主要实现目标为:1根据热水器采集的数据,划分一次完整用水事件。2在划分好的一次完整用水事件中,识别出洗浴事件。

1. 划分一次完整的用水事件

本案例要分两个步骤来做,第一步是根据数据划分一次完整的用水事件,而一次完整的用水事件是根据水流量和停顿事件间隔的阈值划分的,所以需要建立阈值寻优模型。

1.1 使用固定阈值来划分

在用水状态记录中,水流量不为0表示用户正在用热水,而水流量为0时表示用热水发生停顿或结束,如果水流量为0的状态记录之间的事件间隔超过阈值T,则从该段水流量为0的状态记录向前找到最后一条水流量不为0的用水记录作为上一次用水事件的结束,而先后找到水流量不为0的状态记录作为下一个用水事件的开始。

threshold = pd.Timedelta('4 min') #阈值为分钟
data = data[data['水流量'] > 0] #只要流量大于0的记录
d = data['发生时间'].diff() > threshold #相邻时间作差分,比较是否大于阈值
data['事件编号'] = d.cumsum() + 1 #通过累积求和的方式为事件编号
image.png

上面的代码中,通过累计求和的方式来作为事件编号是一种非常巧妙的方法。可以保证前后间隔小于阈值(即4min)的事件标注为同一个事件编号。

1.2 用水事件阈值寻优模型

上面用固定的4min作为阈值来划分用水事件,但不同地区的用水习惯不同,且同一个地区,季节不同用水习惯也不同,固定的阈值在某些情况并不理想,所以需要建立阈值寻优模型来更新寻找最优的阈值。

data=pd.read_excel(r"E:\PyProjects\DataSet\PyMining\Data\chapter10\demo\data\water_heater.xls")
data['发生时间'] = pd.to_datetime(data['发生时间'], format = '%Y%m%d%H%M%S')
data = data[data['水流量'] > 0] #只要流量大于0的记录
dt = [pd.Timedelta(minutes = i) for i in np.arange(1, 9, 0.25)]
# 获取不同的阈值,从1min-9min, 间隔0.25min
h = pd.DataFrame(dt, columns = ['阈值']) #定义阈值列
n = 4 #使用以后四个点的平均斜率
h[u'事件数'] = h[u'阈值'].apply(event_num) #计算每个阈值对应的事件数
h[u'斜率'] = h[u'事件数'].diff()/0.25 #计算每两个相邻点对应的斜率
h[u'斜率指标'] = h[u'斜率'].abs().rolling(n).mean() #采用n个点的斜率绝对值平均作为斜率指标
h.head()
image.png
ts = h[u'阈值'][h[u'斜率指标'].idxmin() - n]
#注:用idxmin返回最小值的Index,由于rolling_mean()自动计算的是前n个斜率的绝对值平均
#所以结果要进行平移(-n)
plt.plot(h['阈值'],h['斜率指标'],'r+')
image.png

上面的ts指标就是4min,表明最佳阈值为4min,这个寻优过程的基本原理是:在某段阈值范围内,下降趋势明显,说明在该段阈值范围类,用户的停顿习惯比较几种,所以可以用该段时间开始作为阈值。

2. 在完整事件中,识别出洗浴事件

这个本质上就是一个分类模型,将完整事件进行分类,可以是二分类,是/不是洗浴事件,或多分类,对每一个事件进行分类,其中包括有洗浴事件。

建模首先要构建数据集,特别是抽取特征,这是一个非常重要的步骤,本项目建立了4种特征:时长指标,频率指标,用水量,用水波动指标。

image.png

2.1 构建二分类模型

数据中的标记是通过日志的来,故而比较准确。所以此处构建神经网络的二分类模型

train=pd.read_excel(r"E:\PyProjects\DataSet\PyMining\Data\chapter10\demo\data\train_neural_network_data.xls")
trainX=train.iloc[:,5:17]
trainX=(trainX-trainX.mean(axis=0))/trainX.std(axis=0)
trainy=train.iloc[:,4]
testX=test.iloc[:,5:17]
testX=(testX-testX.mean(axis=0))/testX.std(axis=0)
testy=test.iloc[:,4]
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
model=Sequential()
model.add(Dense(20,activation='relu',input_shape=(11,))) # 此处有11个特征
model.add(Dense(10,activation='relu'))
model.add(Dense(1,activation='sigmoid')) # 二分类模型用sigmoid
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['acc'])
model.fit(trainX,trainy,batch_size=20,epochs=100,validation_data=(testX,testy))
image.png
image.png

由此可以看出,大约在70epochs之后出现过拟合,最终的val acc为0.95左右,而train acc达到了1.0.

所以模型的结果比较好。

参考资料:

《Python数据分析和挖掘实战》张良均等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容