在上节,我们分析了单个传感器的趋势,也组合了多个传感器观察了整合的趋势。接下来,我们就要开始动真格的了。
首先,我们得找到训练集中每种传感器的最大的生命周期,为此我们将使用group by命令,然后我们将使用merge命令将最大值合并到原始的训练集。
In [13]:
from rul_code import *
train = pd.merge(train, train.groupby('unit', as_index=False)['cycles'].max(), how='left', on='unit')
train.rename(columns={"cycles_x": "cycles", "cycles_y": "maxcycles"}, inplace=True)
接下来,要得出剩余多少个周期。这个周期的计算公式是用最大生命周期减去周期数。$$ TTF_i = max(cycles)-cycles_i $$
In [14]:
train['TTF'] = train['maxcycles'] - train['cycles']
train['TTF']
Out[14]:
另一个准备步骤是缩放,将使用python的MinMaxScaler。在进行缩放之前,我们观察一下原始数据,不同的传感器的数值存在着很大的差异。
In [15]:
scaler = MinMaxScaler()
train.describe().transpose()
Out[15]:
In [16]:
train.head()
Out[16]:
接下来,我们将数据复制一份并命名为ntrain,于是就有了两份数据,一份未缩放一份缩放的。并且需要选择哪些数据是需要进行平滑处理的。处理完后,再观察一下这些数据,特别是最大值和最小值。
In [17]:
ntrain = train.copy()
ntrain.iloc[:,2:19] = scaler.fit_transform(ntrain.iloc[:,2:19])
ntrain.describe().transpose()
Out[17]:
接下来就利用训练集的数据的设置来处理测试集的数据。
In [18]:
ntest = test.copy()
pd.DataFrame(ntest.columns).transpose()
Out[18]:
In [19]:
ntest.iloc[:,2:19] = scaler.transform(ntest.iloc[:,2:19])
ntest.describe().transpose()
Out[19]:
最后,将这些数据以图形的方式呈现出来,有一个直观的感受
In [20]:
fig = plt.figure(figsize = (8, 8))
fig.add_subplot(1,2,1)
plt.plot(train[train.unit==1].s2)
plt.plot(test[test.unit==1].s2)
plt.legend(['Train','Test'], bbox_to_anchor=(0., 1.02, 1., .102), loc=3, mode="expand", borderaxespad=0)
plt.ylabel('Original unit')
fig.add_subplot(1,2,2)
plt.plot(ntrain[ntrain.unit==1].s2)
plt.plot(ntest[ntest.unit==1].s2)
plt.legend(['Scaled Train','Scaled Test'], bbox_to_anchor=(0., 1.02, 1., .102), loc=3, mode="expand", borderaxespad=0)
plt.ylabel('Scaled unit')
plt.show()