2020-08-03 19:09:16 +02:00
|
|
|
rule restore_sql_file:
|
|
|
|
input:
|
|
|
|
sql_file = "data/external/rapids_example.sql",
|
|
|
|
db_credentials = ".env"
|
|
|
|
params:
|
2020-10-21 01:12:01 +02:00
|
|
|
group = config["DATABASE_GROUP"]
|
2020-08-03 19:09:16 +02:00
|
|
|
output:
|
|
|
|
touch("data/interim/restore_sql_file.done")
|
|
|
|
script:
|
|
|
|
"../src/data/restore_sql_file.py"
|
|
|
|
|
2020-08-03 23:30:15 +02:00
|
|
|
rule create_example_participant_files:
|
|
|
|
output:
|
|
|
|
expand("data/external/{pid}", pid = ["example01", "example02"])
|
|
|
|
shell:
|
|
|
|
"echo 'a748ee1a-1d0b-4ae9-9074-279a2b6ba524\nandroid\ntest01\n2020/04/23,2020/05/04\n' >> ./data/external/example01 && echo '13dbc8a3-dae3-4834-823a-4bc96a7d459d\nios\ntest02\n2020/04/23,2020/05/04\n' >> ./data/external/example02"
|
|
|
|
|
2020-10-27 22:13:16 +01:00
|
|
|
rule create_participants_files:
|
|
|
|
input:
|
|
|
|
participants_file = [] if config["CREATE_PARTICIPANT_FILES"]["SOURCE"]["TYPE"] == "AWARE_DEVICE_TABLE" else config["CREATE_PARTICIPANT_FILES"]["SOURCE"]["CSV_FILE_PATH"]
|
|
|
|
params:
|
|
|
|
config = config["CREATE_PARTICIPANT_FILES"]
|
|
|
|
script:
|
|
|
|
"../src/data/create_participants_files.R"
|
2020-10-21 01:12:01 +02:00
|
|
|
|
|
|
|
rule download_phone_data:
|
|
|
|
input:
|
|
|
|
"data/external/participant_files/{pid}.yaml"
|
2020-02-10 22:45:34 +01:00
|
|
|
params:
|
2020-10-21 01:12:01 +02:00
|
|
|
source = config["SENSOR_DATA"]["PHONE"]["SOURCE"],
|
|
|
|
sensor = "phone_" + "{sensor}",
|
|
|
|
table = lambda wildcards: config["PHONE_" + str(wildcards.sensor).upper()]["TABLE"],
|
2020-10-22 20:38:40 +02:00
|
|
|
timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
2020-10-21 01:12:01 +02:00
|
|
|
aware_multiplatform_tables = config["PHONE_ACTIVITY_RECOGNITION"]["TABLE"]["ANDROID"] + "," + config["PHONE_ACTIVITY_RECOGNITION"]["TABLE"]["IOS"] + "," + config["PHONE_CONVERSATION"]["TABLE"]["ANDROID"] + "," + config["PHONE_CONVERSATION"]["TABLE"]["IOS"],
|
|
|
|
output:
|
|
|
|
"data/raw/{pid}/phone_{sensor}_raw.csv"
|
2020-02-10 22:45:34 +01:00
|
|
|
script:
|
2020-10-21 01:12:01 +02:00
|
|
|
"../src/data/download_phone_data.R"
|
2020-02-10 22:45:34 +01:00
|
|
|
|
2020-10-21 01:12:01 +02:00
|
|
|
rule download_fitbit_data:
|
2019-10-24 18:11:24 +02:00
|
|
|
input:
|
2020-10-26 22:17:53 +01:00
|
|
|
participant_file = "data/external/participant_files/{pid}.yaml",
|
2020-10-27 19:59:47 +01:00
|
|
|
input_file = [] if config["SENSOR_DATA"]["FITBIT"]["SOURCE"]["TYPE"] == "DATABASE" else lambda wildcards: config["FITBIT_" + str(wildcards.sensor).upper()]["TABLE"]["CSV"][str(wildcards.fitbit_data_type).upper()]
|
2019-10-24 18:11:24 +02:00
|
|
|
params:
|
2020-10-21 01:12:01 +02:00
|
|
|
source = config["SENSOR_DATA"]["FITBIT"]["SOURCE"],
|
|
|
|
sensor = "fitbit_" + "{sensor}",
|
2020-10-22 20:38:40 +02:00
|
|
|
fitbit_data_type = "{fitbit_data_type}",
|
2020-10-21 01:12:01 +02:00
|
|
|
table = lambda wildcards: config["FITBIT_" + str(wildcards.sensor).upper()]["TABLE"],
|
2019-10-24 18:11:24 +02:00
|
|
|
output:
|
2020-10-22 19:08:52 +02:00
|
|
|
"data/raw/{pid}/fitbit_{sensor}_{fitbit_data_type}_raw.csv"
|
2019-10-24 18:11:24 +02:00
|
|
|
script:
|
2020-10-21 01:12:01 +02:00
|
|
|
"../src/data/download_fitbit_data.R"
|
2019-10-24 22:08:05 +02:00
|
|
|
|
2020-07-23 03:54:19 +02:00
|
|
|
rule compute_day_segments:
|
|
|
|
input:
|
2020-10-23 18:15:26 +02:00
|
|
|
config["DAY_SEGMENTS"]["FILE"],
|
|
|
|
"data/external/participant_files/{pid}.yaml"
|
2020-08-26 18:09:53 +02:00
|
|
|
params:
|
2020-09-14 20:21:36 +02:00
|
|
|
day_segments_type = config["DAY_SEGMENTS"]["TYPE"],
|
|
|
|
pid = "{pid}"
|
2020-07-23 03:54:19 +02:00
|
|
|
output:
|
2020-09-14 20:21:36 +02:00
|
|
|
segments_file = "data/interim/day_segments/{pid}_day_segments.csv",
|
|
|
|
segments_labels_file = "data/interim/day_segments/{pid}_day_segments_labels.csv",
|
2020-07-23 03:54:19 +02:00
|
|
|
script:
|
|
|
|
"../src/data/compute_day_segments.py"
|
|
|
|
|
2020-10-19 21:07:12 +02:00
|
|
|
rule phone_readable_datetime:
|
2019-10-24 22:08:05 +02:00
|
|
|
input:
|
2020-10-19 21:07:12 +02:00
|
|
|
sensor_input = "data/raw/{pid}/phone_{sensor}_raw.csv",
|
2020-09-14 20:21:36 +02:00
|
|
|
day_segments = "data/interim/day_segments/{pid}_day_segments.csv"
|
2019-10-24 22:08:05 +02:00
|
|
|
params:
|
2020-10-21 01:12:01 +02:00
|
|
|
timezones = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["TYPE"],
|
|
|
|
fixed_timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
2020-09-16 20:54:20 +02:00
|
|
|
day_segments_type = config["DAY_SEGMENTS"]["TYPE"],
|
|
|
|
include_past_periodic_segments = config["DAY_SEGMENTS"]["INCLUDE_PAST_PERIODIC_SEGMENTS"]
|
2019-10-24 22:08:05 +02:00
|
|
|
output:
|
2020-10-19 21:07:12 +02:00
|
|
|
"data/raw/{pid}/phone_{sensor}_with_datetime.csv"
|
2019-10-24 22:08:05 +02:00
|
|
|
script:
|
2019-11-05 18:34:22 +01:00
|
|
|
"../src/data/readable_datetime.R"
|
|
|
|
|
2020-07-09 19:01:50 +02:00
|
|
|
rule phone_sensed_bins:
|
2019-11-05 18:34:22 +01:00
|
|
|
input:
|
2020-10-19 21:07:12 +02:00
|
|
|
all_sensors = expand("data/raw/{{pid}}/{sensor}_with_datetime.csv", sensor = map(str.lower, config["PHONE_VALID_SENSED_BINS"]["PHONE_SENSORS"]))
|
2019-11-05 18:34:22 +01:00
|
|
|
params:
|
2020-07-09 19:01:50 +02:00
|
|
|
bin_size = config["PHONE_VALID_SENSED_BINS"]["BIN_SIZE"]
|
2019-11-05 18:34:22 +01:00
|
|
|
output:
|
2020-07-09 19:01:50 +02:00
|
|
|
"data/interim/{pid}/phone_sensed_bins.csv"
|
2019-11-05 18:34:22 +01:00
|
|
|
script:
|
2020-07-09 19:01:50 +02:00
|
|
|
"../src/data/phone_sensed_bins.R"
|
2019-11-12 20:57:27 +01:00
|
|
|
|
2020-10-07 17:51:31 +02:00
|
|
|
rule phone_sensed_timestamps:
|
|
|
|
input:
|
2020-10-19 21:07:12 +02:00
|
|
|
all_sensors = expand("data/raw/{{pid}}/{sensor}_raw.csv", sensor = map(str.lower, config["PHONE_VALID_SENSED_BINS"]["PHONE_SENSORS"]))
|
2020-10-07 17:51:31 +02:00
|
|
|
output:
|
|
|
|
"data/interim/{pid}/phone_sensed_timestamps.csv"
|
|
|
|
script:
|
|
|
|
"../src/data/phone_sensed_timestamps.R"
|
|
|
|
|
2020-07-09 19:01:50 +02:00
|
|
|
rule phone_valid_sensed_days:
|
2019-12-04 17:33:25 +01:00
|
|
|
input:
|
2020-07-09 19:01:50 +02:00
|
|
|
phone_sensed_bins = "data/interim/{pid}/phone_sensed_bins.csv"
|
2019-12-04 17:33:25 +01:00
|
|
|
params:
|
2020-07-22 02:41:24 +02:00
|
|
|
min_valid_hours_per_day = "{min_valid_hours_per_day}",
|
2020-07-24 18:58:48 +02:00
|
|
|
min_valid_bins_per_hour = "{min_valid_bins_per_hour}"
|
2019-12-04 17:33:25 +01:00
|
|
|
output:
|
2020-07-24 18:58:48 +02:00
|
|
|
"data/interim/{pid}/phone_valid_sensed_days_{min_valid_hours_per_day}hours_{min_valid_bins_per_hour}bins.csv"
|
2019-12-04 17:33:25 +01:00
|
|
|
script:
|
2020-07-09 19:01:50 +02:00
|
|
|
"../src/data/phone_valid_sensed_days.R"
|
|
|
|
|
2019-12-04 17:33:25 +01:00
|
|
|
|
2019-11-12 20:57:27 +01:00
|
|
|
rule unify_ios_android:
|
|
|
|
input:
|
|
|
|
sensor_data = "data/raw/{pid}/{sensor}_with_datetime.csv",
|
2020-10-21 01:12:01 +02:00
|
|
|
participant_info = "data/external/participant_files/{pid}.yaml"
|
2019-11-12 20:57:27 +01:00
|
|
|
params:
|
2020-06-30 23:34:18 +02:00
|
|
|
sensor = "{sensor}",
|
2019-11-12 20:57:27 +01:00
|
|
|
output:
|
|
|
|
"data/raw/{pid}/{sensor}_with_datetime_unified.csv"
|
|
|
|
script:
|
2019-12-10 00:23:00 +01:00
|
|
|
"../src/data/unify_ios_android.R"
|
|
|
|
|
2020-10-21 01:12:01 +02:00
|
|
|
rule process_phone_locations_types:
|
2019-12-10 00:23:00 +01:00
|
|
|
input:
|
2020-10-19 21:07:12 +02:00
|
|
|
locations = "data/raw/{pid}/phone_locations_raw.csv",
|
2020-10-07 17:51:31 +02:00
|
|
|
phone_sensed_timestamps = "data/interim/{pid}/phone_sensed_timestamps.csv",
|
2019-12-10 00:23:00 +01:00
|
|
|
params:
|
2020-10-19 21:07:12 +02:00
|
|
|
consecutive_threshold = config["PHONE_LOCATIONS"]["FUSED_RESAMPLED_CONSECUTIVE_THRESHOLD"],
|
|
|
|
time_since_valid_location = config["PHONE_LOCATIONS"]["FUSED_RESAMPLED_TIME_SINCE_VALID_LOCATION"],
|
|
|
|
locations_to_use = config["PHONE_LOCATIONS"]["LOCATIONS_TO_USE"]
|
2019-12-10 00:23:00 +01:00
|
|
|
output:
|
2020-10-19 21:07:12 +02:00
|
|
|
"data/interim/{pid}/phone_locations_processed.csv"
|
2019-12-10 00:23:00 +01:00
|
|
|
script:
|
2020-08-28 19:53:00 +02:00
|
|
|
"../src/data/process_location_types.R"
|
2020-01-15 23:18:10 +01:00
|
|
|
|
2020-10-21 01:12:01 +02:00
|
|
|
rule phone_locations_processed_with_datetime:
|
2020-10-07 17:51:31 +02:00
|
|
|
input:
|
2020-10-19 21:07:12 +02:00
|
|
|
sensor_input = "data/interim/{pid}/phone_locations_processed.csv",
|
2020-10-07 17:51:31 +02:00
|
|
|
day_segments = "data/interim/day_segments/{pid}_day_segments.csv"
|
|
|
|
params:
|
2020-10-21 01:12:01 +02:00
|
|
|
timezones = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["TYPE"],
|
|
|
|
fixed_timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
2020-10-07 17:51:31 +02:00
|
|
|
day_segments_type = config["DAY_SEGMENTS"]["TYPE"],
|
|
|
|
include_past_periodic_segments = config["DAY_SEGMENTS"]["INCLUDE_PAST_PERIODIC_SEGMENTS"]
|
|
|
|
output:
|
2020-10-19 21:07:12 +02:00
|
|
|
"data/interim/{pid}/phone_locations_processed_with_datetime.csv"
|
2020-10-07 17:51:31 +02:00
|
|
|
script:
|
|
|
|
"../src/data/readable_datetime.R"
|
|
|
|
|
2020-10-21 01:12:01 +02:00
|
|
|
rule resample_episodes:
|
2020-01-16 00:28:56 +01:00
|
|
|
input:
|
2020-10-21 01:12:01 +02:00
|
|
|
"data/interim/{pid}/{sensor}_episodes.csv"
|
2020-01-16 00:28:56 +01:00
|
|
|
output:
|
2020-10-21 01:12:01 +02:00
|
|
|
"data/interim/{pid}/{sensor}_episodes_resampled.csv"
|
2020-01-16 00:28:56 +01:00
|
|
|
script:
|
2020-10-21 01:12:01 +02:00
|
|
|
"../src/features/utils/resample_episodes.R"
|
2020-01-16 00:28:56 +01:00
|
|
|
|
2020-10-21 01:12:01 +02:00
|
|
|
rule resample_episodes_with_datetime:
|
2020-01-15 23:18:10 +01:00
|
|
|
input:
|
2020-10-21 01:12:01 +02:00
|
|
|
sensor_input = "data/interim/{pid}/{sensor}_episodes_resampled.csv",
|
|
|
|
day_segments = "data/interim/day_segments/{pid}_day_segments.csv"
|
2020-01-15 23:18:10 +01:00
|
|
|
params:
|
2020-10-21 01:12:01 +02:00
|
|
|
timezones = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["TYPE"],
|
|
|
|
fixed_timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
|
|
|
day_segments_type = config["DAY_SEGMENTS"]["TYPE"],
|
|
|
|
include_past_periodic_segments = config["DAY_SEGMENTS"]["INCLUDE_PAST_PERIODIC_SEGMENTS"]
|
2020-01-15 23:18:10 +01:00
|
|
|
output:
|
2020-10-21 01:12:01 +02:00
|
|
|
"data/interim/{pid}/{sensor}_episodes_resampled_with_datetime.csv"
|
2020-01-15 23:18:10 +01:00
|
|
|
script:
|
2020-10-21 01:12:01 +02:00
|
|
|
"../src/data/readable_datetime.R"
|
2020-01-16 00:28:56 +01:00
|
|
|
|
2020-10-21 01:12:01 +02:00
|
|
|
rule phone_application_categories:
|
2020-06-23 17:33:34 +02:00
|
|
|
input:
|
2020-10-21 01:12:01 +02:00
|
|
|
"data/raw/{pid}/phone_applications_foreground_with_datetime.csv"
|
2020-06-23 17:33:34 +02:00
|
|
|
params:
|
2020-10-21 01:12:01 +02:00
|
|
|
catalogue_source = config["PHONE_APPLICATIONS_FOREGROUND"]["APPLICATION_CATEGORIES"]["CATALOGUE_SOURCE"],
|
|
|
|
catalogue_file = config["PHONE_APPLICATIONS_FOREGROUND"]["APPLICATION_CATEGORIES"]["CATALOGUE_FILE"],
|
|
|
|
update_catalogue_file = config["PHONE_APPLICATIONS_FOREGROUND"]["APPLICATION_CATEGORIES"]["UPDATE_CATALOGUE_FILE"],
|
|
|
|
scrape_missing_genres = config["PHONE_APPLICATIONS_FOREGROUND"]["APPLICATION_CATEGORIES"]["SCRAPE_MISSING_CATEGORIES"]
|
2020-06-23 17:33:34 +02:00
|
|
|
output:
|
2020-10-21 01:12:01 +02:00
|
|
|
"data/raw/{pid}/phone_applications_foreground_with_datetime_with_categories.csv"
|
2020-06-23 17:33:34 +02:00
|
|
|
script:
|
2020-10-21 01:12:01 +02:00
|
|
|
"../src/data/application_categories.R"
|
2020-06-23 17:33:34 +02:00
|
|
|
|
2020-10-22 19:08:52 +02:00
|
|
|
rule fitbit_parse_heartrate:
|
|
|
|
input:
|
|
|
|
data = expand("data/raw/{{pid}}/fitbit_heartrate_{fitbit_data_type}_raw.csv", fitbit_data_type = (["json"] if config["FITBIT_HEARTRATE"]["TABLE_FORMAT"] == "JSON" else ["summary", "intraday"]))
|
|
|
|
params:
|
2020-10-22 20:38:40 +02:00
|
|
|
timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
2020-10-22 19:08:52 +02:00
|
|
|
table = config["FITBIT_HEARTRATE"]["TABLE"],
|
|
|
|
table_format = config["FITBIT_HEARTRATE"]["TABLE_FORMAT"]
|
|
|
|
output:
|
|
|
|
summary_data = "data/raw/{pid}/fitbit_heartrate_summary_parsed.csv",
|
|
|
|
intraday_data = "data/raw/{pid}/fitbit_heartrate_intraday_parsed.csv"
|
|
|
|
script:
|
|
|
|
"../src/data/fitbit_parse_heartrate.py"
|
2020-10-21 01:12:01 +02:00
|
|
|
|
2020-10-22 19:08:52 +02:00
|
|
|
rule fitbit_parse_steps:
|
|
|
|
input:
|
|
|
|
data = expand("data/raw/{{pid}}/fitbit_steps_{fitbit_data_type}_raw.csv", fitbit_data_type = (["json"] if config["FITBIT_STEPS"]["TABLE_FORMAT"] == "JSON" else ["summary", "intraday"]))
|
|
|
|
params:
|
2020-10-22 20:38:40 +02:00
|
|
|
timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
2020-10-22 19:08:52 +02:00
|
|
|
table = config["FITBIT_STEPS"]["TABLE"],
|
|
|
|
table_format = config["FITBIT_STEPS"]["TABLE_FORMAT"]
|
|
|
|
output:
|
|
|
|
summary_data = "data/raw/{pid}/fitbit_steps_summary_parsed.csv",
|
|
|
|
intraday_data = "data/raw/{pid}/fitbit_steps_intraday_parsed.csv"
|
|
|
|
script:
|
|
|
|
"../src/data/fitbit_parse_steps.py"
|
2020-10-21 01:12:01 +02:00
|
|
|
|
2020-10-22 19:08:52 +02:00
|
|
|
rule fitbit_parse_calories:
|
|
|
|
input:
|
|
|
|
data = expand("data/raw/{{pid}}/fitbit_calories_{fitbit_data_type}_raw.csv", fitbit_data_type = (["json"] if config["FITBIT_CALORIES"]["TABLE_FORMAT"] == "JSON" else ["summary", "intraday"]))
|
|
|
|
params:
|
2020-10-22 20:38:40 +02:00
|
|
|
timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
2020-10-22 19:08:52 +02:00
|
|
|
table = config["FITBIT_CALORIES"]["TABLE"],
|
|
|
|
table_format = config["FITBIT_CALORIES"]["TABLE_FORMAT"]
|
|
|
|
output:
|
|
|
|
summary_data = "data/raw/{pid}/fitbit_calories_summary_parsed.csv",
|
|
|
|
intraday_data = "data/raw/{pid}/fitbit_calories_intraday_parsed.csv"
|
|
|
|
script:
|
|
|
|
"../src/data/fitbit_parse_calories.py"
|
|
|
|
|
|
|
|
rule fitbit_parse_sleep:
|
|
|
|
input:
|
|
|
|
data = expand("data/raw/{{pid}}/fitbit_sleep_{fitbit_data_type}_raw.csv", fitbit_data_type = (["json"] if config["FITBIT_SLEEP"]["TABLE_FORMAT"] == "JSON" else ["summary", "intraday"]))
|
|
|
|
params:
|
2020-10-22 20:38:40 +02:00
|
|
|
timezone = config["SENSOR_DATA"]["PHONE"]["TIMEZONE"]["VALUE"],
|
2020-10-22 19:08:52 +02:00
|
|
|
table = config["FITBIT_SLEEP"]["TABLE"],
|
|
|
|
table_format = config["FITBIT_SLEEP"]["TABLE_FORMAT"]
|
|
|
|
output:
|
|
|
|
summary_data = "data/raw/{pid}/fitbit_sleep_summary_parsed_episodes.csv",
|
|
|
|
intraday_data = "data/raw/{pid}/fitbit_sleep_intraday_parsed.csv"
|
|
|
|
script:
|
|
|
|
"../src/data/fitbit_parse_sleep.py"
|
|
|
|
|
|
|
|
rule fitbit_readable_datetime:
|
|
|
|
input:
|
|
|
|
sensor_input = "data/raw/{pid}/fitbit_{sensor}_{fitbit_data_type}_parsed.csv",
|
|
|
|
day_segments = "data/interim/day_segments/{pid}_day_segments.csv"
|
|
|
|
params:
|
2020-10-22 20:38:40 +02:00
|
|
|
fixed_timezone = config["SENSOR_DATA"]["FITBIT"]["TIMEZONE"]["VALUE"],
|
2020-10-22 19:08:52 +02:00
|
|
|
day_segments_type = config["DAY_SEGMENTS"]["TYPE"],
|
|
|
|
include_past_periodic_segments = config["DAY_SEGMENTS"]["INCLUDE_PAST_PERIODIC_SEGMENTS"]
|
|
|
|
output:
|
|
|
|
"data/raw/{pid}/fitbit_{sensor}_{fitbit_data_type}_parsed_with_datetime.csv"
|
|
|
|
script:
|
|
|
|
"../src/data/readable_datetime.R"
|