Testing and modifying the code with different E4 data.
parent
f62a1302dd
commit
9cf9e1fe14
|
@ -3,7 +3,7 @@
|
||||||
########################################################################################################################
|
########################################################################################################################
|
||||||
|
|
||||||
# See https://www.rapids.science/latest/setup/configuration/#participant-files
|
# See https://www.rapids.science/latest/setup/configuration/#participant-files
|
||||||
PIDS: [p01]
|
PIDS: [p02, p01]
|
||||||
|
|
||||||
# See https://www.rapids.science/latest/setup/configuration/#automatic-creation-of-participant-files
|
# See https://www.rapids.science/latest/setup/configuration/#automatic-creation-of-participant-files
|
||||||
CREATE_PARTICIPANT_FILES:
|
CREATE_PARTICIPANT_FILES:
|
||||||
|
@ -477,11 +477,11 @@ EMPATICA_ACCELEROMETER:
|
||||||
CONTAINER: ACC
|
CONTAINER: ACC
|
||||||
PROVIDERS:
|
PROVIDERS:
|
||||||
DBDP:
|
DBDP:
|
||||||
COMPUTE: True
|
COMPUTE: False
|
||||||
FEATURES: ["maxmagnitude", "minmagnitude", "avgmagnitude", "medianmagnitude", "stdmagnitude"]
|
FEATURES: ["maxmagnitude", "minmagnitude", "avgmagnitude", "medianmagnitude", "stdmagnitude"]
|
||||||
SRC_SCRIPT: src/features/empatica_accelerometer/dbdp/main.py
|
SRC_SCRIPT: src/features/empatica_accelerometer/dbdp/main.py
|
||||||
CR:
|
CR:
|
||||||
COMPUTE: True
|
COMPUTE: False
|
||||||
FEATURES: ["fqHighestPeakFreqs", "fqHighestPeaks", "fqEnergyFeat", "fqEntropyFeat", "fqHistogramBins","fqAbsMean", "fqSkewness", "fqKurtosis", "fqInterquart", # Freq features
|
FEATURES: ["fqHighestPeakFreqs", "fqHighestPeaks", "fqEnergyFeat", "fqEntropyFeat", "fqHistogramBins","fqAbsMean", "fqSkewness", "fqKurtosis", "fqInterquart", # Freq features
|
||||||
"meanLow", "areaLow", "totalAbsoluteAreaBand", "totalMagnitudeBand", "entropyBand", "skewnessBand", "kurtosisBand",
|
"meanLow", "areaLow", "totalAbsoluteAreaBand", "totalMagnitudeBand", "entropyBand", "skewnessBand", "kurtosisBand",
|
||||||
"postureDistanceLow", "absoluteMeanBand", "absoluteAreaBand", "quartilesBand", "interQuartileRangeBand", "varianceBand",
|
"postureDistanceLow", "absoluteMeanBand", "absoluteAreaBand", "quartilesBand", "interQuartileRangeBand", "varianceBand",
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
PHONE:
|
PHONE:
|
||||||
DEVICE_IDS: [a748ee1a-1d0b-4ae9-9074-279a2b6ba524] # the participant's AWARE device id
|
DEVICE_IDS: [a748ee1a-1d0b-4ae9-9074-279a2b6ba524] # the participant's AWARE device id
|
||||||
PLATFORMS: [android] # or ios
|
PLATFORMS: [android] # or ios
|
||||||
LABEL: MyTestP01 # any string
|
LABEL: MyTestP01 # any string
|
||||||
START_DATE: 2020-01-01 # this can also be empty
|
START_DATE: 2020-01-01 # this can also be empty
|
||||||
END_DATE: 2021-01-01 # this can also be empty
|
END_DATE: 2021-01-01 # this can also be empty
|
||||||
EMPATICA:
|
EMPATICA:
|
||||||
DEVICE_IDS: [empatica1]
|
DEVICE_IDS: [empatica1]
|
||||||
LABEL: test01
|
LABEL: test01
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
import math as m
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
def extract_second_order_features(intraday_features, so_features_names):
|
def extract_second_order_features(intraday_features, so_features_names):
|
||||||
if not intraday_features.empty:
|
if not intraday_features.empty:
|
||||||
|
@ -21,10 +24,11 @@ def extract_second_order_features(intraday_features, so_features_names):
|
||||||
|
|
||||||
return so_features
|
return so_features
|
||||||
|
|
||||||
def get_sample_rate(data):
|
def get_sample_rate(data): # To-Do get the sample rate information from the file's metadata
|
||||||
try:
|
try:
|
||||||
timestamps_diff = data['timestamp'].diff().dropna().mean()
|
timestamps_diff = data['timestamp'].diff().dropna().mean()
|
||||||
|
print("Timestamp diff:", timestamps_diff)
|
||||||
except:
|
except:
|
||||||
raise Exception("Error occured while trying to get the mean sample rate from the data.")
|
raise Exception("Error occured while trying to get the mean sample rate from the data.")
|
||||||
|
|
||||||
return int(1000/timestamps_diff)
|
return m.ceil(1000/timestamps_diff)
|
|
@ -3,7 +3,7 @@ from scipy.stats import entropy
|
||||||
|
|
||||||
from cr_features.helper_functions import convert_to2d, accelerometer_features, frequency_features
|
from cr_features.helper_functions import convert_to2d, accelerometer_features, frequency_features
|
||||||
from cr_features.calculate_features_old import calculateFeatures
|
from cr_features.calculate_features_old import calculateFeatures
|
||||||
from cr_features_helper_methods import get_sample_rate, extract_second_order_features
|
from cr_features_helper_methods import extract_second_order_features
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ def extract_acc_features_from_intraday_data(acc_intraday_data, features, window_
|
||||||
acc_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
acc_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
||||||
|
|
||||||
if not acc_intraday_data.empty:
|
if not acc_intraday_data.empty:
|
||||||
sample_rate = get_sample_rate(acc_intraday_data)
|
sample_rate = 32
|
||||||
|
|
||||||
acc_intraday_data = filter_data_by_segment(acc_intraday_data, time_segment)
|
acc_intraday_data = filter_data_by_segment(acc_intraday_data, time_segment)
|
||||||
|
|
||||||
|
|
|
@ -3,24 +3,16 @@ from scipy.stats import entropy
|
||||||
|
|
||||||
from cr_features.helper_functions import convert_to2d, hrv_features, hrv_freq_features
|
from cr_features.helper_functions import convert_to2d, hrv_features, hrv_freq_features
|
||||||
from cr_features.hrv import extract_hrv_features_2d_wrapper
|
from cr_features.hrv import extract_hrv_features_2d_wrapper
|
||||||
from cr_features_helper_methods import get_sample_rate, extract_second_order_features
|
from cr_features_helper_methods import extract_second_order_features
|
||||||
|
|
||||||
import sys
|
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_bvp_features_from_intraday_data(bvp_intraday_data, features, window_length, time_segment, filter_data_by_segment):
|
def extract_bvp_features_from_intraday_data(bvp_intraday_data, features, window_length, time_segment, filter_data_by_segment):
|
||||||
bvp_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
bvp_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
||||||
|
|
||||||
if not bvp_intraday_data.empty:
|
if not bvp_intraday_data.empty:
|
||||||
sample_rate = get_sample_rate(bvp_intraday_data)
|
sample_rate = 64
|
||||||
|
|
||||||
bvp_intraday_data = filter_data_by_segment(bvp_intraday_data, time_segment)
|
bvp_intraday_data = filter_data_by_segment(bvp_intraday_data, time_segment)
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,14 @@ from scipy.stats import entropy
|
||||||
|
|
||||||
from cr_features.helper_functions import convert_to2d, gsr_features
|
from cr_features.helper_functions import convert_to2d, gsr_features
|
||||||
from cr_features.calculate_features import calculate_features
|
from cr_features.calculate_features import calculate_features
|
||||||
from cr_features_helper_methods import get_sample_rate, extract_second_order_features
|
from cr_features_helper_methods import extract_second_order_features
|
||||||
|
|
||||||
|
|
||||||
def extract_eda_features_from_intraday_data(eda_intraday_data, features, window_length, time_segment, filter_data_by_segment):
|
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)
|
eda_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
||||||
|
|
||||||
if not eda_intraday_data.empty:
|
if not eda_intraday_data.empty:
|
||||||
sample_rate = get_sample_rate(eda_intraday_data)
|
sample_rate = 4
|
||||||
|
|
||||||
eda_intraday_data = filter_data_by_segment(eda_intraday_data, time_segment)
|
eda_intraday_data = filter_data_by_segment(eda_intraday_data, time_segment)
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import numpy as np
|
||||||
|
|
||||||
from cr_features.helper_functions import convert_ibi_to2d_time, hrv_features, hrv_freq_features
|
from cr_features.helper_functions import convert_ibi_to2d_time, hrv_features, hrv_freq_features
|
||||||
from cr_features.hrv import extract_hrv_features_2d_wrapper
|
from cr_features.hrv import extract_hrv_features_2d_wrapper
|
||||||
from cr_features_helper_methods import get_sample_rate, extract_second_order_features
|
from cr_features_helper_methods import extract_second_order_features
|
||||||
|
|
||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
|
@ -16,7 +16,6 @@ def extract_ibi_features_from_intraday_data(ibi_intraday_data, features, window_
|
||||||
ibi_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
ibi_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
||||||
|
|
||||||
if not ibi_intraday_data.empty:
|
if not ibi_intraday_data.empty:
|
||||||
sample_rate = get_sample_rate(ibi_intraday_data)
|
|
||||||
|
|
||||||
ibi_intraday_data = filter_data_by_segment(ibi_intraday_data, time_segment)
|
ibi_intraday_data = filter_data_by_segment(ibi_intraday_data, time_segment)
|
||||||
|
|
||||||
|
|
|
@ -3,23 +3,15 @@ from scipy.stats import entropy
|
||||||
|
|
||||||
from cr_features.helper_functions import convert_to2d, generic_features
|
from cr_features.helper_functions import convert_to2d, generic_features
|
||||||
from cr_features.calculate_features_old import calculateFeatures
|
from cr_features.calculate_features_old import calculateFeatures
|
||||||
from cr_features_helper_methods import get_sample_rate, extract_second_order_features
|
from cr_features_helper_methods import extract_second_order_features
|
||||||
|
|
||||||
import sys
|
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_temp_features_from_intraday_data(temperature_intraday_data, features, window_length, time_segment, filter_data_by_segment):
|
def extract_temp_features_from_intraday_data(temperature_intraday_data, features, window_length, time_segment, filter_data_by_segment):
|
||||||
temperature_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
temperature_intraday_features = pd.DataFrame(columns=["local_segment"] + features)
|
||||||
|
|
||||||
if not temperature_intraday_data.empty:
|
if not temperature_intraday_data.empty:
|
||||||
sample_rate = get_sample_rate(temperature_intraday_data)
|
sample_rate = 4
|
||||||
|
|
||||||
temperature_intraday_data = filter_data_by_segment(temperature_intraday_data, time_segment)
|
temperature_intraday_data = filter_data_by_segment(temperature_intraday_data, time_segment)
|
||||||
|
|
||||||
|
|
|
@ -118,9 +118,9 @@ def fetch_provider_features(provider, provider_key, sensor_key, sensor_data_file
|
||||||
features[0].columns = ["{}{}".format("" if col.startswith("local_segment") else (sensor_key + "_"+ provider_key + "_"), col) for col in features[0].columns]
|
features[0].columns = ["{}{}".format("" if col.startswith("local_segment") else (sensor_key + "_"+ provider_key + "_"), col) for col in features[0].columns]
|
||||||
features[1].columns = ["{}{}".format("" if col.startswith("local_segment") else (sensor_key + "_"+ provider_key + "_"), col) for col in features[1].columns]
|
features[1].columns = ["{}{}".format("" if col.startswith("local_segment") else (sensor_key + "_"+ provider_key + "_"), col) for col in features[1].columns]
|
||||||
if not features[0].empty:
|
if not features[0].empty:
|
||||||
sensor_fo_features = pd.concat([sensor_features, features[0]], axis=0, sort=False)
|
sensor_fo_features = pd.concat([sensor_fo_features, features[0]], axis=0, sort=False)
|
||||||
if not features[1].empty:
|
if not features[1].empty:
|
||||||
sensor_so_features = pd.concat([sensor_features, features[1]], axis=0, sort=False)
|
sensor_so_features = pd.concat([sensor_so_features, features[1]], axis=0, sort=False)
|
||||||
else:
|
else:
|
||||||
if not "local_segment" in features.columns:
|
if not "local_segment" in features.columns:
|
||||||
raise ValueError("The dataframe returned by the " + sensor_key + " provider '" + provider_key + "' is missing the 'local_segment' column added by the 'filter_data_by_segment()' function. Check the provider script is using such function and is not removing 'local_segment' by accident (" + provider["SRC_SCRIPT"] + ")\n The 'local_segment' column is used to index a provider's features (each row corresponds to a different time segment instance (e.g. 2020-01-01, 2020-01-02, 2020-01-03, etc.)")
|
raise ValueError("The dataframe returned by the " + sensor_key + " provider '" + provider_key + "' is missing the 'local_segment' column added by the 'filter_data_by_segment()' function. Check the provider script is using such function and is not removing 'local_segment' by accident (" + provider["SRC_SCRIPT"] + ")\n The 'local_segment' column is used to index a provider's features (each row corresponds to a different time segment instance (e.g. 2020-01-01, 2020-01-02, 2020-01-03, etc.)")
|
||||||
|
|
Loading…
Reference in New Issue