--- a +++ b/analytics/Sleep.ipynb @@ -0,0 +1,1749 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c9cd40c6-9b57-4e4d-8f29-adb2513dcb96", + "metadata": {}, + "source": [ + "# Sleep Analytics" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "5a02e79e-f3d9-403b-be42-ecd064ffd2e6", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "4675804a-483b-4d14-99dd-7bc60d97658a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "User First Name object\n", + "Calendar Date (Local) datetime64[ns]\n", + "Start Time (Local) datetime64[ns]\n", + "End Time (Local) datetime64[ns]\n", + "Start Time (s) int64\n", + "Processing Time datetime64[ns]\n", + "Duration (s) int64\n", + "Rem Sleep Duration (s) int64\n", + "Deep Sleep Duration (s) int64\n", + "Light Sleep Duration (s) int64\n", + "Awake Duration (s) int64\n", + "Sleep Efficiency float64\n", + "Sleep Score Value float64\n", + "Sleep Score Qualifier object\n", + "Source object\n", + "SleepPhaseStartTimeSec int64\n", + "SleepPhaseEndTimeSec int64\n", + "SleepPhaseStartTime datetime64[ns]\n", + "SleepPhaseEndTime datetime64[ns]\n", + "SleepPhaseDuration int64\n", + "SleepLevel object\n", + "dtype: object\n" + ] + }, + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>User First Name</th>\n", + " <th>Calendar Date (Local)</th>\n", + " <th>Start Time (Local)</th>\n", + " <th>End Time (Local)</th>\n", + " <th>Start Time (s)</th>\n", + " <th>Processing Time</th>\n", + " <th>Duration (s)</th>\n", + " <th>Rem Sleep Duration (s)</th>\n", + " <th>Deep Sleep Duration (s)</th>\n", + " <th>Light Sleep Duration (s)</th>\n", + " <th>...</th>\n", + " <th>Sleep Efficiency</th>\n", + " <th>Sleep Score Value</th>\n", + " <th>Sleep Score Qualifier</th>\n", + " <th>Source</th>\n", + " <th>SleepPhaseStartTimeSec</th>\n", + " <th>SleepPhaseEndTimeSec</th>\n", + " <th>SleepPhaseStartTime</th>\n", + " <th>SleepPhaseEndTime</th>\n", + " <th>SleepPhaseDuration</th>\n", + " <th>SleepLevel</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>P10</td>\n", + " <td>2023-12-22</td>\n", + " <td>2023-12-22 01:17:00</td>\n", + " <td>2023-12-22 09:03:00</td>\n", + " <td>1703204220</td>\n", + " <td>2023-12-23 09:51:08.503</td>\n", + " <td>27960</td>\n", + " <td>8400</td>\n", + " <td>3000</td>\n", + " <td>16560</td>\n", + " <td>...</td>\n", + " <td>1.000000</td>\n", + " <td>94.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1703204580</td>\n", + " <td>1703206800</td>\n", + " <td>2023-12-22 01:23:00</td>\n", + " <td>2023-12-22 02:00:00</td>\n", + " <td>2220</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>P10</td>\n", + " <td>2023-12-22</td>\n", + " <td>2023-12-22 01:17:00</td>\n", + " <td>2023-12-22 09:03:00</td>\n", + " <td>1703204220</td>\n", + " <td>2023-12-23 09:51:08.503</td>\n", + " <td>27960</td>\n", + " <td>8400</td>\n", + " <td>3000</td>\n", + " <td>16560</td>\n", + " <td>...</td>\n", + " <td>1.000000</td>\n", + " <td>94.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1703210520</td>\n", + " <td>1703211300</td>\n", + " <td>2023-12-22 03:02:00</td>\n", + " <td>2023-12-22 03:15:00</td>\n", + " <td>780</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>P10</td>\n", + " <td>2023-12-22</td>\n", + " <td>2023-12-22 01:17:00</td>\n", + " <td>2023-12-22 09:03:00</td>\n", + " <td>1703204220</td>\n", + " <td>2023-12-23 09:51:08.503</td>\n", + " <td>27960</td>\n", + " <td>8400</td>\n", + " <td>3000</td>\n", + " <td>16560</td>\n", + " <td>...</td>\n", + " <td>1.000000</td>\n", + " <td>94.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1703204220</td>\n", + " <td>1703204580</td>\n", + " <td>2023-12-22 01:17:00</td>\n", + " <td>2023-12-22 01:23:00</td>\n", + " <td>360</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>P10</td>\n", + " <td>2023-12-22</td>\n", + " <td>2023-12-22 01:17:00</td>\n", + " <td>2023-12-22 09:03:00</td>\n", + " <td>1703204220</td>\n", + " <td>2023-12-23 09:51:08.503</td>\n", + " <td>27960</td>\n", + " <td>8400</td>\n", + " <td>3000</td>\n", + " <td>16560</td>\n", + " <td>...</td>\n", + " <td>1.000000</td>\n", + " <td>94.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1703206800</td>\n", + " <td>1703207700</td>\n", + " <td>2023-12-22 02:00:00</td>\n", + " <td>2023-12-22 02:15:00</td>\n", + " <td>900</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>P10</td>\n", + " <td>2023-12-22</td>\n", + " <td>2023-12-22 01:17:00</td>\n", + " <td>2023-12-22 09:03:00</td>\n", + " <td>1703204220</td>\n", + " <td>2023-12-23 09:51:08.503</td>\n", + " <td>27960</td>\n", + " <td>8400</td>\n", + " <td>3000</td>\n", + " <td>16560</td>\n", + " <td>...</td>\n", + " <td>1.000000</td>\n", + " <td>94.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1703208240</td>\n", + " <td>1703210520</td>\n", + " <td>2023-12-22 02:24:00</td>\n", + " <td>2023-12-22 03:02:00</td>\n", + " <td>2280</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3791</th>\n", + " <td>P14</td>\n", + " <td>2024-01-08</td>\n", + " <td>2024-01-08 00:01:00</td>\n", + " <td>2024-01-08 07:34:00</td>\n", + " <td>1704668460</td>\n", + " <td>2024-01-08 10:41:41.126</td>\n", + " <td>27180</td>\n", + " <td>4140</td>\n", + " <td>6600</td>\n", + " <td>16380</td>\n", + " <td>...</td>\n", + " <td>0.997792</td>\n", + " <td>92.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1704695040</td>\n", + " <td>1704695640</td>\n", + " <td>2024-01-08 07:24:00</td>\n", + " <td>2024-01-08 07:34:00</td>\n", + " <td>600</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3792</th>\n", + " <td>P14</td>\n", + " <td>2024-01-08</td>\n", + " <td>2024-01-08 00:01:00</td>\n", + " <td>2024-01-08 07:34:00</td>\n", + " <td>1704668460</td>\n", + " <td>2024-01-08 10:41:41.126</td>\n", + " <td>27180</td>\n", + " <td>4140</td>\n", + " <td>6600</td>\n", + " <td>16380</td>\n", + " <td>...</td>\n", + " <td>0.997792</td>\n", + " <td>92.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1704679020</td>\n", + " <td>1704679620</td>\n", + " <td>2024-01-08 02:57:00</td>\n", + " <td>2024-01-08 03:07:00</td>\n", + " <td>600</td>\n", + " <td>rem</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3793</th>\n", + " <td>P14</td>\n", + " <td>2024-01-08</td>\n", + " <td>2024-01-08 00:01:00</td>\n", + " <td>2024-01-08 07:34:00</td>\n", + " <td>1704668460</td>\n", + " <td>2024-01-08 10:41:41.126</td>\n", + " <td>27180</td>\n", + " <td>4140</td>\n", + " <td>6600</td>\n", + " <td>16380</td>\n", + " <td>...</td>\n", + " <td>0.997792</td>\n", + " <td>92.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1704687960</td>\n", + " <td>1704690420</td>\n", + " <td>2024-01-08 05:26:00</td>\n", + " <td>2024-01-08 06:07:00</td>\n", + " <td>2460</td>\n", + " <td>rem</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3794</th>\n", + " <td>P14</td>\n", + " <td>2024-01-08</td>\n", + " <td>2024-01-08 00:01:00</td>\n", + " <td>2024-01-08 07:34:00</td>\n", + " <td>1704668460</td>\n", + " <td>2024-01-08 10:41:41.126</td>\n", + " <td>27180</td>\n", + " <td>4140</td>\n", + " <td>6600</td>\n", + " <td>16380</td>\n", + " <td>...</td>\n", + " <td>0.997792</td>\n", + " <td>92.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1704693960</td>\n", + " <td>1704695040</td>\n", + " <td>2024-01-08 07:06:00</td>\n", + " <td>2024-01-08 07:24:00</td>\n", + " <td>1080</td>\n", + " <td>rem</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3795</th>\n", + " <td>P14</td>\n", + " <td>2024-01-08</td>\n", + " <td>2024-01-08 00:01:00</td>\n", + " <td>2024-01-08 07:34:00</td>\n", + " <td>1704668460</td>\n", + " <td>2024-01-08 10:41:41.126</td>\n", + " <td>27180</td>\n", + " <td>4140</td>\n", + " <td>6600</td>\n", + " <td>16380</td>\n", + " <td>...</td>\n", + " <td>0.997792</td>\n", + " <td>92.0</td>\n", + " <td>Excellent</td>\n", + " <td>device</td>\n", + " <td>1704671100</td>\n", + " <td>1704671160</td>\n", + " <td>2024-01-08 00:45:00</td>\n", + " <td>2024-01-08 00:46:00</td>\n", + " <td>60</td>\n", + " <td>awake</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>2318 rows × 21 columns</p>\n", + "</div>" + ], + "text/plain": [ + " User First Name Calendar Date (Local) Start Time (Local) \\\n", + "0 P10 2023-12-22 2023-12-22 01:17:00 \n", + "1 P10 2023-12-22 2023-12-22 01:17:00 \n", + "2 P10 2023-12-22 2023-12-22 01:17:00 \n", + "3 P10 2023-12-22 2023-12-22 01:17:00 \n", + "4 P10 2023-12-22 2023-12-22 01:17:00 \n", + "... ... ... ... \n", + "3791 P14 2024-01-08 2024-01-08 00:01:00 \n", + "3792 P14 2024-01-08 2024-01-08 00:01:00 \n", + "3793 P14 2024-01-08 2024-01-08 00:01:00 \n", + "3794 P14 2024-01-08 2024-01-08 00:01:00 \n", + "3795 P14 2024-01-08 2024-01-08 00:01:00 \n", + "\n", + " End Time (Local) Start Time (s) Processing Time \\\n", + "0 2023-12-22 09:03:00 1703204220 2023-12-23 09:51:08.503 \n", + "1 2023-12-22 09:03:00 1703204220 2023-12-23 09:51:08.503 \n", + "2 2023-12-22 09:03:00 1703204220 2023-12-23 09:51:08.503 \n", + "3 2023-12-22 09:03:00 1703204220 2023-12-23 09:51:08.503 \n", + "4 2023-12-22 09:03:00 1703204220 2023-12-23 09:51:08.503 \n", + "... ... ... ... \n", + "3791 2024-01-08 07:34:00 1704668460 2024-01-08 10:41:41.126 \n", + "3792 2024-01-08 07:34:00 1704668460 2024-01-08 10:41:41.126 \n", + "3793 2024-01-08 07:34:00 1704668460 2024-01-08 10:41:41.126 \n", + "3794 2024-01-08 07:34:00 1704668460 2024-01-08 10:41:41.126 \n", + "3795 2024-01-08 07:34:00 1704668460 2024-01-08 10:41:41.126 \n", + "\n", + " Duration (s) Rem Sleep Duration (s) Deep Sleep Duration (s) \\\n", + "0 27960 8400 3000 \n", + "1 27960 8400 3000 \n", + "2 27960 8400 3000 \n", + "3 27960 8400 3000 \n", + "4 27960 8400 3000 \n", + "... ... ... ... \n", + "3791 27180 4140 6600 \n", + "3792 27180 4140 6600 \n", + "3793 27180 4140 6600 \n", + "3794 27180 4140 6600 \n", + "3795 27180 4140 6600 \n", + "\n", + " Light Sleep Duration (s) ... Sleep Efficiency Sleep Score Value \\\n", + "0 16560 ... 1.000000 94.0 \n", + "1 16560 ... 1.000000 94.0 \n", + "2 16560 ... 1.000000 94.0 \n", + "3 16560 ... 1.000000 94.0 \n", + "4 16560 ... 1.000000 94.0 \n", + "... ... ... ... ... \n", + "3791 16380 ... 0.997792 92.0 \n", + "3792 16380 ... 0.997792 92.0 \n", + "3793 16380 ... 0.997792 92.0 \n", + "3794 16380 ... 0.997792 92.0 \n", + "3795 16380 ... 0.997792 92.0 \n", + "\n", + " Sleep Score Qualifier Source SleepPhaseStartTimeSec \\\n", + "0 Excellent device 1703204580 \n", + "1 Excellent device 1703210520 \n", + "2 Excellent device 1703204220 \n", + "3 Excellent device 1703206800 \n", + "4 Excellent device 1703208240 \n", + "... ... ... ... \n", + "3791 Excellent device 1704695040 \n", + "3792 Excellent device 1704679020 \n", + "3793 Excellent device 1704687960 \n", + "3794 Excellent device 1704693960 \n", + "3795 Excellent device 1704671100 \n", + "\n", + " SleepPhaseEndTimeSec SleepPhaseStartTime SleepPhaseEndTime \\\n", + "0 1703206800 2023-12-22 01:23:00 2023-12-22 02:00:00 \n", + "1 1703211300 2023-12-22 03:02:00 2023-12-22 03:15:00 \n", + "2 1703204580 2023-12-22 01:17:00 2023-12-22 01:23:00 \n", + "3 1703207700 2023-12-22 02:00:00 2023-12-22 02:15:00 \n", + "4 1703210520 2023-12-22 02:24:00 2023-12-22 03:02:00 \n", + "... ... ... ... \n", + "3791 1704695640 2024-01-08 07:24:00 2024-01-08 07:34:00 \n", + "3792 1704679620 2024-01-08 02:57:00 2024-01-08 03:07:00 \n", + "3793 1704690420 2024-01-08 05:26:00 2024-01-08 06:07:00 \n", + "3794 1704695040 2024-01-08 07:06:00 2024-01-08 07:24:00 \n", + "3795 1704671160 2024-01-08 00:45:00 2024-01-08 00:46:00 \n", + "\n", + " SleepPhaseDuration SleepLevel \n", + "0 2220 deep \n", + "1 780 deep \n", + "2 360 light \n", + "3 900 light \n", + "4 2280 light \n", + "... ... ... \n", + "3791 600 light \n", + "3792 600 rem \n", + "3793 2460 rem \n", + "3794 1080 rem \n", + "3795 60 awake \n", + "\n", + "[2318 rows x 21 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load dataset\n", + "df = pd.read_csv('../data/garmin/sleep.csv', sep=',')\n", + "\n", + "# Drop not needed columns\n", + "df = df.drop(columns=['User Id', 'User Last Name', 'User Email', 'Team Names', 'Group Names', \n", + " 'Calendar Date (UTC)', 'Start Time (UTC)', 'End Time (UTC)',\n", + " 'Validation', 'Time Zone (s)', 'Timezone (Local)', 'Summary Id'])\n", + "\n", + "# Convert data types\n", + "df['Calendar Date (Local)'] = pd.to_datetime(df['Calendar Date (Local)'])\n", + "df['Start Time (Local)'] = pd.to_datetime(df['Start Time (Local)'])\n", + "df['End Time (Local)'] = pd.to_datetime(df['End Time (Local)'])\n", + "df['Processing Time'] = pd.to_datetime(df['Processing Time'])\n", + "df['SleepPhaseStartTime'] = pd.to_datetime(df['SleepPhaseStartTime'])\n", + "#df['SleepPhaseEndTime'] = df['SleepPhaseEndTime'].str.replace('T',' ')\n", + "df['SleepPhaseEndTime'] = pd.to_datetime(df['SleepPhaseEndTime'], format='mixed')\n", + "\n", + "# Only use records from device\n", + "df = df[df['Source'] == 'device']\n", + "\n", + "# Get overview about data types\n", + "print(df.dtypes)\n", + "\n", + "# Get overview about data in the dataset\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "631c9d12-4b71-41a6-9c36-d37fc048f95e", + "metadata": {}, + "source": [ + "## View data of a single individual for a given day" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "fcb2d8d1-21b5-4875-8d1a-859df7b9d0f3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>User First Name</th>\n", + " <th>Calendar Date (Local)</th>\n", + " <th>Start Time (Local)</th>\n", + " <th>End Time (Local)</th>\n", + " <th>Start Time (s)</th>\n", + " <th>Processing Time</th>\n", + " <th>Duration (s)</th>\n", + " <th>Rem Sleep Duration (s)</th>\n", + " <th>Deep Sleep Duration (s)</th>\n", + " <th>Light Sleep Duration (s)</th>\n", + " <th>...</th>\n", + " <th>Sleep Efficiency</th>\n", + " <th>Sleep Score Value</th>\n", + " <th>Sleep Score Qualifier</th>\n", + " <th>Source</th>\n", + " <th>SleepPhaseStartTimeSec</th>\n", + " <th>SleepPhaseEndTimeSec</th>\n", + " <th>SleepPhaseStartTime</th>\n", + " <th>SleepPhaseEndTime</th>\n", + " <th>SleepPhaseDuration</th>\n", + " <th>SleepLevel</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>2061</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703376000</td>\n", + " <td>1703378520</td>\n", + " <td>2023-12-24 01:00:00</td>\n", + " <td>2023-12-24 01:42:00</td>\n", + " <td>2520</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2062</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703380920</td>\n", + " <td>1703382300</td>\n", + " <td>2023-12-24 02:22:00</td>\n", + " <td>2023-12-24 02:45:00</td>\n", + " <td>1380</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2063</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703387160</td>\n", + " <td>1703388300</td>\n", + " <td>2023-12-24 04:06:00</td>\n", + " <td>2023-12-24 04:25:00</td>\n", + " <td>1140</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2064</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703375280</td>\n", + " <td>1703376000</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 01:00:00</td>\n", + " <td>720</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2065</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703378520</td>\n", + " <td>1703379720</td>\n", + " <td>2023-12-24 01:42:00</td>\n", + " <td>2023-12-24 02:02:00</td>\n", + " <td>1200</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2066</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703379780</td>\n", + " <td>1703380920</td>\n", + " <td>2023-12-24 02:03:00</td>\n", + " <td>2023-12-24 02:22:00</td>\n", + " <td>1140</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2067</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703382300</td>\n", + " <td>1703383440</td>\n", + " <td>2023-12-24 02:45:00</td>\n", + " <td>2023-12-24 03:04:00</td>\n", + " <td>1140</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2068</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703385720</td>\n", + " <td>1703387160</td>\n", + " <td>2023-12-24 03:42:00</td>\n", + " <td>2023-12-24 04:06:00</td>\n", + " <td>1440</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2069</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703388300</td>\n", + " <td>1703390160</td>\n", + " <td>2023-12-24 04:25:00</td>\n", + " <td>2023-12-24 04:56:00</td>\n", + " <td>1860</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2070</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703383440</td>\n", + " <td>1703384520</td>\n", + " <td>2023-12-24 03:04:00</td>\n", + " <td>2023-12-24 03:22:00</td>\n", + " <td>1080</td>\n", + " <td>rem</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2071</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703390160</td>\n", + " <td>1703391280</td>\n", + " <td>2023-12-24 04:56:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1120</td>\n", + " <td>rem</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2072</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703379720</td>\n", + " <td>1703379780</td>\n", + " <td>2023-12-24 02:02:00</td>\n", + " <td>2023-12-24 02:03:00</td>\n", + " <td>60</td>\n", + " <td>awake</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>12 rows × 21 columns</p>\n", + "</div>" + ], + "text/plain": [ + " User First Name Calendar Date (Local) Start Time (Local) \\\n", + "2061 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2062 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2063 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2064 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2065 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2066 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2067 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2068 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2069 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2070 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2071 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2072 P12 2023-12-24 2023-12-24 00:48:00 \n", + "\n", + " End Time (Local) Start Time (s) Processing Time \\\n", + "2061 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2062 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2063 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2064 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2065 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2066 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2067 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2068 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2069 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2070 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2071 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2072 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "\n", + " Duration (s) Rem Sleep Duration (s) Deep Sleep Duration (s) \\\n", + "2061 16000 2200 5040 \n", + "2062 16000 2200 5040 \n", + "2063 16000 2200 5040 \n", + "2064 16000 2200 5040 \n", + "2065 16000 2200 5040 \n", + "2066 16000 2200 5040 \n", + "2067 16000 2200 5040 \n", + "2068 16000 2200 5040 \n", + "2069 16000 2200 5040 \n", + "2070 16000 2200 5040 \n", + "2071 16000 2200 5040 \n", + "2072 16000 2200 5040 \n", + "\n", + " Light Sleep Duration (s) ... Sleep Efficiency Sleep Score Value \\\n", + "2061 7500 ... 0.99625 56.0 \n", + "2062 7500 ... 0.99625 56.0 \n", + "2063 7500 ... 0.99625 56.0 \n", + "2064 7500 ... 0.99625 56.0 \n", + "2065 7500 ... 0.99625 56.0 \n", + "2066 7500 ... 0.99625 56.0 \n", + "2067 7500 ... 0.99625 56.0 \n", + "2068 7500 ... 0.99625 56.0 \n", + "2069 7500 ... 0.99625 56.0 \n", + "2070 7500 ... 0.99625 56.0 \n", + "2071 7500 ... 0.99625 56.0 \n", + "2072 7500 ... 0.99625 56.0 \n", + "\n", + " Sleep Score Qualifier Source SleepPhaseStartTimeSec \\\n", + "2061 Poor device 1703376000 \n", + "2062 Poor device 1703380920 \n", + "2063 Poor device 1703387160 \n", + "2064 Poor device 1703375280 \n", + "2065 Poor device 1703378520 \n", + "2066 Poor device 1703379780 \n", + "2067 Poor device 1703382300 \n", + "2068 Poor device 1703385720 \n", + "2069 Poor device 1703388300 \n", + "2070 Poor device 1703383440 \n", + "2071 Poor device 1703390160 \n", + "2072 Poor device 1703379720 \n", + "\n", + " SleepPhaseEndTimeSec SleepPhaseStartTime SleepPhaseEndTime \\\n", + "2061 1703378520 2023-12-24 01:00:00 2023-12-24 01:42:00 \n", + "2062 1703382300 2023-12-24 02:22:00 2023-12-24 02:45:00 \n", + "2063 1703388300 2023-12-24 04:06:00 2023-12-24 04:25:00 \n", + "2064 1703376000 2023-12-24 00:48:00 2023-12-24 01:00:00 \n", + "2065 1703379720 2023-12-24 01:42:00 2023-12-24 02:02:00 \n", + "2066 1703380920 2023-12-24 02:03:00 2023-12-24 02:22:00 \n", + "2067 1703383440 2023-12-24 02:45:00 2023-12-24 03:04:00 \n", + "2068 1703387160 2023-12-24 03:42:00 2023-12-24 04:06:00 \n", + "2069 1703390160 2023-12-24 04:25:00 2023-12-24 04:56:00 \n", + "2070 1703384520 2023-12-24 03:04:00 2023-12-24 03:22:00 \n", + "2071 1703391280 2023-12-24 04:56:00 2023-12-24 05:14:40 \n", + "2072 1703379780 2023-12-24 02:02:00 2023-12-24 02:03:00 \n", + "\n", + " SleepPhaseDuration SleepLevel \n", + "2061 2520 deep \n", + "2062 1380 deep \n", + "2063 1140 deep \n", + "2064 720 light \n", + "2065 1200 light \n", + "2066 1140 light \n", + "2067 1140 light \n", + "2068 1440 light \n", + "2069 1860 light \n", + "2070 1080 rem \n", + "2071 1120 rem \n", + "2072 60 awake \n", + "\n", + "[12 rows x 21 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Select user = P12 and day = 2023-12-24\n", + "df_p12 = df[df['User First Name'] == 'P12']\n", + "df_p12_xmas = df_p12[df_p12['Calendar Date (Local)'] == '2023-12-24']\n", + "\n", + "# Print\n", + "df_p12_xmas" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "615dc83d-58ed-4b4f-a528-1839a621b816", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>User First Name</th>\n", + " <th>Calendar Date (Local)</th>\n", + " <th>Start Time (Local)</th>\n", + " <th>End Time (Local)</th>\n", + " <th>Start Time (s)</th>\n", + " <th>Processing Time</th>\n", + " <th>Duration (s)</th>\n", + " <th>Rem Sleep Duration (s)</th>\n", + " <th>Deep Sleep Duration (s)</th>\n", + " <th>Light Sleep Duration (s)</th>\n", + " <th>...</th>\n", + " <th>Sleep Efficiency</th>\n", + " <th>Sleep Score Value</th>\n", + " <th>Sleep Score Qualifier</th>\n", + " <th>Source</th>\n", + " <th>SleepPhaseStartTimeSec</th>\n", + " <th>SleepPhaseEndTimeSec</th>\n", + " <th>SleepPhaseStartTime</th>\n", + " <th>SleepPhaseEndTime</th>\n", + " <th>SleepPhaseDuration</th>\n", + " <th>SleepLevel</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>2061</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703376000</td>\n", + " <td>1703378520</td>\n", + " <td>2023-12-24 01:00:00</td>\n", + " <td>2023-12-24 01:42:00</td>\n", + " <td>2520</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2062</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703380920</td>\n", + " <td>1703382300</td>\n", + " <td>2023-12-24 02:22:00</td>\n", + " <td>2023-12-24 02:45:00</td>\n", + " <td>1380</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2063</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703387160</td>\n", + " <td>1703388300</td>\n", + " <td>2023-12-24 04:06:00</td>\n", + " <td>2023-12-24 04:25:00</td>\n", + " <td>1140</td>\n", + " <td>deep</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2064</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703375280</td>\n", + " <td>1703376000</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 01:00:00</td>\n", + " <td>720</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2065</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703378520</td>\n", + " <td>1703379720</td>\n", + " <td>2023-12-24 01:42:00</td>\n", + " <td>2023-12-24 02:02:00</td>\n", + " <td>1200</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2066</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703379780</td>\n", + " <td>1703380920</td>\n", + " <td>2023-12-24 02:03:00</td>\n", + " <td>2023-12-24 02:22:00</td>\n", + " <td>1140</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2067</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703382300</td>\n", + " <td>1703383440</td>\n", + " <td>2023-12-24 02:45:00</td>\n", + " <td>2023-12-24 03:04:00</td>\n", + " <td>1140</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2068</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703385720</td>\n", + " <td>1703387160</td>\n", + " <td>2023-12-24 03:42:00</td>\n", + " <td>2023-12-24 04:06:00</td>\n", + " <td>1440</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2069</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703388300</td>\n", + " <td>1703390160</td>\n", + " <td>2023-12-24 04:25:00</td>\n", + " <td>2023-12-24 04:56:00</td>\n", + " <td>1860</td>\n", + " <td>light</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2070</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703383440</td>\n", + " <td>1703384520</td>\n", + " <td>2023-12-24 03:04:00</td>\n", + " <td>2023-12-24 03:22:00</td>\n", + " <td>1080</td>\n", + " <td>rem</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2071</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703390160</td>\n", + " <td>1703391280</td>\n", + " <td>2023-12-24 04:56:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1120</td>\n", + " <td>rem</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2072</th>\n", + " <td>P12</td>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>1703375280</td>\n", + " <td>2023-12-25 17:28:23.071</td>\n", + " <td>16000</td>\n", + " <td>2200</td>\n", + " <td>5040</td>\n", + " <td>7500</td>\n", + " <td>...</td>\n", + " <td>0.99625</td>\n", + " <td>56.0</td>\n", + " <td>Poor</td>\n", + " <td>device</td>\n", + " <td>1703379720</td>\n", + " <td>1703379780</td>\n", + " <td>2023-12-24 02:02:00</td>\n", + " <td>2023-12-24 02:03:00</td>\n", + " <td>60</td>\n", + " <td>awake</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>12 rows × 21 columns</p>\n", + "</div>" + ], + "text/plain": [ + " User First Name Calendar Date (Local) Start Time (Local) \\\n", + "2061 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2062 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2063 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2064 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2065 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2066 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2067 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2068 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2069 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2070 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2071 P12 2023-12-24 2023-12-24 00:48:00 \n", + "2072 P12 2023-12-24 2023-12-24 00:48:00 \n", + "\n", + " End Time (Local) Start Time (s) Processing Time \\\n", + "2061 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2062 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2063 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2064 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2065 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2066 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2067 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2068 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2069 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2070 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2071 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "2072 2023-12-24 05:14:40 1703375280 2023-12-25 17:28:23.071 \n", + "\n", + " Duration (s) Rem Sleep Duration (s) Deep Sleep Duration (s) \\\n", + "2061 16000 2200 5040 \n", + "2062 16000 2200 5040 \n", + "2063 16000 2200 5040 \n", + "2064 16000 2200 5040 \n", + "2065 16000 2200 5040 \n", + "2066 16000 2200 5040 \n", + "2067 16000 2200 5040 \n", + "2068 16000 2200 5040 \n", + "2069 16000 2200 5040 \n", + "2070 16000 2200 5040 \n", + "2071 16000 2200 5040 \n", + "2072 16000 2200 5040 \n", + "\n", + " Light Sleep Duration (s) ... Sleep Efficiency Sleep Score Value \\\n", + "2061 7500 ... 0.99625 56.0 \n", + "2062 7500 ... 0.99625 56.0 \n", + "2063 7500 ... 0.99625 56.0 \n", + "2064 7500 ... 0.99625 56.0 \n", + "2065 7500 ... 0.99625 56.0 \n", + "2066 7500 ... 0.99625 56.0 \n", + "2067 7500 ... 0.99625 56.0 \n", + "2068 7500 ... 0.99625 56.0 \n", + "2069 7500 ... 0.99625 56.0 \n", + "2070 7500 ... 0.99625 56.0 \n", + "2071 7500 ... 0.99625 56.0 \n", + "2072 7500 ... 0.99625 56.0 \n", + "\n", + " Sleep Score Qualifier Source SleepPhaseStartTimeSec \\\n", + "2061 Poor device 1703376000 \n", + "2062 Poor device 1703380920 \n", + "2063 Poor device 1703387160 \n", + "2064 Poor device 1703375280 \n", + "2065 Poor device 1703378520 \n", + "2066 Poor device 1703379780 \n", + "2067 Poor device 1703382300 \n", + "2068 Poor device 1703385720 \n", + "2069 Poor device 1703388300 \n", + "2070 Poor device 1703383440 \n", + "2071 Poor device 1703390160 \n", + "2072 Poor device 1703379720 \n", + "\n", + " SleepPhaseEndTimeSec SleepPhaseStartTime SleepPhaseEndTime \\\n", + "2061 1703378520 2023-12-24 01:00:00 2023-12-24 01:42:00 \n", + "2062 1703382300 2023-12-24 02:22:00 2023-12-24 02:45:00 \n", + "2063 1703388300 2023-12-24 04:06:00 2023-12-24 04:25:00 \n", + "2064 1703376000 2023-12-24 00:48:00 2023-12-24 01:00:00 \n", + "2065 1703379720 2023-12-24 01:42:00 2023-12-24 02:02:00 \n", + "2066 1703380920 2023-12-24 02:03:00 2023-12-24 02:22:00 \n", + "2067 1703383440 2023-12-24 02:45:00 2023-12-24 03:04:00 \n", + "2068 1703387160 2023-12-24 03:42:00 2023-12-24 04:06:00 \n", + "2069 1703390160 2023-12-24 04:25:00 2023-12-24 04:56:00 \n", + "2070 1703384520 2023-12-24 03:04:00 2023-12-24 03:22:00 \n", + "2071 1703391280 2023-12-24 04:56:00 2023-12-24 05:14:40 \n", + "2072 1703379780 2023-12-24 02:02:00 2023-12-24 02:03:00 \n", + "\n", + " SleepPhaseDuration SleepLevel \n", + "2061 2520 deep \n", + "2062 1380 deep \n", + "2063 1140 deep \n", + "2064 720 light \n", + "2065 1200 light \n", + "2066 1140 light \n", + "2067 1140 light \n", + "2068 1440 light \n", + "2069 1860 light \n", + "2070 1080 rem \n", + "2071 1120 rem \n", + "2072 60 awake \n", + "\n", + "[12 rows x 21 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_p12_xmas = df_p12_xmas[df_p12_xmas['Source'] == 'device']\n", + "\n", + "# Print\n", + "df_p12_xmas" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "08b94b14-b8f4-4e5c-abc8-9e88b3aa64c6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sleep duration: 0 days 04:26:40\n" + ] + } + ], + "source": [ + "# Get sleep duaration for a given day\n", + "df_sleep = df_p12_xmas.iloc[0]\n", + "sleep_duration = df_sleep['End Time (Local)'] - df_sleep['Start Time (Local)']\n", + "print(\"Sleep duration: \", sleep_duration)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b4b9b17e-9ac5-42c9-97a4-945c1573f9bc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Calendar Date (Local)</th>\n", + " <th>Start Time (Local)</th>\n", + " <th>End Time (Local)</th>\n", + " <th>Duration (s)</th>\n", + " <th>Duration (m)</th>\n", + " <th>Duration (h)</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>1289</th>\n", + " <td>2023-12-23</td>\n", + " <td>2023-12-23 00:52:00</td>\n", + " <td>2023-12-23 08:45:00</td>\n", + " <td>28380</td>\n", + " <td>473.000000</td>\n", + " <td>7.883333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1613</th>\n", + " <td>2023-12-23</td>\n", + " <td>2023-12-23 05:21:00</td>\n", + " <td>2023-12-23 08:45:00</td>\n", + " <td>12240</td>\n", + " <td>204.000000</td>\n", + " <td>3.400000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1745</th>\n", + " <td>2023-12-23</td>\n", + " <td>2023-12-23 05:56:00</td>\n", + " <td>2023-12-23 08:45:00</td>\n", + " <td>10140</td>\n", + " <td>169.000000</td>\n", + " <td>2.816667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1865</th>\n", + " <td>2023-12-23</td>\n", + " <td>2023-12-23 06:29:00</td>\n", + " <td>2023-12-23 08:45:00</td>\n", + " <td>8160</td>\n", + " <td>136.000000</td>\n", + " <td>2.266667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1961</th>\n", + " <td>2023-12-23</td>\n", + " <td>2023-12-23 07:04:00</td>\n", + " <td>2023-12-23 08:45:00</td>\n", + " <td>6060</td>\n", + " <td>101.000000</td>\n", + " <td>1.683333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2033</th>\n", + " <td>2023-12-23</td>\n", + " <td>2023-12-23 08:21:00</td>\n", + " <td>2023-12-23 08:45:00</td>\n", + " <td>1440</td>\n", + " <td>24.000000</td>\n", + " <td>0.400000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2061</th>\n", + " <td>2023-12-24</td>\n", + " <td>2023-12-24 00:48:00</td>\n", + " <td>2023-12-24 05:14:40</td>\n", + " <td>16000</td>\n", + " <td>266.666667</td>\n", + " <td>4.444444</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2073</th>\n", + " <td>2023-12-25</td>\n", + " <td>2023-12-25 00:31:00</td>\n", + " <td>2023-12-25 10:21:00</td>\n", + " <td>35400</td>\n", + " <td>590.000000</td>\n", + " <td>9.833333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2101</th>\n", + " <td>2023-12-26</td>\n", + " <td>2023-12-26 01:06:00</td>\n", + " <td>2023-12-26 09:38:00</td>\n", + " <td>30720</td>\n", + " <td>512.000000</td>\n", + " <td>8.533333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2134</th>\n", + " <td>2023-12-27</td>\n", + " <td>2023-12-27 00:27:00</td>\n", + " <td>2023-12-27 07:52:00</td>\n", + " <td>26700</td>\n", + " <td>445.000000</td>\n", + " <td>7.416667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2170</th>\n", + " <td>2023-12-28</td>\n", + " <td>2023-12-28 01:13:00</td>\n", + " <td>2023-12-28 07:31:00</td>\n", + " <td>22680</td>\n", + " <td>378.000000</td>\n", + " <td>6.300000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2187</th>\n", + " <td>2023-12-29</td>\n", + " <td>2023-12-29 01:14:00</td>\n", + " <td>2023-12-29 08:58:00</td>\n", + " <td>27840</td>\n", + " <td>464.000000</td>\n", + " <td>7.733333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2212</th>\n", + " <td>2023-12-30</td>\n", + " <td>2023-12-30 03:16:00</td>\n", + " <td>2023-12-30 11:35:00</td>\n", + " <td>29940</td>\n", + " <td>499.000000</td>\n", + " <td>8.316667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2233</th>\n", + " <td>2023-12-31</td>\n", + " <td>2023-12-31 02:16:00</td>\n", + " <td>2023-12-31 11:40:00</td>\n", + " <td>33840</td>\n", + " <td>564.000000</td>\n", + " <td>9.400000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2266</th>\n", + " <td>2024-01-01</td>\n", + " <td>2024-01-01 02:20:00</td>\n", + " <td>2024-01-01 09:42:00</td>\n", + " <td>26520</td>\n", + " <td>442.000000</td>\n", + " <td>7.366667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2365</th>\n", + " <td>2024-01-03</td>\n", + " <td>2024-01-03 02:24:00</td>\n", + " <td>2024-01-03 09:01:00</td>\n", + " <td>23820</td>\n", + " <td>397.000000</td>\n", + " <td>6.616667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2382</th>\n", + " <td>2024-01-04</td>\n", + " <td>2024-01-04 01:07:00</td>\n", + " <td>2024-01-04 06:13:00</td>\n", + " <td>18360</td>\n", + " <td>306.000000</td>\n", + " <td>5.100000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Calendar Date (Local) Start Time (Local) End Time (Local) \\\n", + "1289 2023-12-23 2023-12-23 00:52:00 2023-12-23 08:45:00 \n", + "1613 2023-12-23 2023-12-23 05:21:00 2023-12-23 08:45:00 \n", + "1745 2023-12-23 2023-12-23 05:56:00 2023-12-23 08:45:00 \n", + "1865 2023-12-23 2023-12-23 06:29:00 2023-12-23 08:45:00 \n", + "1961 2023-12-23 2023-12-23 07:04:00 2023-12-23 08:45:00 \n", + "2033 2023-12-23 2023-12-23 08:21:00 2023-12-23 08:45:00 \n", + "2061 2023-12-24 2023-12-24 00:48:00 2023-12-24 05:14:40 \n", + "2073 2023-12-25 2023-12-25 00:31:00 2023-12-25 10:21:00 \n", + "2101 2023-12-26 2023-12-26 01:06:00 2023-12-26 09:38:00 \n", + "2134 2023-12-27 2023-12-27 00:27:00 2023-12-27 07:52:00 \n", + "2170 2023-12-28 2023-12-28 01:13:00 2023-12-28 07:31:00 \n", + "2187 2023-12-29 2023-12-29 01:14:00 2023-12-29 08:58:00 \n", + "2212 2023-12-30 2023-12-30 03:16:00 2023-12-30 11:35:00 \n", + "2233 2023-12-31 2023-12-31 02:16:00 2023-12-31 11:40:00 \n", + "2266 2024-01-01 2024-01-01 02:20:00 2024-01-01 09:42:00 \n", + "2365 2024-01-03 2024-01-03 02:24:00 2024-01-03 09:01:00 \n", + "2382 2024-01-04 2024-01-04 01:07:00 2024-01-04 06:13:00 \n", + "\n", + " Duration (s) Duration (m) Duration (h) \n", + "1289 28380 473.000000 7.883333 \n", + "1613 12240 204.000000 3.400000 \n", + "1745 10140 169.000000 2.816667 \n", + "1865 8160 136.000000 2.266667 \n", + "1961 6060 101.000000 1.683333 \n", + "2033 1440 24.000000 0.400000 \n", + "2061 16000 266.666667 4.444444 \n", + "2073 35400 590.000000 9.833333 \n", + "2101 30720 512.000000 8.533333 \n", + "2134 26700 445.000000 7.416667 \n", + "2170 22680 378.000000 6.300000 \n", + "2187 27840 464.000000 7.733333 \n", + "2212 29940 499.000000 8.316667 \n", + "2233 33840 564.000000 9.400000 \n", + "2266 26520 442.000000 7.366667 \n", + "2365 23820 397.000000 6.616667 \n", + "2382 18360 306.000000 5.100000 " + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a table of sleep times of a user for all days\n", + "df_sleeptime = df_p12.loc[:, ['Calendar Date (Local)', 'Start Time (Local)', 'End Time (Local)', 'Duration (s)']]\n", + "\n", + "# Remove duplicates\n", + "df_sleeptime = df_sleeptime.drop_duplicates()\n", + "\n", + "# Calculate sleep minutes and hours\n", + "df_sleeptime['Duration (m)'] = df_sleeptime['Duration (s)'] / 60\n", + "df_sleeptime['Duration (h)'] = df_sleeptime['Duration (m)'] / 60\n", + "\n", + "# Print\n", + "df_sleeptime" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "76eeeb05-66f3-4117-90cc-9605cacb4f12", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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avjw4WrXrp3at2+vefPm6fTp0xo5cqQkadiwYapVq5ZmzZolSXrooYfUvXt3Pffcc+rfv79WrlyprVu36p///Kc7fwwAAOBBPH4A+tvf/qaff/5ZU6ZMUVZWllq1aqV169YpMjJSkpSZmSkfn/+eyOrcubNWrFihSZMm6fHHH1eDBg307rvvqlmzZuV+zYCAAE2dOrXEt8U8Da3m8KZWybt6aTUHreag1Rye0GozjPJ8VgwAAODy4dHXAAEAAJiBAQgAAFgOAxAAALAcBiAAAGA5DEAAAMByGIAuA+np6frzzz/dnXHZ4e/UXHwAFbA2d//uYgDSuTtFT506VV988YUkKSUlRfHx8br22mv12muvubnuwho1aqQDBw64O6NMx44d09SpUzV06FBNmDBB+/btc3eS3bp167Rz505J5+40PmPGDNWqVUsBAQGqXbu2Zs+e7VG/rAcMGKB//etf+u2339ydckEFBQWaMGGCunXrpjlz5kiSZs6cqZCQEIWGhur222837RupL8b333+vYcOGqV69egoKClLlypXVvHlzTZ482aM6JWnPnj26//771bp1a9WsWVM1a9ZU69atdf/992vPnj3uziu3tLQ0XXvtte7OKBdPa+V316Wx/H2A3njjDY0cOVItWrTQDz/8oBdffFHjx4/XzTffrKKiIr3xxht68803dfPNN7s7VUOGDClx+3vvvadrr71WoaGhkqS1a9dWZFaJgoODlZGRoYiICO3Zs0edO3dWRESEWrdurZ07dyozM1ObN29WixYt3J2qxo0ba/HixeratatmzZql5557Tk888YSaNGmi/fv3a9asWRo/frwee+wxd6dKknx8fOTr66vKlSsrISFBo0aNUtu2bd2dVaLExEStWrVKCQkJ+uijj9SzZ0998MEHevrpp+Xj46MpU6YoPj5e8+fPd3eqPvnkEw0ePFjXX3+9goKCtHbtWt15552qXLmy3n77bRmGoY0bN5b5vYIV5eOPP9agQYPUpk0b9e3b135j2OzsbH322Wfatm2b3nvvPfXt29fNpRf2/fffq02bNiosLHR3ygV5Uiu/uy6d5Qeg1q1ba+TIkRo7dqySk5M1YMAAPfXUUxo/frwk6bnnntM777yjjRs3urn03C++bt26qW7dug7bX3/9dQ0cOFBVqlSRJI+Y/H18fJSVlaUaNWpo0KBBKioq0tq1a+Xn56eioiINHTpU+fn5ev/9992dqsDAQP3www+qU6eOmjdvrilTpuiWW26x7//www81btw4jznL5uPjo127dunTTz/V0qVLtXv3bjVv3lyjRo3S0KFDVbVqVXcn2tWpU0dLly5V7969dejQITVo0EBr167VjTfeKOnc/4O9++67dfjwYfeG6ty/Bffee6/uu+8+Sefaxo4dq7179+qPP/5QfHy8YmJiPOJ/Xy1bttSNN96o6dOnl7h/2rRpWrt2rXbs2FHBZcVdaLj98ccf9eyzz3rEUOFNrfzucgHD4ipXrmwcOnTIvl6pUiXj+++/t6/v3bvXuOKKK9yRVsxbb71l1K5d21i6dKnDdj8/P2P37t1uqiqZzWYzsrOzDcMwjJiYGCMlJcVhf2pqqlGzZk13pBVTs2ZNY/PmzYZhGEZkZKSRmprqsP+HH34wgoKC3JFWov/9uzUMw/j222+Ne+65xwgPDzeCgoKMhIQEIzk52Y2F/xUUFGRkZGTY1ytVqmTs2rXLvp6enm4EBwe7I62YwMBAIz093b5eVFRkVKpUyTh27JhhGIaRkpJiREREuKnOUWBgoLFv375S9+/bt88IDAyswKLS2Ww2Izo62oiLiytxiY6ONnx8fNydaRiGd7Xyu+vSWf4aoEqVKuns2bP29YCAAIWEhDise8q1Frfddps2bNigV199VTfddJNycnLcnVQqm80mm80m6dz0Hx4e7rC/SpUqHtM/ePBgPfXUUyosLNSNN96ol19+2eGanxdffFGtWrVyX+AFtG/fXq+88oqOHTuml19+WUeOHNF1113n7ixJ584Abd68WZL03XffyWazacuWLfb93377rWrVquWuPAe1atXS/v377etpaWkqKirSFVdcIUmqXbu28vPz3ZXnIC4uTh9++GGp+z/88EPFxsZWYFHpYmNjNXfuXKWnp5e4lPVzVDRvauV316Xz+C9DNVv9+vW1b98+NWrUSNK5U5zn34+Uzv0jWLt2bXflFRMXF6eUlBQ9+eSTatmypRYvXmwfNDyJYRhq2LChbDab8vPztWPHDofrfQ4ePOgR11JI0tNPP63evXurcePG6tSpk9asWaPPPvtMDRs21MGDB/Xrr7/qk08+cXfmBQUHB2vEiBEaMWKEfvjhB3fnSJLuu+8+jRgxQkuWLNG2bdv07LPP6vHHH9e+ffvk4+OjhQsX6uGHH3Z3piRp2LBhGjVqlJ544gkFBATo+eef18CBA+Xv7y9J2r59e7FT+O4yffp03X777Vq/fr169+7tcA1QcnKy1q1bpxUrVri58py2bdtq27ZtuvXWW0vcb7PZPOZDBt7Uyu+uS2f5Aejxxx93uGYiLCzMYf/WrVtL/R+Du/j4+OjJJ5/Uddddp2HDhnnE+9F/9df3cuvXr++w/s0332jw4MEVmVSq8PBwbdq0Sa+++qref/99xcXFqaioSGfPnlVCQoJGjx7tUf+QdO/e3f5LuTQNGzasoJqyjRs3TjVq1NDmzZt15513KiEhwX6d1ZkzZzR+/Hg98cQT7s6UdO7fgtOnT2vGjBkqKChQ37599cILL9j316pVSwsXLnRj4X/dcsstqlWrlubPn6/nnntOWVlZkqSoqCh16tRJ69evV6dOndxcec706dN15syZUvc3bdpU6enpFVhUOm9q5XfXpbP8RdDeLj8/X2lpaWrSpMkFfykCAOAJzv/uaty4sQICAtzSwAAEAJcJwzBUVFQkX19fd6dckKe35ubmOpxZ++t1jJ6E1otj+YugJemjjz7SqFGj9Oijjxa7QV9OTo5H3fjqf1v37t3rsM+TW/l7dS1v/bv1plZP/u/gzz//1KRJk9S9e3dNnTpVkvTMM88oJCREwcHBGj58uMMFsu7kTa2StGTJEjVt2lTVqlVT06ZNHf786quvujvPgTe3NmnSxP2t7vr4mad48803DV9fX6N///5Gly5djMDAQOONN96w78/KyvKYjz3Sag5vajUM7+ql1RyTJk0yIiMjjcTERKNp06bGfffdZ8TExBhvvPGGsXz5cqNWrVrGnDlz3J1pGIZ3tf7jH/8wgoODjYkTJxpffvmlsWfPHmPPnj3Gl19+aSQlJRmVK1c2nnnmGXdnGoZBqytYfgBq1aqV8cILL9jXV61aZVSuXNlYsmSJYRie9Y8erebwplbD8K5eWs1Rr1494/333zcMwzAOHDhg+Pj4GCtXrrTvX7VqldGsWTN35TnwptY6deoYq1atKnX/ypUrjZiYmAosKh2tl87yA9BfbyZlGIbxxRdfGCEhIcbChQs96h89Ws3hTa2G4V29tJojMDDQyMzMdFjfu3evff3QoUNGaGioO9KK8bbWPXv2lLp/9+7dHnNTVFovneU/Bh8WFqbs7GyH+3uc/76iG264QUePHnVjnSNazeFNrZJ39dJqjvDwcJ08eVIxMTGSpDZt2jjcA6agoMDt91g5z5tar776as2ePVuvvvqq/Pwcfz0WFhZqzpw5uvrqq91U54jWS2f5Aah9+/b6+OOP1bFjR4ft3bt31/vvv68bbrjBTWXF0WoOb2qVvKuXVnM0bdpUqampat68uSTp66+/dti/c+dONWjQwB1pxXhT64IFC9S3b19FRUWpW7duDjeYTElJkb+/vz799FM3V55D66Wz/KfAxo8fr8DAwBL39ejRQ++//76GDRtWwVUlo9Uc3tQqeVcvreZYtGiRunXrVur+P/74Q48++mgFFpXOm1rPf7P6jBkzFBoaqkOHDunQoUMKDQ3VzJkztW/fPjVr1szdmZJodQXuAwQAACzH8meAStK/f38dP37c3RnlQqs5vKlV8q5eWs1BqzloNYcntDIAlSAlJcVjvkX3Qmg1hze1St7VS6s5aDUHrebwhFYGIAAAYDkMQCWIjY1VpUqV3J1RLrSaw5taJe/qpdUctJqDVnN4QisXQQMAAMvhDND/V1RUVOr2zMzMCq4pG63m8KZWybt6aTUHrRXr9OnTSklJcXdGudB6YZYfgPLy8nTrrbeqcuXKioyM1JQpU1RYWGjf//PPPzvcGdadaDWHN7VK3tVLqzlodY+DBw+qZ8+e7s4oF1ovzPJ3gp48ebK+//57/etf/9LJkyc1c+ZMpaamau3atfL395ckecq7hLSaw5taJe/qpdUctAIuUOHfPuZh6tSpY3z55Zf29Z9//tlo37690adPH+P333/3qC9ApNUc3tRqGN7VS6s5aDVH1apVy1zCwsJovQie2mr5i6CDg4O1e/duh1Owp06dUt++fRUUFKQlS5aofv36Dqds3YVWc3hTq+RdvbSag1ZzVK5cWaNHj7Z/b9lfZWRk6Mknn6TVSR7bWuEjl4dp1KiR8eGHHxbbfurUKaNTp05Gy5YtPWaKptUc3tRqGN7VS6s5aDVH586djXnz5pW6f/v27bReBE9ttfxF0H369NFrr71WbHtISIg++eSTUr8c0R1oNYc3tUre1UurOWg1R//+/XXy5MlS91erVs1jvhCX1ktn+bfAcnJydOzYMV111VUl7j916pRSU1PVvXv3Ci4rjlZzeFOr5F29tJqDVuDSWX4AAgAA1mP5t8AuJDs7W9OnT3d3RrnQag5vapW8q5dWc9B68c6ePavVq1dr/PjxSkhIUEJCgsaPH681a9bo7Nmz7s5zQOul4QzQBXz//fdq06aNR1xJfyG0msObWiXv6qXVHLRenIMHD6pv3746duyYOnTooMjISEnnhrRvv/1WtWvX1scff6z69eu7uZRWV7D8jRB37NhR5v79+/dXUMmF0WoOb2qVvKuXVnPQao7zH9X+z3/+o7CwMId9eXl5GjZsmMaMGaNPPvnETYX/Reuls/wZIB8fH9lsthLvRHp+u81m84j/d0KrObypVfKuXlrNQas5goODtWXLFjVr1qzE/Tt37lSHDh105syZCi4rjtZLZ/kzQNWqVdM//vEP9erVq8T9u3fv1oABAyq4qmS0msObWiXv6qXVHLSao0qVKjp8+HCpv6gPHz6sKlWqVGxUKWi9dJYfgNq2batjx44pNja2xP0nT570mO+podUc3tQqeVcvreag1RyjRo3SsGHDNHnyZPXq1cvhWpXk5GTNnDlTDz74oJsrz6H10ll+ALrvvvt0+vTpUvfXqVOnxJt4uQOt5vCmVsm7emk1B63mmD59uipXrqxnnnlGDz/8sGw2m6RzX9YaFRWlxx57TI8++qibK8+h9dJZ/hogAAD+Kj09XVlZWZKkqKgoh+8y8zS0XhzuA1SCr7/+WgUFBe7OKBdazeFNrZJ39dJqDlpdq27duurUqZOKiooUHR3t7pwy0XpxOANUgrCwMG3fvl316tVzd8oF0WoOb2qVvKuXVnPQag5azeEJrZwBKoE3zYS0msObWiXv6qXVHLSag1ZzeEIrAxAAALAcBqASvPLKK/aP6Xk6Ws3hTa2Sd/XSag5azUGrOTyhlWuAAAAow/r169WhQwcFBQW5O+WCaC0/zgBJWrJkiYYPH26/F8WqVavUpEkT1atXT1OnTnVznSNazeFNrZJ39dJqDlorTp8+fXT48GF3Z5QLrU4wLG7u3LlG5cqVjSFDhhg1a9Y0Zs6caVxxxRXGzJkzjSeffNIICwszXnnlFXdnGoZBq1m8qdUwvKuXVnPQao7WrVuXuNhsNqNJkyb2dU9A66Wz/ADUuHFj48033zQMwzBSU1MNPz8/Y8mSJfb9S5YsMdq2beuuPAe0msObWg3Du3ppNQet5vDz8zP69etnTJs2zb5MnTrV8PHxMe6//377Nk9A66Wz/AAUFBRkZGRk2NcDAgKMXbt22dcPHDhgVKlSxR1pxdBqDm9qNQzv6qXVHLSaY+PGjcaVV15pTJkyxSgsLLRv9/PzM3bv3u3GsuJovXSWvwYoODjY4XtqIiIiFBIS4nDMn3/+WdFZJaLVHN7UKnlXL63moNUc11xzjbZt26YffvhBnTt3VlpamruTSkXrpbP8ANS4cWPt2LHDvn7kyBGHby3et2+f4uLi3FBWHK3m8KZWybt6aTUHreYJDw/XW2+9pXvvvVddunTRP//5T/uXd3oaWi+N5b8Nfs6cOapcuXKp+zMzM3XvvfdWYFHpaDWHN7VK3tVLqzloNd/IkSPVpUsXDR061GPOUJWG1ovDfYAAAChFUVGRTp06pbCwMLefsbgQWp3DAAQAACzH8tcASdLLL7+s3r1769Zbb1VycrLDvhMnTnjUN+vSag5vapW8q5dWc9BqDlrN4Ymtlh+A5s+fr0ceeUSNGzdWQECArr/+es2aNcu+v7CwUBkZGW4s/C9azeFNrZJ39dJqDlrNQas5PLbVbR/A9xBNmza136TLMAzj66+/NiIiIozJkycbhmEYWVlZho+Pj7vyHNBqDm9qNQzv6qXVHLSag1ZzeGqr5QegoKAgIz093WHbzp07jcjISGPixIke9R8RrebwplbD8K5eWs1BqzloNYentlr+Y/DVq1fXkSNHHO5D0axZM33xxRe69tprdezYMffF/QWt5vCmVsm7emk1B63moNUcntpq+WuAunTporVr1xbb3rRpUyUnJ+vjjz92Q1XJaDWHN7VK3tVLqzloNQet5vDUVsufAZo4caK2bdtW4r6rrrpKX3zxhd5+++0KrioZrebwplbJu3ppNQet5qDVHJ7ayn2AAACA5Vj+DNB5W7Zs0ebNm5WVlSVJioqKUqdOndS+fXs3lxVHqzm8qVXyrl5azUGrOWg1h8e1Vvhl1x4mOzvbuOaaawybzWbExsYa7du3N9q3b2/ExsYaNpvN6NKli5Gdne3uTMMwaDWLN7Uahnf10moOWs1Bqzk8tdXyA9BNN91kdOrUydi3b1+xffv27TM6d+5s3HzzzW4oK45Wc3hTq2F4Vy+t5qDVHLSaw1NbLT8AhYSEGKmpqaXu37p1qxESElKBRaWj1Rze1GoY3tVLqzloNQet5vDUVst/DD4gIEB5eXml7j916pQCAgIqsKh0tJrDm1ol7+ql1Ry0moNWc3hsa4WPXB7m/vvvN2JjY421a9caubm59u25ubnG2rVrjbi4OOOBBx5wY+F/0WoOb2o1DO/qpdUctJqDVnN4aqvlB6Dff//duO+++wx/f3/Dx8fHCAwMNAIDAw0fHx/D39/fGD16tPH777+7O9MwDFrN4k2thuFdvbSag1Zz0GoOT23lPkD/X15enrZt2+bw8by2bdsqLCzMzWXF0WoOb2qVvKuXVnPQag5azeFprQxAAADAcix/EbQk/fbbb9q4caP27NlTbN/vv/+u119/3Q1VJaPVHN7UKnlXL63moNUctJrDI1sr/E03D7N//377zZh8fHyMbt26GT/++KN9f1ZWluHj4+PGwv+i1Rze1GoY3tVLqzloNQet5vDUVsufAXrsscfUrFkz/fTTT9q/f79CQ0PVpUsXZWZmujutGFrN4U2tknf10moOWs1Bqzk8trXCRy4PU6NGDWPHjh329aKiIuO+++4z6tSpY6SlpXnUFE2rObyp1TC8q5dWc9BqDlrN4amtlj8D9Ntvv8nP77/fCWuz2bRw4UINGDBA3bt31w8//ODGOke0msObWiXv6qXVHLSag1ZzeGqr5b8NvnHjxtq6dauaNGnisH3BggWSpIEDB7ojq0S0msObWiXv6qXVHLSag1ZzeGxrhZ9z8jBPP/20ER8fX+r+0aNHGzabrQKLSkerObyp1TC8q5dWc9BqDlrN4amt3AcIAABYjuWvAQIAANbDAAQAACyHAQgAAFgOAxAAALAcBiAAFWrEiBEaNGiQ217/jjvu0NNPP+221y/NiRMnVKNGDR09etTdKYAl8CkwAC5js9nK3D916lSNHz9ehmGoSpUqFRP1P77//ntde+21ysjIUEhIiCSpR48e+uqrryRJ/v7+ql69utq0aaORI0dqyJAhFdo3YcIE5eTk6NVXX63Q1wWsiAEIgMtkZWXZ/7xq1SpNmTJF+/fvt28LCQmxDx7uMGrUKPn5+WnRokX2bT169FDDhg01ffp0/fnnnzp69KjeeecdzZ07VyNGjNA///nPCuvbvXu32rZtq2PHjqlatWoV9rqAFfEWGACXiYqKsi/h4eGy2WwO20JCQoq9BdajRw89+OCDGjdunKpWrarIyEgtXrxYp0+f1siRIxUaGqr69evr448/dnitXbt2KT4+XiEhIYqMjNQdd9yhEydOlNpWWFio//u//9OAAQOK7QsODlZUVJRq166tjh07as6cOXrllVe0ePFiff755/bjHnvsMTVs2FDBwcGqV6+eJk+erD/++EOSdPjwYfn4+Gjr1q0Ozz1v3jzFxsaqqKhIOTk5Gjp0qCIiIhQUFKQGDRrotddesx971VVXKTo6Wu+8845Tf+8AnMcABMDtli9frurVq2vLli168MEHNXr0aN1yyy3q3LmzUlNT1adPH91xxx06c+aMJOnkyZO69tpr1bp1a23dulXr1q1Tdna2br311lJfY8eOHcrNzVW7du3K1TR8+HBVrVpVa9eutW8LDQ3VsmXLtGfPHr3wwgtavHix5s6dK0mKi4tT7969HQYaSXrttdc0YsQI+fj4aPLkydqzZ48+/vhj7d27VwsXLlT16tUdjm/fvr02bNhQrkYAF48BCIDbtWzZUpMmTVKDBg2UlJSkwMBAVa9eXXfffbcaNGigKVOm6JdfftGOHTsknfsOodatW+vpp59W48aN1bp1ay1dulRffvllqV+smJGRIV9fX9WoUaNcTT4+PmrYsKEOHz5s3zZp0iR17txZcXFxGjBggCZMmKDVq1fb948aNUpvvfWWCgoKJEmpqanauXOnRo4cKUnKzMxU69at1a5dO/vA9NczUtHR0crIyCj33x2Ai8MABMDtWrRoYf+zr6+vrrjiCjVv3ty+LTIyUpL0008/STp3MfOXX35pv6YoJCREjRs3liSlpaWV+Bq//fabAgICLnih9v8yDMPh+FWrVumaa66xv503adIkZWZm2vcPGjRIvr6+9rewli1bpp49eyouLk6SNHr0aK1cuVKtWrXSo48+qk2bNhV7zaCgIPuZLgDmYQAC4HaVKlVyWLfZbA7bzg8hRUVFkqT8/HwNGDBA27dvd1gOHDigbt26lfga1atX15kzZ3T27NlyNRUWFurAgQOqW7euJGnz5s0aOnSorr/+en3wwQf6z3/+oyeeeMLh+fz9/TVs2DC99tprOnv2rFasWKE777zTvj8+Pl4ZGRkaP368jh07pl69emnChAkOr/vrr78qIiKiXI0ALp6fuwMAwFlt2rTR22+/rbi4OPn5le+fsVatWkmS9uzZY/9zWZYvX66cnBzddNNNkqRNmzYpNjZWTzzxhP2Ykt6qGjVqlJo1a6aXX35Zf/75Z7GP0kdERGj48OEaPny4unbtqkceeUTPPvusff+uXbvUo0ePcv1MAC4eZ4AAeJ0xY8bo119/VUJCgr777julpaXpk08+0ciRI1VYWFjiYyIiItSmTRtt3Lix2L4zZ84oKytLR48e1TfffKPHHntM9913n0aPHq2ePXtKkho0aKDMzEytXLlSaWlpmj9/fomf1mrSpIk6duyoxx57TAkJCQoKCrLvmzJlit577z0dPHhQu3fv1gcffKAmTZo4dGzbtk19+vS51L8iABfAAATA60RHR+vrr79WYWGh+vTpo+bNm2vcuHGqUqWKfHxK/2dt1KhRevPNN4ttX7x4sWrWrKkrr7xSQ4YM0Z49e7Rq1Sq9/PLL9mMGDhyo8ePH64EHHlCrVq20adMmTZ48ucTXueuuu3T27FmHt7+kc2+RJSUlqUWLFurWrZt8fX21cuVK+/733ntPderUUdeuXZ39KwHgJG6ECMAyfvvtNzVq1EirVq1Sp06dTHudGTNmaM2aNfZPrZVXx44dNXbsWN1+++0mlQE4jzNAACwjKChIr7/+epk3TLwU+fn52rVrlxYsWKAHH3zQqceeOHFCQ4YMUUJCgiltABxxBggAXGTEiBF66623NGjQIK1YsUK+vr7uTgJQCgYgAABgObwFBgAALIcBCAAAWA4DEAAAsBwGIAAAYDkMQAAAwHIYgAAAgOUwAAEAAMthAAIAAJbz/wCvrLygvjedngAAAABJRU5ErkJggg==", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_sleeptime_grouped = df_sleeptime.groupby(df_sleeptime['Calendar Date (Local)'].dt.date)['Duration (h)'].sum()\n", + "\n", + "df_sleeptime_grouped.plot(x ='Calendar Date (Local)', y='Duration (h)', kind='bar'),\n", + "plt.ylim(ymin=0)\n", + "plt.xlim(xmin=0)\n", + "plt.ylabel(\"Sleep duration (h)\")\n", + "plt.xlabel(\"Time (Days)\")\n", + "\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}