Summary

Use python-fitbit to interact with the Fitbit API and download sleep data. Convert data to pandas dataframe and write to disk.


In [1]:
import fitbit
import os
import pandas as pd
from tqdm import tqdm
from dotenv import load_dotenv, find_dotenv
import matplotlib.pyplot as plt
%matplotlib inline

import seaborn as sns
sns.set_context('poster')

In [51]:
# find .env automagically by walking up directories until it's found
dotenv_path = find_dotenv()

# load up the entries as environment variables
load_dotenv(dotenv_path)

client_id = os.environ.get("CLIENT_ID")
client_secret = os.environ.get("CLIENT_SECRET")
access_token = os.environ.get("ACCESS_TOKEN")
refresh_token = os.environ.get("REFRESH_TOKEN")
expires_at = float(os.environ.get("EXPIRES_AT"))

In [53]:
authd_client = fitbit.Fitbit(client_id, client_secret, access_token=access_token, 
                             refresh_token=refresh_token, expires_at=expires_at)

In [8]:
sleep_logs = []

rate_limit = 145

datetimes = pd.date_range('2016-11-09', '2017-07-31', freq='1D')

for datetime in tqdm(datetimes[:rate_limit]):
    sleep_log = authd_client.get_sleep(datetime)
    sleep_logs.append(sleep_log)


100%|██████████| 145/145 [00:30<00:00,  6.03it/s]

In [10]:
for datetime in tqdm(datetimes[rate_limit:]):
    sleep_log = authd_client.get_sleep(datetime)
    sleep_logs.append(sleep_log)


  0%|          | 0/120 [00:00<?, ?it/s]
  1%|          | 1/120 [00:00<00:42,  2.77it/s]
  2%|▏         | 2/120 [00:00<00:40,  2.93it/s]
100%|██████████| 120/120 [00:30<00:00,  6.62it/s]

In [11]:
len(sleep_logs)


Out[11]:
265

In [12]:
sleep_logs[-1]


Out[12]:
{'sleep': [{'awakeCount': 2,
   'awakeDuration': 3,
   'awakeningsCount': 10,
   'dateOfSleep': '2017-07-31',
   'duration': 26940000,
   'efficiency': 93,
   'endTime': '2017-07-31T06:28:30.000',
   'isMainSleep': True,
   'logId': 15376396496,
   'minuteData': [{'dateTime': '22:59:30', 'value': '1'},
    {'dateTime': '23:00:30', 'value': '1'},
    {'dateTime': '23:01:30', 'value': '1'},
    {'dateTime': '23:02:30', 'value': '1'},
    {'dateTime': '23:03:30', 'value': '1'},
    {'dateTime': '23:04:30', 'value': '1'},
    {'dateTime': '23:05:30', 'value': '1'},
    {'dateTime': '23:06:30', 'value': '1'},
    {'dateTime': '23:07:30', 'value': '1'},
    {'dateTime': '23:08:30', 'value': '1'},
    {'dateTime': '23:09:30', 'value': '1'},
    {'dateTime': '23:10:30', 'value': '1'},
    {'dateTime': '23:11:30', 'value': '1'},
    {'dateTime': '23:12:30', 'value': '1'},
    {'dateTime': '23:13:30', 'value': '1'},
    {'dateTime': '23:14:30', 'value': '1'},
    {'dateTime': '23:15:30', 'value': '1'},
    {'dateTime': '23:16:30', 'value': '1'},
    {'dateTime': '23:17:30', 'value': '1'},
    {'dateTime': '23:18:30', 'value': '1'},
    {'dateTime': '23:19:30', 'value': '1'},
    {'dateTime': '23:20:30', 'value': '1'},
    {'dateTime': '23:21:30', 'value': '1'},
    {'dateTime': '23:22:30', 'value': '1'},
    {'dateTime': '23:23:30', 'value': '1'},
    {'dateTime': '23:24:30', 'value': '1'},
    {'dateTime': '23:25:30', 'value': '1'},
    {'dateTime': '23:26:30', 'value': '1'},
    {'dateTime': '23:27:30', 'value': '1'},
    {'dateTime': '23:28:30', 'value': '1'},
    {'dateTime': '23:29:30', 'value': '1'},
    {'dateTime': '23:30:30', 'value': '1'},
    {'dateTime': '23:31:30', 'value': '1'},
    {'dateTime': '23:32:30', 'value': '1'},
    {'dateTime': '23:33:30', 'value': '1'},
    {'dateTime': '23:34:30', 'value': '1'},
    {'dateTime': '23:35:30', 'value': '1'},
    {'dateTime': '23:36:30', 'value': '1'},
    {'dateTime': '23:37:30', 'value': '1'},
    {'dateTime': '23:38:30', 'value': '1'},
    {'dateTime': '23:39:30', 'value': '1'},
    {'dateTime': '23:40:30', 'value': '1'},
    {'dateTime': '23:41:30', 'value': '1'},
    {'dateTime': '23:42:30', 'value': '1'},
    {'dateTime': '23:43:30', 'value': '1'},
    {'dateTime': '23:44:30', 'value': '1'},
    {'dateTime': '23:45:30', 'value': '1'},
    {'dateTime': '23:46:30', 'value': '1'},
    {'dateTime': '23:47:30', 'value': '1'},
    {'dateTime': '23:48:30', 'value': '1'},
    {'dateTime': '23:49:30', 'value': '1'},
    {'dateTime': '23:50:30', 'value': '1'},
    {'dateTime': '23:51:30', 'value': '1'},
    {'dateTime': '23:52:30', 'value': '1'},
    {'dateTime': '23:53:30', 'value': '1'},
    {'dateTime': '23:54:30', 'value': '1'},
    {'dateTime': '23:55:30', 'value': '1'},
    {'dateTime': '23:56:30', 'value': '1'},
    {'dateTime': '23:57:30', 'value': '1'},
    {'dateTime': '23:58:30', 'value': '1'},
    {'dateTime': '23:59:30', 'value': '1'},
    {'dateTime': '00:00:30', 'value': '1'},
    {'dateTime': '00:01:30', 'value': '1'},
    {'dateTime': '00:02:30', 'value': '1'},
    {'dateTime': '00:03:30', 'value': '1'},
    {'dateTime': '00:04:30', 'value': '1'},
    {'dateTime': '00:05:30', 'value': '1'},
    {'dateTime': '00:06:30', 'value': '1'},
    {'dateTime': '00:07:30', 'value': '1'},
    {'dateTime': '00:08:30', 'value': '1'},
    {'dateTime': '00:09:30', 'value': '1'},
    {'dateTime': '00:10:30', 'value': '1'},
    {'dateTime': '00:11:30', 'value': '1'},
    {'dateTime': '00:12:30', 'value': '1'},
    {'dateTime': '00:13:30', 'value': '1'},
    {'dateTime': '00:14:30', 'value': '1'},
    {'dateTime': '00:15:30', 'value': '1'},
    {'dateTime': '00:16:30', 'value': '1'},
    {'dateTime': '00:17:30', 'value': '1'},
    {'dateTime': '00:18:30', 'value': '1'},
    {'dateTime': '00:19:30', 'value': '1'},
    {'dateTime': '00:20:30', 'value': '1'},
    {'dateTime': '00:21:30', 'value': '1'},
    {'dateTime': '00:22:30', 'value': '1'},
    {'dateTime': '00:23:30', 'value': '1'},
    {'dateTime': '00:24:30', 'value': '1'},
    {'dateTime': '00:25:30', 'value': '1'},
    {'dateTime': '00:26:30', 'value': '1'},
    {'dateTime': '00:27:30', 'value': '1'},
    {'dateTime': '00:28:30', 'value': '1'},
    {'dateTime': '00:29:30', 'value': '1'},
    {'dateTime': '00:30:30', 'value': '1'},
    {'dateTime': '00:31:30', 'value': '1'},
    {'dateTime': '00:32:30', 'value': '1'},
    {'dateTime': '00:33:30', 'value': '1'},
    {'dateTime': '00:34:30', 'value': '1'},
    {'dateTime': '00:35:30', 'value': '1'},
    {'dateTime': '00:36:30', 'value': '1'},
    {'dateTime': '00:37:30', 'value': '1'},
    {'dateTime': '00:38:30', 'value': '1'},
    {'dateTime': '00:39:30', 'value': '1'},
    {'dateTime': '00:40:30', 'value': '1'},
    {'dateTime': '00:41:30', 'value': '1'},
    {'dateTime': '00:42:30', 'value': '1'},
    {'dateTime': '00:43:30', 'value': '1'},
    {'dateTime': '00:44:30', 'value': '2'},
    {'dateTime': '00:45:30', 'value': '2'},
    {'dateTime': '00:46:30', 'value': '2'},
    {'dateTime': '00:47:30', 'value': '1'},
    {'dateTime': '00:48:30', 'value': '1'},
    {'dateTime': '00:49:30', 'value': '1'},
    {'dateTime': '00:50:30', 'value': '1'},
    {'dateTime': '00:51:30', 'value': '1'},
    {'dateTime': '00:52:30', 'value': '1'},
    {'dateTime': '00:53:30', 'value': '1'},
    {'dateTime': '00:54:30', 'value': '1'},
    {'dateTime': '00:55:30', 'value': '1'},
    {'dateTime': '00:56:30', 'value': '1'},
    {'dateTime': '00:57:30', 'value': '1'},
    {'dateTime': '00:58:30', 'value': '1'},
    {'dateTime': '00:59:30', 'value': '1'},
    {'dateTime': '01:00:30', 'value': '1'},
    {'dateTime': '01:01:30', 'value': '1'},
    {'dateTime': '01:02:30', 'value': '1'},
    {'dateTime': '01:03:30', 'value': '1'},
    {'dateTime': '01:04:30', 'value': '1'},
    {'dateTime': '01:05:30', 'value': '1'},
    {'dateTime': '01:06:30', 'value': '1'},
    {'dateTime': '01:07:30', 'value': '1'},
    {'dateTime': '01:08:30', 'value': '1'},
    {'dateTime': '01:09:30', 'value': '1'},
    {'dateTime': '01:10:30', 'value': '1'},
    {'dateTime': '01:11:30', 'value': '1'},
    {'dateTime': '01:12:30', 'value': '1'},
    {'dateTime': '01:13:30', 'value': '1'},
    {'dateTime': '01:14:30', 'value': '1'},
    {'dateTime': '01:15:30', 'value': '1'},
    {'dateTime': '01:16:30', 'value': '1'},
    {'dateTime': '01:17:30', 'value': '1'},
    {'dateTime': '01:18:30', 'value': '1'},
    {'dateTime': '01:19:30', 'value': '1'},
    {'dateTime': '01:20:30', 'value': '1'},
    {'dateTime': '01:21:30', 'value': '1'},
    {'dateTime': '01:22:30', 'value': '1'},
    {'dateTime': '01:23:30', 'value': '1'},
    {'dateTime': '01:24:30', 'value': '1'},
    {'dateTime': '01:25:30', 'value': '1'},
    {'dateTime': '01:26:30', 'value': '1'},
    {'dateTime': '01:27:30', 'value': '1'},
    {'dateTime': '01:28:30', 'value': '1'},
    {'dateTime': '01:29:30', 'value': '1'},
    {'dateTime': '01:30:30', 'value': '1'},
    {'dateTime': '01:31:30', 'value': '1'},
    {'dateTime': '01:32:30', 'value': '1'},
    {'dateTime': '01:33:30', 'value': '1'},
    {'dateTime': '01:34:30', 'value': '1'},
    {'dateTime': '01:35:30', 'value': '1'},
    {'dateTime': '01:36:30', 'value': '1'},
    {'dateTime': '01:37:30', 'value': '1'},
    {'dateTime': '01:38:30', 'value': '1'},
    {'dateTime': '01:39:30', 'value': '1'},
    {'dateTime': '01:40:30', 'value': '1'},
    {'dateTime': '01:41:30', 'value': '1'},
    {'dateTime': '01:42:30', 'value': '3'},
    {'dateTime': '01:43:30', 'value': '1'},
    {'dateTime': '01:44:30', 'value': '1'},
    {'dateTime': '01:45:30', 'value': '1'},
    {'dateTime': '01:46:30', 'value': '1'},
    {'dateTime': '01:47:30', 'value': '1'},
    {'dateTime': '01:48:30', 'value': '1'},
    {'dateTime': '01:49:30', 'value': '1'},
    {'dateTime': '01:50:30', 'value': '1'},
    {'dateTime': '01:51:30', 'value': '1'},
    {'dateTime': '01:52:30', 'value': '1'},
    {'dateTime': '01:53:30', 'value': '1'},
    {'dateTime': '01:54:30', 'value': '1'},
    {'dateTime': '01:55:30', 'value': '1'},
    {'dateTime': '01:56:30', 'value': '1'},
    {'dateTime': '01:57:30', 'value': '1'},
    {'dateTime': '01:58:30', 'value': '1'},
    {'dateTime': '01:59:30', 'value': '1'},
    {'dateTime': '02:00:30', 'value': '1'},
    {'dateTime': '02:01:30', 'value': '1'},
    {'dateTime': '02:02:30', 'value': '1'},
    {'dateTime': '02:03:30', 'value': '1'},
    {'dateTime': '02:04:30', 'value': '1'},
    {'dateTime': '02:05:30', 'value': '1'},
    {'dateTime': '02:06:30', 'value': '1'},
    {'dateTime': '02:07:30', 'value': '1'},
    {'dateTime': '02:08:30', 'value': '1'},
    {'dateTime': '02:09:30', 'value': '1'},
    {'dateTime': '02:10:30', 'value': '1'},
    {'dateTime': '02:11:30', 'value': '1'},
    {'dateTime': '02:12:30', 'value': '1'},
    {'dateTime': '02:13:30', 'value': '1'},
    {'dateTime': '02:14:30', 'value': '1'},
    {'dateTime': '02:15:30', 'value': '1'},
    {'dateTime': '02:16:30', 'value': '1'},
    {'dateTime': '02:17:30', 'value': '1'},
    {'dateTime': '02:18:30', 'value': '1'},
    {'dateTime': '02:19:30', 'value': '1'},
    {'dateTime': '02:20:30', 'value': '1'},
    {'dateTime': '02:21:30', 'value': '1'},
    {'dateTime': '02:22:30', 'value': '1'},
    {'dateTime': '02:23:30', 'value': '1'},
    {'dateTime': '02:24:30', 'value': '1'},
    {'dateTime': '02:25:30', 'value': '1'},
    {'dateTime': '02:26:30', 'value': '1'},
    {'dateTime': '02:27:30', 'value': '1'},
    {'dateTime': '02:28:30', 'value': '1'},
    {'dateTime': '02:29:30', 'value': '1'},
    {'dateTime': '02:30:30', 'value': '1'},
    {'dateTime': '02:31:30', 'value': '1'},
    {'dateTime': '02:32:30', 'value': '1'},
    {'dateTime': '02:33:30', 'value': '1'},
    {'dateTime': '02:34:30', 'value': '1'},
    {'dateTime': '02:35:30', 'value': '1'},
    {'dateTime': '02:36:30', 'value': '1'},
    {'dateTime': '02:37:30', 'value': '1'},
    {'dateTime': '02:38:30', 'value': '1'},
    {'dateTime': '02:39:30', 'value': '1'},
    {'dateTime': '02:40:30', 'value': '1'},
    {'dateTime': '02:41:30', 'value': '1'},
    {'dateTime': '02:42:30', 'value': '1'},
    {'dateTime': '02:43:30', 'value': '1'},
    {'dateTime': '02:44:30', 'value': '1'},
    {'dateTime': '02:45:30', 'value': '1'},
    {'dateTime': '02:46:30', 'value': '1'},
    {'dateTime': '02:47:30', 'value': '1'},
    {'dateTime': '02:48:30', 'value': '1'},
    {'dateTime': '02:49:30', 'value': '1'},
    {'dateTime': '02:50:30', 'value': '1'},
    {'dateTime': '02:51:30', 'value': '1'},
    {'dateTime': '02:52:30', 'value': '1'},
    {'dateTime': '02:53:30', 'value': '1'},
    {'dateTime': '02:54:30', 'value': '1'},
    {'dateTime': '02:55:30', 'value': '1'},
    {'dateTime': '02:56:30', 'value': '1'},
    {'dateTime': '02:57:30', 'value': '1'},
    {'dateTime': '02:58:30', 'value': '1'},
    {'dateTime': '02:59:30', 'value': '1'},
    {'dateTime': '03:00:30', 'value': '1'},
    {'dateTime': '03:01:30', 'value': '1'},
    {'dateTime': '03:02:30', 'value': '1'},
    {'dateTime': '03:03:30', 'value': '1'},
    {'dateTime': '03:04:30', 'value': '1'},
    {'dateTime': '03:05:30', 'value': '1'},
    {'dateTime': '03:06:30', 'value': '1'},
    {'dateTime': '03:07:30', 'value': '1'},
    {'dateTime': '03:08:30', 'value': '1'},
    {'dateTime': '03:09:30', 'value': '1'},
    {'dateTime': '03:10:30', 'value': '1'},
    {'dateTime': '03:11:30', 'value': '1'},
    {'dateTime': '03:12:30', 'value': '1'},
    {'dateTime': '03:13:30', 'value': '1'},
    {'dateTime': '03:14:30', 'value': '1'},
    {'dateTime': '03:15:30', 'value': '1'},
    {'dateTime': '03:16:30', 'value': '1'},
    {'dateTime': '03:17:30', 'value': '1'},
    {'dateTime': '03:18:30', 'value': '1'},
    {'dateTime': '03:19:30', 'value': '1'},
    {'dateTime': '03:20:30', 'value': '1'},
    {'dateTime': '03:21:30', 'value': '1'},
    {'dateTime': '03:22:30', 'value': '1'},
    {'dateTime': '03:23:30', 'value': '1'},
    {'dateTime': '03:24:30', 'value': '1'},
    {'dateTime': '03:25:30', 'value': '1'},
    {'dateTime': '03:26:30', 'value': '1'},
    {'dateTime': '03:27:30', 'value': '1'},
    {'dateTime': '03:28:30', 'value': '1'},
    {'dateTime': '03:29:30', 'value': '1'},
    {'dateTime': '03:30:30', 'value': '1'},
    {'dateTime': '03:31:30', 'value': '1'},
    {'dateTime': '03:32:30', 'value': '1'},
    {'dateTime': '03:33:30', 'value': '1'},
    {'dateTime': '03:34:30', 'value': '1'},
    {'dateTime': '03:35:30', 'value': '1'},
    {'dateTime': '03:36:30', 'value': '1'},
    {'dateTime': '03:37:30', 'value': '1'},
    {'dateTime': '03:38:30', 'value': '2'},
    {'dateTime': '03:39:30', 'value': '2'},
    {'dateTime': '03:40:30', 'value': '2'},
    {'dateTime': '03:41:30', 'value': '2'},
    {'dateTime': '03:42:30', 'value': '1'},
    {'dateTime': '03:43:30', 'value': '1'},
    {'dateTime': '03:44:30', 'value': '1'},
    {'dateTime': '03:45:30', 'value': '1'},
    {'dateTime': '03:46:30', 'value': '1'},
    {'dateTime': '03:47:30', 'value': '1'},
    {'dateTime': '03:48:30', 'value': '1'},
    {'dateTime': '03:49:30', 'value': '1'},
    {'dateTime': '03:50:30', 'value': '1'},
    {'dateTime': '03:51:30', 'value': '1'},
    {'dateTime': '03:52:30', 'value': '1'},
    {'dateTime': '03:53:30', 'value': '1'},
    {'dateTime': '03:54:30', 'value': '1'},
    {'dateTime': '03:55:30', 'value': '1'},
    {'dateTime': '03:56:30', 'value': '1'},
    {'dateTime': '03:57:30', 'value': '1'},
    {'dateTime': '03:58:30', 'value': '1'},
    {'dateTime': '03:59:30', 'value': '1'},
    {'dateTime': '04:00:30', 'value': '1'},
    {'dateTime': '04:01:30', 'value': '1'},
    {'dateTime': '04:02:30', 'value': '1'},
    {'dateTime': '04:03:30', 'value': '1'},
    {'dateTime': '04:04:30', 'value': '1'},
    {'dateTime': '04:05:30', 'value': '1'},
    {'dateTime': '04:06:30', 'value': '1'},
    {'dateTime': '04:07:30', 'value': '1'},
    {'dateTime': '04:08:30', 'value': '1'},
    {'dateTime': '04:09:30', 'value': '1'},
    {'dateTime': '04:10:30', 'value': '1'},
    {'dateTime': '04:11:30', 'value': '2'},
    {'dateTime': '04:12:30', 'value': '2'},
    {'dateTime': '04:13:30', 'value': '2'},
    {'dateTime': '04:14:30', 'value': '1'},
    {'dateTime': '04:15:30', 'value': '1'},
    {'dateTime': '04:16:30', 'value': '1'},
    {'dateTime': '04:17:30', 'value': '1'},
    {'dateTime': '04:18:30', 'value': '1'},
    {'dateTime': '04:19:30', 'value': '1'},
    {'dateTime': '04:20:30', 'value': '1'},
    {'dateTime': '04:21:30', 'value': '1'},
    {'dateTime': '04:22:30', 'value': '1'},
    {'dateTime': '04:23:30', 'value': '1'},
    {'dateTime': '04:24:30', 'value': '1'},
    {'dateTime': '04:25:30', 'value': '1'},
    {'dateTime': '04:26:30', 'value': '1'},
    {'dateTime': '04:27:30', 'value': '1'},
    {'dateTime': '04:28:30', 'value': '1'},
    {'dateTime': '04:29:30', 'value': '1'},
    {'dateTime': '04:30:30', 'value': '1'},
    {'dateTime': '04:31:30', 'value': '1'},
    {'dateTime': '04:32:30', 'value': '1'},
    {'dateTime': '04:33:30', 'value': '1'},
    {'dateTime': '04:34:30', 'value': '1'},
    {'dateTime': '04:35:30', 'value': '1'},
    {'dateTime': '04:36:30', 'value': '1'},
    {'dateTime': '04:37:30', 'value': '2'},
    {'dateTime': '04:38:30', 'value': '2'},
    {'dateTime': '04:39:30', 'value': '2'},
    {'dateTime': '04:40:30', 'value': '2'},
    {'dateTime': '04:41:30', 'value': '2'},
    {'dateTime': '04:42:30', 'value': '2'},
    {'dateTime': '04:43:30', 'value': '2'},
    {'dateTime': '04:44:30', 'value': '2'},
    {'dateTime': '04:45:30', 'value': '2'},
    {'dateTime': '04:46:30', 'value': '2'},
    {'dateTime': '04:47:30', 'value': '2'},
    {'dateTime': '04:48:30', 'value': '1'},
    {'dateTime': '04:49:30', 'value': '1'},
    {'dateTime': '04:50:30', 'value': '2'},
    {'dateTime': '04:51:30', 'value': '2'},
    {'dateTime': '04:52:30', 'value': '2'},
    {'dateTime': '04:53:30', 'value': '2'},
    {'dateTime': '04:54:30', 'value': '3'},
    {'dateTime': '04:55:30', 'value': '3'},
    {'dateTime': '04:56:30', 'value': '1'},
    {'dateTime': '04:57:30', 'value': '1'},
    {'dateTime': '04:58:30', 'value': '1'},
    {'dateTime': '04:59:30', 'value': '2'},
    {'dateTime': '05:00:30', 'value': '2'},
    {'dateTime': '05:01:30', 'value': '1'},
    {'dateTime': '05:02:30', 'value': '1'},
    {'dateTime': '05:03:30', 'value': '1'},
    {'dateTime': '05:04:30', 'value': '1'},
    {'dateTime': '05:05:30', 'value': '1'},
    {'dateTime': '05:06:30', 'value': '1'},
    {'dateTime': '05:07:30', 'value': '1'},
    {'dateTime': '05:08:30', 'value': '1'},
    {'dateTime': '05:09:30', 'value': '1'},
    {'dateTime': '05:10:30', 'value': '1'},
    {'dateTime': '05:11:30', 'value': '1'},
    {'dateTime': '05:12:30', 'value': '1'},
    {'dateTime': '05:13:30', 'value': '1'},
    {'dateTime': '05:14:30', 'value': '1'},
    {'dateTime': '05:15:30', 'value': '1'},
    {'dateTime': '05:16:30', 'value': '1'},
    {'dateTime': '05:17:30', 'value': '1'},
    {'dateTime': '05:18:30', 'value': '1'},
    {'dateTime': '05:19:30', 'value': '1'},
    {'dateTime': '05:20:30', 'value': '1'},
    {'dateTime': '05:21:30', 'value': '1'},
    {'dateTime': '05:22:30', 'value': '1'},
    {'dateTime': '05:23:30', 'value': '1'},
    {'dateTime': '05:24:30', 'value': '1'},
    {'dateTime': '05:25:30', 'value': '1'},
    {'dateTime': '05:26:30', 'value': '1'},
    {'dateTime': '05:27:30', 'value': '1'},
    {'dateTime': '05:28:30', 'value': '1'},
    {'dateTime': '05:29:30', 'value': '1'},
    {'dateTime': '05:30:30', 'value': '1'},
    {'dateTime': '05:31:30', 'value': '1'},
    {'dateTime': '05:32:30', 'value': '1'},
    {'dateTime': '05:33:30', 'value': '1'},
    {'dateTime': '05:34:30', 'value': '1'},
    {'dateTime': '05:35:30', 'value': '1'},
    {'dateTime': '05:36:30', 'value': '1'},
    {'dateTime': '05:37:30', 'value': '1'},
    {'dateTime': '05:38:30', 'value': '1'},
    {'dateTime': '05:39:30', 'value': '1'},
    {'dateTime': '05:40:30', 'value': '1'},
    {'dateTime': '05:41:30', 'value': '1'},
    {'dateTime': '05:42:30', 'value': '1'},
    {'dateTime': '05:43:30', 'value': '1'},
    {'dateTime': '05:44:30', 'value': '1'},
    {'dateTime': '05:45:30', 'value': '1'},
    {'dateTime': '05:46:30', 'value': '1'},
    {'dateTime': '05:47:30', 'value': '1'},
    {'dateTime': '05:48:30', 'value': '1'},
    {'dateTime': '05:49:30', 'value': '1'},
    {'dateTime': '05:50:30', 'value': '1'},
    {'dateTime': '05:51:30', 'value': '1'},
    {'dateTime': '05:52:30', 'value': '1'},
    {'dateTime': '05:53:30', 'value': '1'},
    {'dateTime': '05:54:30', 'value': '1'},
    {'dateTime': '05:55:30', 'value': '1'},
    {'dateTime': '05:56:30', 'value': '1'},
    {'dateTime': '05:57:30', 'value': '1'},
    {'dateTime': '05:58:30', 'value': '1'},
    {'dateTime': '05:59:30', 'value': '1'},
    {'dateTime': '06:00:30', 'value': '1'},
    {'dateTime': '06:01:30', 'value': '1'},
    {'dateTime': '06:02:30', 'value': '1'},
    {'dateTime': '06:03:30', 'value': '1'},
    {'dateTime': '06:04:30', 'value': '1'},
    {'dateTime': '06:05:30', 'value': '1'},
    {'dateTime': '06:06:30', 'value': '1'},
    {'dateTime': '06:07:30', 'value': '2'},
    {'dateTime': '06:08:30', 'value': '2'},
    {'dateTime': '06:09:30', 'value': '1'},
    {'dateTime': '06:10:30', 'value': '1'},
    {'dateTime': '06:11:30', 'value': '1'},
    {'dateTime': '06:12:30', 'value': '1'},
    {'dateTime': '06:13:30', 'value': '1'},
    {'dateTime': '06:14:30', 'value': '1'},
    {'dateTime': '06:15:30', 'value': '1'},
    {'dateTime': '06:16:30', 'value': '1'},
    {'dateTime': '06:17:30', 'value': '1'},
    {'dateTime': '06:18:30', 'value': '1'},
    {'dateTime': '06:19:30', 'value': '1'},
    {'dateTime': '06:20:30', 'value': '1'},
    {'dateTime': '06:21:30', 'value': '1'},
    {'dateTime': '06:22:30', 'value': '1'},
    {'dateTime': '06:23:30', 'value': '1'},
    {'dateTime': '06:24:30', 'value': '1'},
    {'dateTime': '06:25:30', 'value': '1'},
    {'dateTime': '06:26:30', 'value': '1'},
    {'dateTime': '06:27:30', 'value': '1'}],
   'minutesAfterWakeup': 0,
   'minutesAsleep': 415,
   'minutesAwake': 32,
   'minutesToFallAsleep': 0,
   'restlessCount': 8,
   'restlessDuration': 31,
   'startTime': '2017-07-30T22:59:30.000',
   'timeInBed': 449}],
 'summary': {'totalMinutesAsleep': 415,
  'totalSleepRecords': 1,
  'totalTimeInBed': 449}}

In [13]:
sleep_keys = sleep_logs[-1]['sleep'][0].keys()

In [14]:
sleep_keys


Out[14]:
dict_keys(['awakeCount', 'awakeDuration', 'awakeningsCount', 'dateOfSleep', 'duration', 'efficiency', 'endTime', 'isMainSleep', 'logId', 'minuteData', 'minutesAfterWakeup', 'minutesAsleep', 'minutesAwake', 'minutesToFallAsleep', 'restlessCount', 'restlessDuration', 'startTime', 'timeInBed'])

In [17]:
trimmed_list = []
for sleep_log in sleep_logs:
    for sleep_event in sleep_log['sleep']:
        trim_dict = {}
        key_list = sleep_event.keys()
        for this_key in key_list:
            if this_key != 'minuteData':
                trim_dict[this_key] = sleep_event[this_key]
        trimmed_list.append(trim_dict)

In [18]:
df_sleep = pd.DataFrame(trimmed_list)

In [19]:
df_sleep.head()


Out[19]:
awakeCount awakeDuration awakeningsCount dateOfSleep duration efficiency endTime isMainSleep logId minutesAfterWakeup minutesAsleep minutesAwake minutesToFallAsleep restlessCount restlessDuration startTime timeInBed
0 2 3 9 2016-11-09 12960000 93 2016-11-09T00:43:00.000 True 12964507801 0 201 15 0 7 12 2016-11-08T21:07:00.000 216
1 3 4 4 2016-11-09 5400000 94 2016-11-09T04:45:30.000 False 12965661277 0 85 5 0 1 1 2016-11-09T03:15:00.000 90
2 4 10 22 2016-11-10 27600000 92 2016-11-10T04:23:00.000 True 12972831606 1 417 35 7 18 33 2016-11-09T20:43:00.000 460
3 2 7 17 2016-11-11 22740000 92 2016-11-11T02:57:00.000 True 12980609652 2 348 29 0 15 24 2016-11-10T20:38:00.000 379
4 0 0 1 2016-11-11 4080000 91 2016-11-11T06:04:30.000 False 12981238387 0 62 6 0 1 6 2016-11-11T04:56:00.000 68

In [27]:
df_sleep.columns


Out[27]:
Index(['awakeCount', 'awakeDuration', 'awakeningsCount', 'dateOfSleep',
       'duration', 'efficiency', 'endTime', 'isMainSleep', 'logId',
       'minutesAfterWakeup', 'minutesAsleep', 'minutesAwake',
       'minutesToFallAsleep', 'restlessCount', 'restlessDuration', 'startTime',
       'timeInBed'],
      dtype='object')

In [29]:
df_sleep['dateOfSleep'].head()


Out[29]:
start_datetime
2016-11-08 21:07:00    2016-11-09
2016-11-09 03:15:00    2016-11-09
2016-11-09 20:43:00    2016-11-10
2016-11-10 20:38:00    2016-11-11
2016-11-11 04:56:00    2016-11-11
Name: dateOfSleep, dtype: object

In [30]:
start_sleep = pd.to_datetime(df_sleep['startTime'])
df_sleep['start_datetime'] = start_sleep
# df_sleep = df_sleep.set_index('start_datetime')

Sum from 6pm to 6pm instead of midnight to midnight.


In [31]:
df_sleep['shifted_datetime'] = df_sleep['start_datetime'] - pd.Timedelta(hours=6)
df_sleep = df_sleep.set_index('shifted_datetime')

In [32]:
plt.plot(df_sleep['minutesAsleep'].resample('1D').sum()/60., '.')


Out[32]:
[<matplotlib.lines.Line2D at 0x115f1eb00>]

In [33]:
hours_sleep = df_sleep['minutesAsleep'].resample('1D').sum()/60.

In [34]:
hours_sleep.mean()


Out[34]:
6.819783715012723

In [35]:
hours_sleep.std()


Out[35]:
1.4052696224078365

In [41]:
os.getcwd()


Out[41]:
'/Users/rbussman/Projects/sleep-bit/notebooks'

In [42]:
data_path = os.path.join(os.getcwd(), os.pardir, 'data', 'interim', 'sleep_data.csv')
df_sleep.to_csv(data_path, index_label='shifted_datetime')

In [ ]: