Python数据分析与挖掘实战 第10章

因学习中发现《Python数据分析与挖掘实战》中的代码,有些不能实现,自己学习的时候走了很多弯路,特此分享可直接实现的代码,希望能让有需要的朋友少走弯路。

10-1部分

import pandas as pd
inputfile='../10.2/water_heater.xls'
outfile='../10.2/dividsequence.xls'

data=pd.read_excel(inputfile)
data[u'发生时间']=pd.to_datetime(data[u'发生时间'],format='%Y%m%d%H%M%S')   #转化时间格式

T=pd.Timedelta(minutes=4)       #阈值

data=data[data[u'水流量']>0]       #保留水流量不为0的记录

d=data[u'发生时间'].diff()>T        #数据类型为布尔
data[u'时间编号']=d.cumsum()+1      #用累计求和编号
data.to_excel(outfile)

10-2部分

#阈值寻优
import pandas as pd
import numpy as np
inputfile='../10.2/water_heater.xls'


data=pd.read_excel(inputfile)
data[u'发生时间']=pd.to_datetime(data[u'发生时间'],format='%Y%m%d%H%M%S')   #转化时间格式

T=pd.Timedelta(minutes=5)       #专家阈值


data=data[data[u'水流量']>0]       #保留水流量不为0的记录

def event_num(ts):
    d=data[u'发生时间'].diff()>ts
    return d.sum()+1

dt=[pd.Timedelta(minutes=i) for i in np.arange(1,9,0.25)]
h=pd.DataFrame(dt,columns=[u'阈值'])

h[u'事件数']=h[u'阈值'].apply(event_num)

h[u'斜率']=h[u'事件数'].diff()/0.25      #相邻两点的差
h[u'斜率指标']=pd.Series.rolling(h[u'斜率'].abs(),window=4,center=False).mean()        #用后4个点的斜率绝对值平均作为斜率

ts=h[u'阈值'][h[u'斜率指标'].idxmin()-4]               #.idxmin()返回最小值的index

if ts>T:
    ts=pd.Timedelta(minutes=4)
print(ts)

10-3部分

#训练神经网络识别洗浴事件
import pandas as pd
inputfile1='../10.2/train_neural_network_data.xls'
inputfile2='../10.2/test_neural_network_data.xls'
testoutputfile='../10.2/test_output_data.xls'

data_train=pd.read_excel(inputfile1)
data_test=pd.read_excel(inputfile2)

x_train=data_train.iloc[:,5:16].as_matrix()     #样本特征
y_train=data_train.iloc[:,4].as_matrix()        #标签列

x_test=data_test.iloc[:,5:16].as_matrix()
y_test=data_test.iloc[:,4].as_matrix()

from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation

model=Sequential()      #建立模型
model.add(Dense(input_dim=11,units=17))
model.add(Activation('relu'))

model.add(Dense(input_dim=17,units=10))
model.add(Activation('relu'))

model.add(Dense(input_dim=10,units=1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',optimizer='adam')

model.fit(x_train,y_train,epochs=100,batch_size=1)
model.save_weights('../10.2/net.model')

r=pd.DataFrame(model.predict_classes(x_test),columns=[u'预测结果'])
pd.concat([data_test.iloc[:,:5],r],axis=1).to_excel(testoutputfile)

猜你喜欢

转载自blog.csdn.net/lonely2018/article/details/80172133