-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclassify.py
More file actions
52 lines (43 loc) · 1.56 KB
/
classify.py
File metadata and controls
52 lines (43 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import random
import numpy as np
import pandas as pd
from scipy.signal import hilbert
import joblib
def inrush_classifier(df):
"""
Classify whether inrush is present in `signals`
"""
covars = covariables(df)
model = joblib.load('classifier.pkl')
return model.predict(covars)[0]
def covariables (df):
signals = df.Channel.unique()
s1 = df[df.Channel == signals[0]].Value
s2 = df[df.Channel == signals[1]].Value
s3 = df[df.Channel == signals[2]].Value
medians,ma_stds = [],[]
analytic_signal1 = hilbert(s1)
analytic_signal2 = hilbert(s2)
analytic_signal3 = hilbert(s3)
amplitude1 = np.abs(analytic_signal1)
amplitude2 = np.abs(analytic_signal2)
amplitude3 = np.abs(analytic_signal3)
amp_nor1 = amplitude1/np.max(amplitude1)
amp_nor2 = amplitude2/np.max(amplitude2)
amp_nor3 = amplitude3/np.max(amplitude3)
medians.append(np.median(amp_nor1))
medians.append(np.median(amp_nor2))
medians.append(np.median(amp_nor3))
# Moving Average
mov_avg1 = np.convolve(s1, np.ones(50)/50, mode='valid')
mov_avg1 = mov_avg1/np.max(mov_avg1)
mov_avg2 = np.convolve(s2, np.ones(50)/50, mode='valid')
mov_avg2 = mov_avg1/np.max(mov_avg2)
mov_avg3 = np.convolve(s3, np.ones(50)/50, mode='valid')
mov_avg3 = mov_avg1/np.max(mov_avg3)
ma_stds.append(np.std(mov_avg1))
ma_stds.append(np.std(mov_avg2))
ma_stds.append(np.std(mov_avg2))
max_median = max(medians)
ma_min_std = min(ma_stds)
return pd.DataFrame({'max_median': [max_median], 'ma_min_std': [ma_min_std]})