From 80376f0c3595b02b81438bc2c61ed799d96c5642 Mon Sep 17 00:00:00 2001 From: Echhit Joshi <32146180+EchhitJoshi@users.noreply.github.com> Date: Wed, 27 Nov 2019 18:06:31 -0500 Subject: [PATCH] Add Episodes GAR Metrics --- rules/features.snakefile | 6 +++--- src/features/google_activity_recognition.py | 24 +++++++++++++++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/rules/features.snakefile b/rules/features.snakefile index 07c3bf10..b9dd835e 100644 --- a/rules/features.snakefile +++ b/rules/features.snakefile @@ -42,7 +42,7 @@ rule google_activity_recognition_deltas: input: "data/raw/{pid}/plugin_google_activity_recognition_with_datetime.csv" output: - "data/processed/{pid}/google_activity_recognition_deltas.csv" + "data/processed/{pid}/plugin_google_activity_recognition_deltas.csv" script: "../src/features/google_activity_recognition_deltas.R" @@ -70,8 +70,8 @@ rule bluetooth_metrics: rule activity_metrics: input: - "data/raw/{pid}/plugin_google_activity_recognition_with_datetime.csv", - "data/raw/{pid}/plugin_google_activity_recognition_deltas.csv" + gar_events = "data/raw/{pid}/plugin_google_activity_recognition_with_datetime.csv", + gar_deltas = "data/processed/{pid}/plugin_google_activity_recognition_deltas.csv" params: segment = "{day_segment}", metrics = config["GOOGLE_ACTIVITY_RECOGNITION"]["METRICS"] diff --git a/src/features/google_activity_recognition.py b/src/features/google_activity_recognition.py index 943fbb6a..9040b2f4 100644 --- a/src/features/google_activity_recognition.py +++ b/src/features/google_activity_recognition.py @@ -1,17 +1,26 @@ import pandas as pd import numpy as np import scipy.stats as stats +from features_utils import splitOvernightEpisodes, splitMultiSegmentEpisodes day_segment = snakemake.params["segment"] #Read csv into a pandas dataframe -data = pd.read_csv(snakemake.input[0]) -columns = ['count','most_common_activity','count_unique_activities','activity_change_count'] +data = pd.read_csv(snakemake.input['gar_events'],parse_dates=['local_date_time']) +ar_deltas = pd.read_csv(snakemake.input['gar_deltas'],parse_dates=["local_start_date_time", "local_end_date_time", "local_start_date", "local_end_date"]) +columns = ['count','most_common_activity','count_unique_activities','activity_change_count','sumstationary','summobile','sumvehicle'] columns = list("ar_" + str(day_segment) + "_" + column for column in columns) + if data.empty: finalDataset = pd.DataFrame(columns = columns) else: + + ar_deltas = splitOvernightEpisodes(ar_deltas, [],['activity']) + + if day_segment != "daily": + ar_deltas = splitMultiSegmentEpisodes(ar_deltas, day_segment, []) + data.local_date_time = pd.to_datetime(data.local_date_time) resampledData = data.set_index(data.local_date_time) resampledData.drop(columns=['local_date_time'],inplace=True) @@ -33,6 +42,17 @@ else: countChanges = resampledData['different_activity'].resample('D').sum() finalDataset = pd.concat([count, mostCommonActivity, uniqueActivities, countChanges],axis=1) + deltas_metrics = {'sumstationary':['still','tilting'], + 'summobile':['on_foot','running','on_bicycle'], + 'sumvehicle':['on_vehicle']} + + for column, activity_labels in deltas_metrics.items(): + metric = (ar_deltas[ar_deltas['activity'].isin(pd.Series(activity_labels))] + .groupby(['local_start_date'])['time_diff'] + .agg({"ar_" + str(day_segment) + "_" + str(column) :'sum'})) + finalDataset = finalDataset.merge(metric,how='outer',left_index=True,right_index=True) + +finalDataset.fillna(0,inplace=True) finalDataset.index.names = ['local_date'] finalDataset.columns=columns finalDataset.to_csv(snakemake.output[0]) \ No newline at end of file