{ "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
User First NameCalendar Date (Local)Start Time (Local)End Time (Local)Start Time (s)Processing TimeDuration (s)Rem Sleep Duration (s)Deep Sleep Duration (s)Light Sleep Duration (s)...Sleep EfficiencySleep Score ValueSleep Score QualifierSourceSleepPhaseStartTimeSecSleepPhaseEndTimeSecSleepPhaseStartTimeSleepPhaseEndTimeSleepPhaseDurationSleepLevel
0P102023-12-222023-12-22 01:17:002023-12-22 09:03:0017032042202023-12-23 09:51:08.503279608400300016560...1.00000094.0Excellentdevice170320458017032068002023-12-22 01:23:002023-12-22 02:00:002220deep
1P102023-12-222023-12-22 01:17:002023-12-22 09:03:0017032042202023-12-23 09:51:08.503279608400300016560...1.00000094.0Excellentdevice170321052017032113002023-12-22 03:02:002023-12-22 03:15:00780deep
2P102023-12-222023-12-22 01:17:002023-12-22 09:03:0017032042202023-12-23 09:51:08.503279608400300016560...1.00000094.0Excellentdevice170320422017032045802023-12-22 01:17:002023-12-22 01:23:00360light
3P102023-12-222023-12-22 01:17:002023-12-22 09:03:0017032042202023-12-23 09:51:08.503279608400300016560...1.00000094.0Excellentdevice170320680017032077002023-12-22 02:00:002023-12-22 02:15:00900light
4P102023-12-222023-12-22 01:17:002023-12-22 09:03:0017032042202023-12-23 09:51:08.503279608400300016560...1.00000094.0Excellentdevice170320824017032105202023-12-22 02:24:002023-12-22 03:02:002280light
..................................................................
3791P142024-01-082024-01-08 00:01:002024-01-08 07:34:0017046684602024-01-08 10:41:41.126271804140660016380...0.99779292.0Excellentdevice170469504017046956402024-01-08 07:24:002024-01-08 07:34:00600light
3792P142024-01-082024-01-08 00:01:002024-01-08 07:34:0017046684602024-01-08 10:41:41.126271804140660016380...0.99779292.0Excellentdevice170467902017046796202024-01-08 02:57:002024-01-08 03:07:00600rem
3793P142024-01-082024-01-08 00:01:002024-01-08 07:34:0017046684602024-01-08 10:41:41.126271804140660016380...0.99779292.0Excellentdevice170468796017046904202024-01-08 05:26:002024-01-08 06:07:002460rem
3794P142024-01-082024-01-08 00:01:002024-01-08 07:34:0017046684602024-01-08 10:41:41.126271804140660016380...0.99779292.0Excellentdevice170469396017046950402024-01-08 07:06:002024-01-08 07:24:001080rem
3795P142024-01-082024-01-08 00:01:002024-01-08 07:34:0017046684602024-01-08 10:41:41.126271804140660016380...0.99779292.0Excellentdevice170467110017046711602024-01-08 00:45:002024-01-08 00:46:0060awake
\n", "

2318 rows × 21 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
User First NameCalendar Date (Local)Start Time (Local)End Time (Local)Start Time (s)Processing TimeDuration (s)Rem Sleep Duration (s)Deep Sleep Duration (s)Light Sleep Duration (s)...Sleep EfficiencySleep Score ValueSleep Score QualifierSourceSleepPhaseStartTimeSecSleepPhaseEndTimeSecSleepPhaseStartTimeSleepPhaseEndTimeSleepPhaseDurationSleepLevel
2061P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337600017033785202023-12-24 01:00:002023-12-24 01:42:002520deep
2062P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338092017033823002023-12-24 02:22:002023-12-24 02:45:001380deep
2063P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338716017033883002023-12-24 04:06:002023-12-24 04:25:001140deep
2064P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337528017033760002023-12-24 00:48:002023-12-24 01:00:00720light
2065P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337852017033797202023-12-24 01:42:002023-12-24 02:02:001200light
2066P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337978017033809202023-12-24 02:03:002023-12-24 02:22:001140light
2067P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338230017033834402023-12-24 02:45:002023-12-24 03:04:001140light
2068P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338572017033871602023-12-24 03:42:002023-12-24 04:06:001440light
2069P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338830017033901602023-12-24 04:25:002023-12-24 04:56:001860light
2070P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338344017033845202023-12-24 03:04:002023-12-24 03:22:001080rem
2071P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170339016017033912802023-12-24 04:56:002023-12-24 05:14:401120rem
2072P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337972017033797802023-12-24 02:02:002023-12-24 02:03:0060awake
\n", "

12 rows × 21 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
User First NameCalendar Date (Local)Start Time (Local)End Time (Local)Start Time (s)Processing TimeDuration (s)Rem Sleep Duration (s)Deep Sleep Duration (s)Light Sleep Duration (s)...Sleep EfficiencySleep Score ValueSleep Score QualifierSourceSleepPhaseStartTimeSecSleepPhaseEndTimeSecSleepPhaseStartTimeSleepPhaseEndTimeSleepPhaseDurationSleepLevel
2061P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337600017033785202023-12-24 01:00:002023-12-24 01:42:002520deep
2062P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338092017033823002023-12-24 02:22:002023-12-24 02:45:001380deep
2063P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338716017033883002023-12-24 04:06:002023-12-24 04:25:001140deep
2064P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337528017033760002023-12-24 00:48:002023-12-24 01:00:00720light
2065P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337852017033797202023-12-24 01:42:002023-12-24 02:02:001200light
2066P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337978017033809202023-12-24 02:03:002023-12-24 02:22:001140light
2067P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338230017033834402023-12-24 02:45:002023-12-24 03:04:001140light
2068P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338572017033871602023-12-24 03:42:002023-12-24 04:06:001440light
2069P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338830017033901602023-12-24 04:25:002023-12-24 04:56:001860light
2070P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170338344017033845202023-12-24 03:04:002023-12-24 03:22:001080rem
2071P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170339016017033912802023-12-24 04:56:002023-12-24 05:14:401120rem
2072P122023-12-242023-12-24 00:48:002023-12-24 05:14:4017033752802023-12-25 17:28:23.07116000220050407500...0.9962556.0Poordevice170337972017033797802023-12-24 02:02:002023-12-24 02:03:0060awake
\n", "

12 rows × 21 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Calendar Date (Local)Start Time (Local)End Time (Local)Duration (s)Duration (m)Duration (h)
12892023-12-232023-12-23 00:52:002023-12-23 08:45:0028380473.0000007.883333
16132023-12-232023-12-23 05:21:002023-12-23 08:45:0012240204.0000003.400000
17452023-12-232023-12-23 05:56:002023-12-23 08:45:0010140169.0000002.816667
18652023-12-232023-12-23 06:29:002023-12-23 08:45:008160136.0000002.266667
19612023-12-232023-12-23 07:04:002023-12-23 08:45:006060101.0000001.683333
20332023-12-232023-12-23 08:21:002023-12-23 08:45:00144024.0000000.400000
20612023-12-242023-12-24 00:48:002023-12-24 05:14:4016000266.6666674.444444
20732023-12-252023-12-25 00:31:002023-12-25 10:21:0035400590.0000009.833333
21012023-12-262023-12-26 01:06:002023-12-26 09:38:0030720512.0000008.533333
21342023-12-272023-12-27 00:27:002023-12-27 07:52:0026700445.0000007.416667
21702023-12-282023-12-28 01:13:002023-12-28 07:31:0022680378.0000006.300000
21872023-12-292023-12-29 01:14:002023-12-29 08:58:0027840464.0000007.733333
22122023-12-302023-12-30 03:16:002023-12-30 11:35:0029940499.0000008.316667
22332023-12-312023-12-31 02:16:002023-12-31 11:40:0033840564.0000009.400000
22662024-01-012024-01-01 02:20:002024-01-01 09:42:0026520442.0000007.366667
23652024-01-032024-01-03 02:24:002024-01-03 09:01:0023820397.0000006.616667
23822024-01-042024-01-04 01:07:002024-01-04 06:13:0018360306.0000005.100000
\n", "
" ], "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/H18fJSVlaUaNWpo0KBB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d9yhEydOlNpWWFio//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": [ "
" ] }, "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 }