|
@@ -22,6 +22,7 @@ from collections import Counter
|
22
|
22
|
|
23
|
23
|
parser = OptionParser()
|
24
|
24
|
parser.add_option("-t", "--train", dest="train", help="Trains the models (false)", default=False, action="store_true")
|
|
25
|
+parser.add_option("-p", "--plot", dest="plot", help="Plot Data (false)", default=False, action="store_true")
|
25
|
26
|
parser.add_option("-n", "--timesteps", dest="timesteps", help="TIME STEPS ", default=12)
|
26
|
27
|
|
27
|
28
|
(options, args) = parser.parse_args()
|
|
@@ -45,25 +46,31 @@ for j in listofFacilitySetpoint:
|
45
|
46
|
datafiles[j].append([])
|
46
|
47
|
|
47
|
48
|
# Freezer, SP=-26
|
48
|
|
-datafiles['5-26'][0]=['2025-01-25_5_','2025-01-26_5_','2025-01-29_5_','2025-01-30_5_','2025-01-31_5_','2025-02-01_5_','2025-02-02_5_']
|
|
49
|
+datafiles['5-26'][0]=['2025-01-25_5_','2025-01-26_5_','2025-01-29_5_','2025-01-30_5_','2025-01-31_5_','2025-02-01_5_','2025-02-02_5_','2025-02-03_5_','2025-02-04_5_']
|
49
|
50
|
datafiles['5-26'][1]=['2024-12-11_5_', '2024-12-12_5_','2024-12-13_5_','2024-12-14_5_','2024-12-15_5_']
|
50
|
|
-datafiles['5-26'][2]=['2024-12-18_5_','2024-12-19_5_']
|
|
51
|
+datafiles['5-26'][2]=['2024-12-21_5_','2024-12-22_5_','2024-12-23_5_','2024-12-24_5_','2024-12-25_5_','2024-12-26_5_']
|
51
|
52
|
datafiles['5-26'][3]=['2024-12-28_5_','2024-12-29_5_','2024-12-30_5_','2024-12-31_5_','2025-01-01_5_']
|
52
|
53
|
datafiles['5-26'][4]=['2025-02-13_5_','2025-02-14_5_','2025-02-15_5_','2025-02-16_5_','2025-02-17_5_','2025-02-18_5_','2025-02-19_5_']
|
53
|
54
|
|
54
|
55
|
# Freezer, SP=-18
|
55
|
|
-datafiles['5-18'][0]=['2025-01-21_5_','2025-01-22_5_','2025-01-23_5_',] # no hi son aquestx arxius
|
|
56
|
+datafiles['5-18'][0]=['2025-01-21_5_','2025-01-22_5_','2025-01-23_5_'] #
|
|
57
|
+datafiles['5-18'][1]=['2025-02-17_5_','2025-02-18_5_','2025-02-19_5_'] #
|
|
58
|
+datafiles['5-18'][2]=['2025-03-10_5_','2025-03-11_5_','2025-03-12_5_'] #
|
|
59
|
+datafiles['5-18'][3]=['2025-01-04_5_','2025-01-05_5_','2025-01-06_5_','2025-01-07_5_'] #
|
|
60
|
+datafiles['5-18'][4]=['2025-04-30_5_','2025-05-01_5_','2025-05-02_5_','2025-05-03_5_','2025-05-04_5_','2025-05-05_5_'] # Faltens aquestes dades
|
56
|
61
|
|
57
|
62
|
# Freezer, SP=-22
|
58
|
63
|
datafiles['5-22'][0]=['2025-03-13_5_','2025-03-14_5_','2025-03-15_5_','2025-03-16_5_']
|
59
|
|
-datafiles['5-22'][1]=['2025-03-23_5_','2025-03-24_5_','2025-03-25_5_'] # es solapa amb el seguent test
|
60
|
|
-datafiles['5-22'][2]=[]
|
|
64
|
+datafiles['5-22'][1]=['2025-03-21_5_','2025-03-22_5_','2025-03-23_5_','2025-03-24_5_','2025-03-25_5_'] #
|
|
65
|
+datafiles['5-22'][2]=['2025-03-26_5_','2025-03-27_5_','2025-03-28_5_']
|
|
66
|
+datafiles['5-22'][3]=['2025-03-31_5_','2025-04-01_5_','2025-04-02_5_','2025-04-03_5_']
|
|
67
|
+datafiles['5-22'][4]=['2025-03-17_5_']
|
61
|
68
|
|
62
|
69
|
# Refrigerator 0
|
63
|
70
|
datafiles['30'][0]=['2025-01-21_3_','2025-01-22_3_','2025-01-23_3_','2025-01-24_3_','2025-01-25_3_','2025-01-26_3_']
|
64
|
71
|
datafiles['30'][1]=['2024-12-11_3_','2024-12-12_3_','2024-12-13_3_','2024-12-14_3_','2024-12-15_3_']
|
65
|
72
|
datafiles['30'][2]=['2024-12-18_3_','2024-12-19_3_','2024-12-20_3_']
|
66
|
|
-datafiles['30'][3]=['2024-12-28_3_','2024-12-29_3_','2024-12-30_3_','2024-12-31_3_']
|
|
73
|
+datafiles['30'][3]=['2024-12-28_3_','2024-12-29_3_','2024-12-30_3_','2024-12-31_3_','2025-01-01_3_']
|
67
|
74
|
datafiles['30'][4]=['2025-02-12_3_','2025-02-13_3_','2025-02-14_3_','2025-02-15_3_','2025-02-16_3_','2025-02-17_3_','2025-02-18_3_','2025-02-19_3_'] # es solapa amb ventilador no funcionant. i els dies 20 i 21 no hi son
|
68
|
75
|
|
69
|
76
|
|
|
@@ -71,7 +78,7 @@ datafiles['30'][4]=['2025-02-12_3_','2025-02-13_3_','2025-02-14_3_','2025-02-15_
|
71
|
78
|
datafiles['32'][0]=['2025-03-13_3_','2025-03-14_3_','2025-03-15_3_','2025-03-16_3_']
|
72
|
79
|
datafiles['32'][1]=['2025-03-10_3_']
|
73
|
80
|
datafiles['32'][2]=['2025-03-17_3_']
|
74
|
|
-datafiles['32'][3]=['2025-03-22_3_','2025-03-23_3_']
|
|
81
|
+datafiles['32'][3]=['2025-03-24_3_','2025-03-25_3_','2025-03-26_3_']
|
75
|
82
|
datafiles['32'][4]=['2025-03-27_3_','2025-03-28_3_']
|
76
|
83
|
|
77
|
84
|
|
|
@@ -158,7 +165,7 @@ for i in range(NumberOfFailures+1):
|
158
|
165
|
# Test data is: last 1/3 of data
|
159
|
166
|
dataTrain=[]
|
160
|
167
|
dataTest=[]
|
161
|
|
-NumberOfSamplesForTest=300
|
|
168
|
+NumberOfSamplesForTest=0
|
162
|
169
|
|
163
|
170
|
for i in range(NumberOfFailures+1):
|
164
|
171
|
dataTrain.append(dataframe[i].values[0:int(dataframe[i].shape[0]*2/3),:])
|
|
@@ -188,18 +195,19 @@ for i in range(NumberOfFailures+1):
|
188
|
195
|
|
189
|
196
|
def plotData():
|
190
|
197
|
fig, axes = plt.subplots(
|
191
|
|
- nrows=NumberOfFailures+1, ncols=2, figsize=(15, 20), dpi=80, facecolor="w", edgecolor="k",sharex=True
|
|
198
|
+ nrows=NumberOfFailures+1, ncols=NumFeatures, figsize=(15, 20), dpi=80, facecolor="w", edgecolor="k",sharex=True
|
192
|
199
|
)
|
193
|
200
|
for i in range(NumberOfFailures+1):
|
194
|
|
- axes[i][0].plot(np.concatenate((dataTrainNorm[i][:,0],dataTestNorm[i][:,0])),label="Fail "+str(i)+", feature 0")
|
195
|
|
- axes[i][1].plot(np.concatenate((dataTrainNorm[i][:,1],dataTestNorm[i][:,1])),label="Fail "+str(i)+", feature 1")
|
|
201
|
+ for j in range(NumFeatures):
|
|
202
|
+ axes[i][j].plot(np.concatenate((dataTrainNorm[i][:,j],dataTestNorm[i][:,j])),label="Fail "+str(i)+", feature 0")
|
196
|
203
|
#axes[1].legend()
|
197
|
204
|
#axes[0].set_ylabel(features[0])
|
198
|
205
|
#axes[1].set_ylabel(features[1])
|
199
|
206
|
plt.show()
|
200
|
207
|
|
201
|
|
-#plotData()
|
202
|
|
-#exit()
|
|
208
|
+if options.plot:
|
|
209
|
+ plotData()
|
|
210
|
+ exit()
|
203
|
211
|
|
204
|
212
|
def create_sequences(values, time_steps):
|
205
|
213
|
output = []
|
|
@@ -251,7 +259,7 @@ def plot(data,ranges):
|
251
|
259
|
b=Counter(km.labels_[ranges[i][0]:ranges[i][1]])
|
252
|
260
|
labels.append(b.most_common(1)[0][0])
|
253
|
261
|
|
254
|
|
- print("\n\n\n\LABELS: ",labels,"\n\n")
|
|
262
|
+ print("\n\n\n LABELS: ",labels,"\n\n")
|
255
|
263
|
|
256
|
264
|
NumFeaturesToPlot=len(indexesToPlot)
|
257
|
265
|
plt.rcParams.update({'font.size': 16})
|
|
@@ -336,8 +344,9 @@ for i in range(1,NumberOfFailures+1):
|
336
|
344
|
Ranges.append([r,r+dataTestNorm[i].shape[0]])
|
337
|
345
|
r+=dataTestNorm[i].shape[0]
|
338
|
346
|
|
339
|
|
-X=np.vstack((X,dataTestNorm[0])) # We add a last segment of no fail data
|
340
|
|
-Ranges.append([r,r+dataTestNorm[0].shape[0]])
|
|
347
|
+#X=np.vstack((X,dataTestNorm[0])) # We add a last segment of no fail data
|
|
348
|
+#Ranges.append([r,r+dataTestNorm[0].shape[0]])
|
|
349
|
+
|
341
|
350
|
Ranges[len(Ranges)-1][1]=Ranges[len(Ranges)-1][1]-timesteps-1
|
342
|
351
|
|
343
|
352
|
xtest=create_sequences(X,timesteps)
|
|
@@ -408,7 +417,7 @@ def anomalyMetric(labels,ranges):
|
408
|
417
|
|
409
|
418
|
|
410
|
419
|
km.fit_predict(xtest)
|
411
|
|
-#anomalyMetric(km.labels_,Ranges)
|
|
420
|
+anomalyMetric(km.labels_,Ranges)
|
412
|
421
|
plot(xtest,Ranges)
|
413
|
422
|
|
414
|
423
|
|