Source code for src.openCHA.tasks.affect.activity_get

"""
Affect - Get physical activity data
"""
import os
from typing import Any
from typing import List

from openCHA.tasks.affect import Affect
from openCHA.utils import get_from_env


[docs] class ActivityGet(Affect): """ **Description:** This tasks gets activity affect data for specific patient. """ name: str = "affect_activity_get" chat_name: str = "AffectActivityGet" description: str = "Gathers physical activity data for a patient over a certain period." dependencies: List[str] = [] inputs: List[str] = [ ( "user ID in string. It can be refered as user, patient, individual, etc. The input format should be: " "par_<user_id> for example for user 1 it will be par_1." ), "start date of the physical activity data with the following format: '%Y-%m-%d'", "end date of the physical activity data with the following format: '%Y-%m-%d'.", ] outputs: List[str] = [ "returns an array of json objects which contains the following keys:" "\n**steps_count**: is the total number of steps registered during the day." "\n**rest_time**: is the time (in minutes) during the day spent resting, i.e. sleeping or lying down.", "\n**inactive_time**: is the time (in minutes) during the day spent resting, i.e. sitting or standing still.", "\n**low_acitivity_time** is the (in minutes) during the day with low intensity activity (e.g. household work).", "\n**medimum_acitivity_time** is the (in minutes) during the day with medium intensity activity (e.g. walking).", "\n**high_acitivity_time** is the (in minutes) during the day with high intensity activity (e.g. running).", ] # False if the output should directly passed back to the planner. # True if it should be stored in datapipe output_type: bool = True # file_name: str = "activity.csv" device_name: str = "oura" local_dir: str = get_from_env( "DATA_DIR", "DATA_DIR", "data/affect" ) columns_to_keep: List[str] = [ "date", "steps", "rest", "inactive", "low", "medium", "high", ] columns_revised: List[str] = [ "date", "steps_count", "rest_time", "inactive_time", "low_acitivity_time", "medimum_acitivity_time", "high_acitivity_time", ]
[docs] def _execute( self, inputs: List[Any] = None, ) -> str: user_id = inputs[0].strip() full_dir = os.path.join( self.local_dir, user_id, self.device_name ) df = self._get_data( local_dir=full_dir, file_name=self.file_name, start_date=inputs[1].strip(), end_date=inputs[2].strip(), usecols=self.columns_to_keep, ) df.columns = self.columns_revised df = df.round(2) json_out = df.to_json(orient="records") return json_out