From f62a1302dd483fdaf12e0a9dcb22e145f7cb493e Mon Sep 17 00:00:00 2001 From: Primoz Date: Mon, 9 May 2022 11:01:52 +0000 Subject: [PATCH] Cr-features corrections for ACC and TEMP sensors --- config.yaml | 12 ++++++------ environment.yml | 2 +- src/features/cr_features_helper_methods.py | 2 +- src/features/empatica_accelerometer/cr/main.py | 18 +++++------------- .../empatica_blood_volume_pulse/cr/main.py | 4 ---- .../empatica_electrodermal_activity/cr/main.py | 10 +--------- src/features/empatica_temperature/cr/main.py | 6 +++--- 7 files changed, 17 insertions(+), 37 deletions(-) diff --git a/config.yaml b/config.yaml index 503e5872..ea6aa2be 100644 --- a/config.yaml +++ b/config.yaml @@ -477,11 +477,11 @@ EMPATICA_ACCELEROMETER: CONTAINER: ACC PROVIDERS: DBDP: - COMPUTE: False + COMPUTE: True FEATURES: ["maxmagnitude", "minmagnitude", "avgmagnitude", "medianmagnitude", "stdmagnitude"] SRC_SCRIPT: src/features/empatica_accelerometer/dbdp/main.py CR: - COMPUTE: False + COMPUTE: True FEATURES: ["fqHighestPeakFreqs", "fqHighestPeaks", "fqEnergyFeat", "fqEntropyFeat", "fqHistogramBins","fqAbsMean", "fqSkewness", "fqKurtosis", "fqInterquart", # Freq features "meanLow", "areaLow", "totalAbsoluteAreaBand", "totalMagnitudeBand", "entropyBand", "skewnessBand", "kurtosisBand", "postureDistanceLow", "absoluteMeanBand", "absoluteAreaBand", "quartilesBand", "interQuartileRangeBand", "varianceBand", @@ -523,7 +523,7 @@ EMPATICA_TEMPERATURE: "sumOfSquareComponents"] WINDOWS: COMPUTE: True - WINDOW_LENGTH: 90 # specify window length in seconds + WINDOW_LENGTH: 600 # specify window length in seconds SECOND_ORDER_FEATURES: ['mean', 'median', 'sd', 'max', 'min'] SRC_SCRIPT: src/features/empatica_temperature/cr/main.py @@ -544,7 +544,7 @@ EMPATICA_ELECTRODERMAL_ACTIVITY: 'signalOverallChange', 'changeDuration', 'changeRate', 'significantIncrease', 'significantDecrease'] WINDOWS: COMPUTE: True - WINDOW_LENGTH: 80 # specify window length in seconds + WINDOW_LENGTH: 300 # specify window length in seconds SECOND_ORDER_FEATURES: ['mean', 'median', 'sd', 'max', 'min'] SRC_SCRIPT: src/features/empatica_electrodermal_activity/cr/main.py @@ -562,7 +562,7 @@ EMPATICA_BLOOD_VOLUME_PULSE: 'VLF', 'LF', 'LFnorm', 'HF', 'HFnorm', 'LF/HF', 'fullIntegral'] # Freq features WINDOWS: COMPUTE: True - WINDOW_LENGTH: 10 # specify window length in seconds + WINDOW_LENGTH: 300 # specify window length in seconds SECOND_ORDER_FEATURES: ['mean', 'median', 'sd', 'max', 'min'] SRC_SCRIPT: src/features/empatica_blood_volume_pulse/cr/main.py @@ -580,7 +580,7 @@ EMPATICA_INTER_BEAT_INTERVAL: 'VLF', 'LF', 'LFnorm', 'HF', 'HFnorm', 'LF/HF', 'fullIntegral'] # Freq features WINDOWS: COMPUTE: True - WINDOW_LENGTH: 2000 # specify window length in seconds + WINDOW_LENGTH: 300 # specify window length in seconds SECOND_ORDER_FEATURES: ['mean', 'median', 'sd', 'max', 'min'] SRC_SCRIPT: src/features/empatica_inter_beat_interval/cr/main.py diff --git a/environment.yml b/environment.yml index 169138a1..4244da98 100644 --- a/environment.yml +++ b/environment.yml @@ -111,7 +111,7 @@ dependencies: - biosppy==0.8.0 - cached-property==1.5.2 - configargparse==0.15.1 - - cr-features==0.1.8 + - cr-features==0.1.9 - cycler==0.11.0 - decorator==4.4.2 - fonttools==4.33.2 diff --git a/src/features/cr_features_helper_methods.py b/src/features/cr_features_helper_methods.py index c9ebceba..b963b46e 100644 --- a/src/features/cr_features_helper_methods.py +++ b/src/features/cr_features_helper_methods.py @@ -6,7 +6,7 @@ def extract_second_order_features(intraday_features, so_features_names): if "mean" in so_features_names: so_features = pd.concat([so_features, intraday_features.drop("level_1", axis=1).groupby(["local_segment"]).mean().add_suffix("_SO_mean")], axis=1) if "median" in so_features_names: - so_features = pd.concat([so_features, intraday_features.drop("level_1", axis=1).groupby(["local_segment"]).mean().add_suffix("_SO_median")], axis=1) + so_features = pd.concat([so_features, intraday_features.drop("level_1", axis=1).groupby(["local_segment"]).median().add_suffix("_SO_median")], axis=1) if "sd" in so_features_names: so_features = pd.concat([so_features, intraday_features.drop("level_1", axis=1).groupby(["local_segment"]).std().add_suffix("_SO_sd")], axis=1) if "max" in so_features_names: diff --git a/src/features/empatica_accelerometer/cr/main.py b/src/features/empatica_accelerometer/cr/main.py index 71c13827..ce2fc2f9 100644 --- a/src/features/empatica_accelerometer/cr/main.py +++ b/src/features/empatica_accelerometer/cr/main.py @@ -2,19 +2,11 @@ import pandas as pd from scipy.stats import entropy from cr_features.helper_functions import convert_to2d, accelerometer_features, frequency_features -from cr_features.calculate_features import calculate_features +from cr_features.calculate_features_old import calculateFeatures from cr_features_helper_methods import get_sample_rate, extract_second_order_features import sys -def get_sample_rate(data): - try: - timestamps_diff = data['timestamp'].diff().dropna().mean() - except: - raise Exception("Error occured while trying to get the mean sample rate from the data.") - - return int(1000/timestamps_diff) - def extract_acc_features_from_intraday_data(acc_intraday_data, features, window_length, time_segment, filter_data_by_segment): acc_intraday_features = pd.DataFrame(columns=["local_segment"] + features) @@ -30,18 +22,18 @@ def extract_acc_features_from_intraday_data(acc_intraday_data, features, window_ # apply methods from calculate features module if window_length is None: acc_intraday_features = \ - acc_intraday_data.groupby('local_segment').apply(lambda x: calculate_features( \ + acc_intraday_data.groupby('local_segment').apply(lambda x: calculateFeatures( \ convert_to2d(x['double_values_0'], x.shape[0]), \ convert_to2d(x['double_values_1'], x.shape[0]), \ convert_to2d(x['double_values_2'], x.shape[0]), \ - fs=sample_rate, feature_names=features)) + fs=sample_rate, featureNames=features)) else: acc_intraday_features = \ - acc_intraday_data.groupby('local_segment').apply(lambda x: calculate_features( \ + acc_intraday_data.groupby('local_segment').apply(lambda x: calculateFeatures( \ convert_to2d(x['double_values_0'], window_length*sample_rate), \ convert_to2d(x['double_values_1'], window_length*sample_rate), \ convert_to2d(x['double_values_2'], window_length*sample_rate), \ - fs=sample_rate, feature_names=features)) + fs=sample_rate, featureNames=features)) acc_intraday_features.reset_index(inplace=True) diff --git a/src/features/empatica_blood_volume_pulse/cr/main.py b/src/features/empatica_blood_volume_pulse/cr/main.py index 0a78b41d..44357e7f 100644 --- a/src/features/empatica_blood_volume_pulse/cr/main.py +++ b/src/features/empatica_blood_volume_pulse/cr/main.py @@ -21,8 +21,6 @@ def extract_bvp_features_from_intraday_data(bvp_intraday_data, features, window_ if not bvp_intraday_data.empty: sample_rate = get_sample_rate(bvp_intraday_data) - - print(bvp_intraday_data.shape) bvp_intraday_data = filter_data_by_segment(bvp_intraday_data, time_segment) @@ -30,8 +28,6 @@ def extract_bvp_features_from_intraday_data(bvp_intraday_data, features, window_ bvp_intraday_features = pd.DataFrame() - print(features) - # apply methods from calculate features module if window_length is None: bvp_intraday_features = \ diff --git a/src/features/empatica_electrodermal_activity/cr/main.py b/src/features/empatica_electrodermal_activity/cr/main.py index 3e09b84d..6630027a 100644 --- a/src/features/empatica_electrodermal_activity/cr/main.py +++ b/src/features/empatica_electrodermal_activity/cr/main.py @@ -6,19 +6,11 @@ from cr_features.calculate_features import calculate_features from cr_features_helper_methods import get_sample_rate, extract_second_order_features -def getSampleRate(data): - try: - timestamps_diff = data['timestamp'].diff().dropna().mean() - except: - raise Exception("Error occured while trying to get the mean sample rate from the data.") - - return int(1000/timestamps_diff) - def extract_eda_features_from_intraday_data(eda_intraday_data, features, window_length, time_segment, filter_data_by_segment): eda_intraday_features = pd.DataFrame(columns=["local_segment"] + features) if not eda_intraday_data.empty: - sample_rate = getSampleRate(eda_intraday_data) + sample_rate = get_sample_rate(eda_intraday_data) eda_intraday_data = filter_data_by_segment(eda_intraday_data, time_segment) diff --git a/src/features/empatica_temperature/cr/main.py b/src/features/empatica_temperature/cr/main.py index 7f556b32..a71b0a69 100644 --- a/src/features/empatica_temperature/cr/main.py +++ b/src/features/empatica_temperature/cr/main.py @@ -2,7 +2,7 @@ import pandas as pd from scipy.stats import entropy from cr_features.helper_functions import convert_to2d, generic_features -from cr_features.calculate_features import calculate_features +from cr_features.calculate_features_old import calculateFeatures from cr_features_helper_methods import get_sample_rate, extract_second_order_features import sys @@ -31,11 +31,11 @@ def extract_temp_features_from_intraday_data(temperature_intraday_data, features if window_length is None: temperature_intraday_features = \ temperature_intraday_data.groupby('local_segment').apply(\ - lambda x: calculate_features(convert_to2d(x['temperature'], x.shape[0]), fs=sample_rate, feature_names=features)) + lambda x: calculateFeatures(convert_to2d(x['temperature'], x.shape[0]), fs=sample_rate, featureNames=features)) else: temperature_intraday_features = \ temperature_intraday_data.groupby('local_segment').apply(\ - lambda x: calculate_features(convert_to2d(x['temperature'], window_length*sample_rate), fs=sample_rate, feature_names=features)) + lambda x: calculateFeatures(convert_to2d(x['temperature'], window_length*sample_rate), fs=sample_rate, featureNames=features)) temperature_intraday_features.reset_index(inplace=True)