From 282bae6675c934504932c354b2a11dd9533965a5 Mon Sep 17 00:00:00 2001 From: Filip Date: Sun, 16 Mar 2025 11:44:27 +0100 Subject: [PATCH] Implemented heart_rate_dataframe function. --- analyze_sport_data/__init__.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/analyze_sport_data/__init__.py b/analyze_sport_data/__init__.py index e69de29..95b587a 100644 --- a/analyze_sport_data/__init__.py +++ b/analyze_sport_data/__init__.py @@ -0,0 +1,33 @@ +from datetime import datetime +from typing import Iterable +from analyze_sport_data.file_records import FileRecords +from pandas import DataFrame, Series + + +def heart_rate_at_datetime(file_records: FileRecords, + recorded_at: datetime) -> float | None: + for heart_rate_record in file_records.heart_rate_records: + if heart_rate_record.recorded_at == recorded_at: + return heart_rate_record.heart_rate + + return None + + +def heart_rate_dataframe( + file_records_iterable: Iterable[FileRecords]) -> DataFrame: + recorded_at_points_set: set[datetime] = set() + + for file_records in file_records_iterable: + for record in file_records.heart_rate_records: + recorded_at_points_set.add(record.recorded_at) + + recorded_at_index = sorted(recorded_at_points_set) + heart_rate_measurements: dict[str, list[float | None]] = {} + + for file_records in file_records_iterable: + heart_rate_measurements[file_records.name] = [ + heart_rate_at_datetime(file_records, recorded_at) + for recorded_at in recorded_at_index + ] + + return DataFrame(data=heart_rate_measurements)