2022-09-23 15:24:50 +02:00
import pandas as pd
import numpy as np
from datetime import datetime
import sys
def calculate_empatica_data_yield ( features ) :
# Get time segment duration in seconds from dataframe
2022-09-27 11:54:15 +02:00
datetime_start = datetime . strptime ( features . loc [ 0 , ' local_segment_start_datetime ' ] , ' % Y- % m- %d % H: % M: % S ' )
datetime_end = datetime . strptime ( features . loc [ 0 , ' local_segment_end_datetime ' ] , ' % Y- % m- %d % H: % M: % S ' )
2022-09-23 15:24:50 +02:00
tseg_duration = ( datetime_end - datetime_start ) . total_seconds ( )
2022-09-26 17:54:00 +02:00
features [ " acc_data_yield " ] = ( features [ ' empatica_accelerometer_cr_SO_windowsCount ' ] * 15 ) / tseg_duration
features [ " temp_data_yield " ] = ( features [ ' empatica_temperature_cr_SO_windowsCount ' ] * 300 ) / tseg_duration
features [ " eda_data_yield " ] = ( features [ ' empatica_electrodermal_activity_cr_SO_windowsCount ' ] * 60 ) / tseg_duration
features [ " ibi_data_yield " ] = ( features [ ' empatica_inter_beat_interval_cr_SO_windowsCount ' ] * 300 ) / tseg_duration
2022-09-27 11:54:15 +02:00
# TODO: boljša nastavitev delovnih ur sedaj je od 4:00 do 4:00... to povzroči veliko manjkajočih podatkov in posledično nizek (telefonski in E4) data_yield ...
empatica_data_yield_cols = [ ' acc_data_yield ' , ' temp_data_yield ' , ' eda_data_yield ' , ' ibi_data_yield ' ]
2022-09-29 16:33:21 +02:00
features [ " empatica_data_yield " ] = features [ empatica_data_yield_cols ] . mean ( axis = 1 ) . fillna ( 0 )
2022-09-27 11:54:15 +02:00
features . drop ( empatica_data_yield_cols , axis = 1 , inplace = True ) # In case of if the advanced operations will later not be needed (e.g., weighted average)
2022-09-23 15:24:50 +02:00
2022-09-26 17:54:00 +02:00
return features