Source code for dispel.providers.bdh.io.msis29

"""Functions for reading BDH formatted msis29 data."""
from copy import deepcopy
from typing import Any, Dict

from dispel.data.levels import LevelId
from dispel.data.raw import RawDataSet, RawDataSetDefinition
from dispel.providers.bdh.io.core import KEYS, parse_raw_data_set


[docs] def get_level_id(_: dict) -> LevelId: """Parse level id from level type and configuration.""" return LevelId("msis29")
[docs] def create_levels(data: Dict[str, Any]) -> Dict[str, Any]: """Create levels from uni-level activity data for MSIS29. Parameters ---------- data Level data Returns ------- Dict[str, Any] Dictionary containing newly created levels. """ answers = data[KEYS.levels][0]["raw_data"]["activity_sequence"]["response_id"] questions = data[KEYS.levels][0]["raw_data"]["activity_sequence"][ "displayed_question_id" ] question_timestamp = data[KEYS.levels][0]["raw_data"]["activity_sequence"][ "presentation_timestamp" ] for _ in range(len(answers) - 1): data[KEYS.levels].append(deepcopy(data[KEYS.levels][0])) for i, level in enumerate(data[KEYS.levels]): level["name"] = "msis29" level["configuration"] = {"idMsis29": f"{i}"} level["raw_data"]["activity_sequence"]["response_id"] = answers[i] level["raw_data"]["activity_sequence"]["displayed_question_id"] = questions[i] level["raw_data"]["activity_sequence"][ "presentation_timestamp" ] = question_timestamp[i] for cat in ["response_timestamp", "response_text", "displayed_question_text"]: level["raw_data"]["activity_sequence"][cat] = level["raw_data"][ "activity_sequence" ][cat][i] level["effective_time_frame"] = { "begin_timestamp": question_timestamp[i], "end_timestamp": level["raw_data"]["activity_sequence"][ "response_timestamp" ], } return data
[docs] def convert_activity_sequence( data: Dict[str, Any], definition: RawDataSetDefinition ) -> RawDataSet: """Convert activity sequence dataset to userInput.""" _definitions = deepcopy(definition).value_definitions new_definitions = [] ref = { "presentation_timestamp": "tsDisplay", "response_timestamp": "tsAnswer", "displayed_question_id": "displayedValue", "response_id": "answer", } for value_definition in _definitions: try: value_definition.id = ref[value_definition.id] value_definition.name = ref[value_definition.name] except KeyError: pass new_definitions.append(value_definition) for old_key, new_key in ref.items(): data[new_key] = data[old_key] del data[old_key] definition_user_input = RawDataSetDefinition( "userInput", definition.source, new_definitions, is_computed=True ) return parse_raw_data_set(data, definition_user_input)