{ "cells": [ { "cell_type": "markdown", "source": [ "**What does this notebook do?**\n", "- Load the exported CGM values from NutriSense\n", "- Print out what days are included in the dataset\n", "- Pair down data to only one day, include CGM values, meals and exercise\n", "- Smooth CGM data and interpolate missing values\n", "- Pull in Garmin step information and \"run activities\" and plot them\n", "- Calculate key metrics for that day, both glucose and steps\n", "- Retrieve sleep data from an outside Excel file for that day\n", "- Create a chart of the glucose values, meals, activities, steps, sleep and include some metrics" ], "metadata": {} }, { "cell_type": "code", "execution_count": 1, "source": [ "import pandas as pd\n", "import plotly.express as px\n", "from plotly.subplots import make_subplots\n", "import plotly.graph_objects as go\n", "import datetime\n", "from datetime import date\n", "from garminconnect import (\n", " Garmin,\n", " GarminConnectConnectionError,\n", " GarminConnectTooManyRequestsError,\n", " GarminConnectAuthenticationError,\n", ")\n", "from openpyxl import Workbook, load_workbook\n", "\n", "# Read in CSV file\n", "df = pd.read_csv('export2.csv')\n", "\n", "# Remove \"time zone offset\" from \"occurred_at\" column and add new \"occurred_at_day\" column\n", "df['occurred_at_day'] = df['occurred_at'].apply(lambda x: x[:len(x) - 15])\n", "df['occurred_at'] = df['occurred_at'].apply(lambda x: x[:len(x) - 6])\n", "df.head()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", " | class | \n", "value | \n", "time | \n", "length | \n", "photo_url | \n", "description | \n", "occurred_at | \n", "body | \n", "updated_at | \n", "started_at | \n", "ended_at | \n", "created_by | \n", "occurred_at_day | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "GlucoseMeasurement | \n", "110.0 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 07:44:20 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 | \n", "
1 | \n", "GlucoseMeasurement | \n", "110.0 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 07:29:20 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 | \n", "
2 | \n", "GlucoseMeasurement | \n", "109.0 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 07:12:27 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 | \n", "
3 | \n", "GlucoseMeasurement | \n", "104.0 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 06:57:27 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 | \n", "
4 | \n", "GlucoseMeasurement | \n", "105.0 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 06:42:27 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "2021-09-02 | \n", "
\n", " | startGMT | \n", "endGMT | \n", "steps | \n", "primaryActivityLevel | \n", "activityLevelConstant | \n", "time | \n", "
---|---|---|---|---|---|---|
0 | \n", "2021-08-31T04:00:00.0 | \n", "2021-08-31T04:15:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 00:00:00 | \n", "
1 | \n", "2021-08-31T04:15:00.0 | \n", "2021-08-31T04:30:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 00:15:00 | \n", "
2 | \n", "2021-08-31T04:30:00.0 | \n", "2021-08-31T04:45:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 00:30:00 | \n", "
3 | \n", "2021-08-31T04:45:00.0 | \n", "2021-08-31T05:00:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 00:45:00 | \n", "
4 | \n", "2021-08-31T05:00:00.0 | \n", "2021-08-31T05:15:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 01:00:00 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
91 | \n", "2021-09-01T02:45:00.0 | \n", "2021-09-01T03:00:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 22:45:00 | \n", "
92 | \n", "2021-09-01T03:00:00.0 | \n", "2021-09-01T03:15:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 23:00:00 | \n", "
93 | \n", "2021-09-01T03:15:00.0 | \n", "2021-09-01T03:30:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 23:15:00 | \n", "
94 | \n", "2021-09-01T03:30:00.0 | \n", "2021-09-01T03:45:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 23:30:00 | \n", "
95 | \n", "2021-09-01T03:45:00.0 | \n", "2021-09-01T04:00:00.0 | \n", "0 | \n", "sedentary | \n", "True | \n", "2021-08-31 23:45:00 | \n", "
96 rows × 6 columns
\n", "