diff --git a/dbdpy/apple_watch.py b/dbdpy/apple_watch.py index 75db95b3..77bd7ae6 100644 --- a/dbdpy/apple_watch.py +++ b/dbdpy/apple_watch.py @@ -90,11 +90,6 @@ def read_file(cls, filepath: str, device_name: str = "Apple Watch"): .drop(columns="type") .rename(columns={"value": "active_calories"}) ) - steps = ( - record_df[record_df["type"] == "StepCount"] - .drop(columns="type") - .rename(columns={"value": "steps"}) - ) distance = ( record_df[record_df["type"] == "DistanceWalkingRunning"] .drop(columns="type") @@ -110,12 +105,9 @@ def read_file(cls, filepath: str, device_name: str = "Apple Watch"): .drop(columns="type") .rename(columns={"value": "heart_rate"}) ) - sleep = record_df[record_df["type"] == "SleepAnalysis"].drop(columns="type") return cls( - sleep=sleep, energy=energy, - steps=steps, distance=distance, oxygen=oxygen, heart_rate=heart_rate, diff --git a/dbdpy/commercial_device.py b/dbdpy/commercial_device.py index 912bba9b..7ee42559 100644 --- a/dbdpy/commercial_device.py +++ b/dbdpy/commercial_device.py @@ -1,16 +1,12 @@ class CommercialDevice: def __init__( self, - sleep=None, energy=None, - steps=None, distance=None, oxygen=None, heart_rate=None, ) -> None: - self.sleep = sleep self.energy = energy - self.steps = steps self.distance = distance self.oxygen = oxygen self.heart_rate = heart_rate diff --git a/notebooks/workflow_example.ipynb b/notebooks/workflow_example.ipynb index 138c3a06..451defb3 100644 --- a/notebooks/workflow_example.ipynb +++ b/notebooks/workflow_example.ipynb @@ -197,9 +197,6 @@ "record_df[\"type\"] = record_df[\"type\"].str.replace(\"HKQuantityTypeIdentifier\", \"\")\n", "record_df[\"type\"] = record_df[\"type\"].str.replace(\"HKCategoryTypeIdentifier\", \"\")\n", "\n", - "# De-identify souce name? \n", - "\n", - "# Remove unnecessary columns? \n", "\n", "energy = record_df[record_df[\"type\"] == \"BasalEnergyBurned\"]\n", "steps = record_df[record_df[\"type\"] == \"StepCount\"]\n", @@ -218,6 +215,194 @@ "### Garmin" ] }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "import pandas as pd\n", + "from garmin_fit_sdk import Decoder, Stream" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "directory_path = Path(\"./data/garmin/\")\n", + "\n", + "monitoring_data = pd.DataFrame()\n", + "oxygen_data = pd.DataFrame()\n", + "for file in directory_path.rglob(\"*WELLNESS.fit\"):\n", + " stream = Stream.from_file(file)\n", + " decoder = Decoder(stream)\n", + " messages, _ = decoder.read(\n", + " apply_scale_and_offset=True,\n", + " convert_datetimes_to_dates=False,\n", + " convert_types_to_strings=True,\n", + " enable_crc_check=True,\n", + " expand_sub_fields=True,\n", + " expand_components=True,\n", + " merge_heart_rates=False,\n", + " mesg_listener=None,\n", + " )\n", + " \n", + " monitoring_df = pd.DataFrame(messages[\"monitoring_mesgs\"])[[\"timestamp\", \"distance\", \"heart_rate\", \"active_calories\"]]\n", + " try:\n", + " oxygen_df = pd.DataFrame(messages[\"spo2_data_mesgs\"])[[\"timestamp\", \"reading_spo2\"]]\n", + " except KeyError:\n", + " continue\n", + "\n", + " monitoring_data = pd.concat([monitoring_data, monitoring_df])\n", + " oxygen_data = pd.concat([oxygen_data, oxygen_df])\n", + "\n", + "# Convert the timestamp\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + " | timestamp | \n", + "distance | \n", + "heart_rate | \n", + "active_calories | \n", + "
---|---|---|---|---|
0 | \n", + "1.064462e+09 | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
1 | \n", + "1.064462e+09 | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
2 | \n", + "1.064462e+09 | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
3 | \n", + "NaN | \n", + "NaN | \n", + "74.0 | \n", + "NaN | \n", + "
4 | \n", + "NaN | \n", + "NaN | \n", + "71.0 | \n", + "NaN | \n", + "
... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
550 | \n", + "NaN | \n", + "533.84 | \n", + "NaN | \n", + "59.0 | \n", + "
551 | \n", + "1.064242e+09 | \n", + "0.00 | \n", + "NaN | \n", + "1.0 | \n", + "
552 | \n", + "1.064242e+09 | \n", + "591.75 | \n", + "NaN | \n", + "63.0 | \n", + "
553 | \n", + "1.064242e+09 | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
554 | \n", + "1.064242e+09 | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
7847 rows × 4 columns
\n", + "