因学习中发现《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)