数据处理不作表述。因为我用的是处理后的数据,数据点这。
文章目录
- 工作内容1
- CC040
- VFD电流
- VFD转速
- 压缩机转速反馈
- 进出口差压
- 紧急截断阀开到位
- 进出电动阀开到位
- 发球筒电筒阀开到位
- 收球筒电动阀开到位
- 电动阀2005开到位
- 越站阀开到位
- 工作内容2
- 工作内容3
工作内容1
任务描述:简单观察时序数据
CC040
VFD电流
VFD转速
这两观察一个就好。
压缩机转速反馈
蚌埠住了。
进出口差压
似乎我看不出什么。
不用看了以上数据无法用作时序分析。我们之后特征工程看看它们是否有用。现在简单处理一下,小0.1换0大0.1换1。只需选择一段就好,这几段的本质一样。那就进出口差压了。同时只有两台能用。
紧急截断阀开到位
开了29560的单位时间。
开了29554的单位时间。
唐山这里前开后关。
宝坻全都没有开启。
这些数据十分显然只能用于特征工程无法用于时序分析。
进出电动阀开到位
进站:开了0的单位时间。
出站:开了12869的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。
发球筒电筒阀开到位
开了0的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。
收球筒电动阀开到位
开了12874的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。
电动阀2005开到位
开了2405的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。
越站阀开到位
唐山:开了30082的单位时间。
宝坻:开了42946的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。
代码忽略
工作内容2
任务描述:判断数据之中是否有天然气大量泄漏。理论概述:基于上面工作内容,显而易见不能判断天然气体是否泄漏。为什么呢??同一时间,各种阀门开关状态组合过少。按理来说,应该有
2
3
+
4
+
2
+
1
+
1
+
1
+
2
=
2
14
2^{3+4+2+1+1+1+2}=2^{14}
23+4+2+1+1+1+2=214种的状态,但是实际不是这样。例如:有的阀门一直关闭,有的阀门一直开启,有的阀门开启之时另一阀门必然关闭,有的阀门关闭之时另一阀门必然开启。这个情况在这数据尤为严重,所以不能。个人观点:压力波形作为输入才是更加合理选择。 但是显然不是上述这些简单分类变量。我们可以使用模态分解技术,奇异谱分析等进行曲线分析。我们可以使用循环神经网络,多层感知机等进行模型建立。关键就是我们需要使用哪些波形曲线。 还有就是标签问题,工作内容1中表明,所有阀门关不代表气体泄漏。根据统计学习原理,如果数据之中没有泄漏数据,那么模型就不可能能学习到泄漏特征。 特征我们都知道是多段波形,但是具体应该是什么呢?一定不是上面那些。标签我们都知道是是否泄漏,但是数据之中没有。在没有的情况之下,更偏向非统计建模。
曲线分析框架
from PyEMD import CEEMDAN
from vmdpy import VMD
import pandas as pd
import numpy as np
class Decomposition:
def EMD(data):
ceemdan=CEEMDAN()
ceemdan.ceemdan([i for i in data])
IMFS,RES=ceemdan.get_imfs_and_residue()
f=pd.ExcelWriter("data/EMD.xlsx")
pd.DataFrame(IMFS.T).to_excel(f,sheet_name="IMFS",index=None,columns=None,header=None)
pd.DataFrame(RES.T).to_excel(f,sheet_name="RES",index=None,columns=None,header=None)
f.save()
return IMFS.shape[0]+1
def VMD(data,x):
alpha,tau,K,DC,init,tol=5000,0,x,0,1,1e-6
U,u_hat,omega=VMD(data,alpha,tau,K,DC,init,tol)
f=pd.ExcelWriter("data/VMD.xlsx")
pd.DataFrame(U.T).to_excel(f,index=None,columns=None,header=None)
f.save()
def SSA(data,x):
windowlen=x;datalen=data.shape[0]
K=datalen-windowlen+1;X=np.zeros((windowlen,K))
for i in range(K):
X[:,i]=data[i:i+windowlen]
U,sigma,VT=np.linalg.svd(X,full_matrices=False)
for i in range(VT.shape[0]):
VT[i,:]*=sigma[i]
A=VT
REC=np.zeros((windowlen,datalen))
for i in range(windowlen):
for j in range(windowlen-1):
for m in range(j+1):
REC[i,j]+=A[i,j-m]*U[m,i]
REC[i,j]/=(j+1)
for j in range(windowlen-1,datalen-windowlen+1):
for m in range(windowlen):
REC[i,j]+=A[i,j-m]*U[m,i]
REC[i,j]/=windowlen
for j in range(datalen-windowlen+1,datalen):
for m in range(j-datalen+windowlen,windowlen):
REC[i,j]+=A[i,j-m]*U[m,i]
REC[i,j]/=(datalen-j)
f=pd.ExcelWriter("data/SSA.xlsx")
pd.DataFrame(REC.T).to_excel(f,index=None,columns=None,header=None)
f.save()
神经网络框架(tensorflow版)
from sklearn.neural_network import MLPRegressor
import matplotlib.pyplot as plt
from Function import Function
import tensorflow as tf
import numpy as np
class Neural_network():
def BPNN(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
inputs=tf.keras.Input(shape=(step_size,))
x=tf.keras.layers.Dense(step_size//4*3,activation='relu',name='dense_1')(inputs)
x=tf.keras.layers.Dense(step_size//4*2,activation='relu',name='dense_2')(x)
x=tf.keras.layers.Dense(step_size//4*1,activation='relu',name='dense_3')(x)
x=tf.keras.layers.Dense(1,activation='relu',name='dense_4')(x)
model=tf.keras.Model(inputs=inputs,outputs=x)
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
loss=history.history['loss']
if Boolean1==True:
plt.plot(loss,label='BPNN '+'Training Loss')
return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)
def RNN(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))
model=tf.keras.models.Sequential()
model.add(tf.keras.layers.SimpleRNN(step_size,input_shape=(step_size,1)))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
loss=history.history['loss']
if Boolean1==True:
plt.plot(loss,label="RNN "+'Training Loss')
X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)
def LSTM(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))
model=tf.keras.models.Sequential()
model.add(tf.keras.layers.LSTM(step_size,input_shape=(step_size,1)))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
loss=history.history['loss']
if Boolean1==True:
plt.plot(loss,label="LSTM "+'Training Loss')
X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)
def GRU(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))
model=tf.keras.models.Sequential()
model.add(tf.keras.layers.GRU(step_size,input_shape=(step_size,1)))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
loss=history.history['loss']
if Boolean1==True:
plt.plot(loss,label="GRU "+'Training Loss')
X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)
def MLP(X_train,Y_train,X_test,Y_test,scaled_tool,Boolean):
model=MLPRegressor(max_iter=50,hidden_layer_sizes=(200),random_state=0)
model.fit(X_train,Y_train)
return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean)
工作内容3
之前的word。据word中的那些工作,温度压强同阀门的开关有强作用。也许温度也在考虑范围。温度直接影响压强从而影响模型效果。