def feature_extract(dt): import tsfresh.feature_extraction.feature_calculators as fc ft = { 'abs_energy': fc.abs_energy(dt), 'sum_values': fc.sum_values(dt), 'mean': fc.mean(dt), 'maximum': fc.maximum(dt), 'minimum': fc.minimum(dt), 'median': fc.median(dt), 'quantile_0.1': fc.quantile(dt, 0.1), 'quantile_0.2': fc.quantile(dt, 0.2), 'quantile_0.3': fc.quantile(dt, 0.3), 'quantile_0.4': fc.quantile(dt, 0.4), 'quantile_0.5': fc.quantile(dt, 0.5), 'quantile_0.6': fc.quantile(dt, 0.6), 'quantile_0.7': fc.quantile(dt, 0.7), 'quantile_0.8': fc.quantile(dt, 0.8), 'quantile_0.9': fc.quantile(dt, 0.9), # # TODO: # Below functions dont works well -> need to be checked!! # #'fft_coefficient__coeff_0__attr_real': fc.fft_coefficient(dt {"coeff": 0, "attr": "real"}), #'fft_coefficient__coeff_0__attr_imag': fc.fft_coefficient(dt {"coeff": 0, "attr": "imag"}), #'fft_coefficient__coeff_0__attr_abs': fc.fft_coefficient(dt {"coeff": 0, "attr": "abs"}), #'fft_coefficient__coeff_0__attr_angle': fc.fft_coefficient(dt {"coeff": 0, "attr": "angle"}), # #=> Mr. Huy just fix this issue with above function fft_ft !! } ft.update(fft_ft(dt)) return ft
def get_sta_features(self, data): """ Calculate the value of 9 kinds of selected statistical features :param data: :return: """ def _cal_trend(data): time_list = np.arange(len(data)) # create linear regression object regr = linear_model.LinearRegression() regr.fit(time_list.reshape(-1, 1), np.array(data).reshape(-1, 1)) return regr.coef_[0][0] E = ts.abs_energy(data) S = ts.binned_entropy(data, max_bins=5) ro = ts.autocorrelation(data, lag=4) skewness = ts.skewness(data) kurtosis = ts.kurtosis(data) trend = _cal_trend(data) mean = ts.mean(data) min = ts.minimum(data) max = ts.maximum(data) return [E, S, ro, skewness, kurtosis, trend, mean, min, max]
def TS_feature3(signal): max_ts = ts.maximum(signal) mean_rs = ts.mean(signal) mean_abs_change = ts.mean_abs_change(signal) mean_change = ts.mean_change(signal) median_ts = ts.median(signal) minimum_ts = ts.minimum(signal) return max_ts, mean_rs, mean_abs_change, mean_change, median_ts, minimum_ts
def time_series_minimum(x): """ :param x: the time series to calculate the feature of :type x: pandas.Series :return: the value of this feature :return type: float """ return ts_feature_calculators.minimum(x)
def min_max_points(df): diff_lwx = np.diff(split_leftwrist_x(df)) diff_rwx = np.diff(split_rightwrist_x(df)) diff_lwy = np.diff(split_leftwrist_y(df)) diff_rwy = np.diff(split_rightwrist_y(df)) x = [diff_lwx, diff_lwy, diff_rwx, diff_rwy] min_max = [] for i in x: l = len(i) j = 0 while j < l: min1 = fc.minimum(i[j:j + math.ceil(l / 3)]) max1 = fc.minimum(i[j:j + math.ceil(l / 3)]) dev = dc(max1) - dc(min1) min_max.append(dev) j = j + math.ceil(l / 3) return pd.DataFrame(min_max).transpose()
def scalar_feature_extraction(column): retval = np.zeros([1, 10], dtype=float) retval[0][0] = tffe.count_above_mean(column.values) retval[0][1] = tffe.mean(column.values) retval[0][2] = tffe.maximum(column.values) retval[0][3] = tffe.median(column.values) retval[0][4] = tffe.minimum(column.values) retval[0][5] = tffe.sample_entropy(column.values) if (isNaN(retval[0][5])): retval[0][5] = 0 retval[0][6] = tffe.skewness(column.values) retval[0][7] = tffe.variance(column.values) retval[0][8] = tffe.longest_strike_above_mean(column.values) retval[0][9] = tffe.longest_strike_below_mean(column.values) return retval
def extract_features(data): day = 24 * 60 return list( numpy.nan_to_num( numpy.array([ feature.symmetry_looking(data, [{ 'r': 0.3 }])[0][1], feature.variance_larger_than_standard_deviation(data).bool(), feature.ratio_beyond_r_sigma(data, 2), feature.has_duplicate_max(data), feature.has_duplicate_min(data), feature.has_duplicate(data), feature.agg_autocorrelation(numpy.array(data.value), [{ 'f_agg': 'mean', 'maxlag': day }])[0][1], feature.partial_autocorrelation(data, [{ 'lag': day }])[0][1], feature.abs_energy(numpy.array(data.value)), feature.mean_change(data), feature.mean_second_derivative_central(data), feature.median(data), float(feature.mean(data)), float(feature.standard_deviation(data)), float(feature.longest_strike_below_mean(data)), float(feature.longest_strike_above_mean(data)), int(feature.number_peaks(data, 10)), feature.linear_trend(numpy.array(data.value), [{ 'attr': 'rvalue' }])[0][1], feature.c3(data, day), float(feature.maximum(data)), float(feature.minimum(data)) ])))