[39d39d]: / py_version / features.py

Download this file

130 lines (102 with data), 4.2 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
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import numpy as np
class Featurizer():
'''
The class contains methods to obtain staistical features required.
'''
def __init__(self, data, axis = 1):
self.data = data
self.axis = axis
def mean(self):
ans = np.mean(self.data, self.axis)
return ans
def median(self):
ans = np.median(self.data, self.axis)
return ans
def min_value(self):
ans = np.min(self.data, self.axis)
return ans
def max_value(self):
ans = np.max(self.data, self.axis)
return ans
def peak_to_peak(self):
ans = np.max(self.data, self.axis) - np.min(self.data, self.axis)
return ans
def variance(self):
ans = np.var(self.data, self.axis)
return ans
def rms(self):
ans = np.sqrt(np.mean(self.data ** 2, self.axis))
return ans
def abs_mean(self):
ans = np.mean(np.absolute(self.data), self.axis)
return ans
def shapefactor(self):
ans = self.rms() / self.abs_mean()
return ans
def impulsefactor(self):
ans = np.max(np.absolute(self.data), self.axis) / self.abs_mean()
return ans
def crestfactor(self):
ans = np.max(np.absolute(self.data), self.axis) / np.sqrt(np.mean(self.data ** 2, self.axis))
return ans
def clearancefactor(self):
ans = np.max(np.absolute(self.data), self.axis)
ans /= ((np.mean(np.sqrt(np.absolute(self.data)), self.axis)) ** 2)
return ans
def std(self):
ans = np.std(self.data, self.axis)
return ans
def skew(self):
ans = scipy.stats.skew(self.data, self.axis)
return ans
def kurtosis(self):
ans = scipy.stats.kurtosis(self.data, self.axis)
return ans
def abslogmean(self):
ans = np.mean(np.log(np.abs(self.data)+1e-12), self.axis)
return ans
def meanabsdev(self):
if self.axis == 0:
ans = np.mean(np.abs(self.data - np.mean(self.data, self.axis)), self.axis)
else:
ans = np.mean(
np.abs(self.data - np.mean(self.data, self.axis).reshape(self.data.shape[0], 1)), self.axis)
return ans
def medianabsdev(self):
if self.axis == 0:
ans = np.median(np.abs(self.data - np.median(self.data, self.axis)), self.axis)
else:
ans = np.median(
np.abs(self.data - np.median(self.data, self.axis).reshape(self.data.shape[0], 1)), self.axis)
return ans
def midrange(self):
ans = (np.max(self.data, self.axis) + np.min(self.data, self.axis)) / 2
return ans
def coeff_var(self):
ans = scipy.stats.variation(self.data, self.axis)
return ans
all_funcs = [mean, median, min_value, max_value, peak_to_peak, variance, \
rms, abs_mean, shapefactor, impulsefactor,crestfactor, clearancefactor, \
std, skew, kurtosis, abslogmean, meanabsdev, medianabsdev, midrange, coeff_var]
features = ['mean', 'median', 'min_value', 'max_value', 'peak_to_peak', 'variance', \
'rms', 'abs_mean', 'shapefactor', 'impulsefactor', 'crestfactor', 'clearancefactor', \
'std', 'skew', 'kurtosis', 'abslogmean', 'meanabsdev', 'medianabsdev', 'midrange', 'coeff_var']
if __name__ == "__main__":
data = np.load('data.npy', allow_pickle = True)
num_sensors = 16
featurized_data = []
for sensor in range(num_sensors):
sensor_feature = []
f = Featurizer(data[:, sensor, :], axis = 1)
for func in f.all_funcs:
sensor_feature.append(func(f))
featurized_data.append(np.array(sensor_feature).T)
featurized_data = np.array(featurized_data)
print('Shape of the featurized data: ', featurized_data.shape)
num_datapoints = featurized_data.shape[1]
final_data = []
for i in range(num_datapoints):
final_data.append(featurized_data[:, i, :].ravel())
final_data = np.array(final_data)
print('Final shape of the featurized data: ', final_data.shape)
np.save('featurized_data.npy', final_data)