Skip to content

Instantly share code, notes, and snippets.

@nealmcb
Created July 3, 2021 16:11
Show Gist options
  • Save nealmcb/d6e3e0b50495bb10c943b1231bd0bca5 to your computer and use it in GitHub Desktop.
Save nealmcb/d6e3e0b50495bb10c943b1231bd0bca5 to your computer and use it in GitHub Desktop.
Explore Noom data export
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "noble-implement",
"metadata": {},
"source": [
"# Explore Noom data export\n",
"\n",
"Thanks to Europe's [General Data Protection Regulation](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation) (GDPR), [Noom](https://noom.com) provides the ability to export the data it saves on us.\n",
"\n",
"See how at [How do I request to export my data? \\- Noom](https://web.noom.com/support/support-question-topic/2018/05/how-do-i-request-to-export-my-data/)\n",
"\n",
"Here we explore a bit of the data for one individual, provided in CSV and JSON format.\n",
"We graph the weights it tracks, with Python's Pandas analysis tool.\n",
"\n",
"The raw data itself is not provided here, but hopefully this code will work on your data."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "recent-basics",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import json\n",
"import glob"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "waiting-favorite",
"metadata": {},
"outputs": [],
"source": [
"# notebook: for interactive zoom, pan, resize, query data points\n",
"# inline: for diagram export, printing etc\n",
"# %matplotlib notebook"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "passing-auction",
"metadata": {},
"outputs": [],
"source": [
"def load_csv(filename):\n",
" \"Read in csv from filename, related info, return dataframe\"\n",
"\n",
" df = pd.read_csv(filename, low_memory=False) \n",
" print(\"Columns: %s\" % str(' '.join(df.columns)))\n",
" print(\"Descriptive statistics for numeric columns via describe():\")\n",
" display(df.describe())\n",
" return df"
]
},
{
"cell_type": "markdown",
"id": "brilliant-router",
"metadata": {},
"source": [
"Read in `CardioTrainer.Actions.csv`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "wooden-tuition",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Columns: addedId accessCode date actionType jsonString generation serverTimeCreated serverTimeUpdated\n",
"Descriptive statistics for numeric columns via describe():\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>addedId</th>\n",
" <th>generation</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1.780000e+02</td>\n",
" <td>178.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>6.223543e+10</td>\n",
" <td>1149.533708</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>4.778559e+08</td>\n",
" <td>697.289629</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.160844e+10</td>\n",
" <td>18.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>6.180621e+10</td>\n",
" <td>500.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>6.212832e+10</td>\n",
" <td>1166.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>6.264368e+10</td>\n",
" <td>1821.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>6.316093e+10</td>\n",
" <td>2133.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" addedId generation\n",
"count 1.780000e+02 178.000000\n",
"mean 6.223543e+10 1149.533708\n",
"std 4.778559e+08 697.289629\n",
"min 6.160844e+10 18.000000\n",
"25% 6.180621e+10 500.000000\n",
"50% 6.212832e+10 1166.000000\n",
"75% 6.264368e+10 1821.000000\n",
"max 6.316093e+10 2133.000000"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"actions_df = load_csv(\"dump/7882_CardioTrainer.Actions.csv\").set_index(\"serverTimeCreated\")"
]
},
{
"cell_type": "markdown",
"id": "common-christian",
"metadata": {},
"source": [
"Convert row ids from strings to dates"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "competitive-mercy",
"metadata": {},
"outputs": [],
"source": [
"actions_df.index = pd.to_datetime(actions_df.index)"
]
},
{
"cell_type": "markdown",
"id": "peaceful-guard",
"metadata": {},
"source": [
"We see that the data of interest is embedded in JSON format inside one of the columns."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "preliminary-development",
"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>addedId</th>\n",
" <th>accessCode</th>\n",
" <th>date</th>\n",
" <th>actionType</th>\n",
" <th>jsonString</th>\n",
" <th>generation</th>\n",
" <th>serverTimeUpdated</th>\n",
" </tr>\n",
" <tr>\n",
" <th>serverTimeCreated</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2021-05-24 12:58:20</th>\n",
" <td>62389532894</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-24</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"025c8dc3-fef0-41a2-...</td>\n",
" <td>1512</td>\n",
" <td>2021-05-24 12:58:20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-07 13:06:57</th>\n",
" <td>62037043784</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-07</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"02e7bc73-944d-48d8-...</td>\n",
" <td>956</td>\n",
" <td>2021-05-07 13:06:57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-26 13:54:41</th>\n",
" <td>61805563851</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-26</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"042c13a9-3b77-4a67-...</td>\n",
" <td>488</td>\n",
" <td>2021-04-26 13:54:41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-22 13:24:02</th>\n",
" <td>61724057368</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-22</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"05e089c8-bacc-44a5-...</td>\n",
" <td>329</td>\n",
" <td>2021-04-22 13:24:02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-01 12:01:20</th>\n",
" <td>61909925991</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-01</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"06c2483f-2341-4928-...</td>\n",
" <td>728</td>\n",
" <td>2021-05-01 12:01:20</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",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25 19:02:16</th>\n",
" <td>62418620689</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-25</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"fdb9bf50-7948-490b-...</td>\n",
" <td>1572</td>\n",
" <td>2021-05-25 19:02:16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-23 15:24:49</th>\n",
" <td>62372196437</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-23</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"fe37c527-3769-4b19-...</td>\n",
" <td>1483</td>\n",
" <td>2021-05-23 15:24:49</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-28 13:17:52</th>\n",
" <td>61849180482</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-28</td>\n",
" <td>WEIGH_IN</td>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"fec9c23c-a5a7-4cf3-...</td>\n",
" <td>573</td>\n",
" <td>2021-04-28 13:17:52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-24 13:51:57</th>\n",
" <td>61766767385</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-24</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"ff1ad6ac-3cc3-47...</td>\n",
" <td>431</td>\n",
" <td>2021-04-25 15:41:14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-18 06:44:45</th>\n",
" <td>61630778114</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-18</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"ffde1f39-5079-4e...</td>\n",
" <td>140</td>\n",
" <td>2021-04-19 13:52:49</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>178 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" addedId accessCode date actionType \\\n",
"serverTimeCreated \n",
"2021-05-24 12:58:20 62389532894 RCDE1MG4 2021-05-24 WEIGH_IN \n",
"2021-05-07 13:06:57 62037043784 RCDE1MG4 2021-05-07 WEIGH_IN \n",
"2021-04-26 13:54:41 61805563851 RCDE1MG4 2021-04-26 WEIGH_IN \n",
"2021-04-22 13:24:02 61724057368 RCDE1MG4 2021-04-22 WEIGH_IN \n",
"2021-05-01 12:01:20 61909925991 RCDE1MG4 2021-05-01 WEIGH_IN \n",
"... ... ... ... ... \n",
"2021-05-25 19:02:16 62418620689 RCDE1MG4 2021-05-25 WEIGH_IN \n",
"2021-05-23 15:24:49 62372196437 RCDE1MG4 2021-05-23 WEIGH_IN \n",
"2021-04-28 13:17:52 61849180482 RCDE1MG4 2021-04-28 WEIGH_IN \n",
"2021-04-24 13:51:57 61766767385 RCDE1MG4 2021-04-24 DAILY_STEPS \n",
"2021-04-18 06:44:45 61630778114 RCDE1MG4 2021-04-18 DAILY_STEPS \n",
"\n",
" jsonString \\\n",
"serverTimeCreated \n",
"2021-05-24 12:58:20 {\"type\":\"WEIGH_IN\",\"uuid\":\"025c8dc3-fef0-41a2-... \n",
"2021-05-07 13:06:57 {\"type\":\"WEIGH_IN\",\"uuid\":\"02e7bc73-944d-48d8-... \n",
"2021-04-26 13:54:41 {\"type\":\"WEIGH_IN\",\"uuid\":\"042c13a9-3b77-4a67-... \n",
"2021-04-22 13:24:02 {\"type\":\"WEIGH_IN\",\"uuid\":\"05e089c8-bacc-44a5-... \n",
"2021-05-01 12:01:20 {\"type\":\"WEIGH_IN\",\"uuid\":\"06c2483f-2341-4928-... \n",
"... ... \n",
"2021-05-25 19:02:16 {\"type\":\"WEIGH_IN\",\"uuid\":\"fdb9bf50-7948-490b-... \n",
"2021-05-23 15:24:49 {\"type\":\"WEIGH_IN\",\"uuid\":\"fe37c527-3769-4b19-... \n",
"2021-04-28 13:17:52 {\"type\":\"WEIGH_IN\",\"uuid\":\"fec9c23c-a5a7-4cf3-... \n",
"2021-04-24 13:51:57 {\"type\":\"DAILY_STEPS\",\"uuid\":\"ff1ad6ac-3cc3-47... \n",
"2021-04-18 06:44:45 {\"type\":\"DAILY_STEPS\",\"uuid\":\"ffde1f39-5079-4e... \n",
"\n",
" generation serverTimeUpdated \n",
"serverTimeCreated \n",
"2021-05-24 12:58:20 1512 2021-05-24 12:58:20 \n",
"2021-05-07 13:06:57 956 2021-05-07 13:06:57 \n",
"2021-04-26 13:54:41 488 2021-04-26 13:54:41 \n",
"2021-04-22 13:24:02 329 2021-04-22 13:24:02 \n",
"2021-05-01 12:01:20 728 2021-05-01 12:01:20 \n",
"... ... ... \n",
"2021-05-25 19:02:16 1572 2021-05-25 19:02:16 \n",
"2021-05-23 15:24:49 1483 2021-05-23 15:24:49 \n",
"2021-04-28 13:17:52 573 2021-04-28 13:17:52 \n",
"2021-04-24 13:51:57 431 2021-04-25 15:41:14 \n",
"2021-04-18 06:44:45 140 2021-04-19 13:52:49 \n",
"\n",
"[178 rows x 7 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"actions_df"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "anticipated-praise",
"metadata": {},
"outputs": [],
"source": [
"weight_example = actions_df.iloc[0].jsonString"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "exempt-desperate",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'{\"type\":\"WEIGH_IN\",\"uuid\":\"025c8dc3-fef0-41a2-a595-e5031971c6c0\",\"date\":\"2021-05-24\",\"timeInserted\":\"2021-05-24T06:58:09.156-06:00[America/Denver]\",\"timeUpdated\":\"2021-05-24T06:58:09.156-06:00[America/Denver]\",\"source\":{\"platform\":\"ANDROID\",\"product\":\"COACH\",\"hashedDeviceId\":\"095548633f30a89d68b3ea16715ecbcbf3e925587525fb7006ee15d14e7d423e\"},\"weightInKg\":81.555916,\"loggedInSignupFlow\":false,\"type\":\"WEIGH_IN\"}'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"weight_example"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "literary-beauty",
"metadata": {},
"outputs": [],
"source": [
"weight_example_dict = json.loads(weight_example)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "fatty-crisis",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'type': 'WEIGH_IN',\n",
" 'uuid': '025c8dc3-fef0-41a2-a595-e5031971c6c0',\n",
" 'date': '2021-05-24',\n",
" 'timeInserted': '2021-05-24T06:58:09.156-06:00[America/Denver]',\n",
" 'timeUpdated': '2021-05-24T06:58:09.156-06:00[America/Denver]',\n",
" 'source': {'platform': 'ANDROID',\n",
" 'product': 'COACH',\n",
" 'hashedDeviceId': '095548633f30a89d68b3ea16715ecbcbf3e925587525fb7006ee15d14e7d423e'},\n",
" 'weightInKg': 81.555916,\n",
" 'loggedInSignupFlow': False}"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"weight_example_dict"
]
},
{
"cell_type": "markdown",
"id": "stone-diploma",
"metadata": {},
"source": [
"Filter out just the WEIGH_IN rows, and just the jsonString column"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "instructional-rugby",
"metadata": {},
"outputs": [],
"source": [
"weight_df = actions_df.loc[actions_df['actionType'] == \"WEIGH_IN\"][[\"jsonString\"]]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "parallel-madagascar",
"metadata": {
"scrolled": true
},
"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>jsonString</th>\n",
" </tr>\n",
" <tr>\n",
" <th>serverTimeCreated</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2021-05-24 12:58:20</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"025c8dc3-fef0-41a2-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-07 13:06:57</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"02e7bc73-944d-48d8-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-26 13:54:41</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"042c13a9-3b77-4a67-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-22 13:24:02</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"05e089c8-bacc-44a5-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-01 12:01:20</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"06c2483f-2341-4928-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-05 11:04:09</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"17a848df-e2bf-4f56-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-07-02 13:17:45</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"1e979498-c7cc-47ff-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-10 12:19:27</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"1ea1287a-37ad-4756-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-09 13:04:21</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"1f2967d4-9d8f-44f5-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-08 11:30:28</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"348c3360-f635-44d4-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-20 11:33:11</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"34e27a3a-c8ad-4729-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-30 12:14:50</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"35a511f2-dfc7-4efd-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-11 13:49:11</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"3afefdf5-b470-451a-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-04 12:36:52</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"3c7b51ec-51e1-4daf-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-26 14:20:44</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"3e816fed-e217-4e87-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-06 13:43:22</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"409438a7-b0ff-472f-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-18 12:40:34</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"42e306e0-1a5a-4cd3-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-24 13:27:42</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"463116f6-9650-45d8-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-17 13:27:40</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"477f14d7-9643-4bec-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-23 13:18:31</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"4e13e933-f228-4efb-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-27 13:34:09</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"4e7e971e-2a24-4e1e-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-24 13:51:57</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"5c09ec23-9112-4d42-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-15 20:43:14</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"5f75bd4f-67ab-4767-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-03 12:47:46</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"61f3e990-059c-4e5c-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-28 12:29:30</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"658e5295-fa74-42b2-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-10 13:51:46</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"672fefac-265c-4c39-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-25 15:41:14</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"67bfca24-1e8c-4fbf-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-07 11:42:55</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"68f1c058-e38e-40d2-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-05 13:39:12</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"7577476f-cd5c-4e00-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-26 13:42:48</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"7627b1a7-520f-4b6a-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-21 14:50:37</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"7765d9a7-647f-4fd7-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-09 13:22:34</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"7ad26467-cc5a-48bd-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-12 13:43:50</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"7b301e5a-6f1c-4aa6-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-22 12:29:49</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"93313a55-87b6-4193-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-03 13:16:35</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"9454144e-01f3-4e4f-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-04 12:59:09</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"950241c3-b53c-4009-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-18 14:24:23</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"971b32d1-c723-455b-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-25 13:26:31</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"9983d1bb-0d1a-4890-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-29 12:41:23</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"9edd5796-67a4-4b18-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-29 14:25:07</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"ae431748-515f-4ccd-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-30 12:43:12</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"b11f56e8-7647-4810-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-22 12:07:58</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"b2683d93-5082-42af-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-13 12:46:34</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"c202751e-d163-4799-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-11 13:29:56</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"c779f512-e4c3-43bb-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-12 11:32:36</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"c9ab7b53-16cb-41fa-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-21 12:08:24</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"d343ed9b-8c70-4183-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-14 12:55:20</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"da6076f5-26da-4113-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-27 13:02:01</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"e49cef7a-76dc-46db-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-30 12:42:33</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"e788a8bb-9a23-473f-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-20 12:27:35</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"eaa3d505-ee72-4012-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-30 12:45:27</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"f23f7f64-4af7-452e-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-20 13:04:33</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"f5d61a05-4f6c-4ff6-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-08 13:45:54</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"f76dc5a3-9ece-49db-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25 19:02:16</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"fdb9bf50-7948-490b-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-23 15:24:49</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"fe37c527-3769-4b19-...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-28 13:17:52</th>\n",
" <td>{\"type\":\"WEIGH_IN\",\"uuid\":\"fec9c23c-a5a7-4cf3-...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" jsonString\n",
"serverTimeCreated \n",
"2021-05-24 12:58:20 {\"type\":\"WEIGH_IN\",\"uuid\":\"025c8dc3-fef0-41a2-...\n",
"2021-05-07 13:06:57 {\"type\":\"WEIGH_IN\",\"uuid\":\"02e7bc73-944d-48d8-...\n",
"2021-04-26 13:54:41 {\"type\":\"WEIGH_IN\",\"uuid\":\"042c13a9-3b77-4a67-...\n",
"2021-04-22 13:24:02 {\"type\":\"WEIGH_IN\",\"uuid\":\"05e089c8-bacc-44a5-...\n",
"2021-05-01 12:01:20 {\"type\":\"WEIGH_IN\",\"uuid\":\"06c2483f-2341-4928-...\n",
"2021-06-05 11:04:09 {\"type\":\"WEIGH_IN\",\"uuid\":\"17a848df-e2bf-4f56-...\n",
"2021-07-02 13:17:45 {\"type\":\"WEIGH_IN\",\"uuid\":\"1e979498-c7cc-47ff-...\n",
"2021-06-10 12:19:27 {\"type\":\"WEIGH_IN\",\"uuid\":\"1ea1287a-37ad-4756-...\n",
"2021-06-09 13:04:21 {\"type\":\"WEIGH_IN\",\"uuid\":\"1f2967d4-9d8f-44f5-...\n",
"2021-05-08 11:30:28 {\"type\":\"WEIGH_IN\",\"uuid\":\"348c3360-f635-44d4-...\n",
"2021-06-20 11:33:11 {\"type\":\"WEIGH_IN\",\"uuid\":\"34e27a3a-c8ad-4729-...\n",
"2021-04-30 12:14:50 {\"type\":\"WEIGH_IN\",\"uuid\":\"35a511f2-dfc7-4efd-...\n",
"2021-06-11 13:49:11 {\"type\":\"WEIGH_IN\",\"uuid\":\"3afefdf5-b470-451a-...\n",
"2021-06-04 12:36:52 {\"type\":\"WEIGH_IN\",\"uuid\":\"3c7b51ec-51e1-4daf-...\n",
"2021-06-26 14:20:44 {\"type\":\"WEIGH_IN\",\"uuid\":\"3e816fed-e217-4e87-...\n",
"2021-06-06 13:43:22 {\"type\":\"WEIGH_IN\",\"uuid\":\"409438a7-b0ff-472f-...\n",
"2021-05-18 12:40:34 {\"type\":\"WEIGH_IN\",\"uuid\":\"42e306e0-1a5a-4cd3-...\n",
"2021-06-24 13:27:42 {\"type\":\"WEIGH_IN\",\"uuid\":\"463116f6-9650-45d8-...\n",
"2021-04-17 13:27:40 {\"type\":\"WEIGH_IN\",\"uuid\":\"477f14d7-9643-4bec-...\n",
"2021-06-23 13:18:31 {\"type\":\"WEIGH_IN\",\"uuid\":\"4e13e933-f228-4efb-...\n",
"2021-04-27 13:34:09 {\"type\":\"WEIGH_IN\",\"uuid\":\"4e7e971e-2a24-4e1e-...\n",
"2021-04-24 13:51:57 {\"type\":\"WEIGH_IN\",\"uuid\":\"5c09ec23-9112-4d42-...\n",
"2021-05-15 20:43:14 {\"type\":\"WEIGH_IN\",\"uuid\":\"5f75bd4f-67ab-4767-...\n",
"2021-06-03 12:47:46 {\"type\":\"WEIGH_IN\",\"uuid\":\"61f3e990-059c-4e5c-...\n",
"2021-05-28 12:29:30 {\"type\":\"WEIGH_IN\",\"uuid\":\"658e5295-fa74-42b2-...\n",
"2021-05-10 13:51:46 {\"type\":\"WEIGH_IN\",\"uuid\":\"672fefac-265c-4c39-...\n",
"2021-04-25 15:41:14 {\"type\":\"WEIGH_IN\",\"uuid\":\"67bfca24-1e8c-4fbf-...\n",
"2021-06-07 11:42:55 {\"type\":\"WEIGH_IN\",\"uuid\":\"68f1c058-e38e-40d2-...\n",
"2021-05-05 13:39:12 {\"type\":\"WEIGH_IN\",\"uuid\":\"7577476f-cd5c-4e00-...\n",
"2021-05-26 13:42:48 {\"type\":\"WEIGH_IN\",\"uuid\":\"7627b1a7-520f-4b6a-...\n",
"2021-04-21 14:50:37 {\"type\":\"WEIGH_IN\",\"uuid\":\"7765d9a7-647f-4fd7-...\n",
"2021-05-09 13:22:34 {\"type\":\"WEIGH_IN\",\"uuid\":\"7ad26467-cc5a-48bd-...\n",
"2021-05-12 13:43:50 {\"type\":\"WEIGH_IN\",\"uuid\":\"7b301e5a-6f1c-4aa6-...\n",
"2021-06-22 12:29:49 {\"type\":\"WEIGH_IN\",\"uuid\":\"93313a55-87b6-4193-...\n",
"2021-05-03 13:16:35 {\"type\":\"WEIGH_IN\",\"uuid\":\"9454144e-01f3-4e4f-...\n",
"2021-05-04 12:59:09 {\"type\":\"WEIGH_IN\",\"uuid\":\"950241c3-b53c-4009-...\n",
"2021-04-18 14:24:23 {\"type\":\"WEIGH_IN\",\"uuid\":\"971b32d1-c723-455b-...\n",
"2021-06-25 13:26:31 {\"type\":\"WEIGH_IN\",\"uuid\":\"9983d1bb-0d1a-4890-...\n",
"2021-06-29 12:41:23 {\"type\":\"WEIGH_IN\",\"uuid\":\"9edd5796-67a4-4b18-...\n",
"2021-05-29 14:25:07 {\"type\":\"WEIGH_IN\",\"uuid\":\"ae431748-515f-4ccd-...\n",
"2021-05-30 12:43:12 {\"type\":\"WEIGH_IN\",\"uuid\":\"b11f56e8-7647-4810-...\n",
"2021-05-22 12:07:58 {\"type\":\"WEIGH_IN\",\"uuid\":\"b2683d93-5082-42af-...\n",
"2021-05-13 12:46:34 {\"type\":\"WEIGH_IN\",\"uuid\":\"c202751e-d163-4799-...\n",
"2021-05-11 13:29:56 {\"type\":\"WEIGH_IN\",\"uuid\":\"c779f512-e4c3-43bb-...\n",
"2021-06-12 11:32:36 {\"type\":\"WEIGH_IN\",\"uuid\":\"c9ab7b53-16cb-41fa-...\n",
"2021-06-21 12:08:24 {\"type\":\"WEIGH_IN\",\"uuid\":\"d343ed9b-8c70-4183-...\n",
"2021-05-14 12:55:20 {\"type\":\"WEIGH_IN\",\"uuid\":\"da6076f5-26da-4113-...\n",
"2021-05-27 13:02:01 {\"type\":\"WEIGH_IN\",\"uuid\":\"e49cef7a-76dc-46db-...\n",
"2021-05-30 12:42:33 {\"type\":\"WEIGH_IN\",\"uuid\":\"e788a8bb-9a23-473f-...\n",
"2021-05-20 12:27:35 {\"type\":\"WEIGH_IN\",\"uuid\":\"eaa3d505-ee72-4012-...\n",
"2021-06-30 12:45:27 {\"type\":\"WEIGH_IN\",\"uuid\":\"f23f7f64-4af7-452e-...\n",
"2021-04-20 13:04:33 {\"type\":\"WEIGH_IN\",\"uuid\":\"f5d61a05-4f6c-4ff6-...\n",
"2021-06-08 13:45:54 {\"type\":\"WEIGH_IN\",\"uuid\":\"f76dc5a3-9ece-49db-...\n",
"2021-05-25 19:02:16 {\"type\":\"WEIGH_IN\",\"uuid\":\"fdb9bf50-7948-490b-...\n",
"2021-05-23 15:24:49 {\"type\":\"WEIGH_IN\",\"uuid\":\"fe37c527-3769-4b19-...\n",
"2021-04-28 13:17:52 {\"type\":\"WEIGH_IN\",\"uuid\":\"fec9c23c-a5a7-4cf3-..."
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"weight_df"
]
},
{
"cell_type": "markdown",
"id": "ongoing-performance",
"metadata": {},
"source": [
"Extract weight in kg from jsonString, and convert to pounds"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "pending-cambodia",
"metadata": {},
"outputs": [],
"source": [
"weights = weight_df.apply(lambda s: json.loads(s.jsonString)['weightInKg'] * 2.20462, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "tired-triple",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"weights.plot();"
]
},
{
"cell_type": "markdown",
"id": "lyric-scanning",
"metadata": {},
"source": [
"----"
]
},
{
"cell_type": "markdown",
"id": "divided-finnish",
"metadata": {},
"source": [
"Note that Noom's serverTimeUpdated varies for DAILY_STEPS, synced from Google Fit. They seem to often update it with a final value the next day, so we'll rely on the Created date as being more helpful."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "forced-twenty",
"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>addedId</th>\n",
" <th>accessCode</th>\n",
" <th>date</th>\n",
" <th>actionType</th>\n",
" <th>jsonString</th>\n",
" <th>generation</th>\n",
" <th>serverTimeUpdated</th>\n",
" </tr>\n",
" <tr>\n",
" <th>serverTimeCreated</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2021-06-15 19:17:18</th>\n",
" <td>62839649300</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-06-15</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"075550f8-e321-44...</td>\n",
" <td>1995</td>\n",
" <td>2021-06-16 17:40:00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-09 12:42:04</th>\n",
" <td>62074728224</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-09</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"0d54e507-16d8-47...</td>\n",
" <td>1088</td>\n",
" <td>2021-05-10 13:49:14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-29 15:49:59</th>\n",
" <td>61873870779</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-29</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"10bd9d9b-0fa3-47...</td>\n",
" <td>661</td>\n",
" <td>2021-04-30 12:14:50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-13 12:46:34</th>\n",
" <td>62160659932</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-13</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"17313a3c-44c6-45...</td>\n",
" <td>1230</td>\n",
" <td>2021-05-14 12:55:20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-25 18:59:16</th>\n",
" <td>62418566263</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-25</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"212fe090-597b-46...</td>\n",
" <td>1584</td>\n",
" <td>2021-05-26 13:42:48</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",
" </tr>\n",
" <tr>\n",
" <th>2021-05-30 12:42:33</th>\n",
" <td>62510233537</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-30</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"f78a985c-3c9f-4e...</td>\n",
" <td>1714</td>\n",
" <td>2021-05-31 14:01:29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-24 12:58:20</th>\n",
" <td>62389532891</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-24</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"f7f58644-bad1-44...</td>\n",
" <td>1565</td>\n",
" <td>2021-05-25 18:59:16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-05-15 18:23:18</th>\n",
" <td>62208093114</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-05-15</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"fbcd4a5d-d5e4-4e...</td>\n",
" <td>1289</td>\n",
" <td>2021-05-16 14:15:07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-24 13:51:57</th>\n",
" <td>61766767385</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-24</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"ff1ad6ac-3cc3-47...</td>\n",
" <td>431</td>\n",
" <td>2021-04-25 15:41:14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-04-18 06:44:45</th>\n",
" <td>61630778114</td>\n",
" <td>RCDE1MG4</td>\n",
" <td>2021-04-18</td>\n",
" <td>DAILY_STEPS</td>\n",
" <td>{\"type\":\"DAILY_STEPS\",\"uuid\":\"ffde1f39-5079-4e...</td>\n",
" <td>140</td>\n",
" <td>2021-04-19 13:52:49</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>73 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" addedId accessCode date actionType \\\n",
"serverTimeCreated \n",
"2021-06-15 19:17:18 62839649300 RCDE1MG4 2021-06-15 DAILY_STEPS \n",
"2021-05-09 12:42:04 62074728224 RCDE1MG4 2021-05-09 DAILY_STEPS \n",
"2021-04-29 15:49:59 61873870779 RCDE1MG4 2021-04-29 DAILY_STEPS \n",
"2021-05-13 12:46:34 62160659932 RCDE1MG4 2021-05-13 DAILY_STEPS \n",
"2021-05-25 18:59:16 62418566263 RCDE1MG4 2021-05-25 DAILY_STEPS \n",
"... ... ... ... ... \n",
"2021-05-30 12:42:33 62510233537 RCDE1MG4 2021-05-30 DAILY_STEPS \n",
"2021-05-24 12:58:20 62389532891 RCDE1MG4 2021-05-24 DAILY_STEPS \n",
"2021-05-15 18:23:18 62208093114 RCDE1MG4 2021-05-15 DAILY_STEPS \n",
"2021-04-24 13:51:57 61766767385 RCDE1MG4 2021-04-24 DAILY_STEPS \n",
"2021-04-18 06:44:45 61630778114 RCDE1MG4 2021-04-18 DAILY_STEPS \n",
"\n",
" jsonString \\\n",
"serverTimeCreated \n",
"2021-06-15 19:17:18 {\"type\":\"DAILY_STEPS\",\"uuid\":\"075550f8-e321-44... \n",
"2021-05-09 12:42:04 {\"type\":\"DAILY_STEPS\",\"uuid\":\"0d54e507-16d8-47... \n",
"2021-04-29 15:49:59 {\"type\":\"DAILY_STEPS\",\"uuid\":\"10bd9d9b-0fa3-47... \n",
"2021-05-13 12:46:34 {\"type\":\"DAILY_STEPS\",\"uuid\":\"17313a3c-44c6-45... \n",
"2021-05-25 18:59:16 {\"type\":\"DAILY_STEPS\",\"uuid\":\"212fe090-597b-46... \n",
"... ... \n",
"2021-05-30 12:42:33 {\"type\":\"DAILY_STEPS\",\"uuid\":\"f78a985c-3c9f-4e... \n",
"2021-05-24 12:58:20 {\"type\":\"DAILY_STEPS\",\"uuid\":\"f7f58644-bad1-44... \n",
"2021-05-15 18:23:18 {\"type\":\"DAILY_STEPS\",\"uuid\":\"fbcd4a5d-d5e4-4e... \n",
"2021-04-24 13:51:57 {\"type\":\"DAILY_STEPS\",\"uuid\":\"ff1ad6ac-3cc3-47... \n",
"2021-04-18 06:44:45 {\"type\":\"DAILY_STEPS\",\"uuid\":\"ffde1f39-5079-4e... \n",
"\n",
" generation serverTimeUpdated \n",
"serverTimeCreated \n",
"2021-06-15 19:17:18 1995 2021-06-16 17:40:00 \n",
"2021-05-09 12:42:04 1088 2021-05-10 13:49:14 \n",
"2021-04-29 15:49:59 661 2021-04-30 12:14:50 \n",
"2021-05-13 12:46:34 1230 2021-05-14 12:55:20 \n",
"2021-05-25 18:59:16 1584 2021-05-26 13:42:48 \n",
"... ... ... \n",
"2021-05-30 12:42:33 1714 2021-05-31 14:01:29 \n",
"2021-05-24 12:58:20 1565 2021-05-25 18:59:16 \n",
"2021-05-15 18:23:18 1289 2021-05-16 14:15:07 \n",
"2021-04-24 13:51:57 431 2021-04-25 15:41:14 \n",
"2021-04-18 06:44:45 140 2021-04-19 13:52:49 \n",
"\n",
"[73 rows x 7 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"actions_df[actions_df.index != actions_df.serverTimeUpdated]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "abroad-february",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"addedId int64\n",
"accessCode object\n",
"date object\n",
"actionType object\n",
"jsonString object\n",
"generation int64\n",
"serverTimeUpdated object\n",
"dtype: object"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"actions_df.dtypes"
]
},
{
"cell_type": "markdown",
"id": "defensive-belgium",
"metadata": {},
"source": [
"## Show other data available\n",
"\n",
"Here are the column headings for all the files that Noom exports."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "raising-hollow",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dump/7882_Account.Users.csv: id,productId,authenticationMethodId,accessCode,principal,email,salt,credentials,active,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.Actions.csv: addedId,accessCode,date,actionType,jsonString,generation,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.Assignments.csv: addedId,accessCode,startDate,endDate,score,assignmentType,jsonString,generation,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.CoachRelationships.csv: addedId,userAccessCode,coachAccessCode,timeCreated\n",
"\n",
"dump/7882_CardioTrainer.CurriculumAssignments.csv: addedId,accessCode,curriculum,curriculumStartDate,assignmentStartTime,assignmentEndTime,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.DeletedCoachRelationships.csv: addedId,userAccessCode,coachAccessCode,timeCreated,timeMembershipCreated\n",
"\n",
"dump/7882_CardioTrainer.FinishDay.csv: addedId,userId,finishedDate,clientTimeUpdated,serverTimeCreated,serverTimeModified\n",
"\n",
"dump/7882_CardioTrainer.FoodEntries.csv: accessCode,userId,dateConsumed,timeSlot,foodType,amount,clientTimeInserted,foodCategoryCode,calories,servings,extraDataJson,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.Goals.csv: accessCode,date,score,goalType,userId,goalJsonString,time,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.GroupActionTimestamps.csv: addedId,accessCode,timeOfLastGroupAction\n",
"\n",
"dump/7882_CardioTrainer.GroupCommentHearts.csv: id,commentId,accessCode,timeCreated\n",
"\n",
"dump/7882_CardioTrainer.GroupComments.csv: id,postId,accessCode,message,extraData,timeCreated\n",
"\n",
"dump/7882_CardioTrainer.GroupDeletedMemberships.csv: addedId,groupId,accessCode,membershipJson,timeCreated,timeModified,timeLeft,reasonDeleted\n",
"\n",
"dump/7882_CardioTrainer.GroupHearts.csv: id,postId,accessCode,timeCreated\n",
"\n",
"dump/7882_CardioTrainer.GroupPosts.csv: id,groupId,accessCode,type,postJson,timeCreated,timeModified\n",
"\n",
"dump/7882_CardioTrainer.NoomProfiles.csv: addedId,accessCode,name,age,gender,description,profilePictureURL,timeCreated,timeModified\n",
"\n",
"dump/7882_CardioTrainer.SavedMeals.csv: addedId,userId,mealDataJson,clientTimeInserted,serverTimeInserted\n",
"\n",
"dump/7882_CardioTrainer.UserMessages.csv: id,fromAccessCode,toAccessCode,type,message,imageURL,isRead,timeCreated\n",
"\n",
"dump/7882_CardioTrainer.UserMetaData.csv: addedId,userId,accessCode,packageName,timeCreated,data,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.UserProfiles.csv: addedId,userId,weightLossGoal,ageInYears,weightInKg,heightInCm,waterGoal,gender,calorieBudget,activityLevel,clientTimeInserted,changeReason\n",
"\n",
"dump/7882_CardioTrainer.UserProfiles_IOS.csv: addedId,userId,jsonString,timeUpdated,date\n",
"\n",
"dump/7882_CardioTrainer.WebAccounts.csv: addedId,accessCode,jsonText,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_CardioTrainer.WeightlossPrograms.csv: addedId,userId,startTime,startWeightInKg,programDurationInWeeks,weightLossGoalInKg,timeUpdated\n",
"\n",
"dump/7882_Subscription.Subscriptions.csv: id,deprecatedNumericId,accessCode,foreignSubscriptionId,source,purchaseFlow,planId,status,timeStarted,timeEnded,timeCanceled,expiryTime,purchaseToken,nextChargeAmount,isAutoRenewalEnabled,timeAutoRenewalDisabled,trialPeriodInDays,isInTrialPeriod,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_UserData.ApplicationOpens.csv: id,accessCode,time,clientTime,clientTimeZone,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_UserData.GdprConsents.csv: id,accessCode,granted,source,time,timeZone,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_UserData.SavedArticles.csv: id,accessCode,title,contentId,contentUrl,slideId,imageUrl,articleDate,generation,clientTimeCreated,clientTimeZone,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_UserData.Settings.csv: accessCode,name,value,clientTimeUpdated,clientTimeZone,generation,serverTimeCreated,serverTimeUpdated\n",
"\n",
"dump/7882_UserData.SosPlans.csv: id,accessCode,trigger,daysToTrigger,channel,channelDestination,extraData,suppressed,serverTimeCreated,serverTimeUpdated\n",
"\n"
]
}
],
"source": [
"for f in glob.glob(\"dump/*.csv\"):\n",
" print(f'{f}: {open(f, \"r\").readline()}')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@theDoppelgaeng
Copy link

Hello! This is the first ounce of explanation I've found about how to read exported Noom data. As someone who does not speak any sort of programming language, is there a way to plug my .csv info into this marvelous page of code to be able to actually read it? (I'm also specifically looking for the weight info and graphs). Thanks

@nluetzge
Copy link

@theDoppelgaeng if you are still interested I extended this code a little bit to make more plots on weight, intake (per color) and water. It will never 100% be a plug-and play because the Noom data is a bit convoluted and I needed to make some small hacks specific to my data but I think it might still work for yours.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment