From 8030624e0a48a2bcb006cd9ef2c20ae078f93986 Mon Sep 17 00:00:00 2001 From: JulioV Date: Tue, 5 Nov 2019 10:47:55 -0500 Subject: [PATCH] Add battery deltas --- Snakefile | 1 + config.yaml | 2 +- rules/features.snakefile | 10 +++++++++- src/features/battery_deltas.R | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/features/battery_deltas.R diff --git a/Snakefile b/Snakefile index 647388aa..069466c6 100644 --- a/Snakefile +++ b/Snakefile @@ -7,6 +7,7 @@ rule all: input: expand("data/raw/{pid}/{sensor}_raw.csv", pid=config["PIDS"], sensor=config["SENSORS"]), expand("data/raw/{pid}/{sensor}_with_datetime.csv", pid=config["PIDS"], sensor=config["SENSORS"]), + expand("data/processed/{pid}/battery_deltas.csv", pid=config["PIDS"]), expand("data/processed/{pid}/com_sms_{sms_type}_{day_segment}_{metric}.csv", pid=config["PIDS"], sms_type = config["COM_SMS"]["SMS_TYPES"], diff --git a/config.yaml b/config.yaml index e4e3d9c8..b977548c 100644 --- a/config.yaml +++ b/config.yaml @@ -1,5 +1,5 @@ # Valid database table names -SENSORS: [messages, calls] +SENSORS: [messages, calls, battery] # Participants to include in the analysis # You must create a file for each participant diff --git a/rules/features.snakefile b/rules/features.snakefile index bf5ddeef..b1ced2b7 100644 --- a/rules/features.snakefile +++ b/rules/features.snakefile @@ -20,4 +20,12 @@ rule communication_call_metrics: output: "data/processed/{pid}/com_call_{call_type}_{day_segment}_{metric}.csv" script: - "../src/features/communication_call_metrics.R" \ No newline at end of file + "../src/features/communication_call_metrics.R" + +rule battery_deltas: + input: + "data/raw/{pid}/battery_with_datetime.csv" + output: + "data/processed/{pid}/battery_deltas.csv" + script: + "../src/features/battery_deltas.R" \ No newline at end of file diff --git a/src/features/battery_deltas.R b/src/features/battery_deltas.R new file mode 100644 index 00000000..604b4751 --- /dev/null +++ b/src/features/battery_deltas.R @@ -0,0 +1,21 @@ +source("packrat/init.R") + +library("tidyverse") + +battery <- read.csv(snakemake@input[[1]]) + +consumption <- battery %>% + mutate(group = ifelse(lag(battery_status) != battery_status, 1, 0) %>% coalesce(0), + group_id = cumsum(group) + 1) %>% + filter(battery_status == 3) %>% + group_by(group_id) %>% + summarize(battery_diff = first(battery_level) - last(battery_level), + time_diff = (last(timestamp) - first(timestamp)) / (1000 * 60 * 60), + local_start_date_time = first(local_date_time), + local_end_date_time = last(local_date_time), + local_start_date = first(local_date), + local_end_date = last(local_date)) %>% + select(-group_id) %>% + filter(time_diff > 0.1) # Avoids including quick discharge cycles + +write.csv(consumption, snakemake@output[[1]])