Download Cozie-Fitbit data
Extracting Data
Data can be extracted via our web API:Parameter | Description / Value |
---|---|
API URL | https://6uc3obiy9f.execute-api.ap-southeast-1.amazonaws.com/default/cozie-fitbit-researcher-read-influx |
API key | Reach out to cozie.app@gmail.com for an API key |
experiment_id | Value entered in the Cozie settings |
user_id | Value entered in the Cozie settings (optional, if not included all users are extracted) |
weeks | Weeks of data (optional, default is 2 weeks, time frame 2 weeks from now until now) |
Extracting Data with Python
The Python script below is all you need to download data logged with the Cozie clock face. Make sure to configure at least ID_EXPERIMENT
, ID_PARTICIPANT
, and API_KEY
before executing the script.
import requests
import json
import pandas as pd
import matplotlib.pyplot as plt
# Settings
YOUR_TIMEZONE = 'Asia/Singapore'
ID_PARTICIPANT = 'alpha'
ID_EXPERIMENT = 'alpha01'
WEEKS = "100" # Number of weeks from which the data is retrieved, starting from now
API_KEY = '' # reach out to cozie.app@gmail.com for an API_KEY
API_URL = 'https://6uc3obiy9f.execute-api.ap-southeast-1.amazonaws.com/default/cozie-fitbit-researcher-read-influx'
# Assemble request
payload = {'experiment_id': ID_EXPERIMENT, 'weeks': WEEKS, 'user_id':ID_PARTICIPANT}
headers = {"Accept": "application/json", 'x-api-key': API_KEY}
# Query data
response = requests.get(API_URL, params=payload, headers=headers)
# Convert response to Pandas dataframe
my_json = response.content.decode('utf8').replace("'", '"')
data = json.loads(my_json, )
df = pd.read_json(data[1]['data']).T
df.index = pd.to_datetime(df['index'], unit='ms')
df = df.tz_localize('UTC').tz_convert(YOUR_TIMEZONE)
df = df.drop(columns=['index'])
# Display dataframe
df.head()
Some mild data processing
The raw data has the watch survey responses encoded as numbers between 9 and 12. These values can be converted back into the words shown on the clock face with the code snippet below.# Translate integer values into strings for main question flow
translation_table = {'comfort': { 9: 'Not Comfy',
10: 'Comfy'},
'thermal': { 9: 'No change',
10: 'Warmer',
11: 'Cooler',
12: 'Something else'},
'indoorOutdoor':{10: 'Outdoor',
11: 'Indoor'},
'location': { 9: 'Neither',
10: 'Office',
11: 'Home'},
'clothing': { 9: 'Medium',
10: 'Heavy',
11: 'Light'},
'airSpeed': {10: 'Yes',
11: 'No'},
'met': { 9: 'Sitting',
10: 'Standing',
11: 'Resting'},
'anyChange': {10: 'No',
11: 'Yes'},
'mood': { 9: 'Neutral',
10: 'Bad',
11: 'Good'},
'noise': { 9: 'No Change',
10: 'Louder',
11: 'Quieter'},
'light': { 9: 'No Change',
10: 'Brighter',
11: 'Dimmer'}
}
df = df.replace(translation_table)
Additionally, the column names can also be replaced with the question show on the clock face:
# Change column names
df = df.rename(columns={'comfort':'Clock face',
'thermal':'Would you prefer to be?',
'indoorOutdoor':'Are you?',
'location':'Where are you?',
'clothing':'What are you wearing?',
'airSpeed':'Can you perceive air movement around you?',
'met':'Activity, lat 10-min?',
'anyChange':'Any changes in clo, loc, or met past 10-m?',
'mood':'What mood are you in?',
'noise':'Sound preference',
'light':'Light preference'})
df.head()