2021-03-10 15:54:40 +01:00
|
|
|
import json
|
|
|
|
import pandas as pd
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
STEPS_COLUMNS = ("device_id", "steps", "local_date_time", "timestamp")
|
|
|
|
|
|
|
|
|
|
|
|
def parseStepsData(steps_data):
|
|
|
|
if steps_data.empty:
|
|
|
|
return pd.DataFrame(columns=STEPS_COLUMNS)
|
|
|
|
|
|
|
|
device_id = steps_data["device_id"].iloc[0]
|
|
|
|
records = []
|
|
|
|
|
|
|
|
# Parse JSON into individual records
|
2021-03-10 16:07:52 +01:00
|
|
|
for record in steps_data.json_fitbit_column:
|
2021-03-10 15:54:40 +01:00
|
|
|
record = json.loads(record) # Parse text into JSON
|
|
|
|
if "activities-steps" in record.keys():
|
|
|
|
curr_date = datetime.strptime(record["activities-steps"][0]["dateTime"], "%Y-%m-%d")
|
|
|
|
|
|
|
|
# Parse intraday data
|
|
|
|
if "activities-steps-intraday" in record.keys():
|
|
|
|
dataset = record["activities-steps-intraday"]["dataset"]
|
|
|
|
for data in dataset:
|
|
|
|
d_time = datetime.strptime(data["time"], '%H:%M:%S').time()
|
|
|
|
d_datetime = datetime.combine(curr_date, d_time)
|
|
|
|
|
|
|
|
row_intraday = (device_id,
|
|
|
|
data["value"],
|
|
|
|
d_datetime,
|
|
|
|
0)
|
|
|
|
|
|
|
|
records.append(row_intraday)
|
|
|
|
|
|
|
|
parsed_data = pd.DataFrame(data=records, columns=STEPS_COLUMNS)
|
|
|
|
|
|
|
|
return parsed_data
|
|
|
|
|
|
|
|
|
|
|
|
def main(json_raw, stream_parameters):
|
|
|
|
parsed_data = parseStepsData(json_raw)
|
2021-03-10 16:07:52 +01:00
|
|
|
parsed_data["timestamp"] = 0 # this column is added at readable_datetime.R because we neeed to take into account multiple timezones
|
2021-03-11 20:51:16 +01:00
|
|
|
if pd.api.types.is_datetime64_any_dtype( parsed_data['local_date_time']):
|
|
|
|
parsed_data['local_date_time'] = parsed_data['local_date_time'].dt.strftime('%Y-%m-%d %H:%M:%S')
|
2021-03-10 15:54:40 +01:00
|
|
|
return(parsed_data)
|