rapids/src/features/accelerometer_features.py

22 lines
1.4 KiB
Python

import numpy as np
import pandas as pd
from accelerometer.accelerometer_base import base_accelerometer_features
acc_data = pd.read_csv(snakemake.input[0], parse_dates=["local_date_time", "local_date"])
day_segment = snakemake.params["day_segment"]
requested_features = {}
requested_features["magnitude"] = snakemake.params["magnitude"]
requested_features["exertional_activity_episode"] = [feature + "exertionalactivityepisode" for feature in snakemake.params["exertional_activity_episode"]]
requested_features["nonexertional_activity_episode"] = [feature + "nonexertionalactivityepisode" for feature in snakemake.params["nonexertional_activity_episode"]]
valid_sensed_minutes = snakemake.params["valid_sensed_minutes"]
acc_features = pd.DataFrame(columns=["local_date"])
acc_features = acc_features.merge(base_accelerometer_features(acc_data, day_segment, requested_features, valid_sensed_minutes), on="local_date", how="outer")
assert np.sum([len(x) for x in requested_features.values()]) + (1 if valid_sensed_minutes else 0) + 1 == acc_features.shape[1], "The number of features in the output dataframe (=" + str(acc_features.shape[1]) + ") does not match the expected value (=" + str(np.sum([len(x) for x in requested_features.values()]) + (1 if valid_sensed_minutes else 0)) + " + 1). Verify your accelerometer feature extraction functions"
acc_features.to_csv(snakemake.output[0], index=False)