{ "cells": [ { "cell_type": "markdown", "id": "b70496e8", "metadata": {}, "source": [ "# Strava: Guide to data extraction and analysis" ] }, { "cell_type": "markdown", "id": "9f87e689", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "id": "38ae9032", "metadata": {}, "source": [ "A picture of the Strava Mobile Application\n" ] }, { "cell_type": "markdown", "id": "9cf65040", "metadata": {}, "source": [ "Strava is often regarded as the “social network for athletes.” It lets you track your running and riding with GPS, join Challenges, share photos from your activities, and follow friends.
\n", "\n", "Strava follows a fremium model offering a digital service accessible through its mobile applications (iOS and Android). Users also have an option to upgrade and unlock more advanced features like Custom Goals, Training Plans, Race Analysis, etc for a monthly fee of $5-8.
\n", "\n", "We've been using the strava application for the past few weeks and we will show you how to extract its data, visualize your runs and compute correlations between multiple metrics of the data. The Strava API allows the users to extract all sorts of data on athletes, segments, routes, clubs, and gear. However, for this notebook we will be focusing on metrics of the participant's activities like dates, speed, elevation, duration, etc.\n", "\n" ] }, { "cell_type": "markdown", "id": "7d8f20a5", "metadata": {}, "source": [ "We will be able to extract the following parameters:\n", "\n", "Parameter Name | Sampling Frequency \n", "-------------------|-----------------\n", "Moving Time | Per Activity \n", "Elapsed Time | Per Activity \n", "Average Speed | Per Activity \n", "Maximum Speed | Per Activity \n", "Average Cadence | Per Activity\n", "Maximum Cadence | Per Activity\n", "Average Watts | Per Activity\n", "Maximum Watts | Per Activity\n", "Average Heart Rate | Per Activity\n", "Maximum Heartrate | Per Activity\n", "Distance | Records every change in user's position\n", "Polyline Summary | Records every change in user's position\n", "Total Elevation Gain | Sampling Frequency depends upon user's fitness tracker\n", "Heart Rate | Sampling Frequency depends upon user's fitness tracker\n", "Heart Rate (Stream Data) | Sampling Frequency depends upon user's fitness tracker (usually per second)" ] }, { "cell_type": "markdown", "id": "f03f1a22", "metadata": {}, "source": [ "In this guide, we sequentially cover the following **five** topics to extract data from Cronometer servers:\n", "\n", "1. **Set up**
\n", "2. **Authentication/Authorization**
\n", " - Requires only client_id, client_secret and refresh_token.
\n", "3. **Data extraction**
\n", " - We get data via wearipedia in a couple lines of code
\n", "4. **Data Exporting**\n", " - We export all of this data to file formats compatible by R, Excel, and MatLab.\n", "5. **Adherence**\n", " - We simulate non-adherence by dynamically removing datapoints from our simulated data.\n", "6. **Visualization**\n", " - We create a simple plot to visualize our data.\n", "7. **Advanced visualization**\n", " - 7.1 Visualizing participant's Overall Activity!
\n", " - 7.2 Visualizing participant's Weekly Summary!
\n", " - 7.3 Visualizing Participant's Runs!
\n", "8. **Data Analysis**
\n", " - 8.1 Analyzing correlation between Participant's data!
\n", "9. **Outlier Detection**
\n", " - 9.1 Highlighting Outliers!\n", "\n", "Disclaimer: this notebook is purely for educational purposes. All of the data currently stored in this notebook is purely *synthetic*, meaning randomly generated according to rules we created. Despite this, the end-to-end data extraction pipeline has been tested on our own data, meaning that if you enter your own email and password on your own Colab instance, you can visualize your own *real* data. That being said, we were unable to thoroughly test the timezone functionality, though, since we only have one account, so beware." ] }, { "cell_type": "markdown", "id": "675c5b05", "metadata": {}, "source": [ "# 1. Setup\n", "\n", "## Participant Setup\n", "\n", "Dear Participant,\n", "\n", "Once you download the strava app, please set it up by following these resources:\n", "- Written guide: https://www.runnersworld.com/beginner/g25619156/what-is-strava/\n", "- Video guide: https://www.youtube.com/watch?v=LHtCxdrZFJ8&ab_channel=RunWithJ\n", "\n", "Make sure that your phone is logged to the strava app using the Strava login credentials (email and password) given to you by the data receiver.\n", "\n", "Best,\n", "\n", "Wearipedia\n", "\n", "## Data Receiver Setup\n", "\n", "Please follow the below steps:\n", "\n", "1. Create an email address for the participant, for example `foo@email.com`.\n", "2. Create a Strava account with the email `foo@email.com` and some random password.\n", "3. Keep `foo@email.com` and password stored somewhere safe.\n", "4. Distribute the device to the participant and instruct them to follow the participant setup letter above.\n", "5. Next, go to https://developers.strava.com/\n", "6. Click on \"Create and Manage your App\"\n", "\n", "7. Strava will prompt you to login. Make sure to login with the account that participants' credentials\n", "8. Fill out your details:
\n", " Here's an example with some dummy information!
\n", " \n", "9. Next, Strava will ask you to upload a app icon. I personally uploaded the Strava logo in the option.
\n", "
\n", " Copy and crop the Image to your preference and hit save!
\n", " \n", "10. You're done!
\n", "
\n", " Copy and paste your your client ID, Client Token and Refresh token in the box below and give it to the researcher.\n", "11. Install the `wearipedia` Python package to easily extract data from this device via the Strava API.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "e5f0aab9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: wearipedia in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (0.1.0)\n", "Requirement already satisfied: scipy<2.0,>=1.6 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (1.9.3)\n", "Requirement already satisfied: garminconnect<0.2.0,>=0.1.48 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (0.1.49)\n", "Requirement already satisfied: beautifulsoup4<5.0.0,>=4.11.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (4.11.1)\n", "Requirement already satisfied: polyline<2.0.0,>=1.4.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (1.4.0)\n", "Requirement already satisfied: rich<13.0.0,>=12.6.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (12.6.0)\n", "Requirement already satisfied: typer[all]<0.7.0,>=0.6.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (0.6.1)\n", "Requirement already satisfied: myfitnesspal<3.0.0,>=2.0.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (2.0.1)\n", "Requirement already satisfied: pandas<2.0,>=1.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (1.5.2)\n", "Requirement already satisfied: tqdm<5.0.0,>=4.64.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (4.64.1)\n", "Requirement already satisfied: wget<4.0,>=3.2 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from wearipedia) (3.2)\n", "Requirement already satisfied: soupsieve>1.2 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from beautifulsoup4<5.0.0,>=4.11.1->wearipedia) (2.3.1)\n", "Requirement already satisfied: cloudscraper in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from garminconnect<0.2.0,>=0.1.48->wearipedia) (1.2.66)\n", "Requirement already satisfied: requests in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from garminconnect<0.2.0,>=0.1.48->wearipedia) (2.28.2)\n", "Requirement already satisfied: blessed<2.0,>=1.8.5 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from myfitnesspal<3.0.0,>=2.0.1->wearipedia) (1.19.1)\n", "Requirement already satisfied: measurement<4.0,>=3.2.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from myfitnesspal<3.0.0,>=2.0.1->wearipedia) (3.2.0)\n", "Requirement already satisfied: python-dateutil<3,>=2.4 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from myfitnesspal<3.0.0,>=2.0.1->wearipedia) (2.8.2)\n", "Requirement already satisfied: browser-cookie3<1,>=0.16.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from myfitnesspal<3.0.0,>=2.0.1->wearipedia) (0.16.3)\n", "Requirement already satisfied: lxml<5,>=4.2.5 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from myfitnesspal<3.0.0,>=2.0.1->wearipedia) (4.9.1)\n", "Requirement already satisfied: numpy>=1.20.3 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from pandas<2.0,>=1.1->wearipedia) (1.21.2)\n", "Requirement already satisfied: pytz>=2020.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from pandas<2.0,>=1.1->wearipedia) (2022.1)\n", "Requirement already satisfied: six>=1.8.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from polyline<2.0.0,>=1.4.0->wearipedia) (1.16.0)\n", "Requirement already satisfied: pygments<3.0.0,>=2.6.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from rich<13.0.0,>=12.6.0->wearipedia) (2.11.2)\n", "Requirement already satisfied: commonmark<0.10.0,>=0.9.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from rich<13.0.0,>=12.6.0->wearipedia) (0.9.1)\n", "Requirement already satisfied: click<9.0.0,>=7.1.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from typer[all]<0.7.0,>=0.6.1->wearipedia) (8.0.4)\n", "Requirement already satisfied: shellingham<2.0.0,>=1.3.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from typer[all]<0.7.0,>=0.6.1->wearipedia) (1.5.0)\n", "Requirement already satisfied: colorama<0.5.0,>=0.4.3 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from typer[all]<0.7.0,>=0.6.1->wearipedia) (0.4.5)\n", "Requirement already satisfied: wcwidth>=0.1.4 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from blessed<2.0,>=1.8.5->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (0.2.5)\n", "Requirement already satisfied: keyring in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (23.13.1)\n", "Requirement already satisfied: SecretStorage in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (3.3.3)\n", "Requirement already satisfied: lz4 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (3.1.3)\n", "Requirement already satisfied: pycryptodomex in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (3.16.0)\n", "Requirement already satisfied: sympy>=0.7.3 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from measurement<4.0,>=3.2.0->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (1.10.1)\n", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from requests->garminconnect<0.2.0,>=0.1.48->wearipedia) (1.26.7)\n", "Requirement already satisfied: certifi>=2017.4.17 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from requests->garminconnect<0.2.0,>=0.1.48->wearipedia) (2022.9.24)\n", "Requirement already satisfied: idna<4,>=2.5 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from requests->garminconnect<0.2.0,>=0.1.48->wearipedia) (3.3)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from requests->garminconnect<0.2.0,>=0.1.48->wearipedia) (2.0.4)\n", "Requirement already satisfied: pyparsing>=2.4.7 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from cloudscraper->garminconnect<0.2.0,>=0.1.48->wearipedia) (3.0.9)\n", "Requirement already satisfied: requests-toolbelt>=0.9.1 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from cloudscraper->garminconnect<0.2.0,>=0.1.48->wearipedia) (0.10.1)\n", "Requirement already satisfied: mpmath>=0.19 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from sympy>=0.7.3->measurement<4.0,>=3.2.0->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (1.2.1)\n", "Requirement already satisfied: jaraco.classes in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from keyring->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (3.2.3)\n", "Requirement already satisfied: importlib-metadata>=4.11.4 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from keyring->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (4.13.0)\n", "Requirement already satisfied: cryptography>=2.0 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from SecretStorage->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (37.0.1)\n", "Requirement already satisfied: jeepney>=0.6 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from SecretStorage->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (0.8.0)\n", "Requirement already satisfied: cffi>=1.12 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from cryptography>=2.0->SecretStorage->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (1.15.1)\n", "Requirement already satisfied: zipp>=0.5 in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from importlib-metadata>=4.11.4->keyring->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (3.8.0)\n", "Requirement already satisfied: more-itertools in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from jaraco.classes->keyring->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (9.0.0)\n", "Requirement already satisfied: pycparser in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from cffi>=1.12->cryptography>=2.0->SecretStorage->browser-cookie3<1,>=0.16.1->myfitnesspal<3.0.0,>=2.0.1->wearipedia) (2.21)\n", "Requirement already satisfied: openpyxl in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (3.0.10)\n", "Requirement already satisfied: et_xmlfile in /Users/saarth/opt/anaconda3/lib/python3.9/site-packages (from openpyxl) (1.1.0)\n" ] } ], "source": [ "!pip install wearipedia\n", "!pip install openpyxl" ] }, { "cell_type": "markdown", "id": "fe816960", "metadata": {}, "source": [ "# 2. Authentication/Authorization\n", "\n", "To obtain access to data, authorization is required. All you'll need to do here is just put in your client id, client secret token and refresh token for your Strava account. We'll use this to extract the data in the sections below." ] }, { "cell_type": "code", "execution_count": 2, "id": "08fbee4b", "metadata": {}, "outputs": [], "source": [ "#@title Enter Strava API credentials\n", "client_id = \"83434\" #@param {type:\"string\"}\n", "client_secret = \"\" #@param {type:\"string\"}\n", "refresh_token = \"\" #@param {type:\"string\"}" ] }, { "cell_type": "markdown", "id": "23fec1a3", "metadata": {}, "source": [ "# 3. Data Extraction\n", "\n", "Data can be extracted via [wearipedia](https://github.com/Stanford-Health/wearipedia/), our open-source Python package that unifies dozens of complex wearable device APIs into one simple, common interface.\n", "\n", "First, we'll set a date range and then extract all of the data within that date range. You can select whether you would like synthetic data or not with the checkbox." ] }, { "cell_type": "code", "execution_count": 4, "id": "97175015", "metadata": {}, "outputs": [], "source": [ "#@title Enter start and end dates (in the format yyyy-mm-dd)\n", "\n", "#set start and end dates - this will give you all the data from 2000-01-01 (January 1st, 2000) to 2100-02-03 (February 3rd, 2100), for example\n", "start_date='2022-03-01' #@param {type:\"string\"}\n", "end_date='2022-06-17' #@param {type:\"string\"}\n", "synthetic = True #@param {type:\"boolean\"}" ] }, { "cell_type": "code", "execution_count": 5, "id": "fdd01256", "metadata": {}, "outputs": [], "source": [ "import wearipedia\n", "\n", "device = wearipedia.get_device(\"strava/strava\")\n", "\n", "if not synthetic:\n", " device.authenticate({\n", " 'client_id':client_id,\n", " 'client_secret':client_secret,\n", " 'refresh_token':refresh_token\n", " # Add id if you want to get high frequency stream data (heartrate)\n", " # 'id': '123456789'\n", " })\n", "\n", "params = {\"start_date\": start_date, \"end_date\": end_date}\n", "\n", "distance = device.get_data(\"distance\", params=params)\n", "moving_time = device.get_data(\"moving_time\", params=params)\n", "elapsed_time = device.get_data(\"elapsed_time\", params=params)\n", "total_elevation_gain = device.get_data(\"total_elevation_gain\", params=params)\n", "average_speed = device.get_data(\"average_speed\", params=params)\n", "max_speed = device.get_data(\"max_speed\", params=params)\n", "average_heartrate = device.get_data(\"average_heartrate\", params=params)\n", "max_heartrate = device.get_data(\"max_heartrate\", params=params)\n", "map_summary_polyline = device.get_data(\"map_summary_polyline\", params=params)\n", "elev_high = device.get_data(\"elev_high\", params=params)\n", "elev_low = device.get_data(\"elev_low\", params=params)\n", "average_cadence = device.get_data(\"average_cadence\", params=params)\n", "average_watts = device.get_data(\"average_watts\", params=params)\n", "kilojoules = device.get_data(\"kilojoules\", params=params)\n", "# Make sure that the id is present in the params for heartrate stream data when running for non-synthetic data\n", "heartrate = device.get_data(\"heartrate\", params=params)" ] }, { "cell_type": "markdown", "id": "44bbc267", "metadata": {}, "source": [ "# 4. Data Exporting\n", "\n", "In this section, we export all of this data to formats compatible with popular scientific computing software (R, Excel, Google Sheets, Matlab). Specifically, we will first export to JSON, which can be read by R and Matlab. Then, we will export to CSV, which can be consumed by Excel, Google Sheets, and every other popular programming language.\n", "\n", "## Exporting to JSON (R, Matlab, etc.)\n", "\n", "Exporting to JSON is fairly simple. We export each datatype separately and also export a complete version that includes all simultaneously." ] }, { "cell_type": "code", "execution_count": 34, "id": "41ab6600", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "def datacleanup(data):\n", " for d in data:\n", " d['start_date'] = str(d['start_date'])\n", " return data\n", "\n", "json.dump(datacleanup(distance), open(\"distance.json\", \"w\"))\n", "json.dump(datacleanup(moving_time), open(\"moving_time.json\", \"w\"))\n", "json.dump(datacleanup(elapsed_time), open(\"elapsed_time.json\", \"w\"))\n", "json.dump(datacleanup(total_elevation_gain), open(\"total_elevation_gain.json\", \"w\"))\n", "json.dump(datacleanup(average_speed), open(\"average_speed.json\", \"w\"))\n", "json.dump(datacleanup(max_speed), open(\"max_speed.json\", \"w\"))\n", "json.dump(datacleanup(average_heartrate), open(\"average_heartrate.json\", \"w\"))\n", "json.dump(datacleanup(max_heartrate), open(\"max_heartrate.json\", \"w\"))\n", "json.dump(datacleanup(map_summary_polyline), open(\"map_summary_polyline.json\", \"w\"))\n", "json.dump(datacleanup(elev_high), open(\"elev_high.json\", \"w\"))\n", "json.dump(datacleanup(elev_low), open(\"elev_low.json\", \"w\"))\n", "json.dump(datacleanup(average_cadence), open(\"average_cadence.json\", \"w\"))\n", "json.dump(datacleanup(average_watts), open(\"average_watts.json\", \"w\"))\n", "json.dump(datacleanup(kilojoules), open(\"kilojoules.json\", \"w\"))\n", "\n", "\n", "complete = {\n", " \"distance\": distance,\n", " 'moving_time':moving_time,\n", " 'elapsed_time':elapsed_time,\n", " 'total_elevation_gain':total_elevation_gain,\n", " 'average_speed':average_speed,\n", " 'max_speed':max_speed,\n", " 'average_heartrate':average_heartrate,\n", " 'max_heartrate':max_heartrate,\n", " 'map_summary_polyline':map_summary_polyline,\n", " 'elev_high':elev_high,\n", " 'elev_low':elev_low,\n", " 'average_cadence':average_cadence,\n", " 'average_watts':average_watts,\n", " 'kilojoules':kilojoules\n", "}\n", "\n", "json.dump(complete, open(\"complete.json\", \"w\"))" ] }, { "cell_type": "markdown", "id": "59a25f19", "metadata": {}, "source": [ "Feel free to open the file viewer (see left pane) to look at the outputs!\n", "\n", "## Exporting to CSV and XLSX (Excel, Google Sheets, R, Matlab, etc.)\n", "\n", "Exporting to CSV/XLSX requires a bit more processing, since they enforce a pretty restrictive schema.\n", "\n", "We will thus export steps, heart rates, and breath rates all as separate files." ] }, { "cell_type": "code", "execution_count": 35, "id": "169bb66b", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "distance_df = pd.DataFrame.from_dict(complete['distance'])\n", "distance_df.to_csv('distance.csv')\n", "distance_df.to_excel('distance.xlsx')\n", "\n", "moving_time_df = pd.DataFrame.from_dict(complete['moving_time'])\n", "moving_time_df.to_csv('moving_time.csv')\n", "moving_time_df.to_excel('moving_time.xlsx')\n", "\n", "elapsed_time_df = pd.DataFrame.from_dict(complete['elapsed_time'])\n", "elapsed_time_df.to_csv('elapsed_time.csv')\n", "elapsed_time_df.to_excel('elapsed_time.xlsx')\n", "\n", "total_elevation_gain_df = pd.DataFrame.from_dict(complete['total_elevation_gain'])\n", "total_elevation_gain_df.to_csv('total_elevation_gain.csv')\n", "total_elevation_gain_df.to_excel('total_elevation_gain.xlsx')\n", "\n", "average_speed_df = pd.DataFrame.from_dict(complete['average_speed'])\n", "average_speed_df.to_csv('average_speed.csv')\n", "average_speed_df.to_excel('average_speed.xlsx')\n", "\n", "max_speed_df = pd.DataFrame.from_dict(complete['max_speed'])\n", "max_speed_df.to_csv('max_speed.csv')\n", "max_speed_df.to_excel('max_speed.xlsx')\n", "\n", "average_heartrate_df = pd.DataFrame.from_dict(complete['average_heartrate'])\n", "average_heartrate_df.to_csv('average_heartrate.csv')\n", "average_heartrate_df.to_excel('average_heartrate.xlsx')\n", "\n", "max_heartrate_df = pd.DataFrame.from_dict(complete['max_heartrate'])\n", "max_heartrate_df.to_csv('max_heartrate.csv')\n", "max_heartrate_df.to_excel('max_heartrate.xlsx')\n", "\n", "map_summary_polyline_df = pd.DataFrame.from_dict(complete['map_summary_polyline'])\n", "map_summary_polyline_df.to_csv('map_summary_polyline.csv')\n", "map_summary_polyline_df.to_excel('map_summary_polyline.xlsx')\n", "\n", "elev_high_df = pd.DataFrame.from_dict(complete['elev_high'])\n", "elev_high_df.to_csv('elev_high.csv')\n", "elev_high_df.to_excel('elev_high.xlsx')\n", "\n", "elev_low_df = pd.DataFrame.from_dict(complete['elev_low'])\n", "elev_low_df.to_csv('elev_low.csv')\n", "elev_low_df.to_excel('elev_low.xlsx')\n", "\n", "average_cadence_df = pd.DataFrame.from_dict(complete['average_cadence'])\n", "average_cadence_df.to_csv('average_cadence.csv')\n", "average_cadence_df.to_excel('average_cadence.xlsx')\n", "\n", "average_watts_df = pd.DataFrame.from_dict(complete['average_watts'])\n", "average_watts_df.to_csv('average_watts.csv')\n", "average_watts_df.to_excel('average_watts.xlsx')\n", "\n", "kilojoules_df = pd.DataFrame.from_dict(complete['kilojoules'])\n", "kilojoules_df.to_csv('kilojoules.csv')\n", "kilojoules_df.to_excel('kilojoules.xlsx')\n" ] }, { "cell_type": "markdown", "id": "b4b30043", "metadata": {}, "source": [ "Again, feel free to look at the output files and download them." ] }, { "cell_type": "markdown", "id": "f8a7b240", "metadata": {}, "source": [ "# 5. Adherence\n", "\n", "The device simulator already automatically randomly deletes small chunks of the day. In this section, we will simulate non-adherence over longer periods of time from the participant (day-level and week-level).\n", "\n", "Then, we will detect this non-adherence and give a Pandas DataFrame that concisely describes when the participant has had their device on and off throughout the entirety of the time period, allowing you to calculate how long they've had it on/off etc.\n", "\n", "We will first delete a certain % of blocks either at the day level or week level, with user input." ] }, { "cell_type": "code", "execution_count": 36, "id": "350a67b3", "metadata": {}, "outputs": [], "source": [ "#@title Non-adherence simulation\n", "block_level = \"day\" #@param [\"day\", \"week\"]\n", "adherence_percent = 0.89 #@param {type:\"slider\", min:0, max:1, step:0.01}" ] }, { "cell_type": "code", "execution_count": 37, "id": "857c9908", "metadata": {}, "outputs": [], "source": [ "complete = {\n", " \"distance\": distance,\n", " 'moving_time':moving_time,\n", " 'elapsed_time':elapsed_time,\n", " 'total_elevation_gain':total_elevation_gain,\n", " 'average_speed':average_speed,\n", " 'max_speed':max_speed,\n", " 'average_heartrate':average_heartrate,\n", " 'max_heartrate':max_heartrate,\n", " 'map_summary_polyline':map_summary_polyline,\n", " 'elev_high':elev_high,\n", " 'elev_low':elev_low,\n", " 'average_cadence':average_cadence,\n", " 'average_watts':average_watts,\n", " 'kilojoules':kilojoules\n", "}" ] }, { "cell_type": "code", "execution_count": 38, "id": "9c189e75", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "if block_level == \"day\":\n", " block_length = 1\n", "elif block_level == \"week\":\n", " block_length = 7\n", "\n", "\n", "\n", "# This function will randomly remove datapoints from the \n", "# data we have recieved from Cronometer based on the\n", "# adherence_percent\n", "\n", "def AdherenceSimulator(data):\n", "\n", " num_blocks = len(data) // block_length\n", " num_blocks_to_keep = int(adherence_percent * num_blocks)\n", " idxes = np.random.choice(np.arange(num_blocks), replace=False, \n", " size=num_blocks_to_keep)\n", "\n", " adhered_data = []\n", "\n", " for i in range(len(data)):\n", " if i in idxes:\n", " start = i * block_length\n", " end = (i + 1) * block_length\n", " for j in range(i,i+1):\n", " adhered_data.append(data[j])\n", " \n", " return adhered_data\n", "\n", "\n", "# Adding adherence for distance\n", "\n", "distance = AdherenceSimulator(distance)\n", "\n", "# Adding adherence for moving_time\n", "\n", "moving_time = AdherenceSimulator(moving_time)\n", "\n", "# Adding adherence for elapsed_time\n", "\n", "elapsed_time = AdherenceSimulator(elapsed_time)\n", "\n", "# Adding adherence for total_elevation_gain\n", "\n", "total_elevation_gain = AdherenceSimulator(total_elevation_gain)\n", "\n", "# Adding adherence for average_speed\n", "\n", "average_speed = AdherenceSimulator(average_speed)\n", "\n", "# Adding adherence for max_speed\n", "\n", "max_speed = AdherenceSimulator(max_speed)\n", "\n", "# Adding adherence for average_heartrate\n", "\n", "average_heartrate = AdherenceSimulator(average_heartrate)\n", "\n", "# Adding adherence for max_heartrate\n", "\n", "max_heartrate = AdherenceSimulator(max_heartrate)\n", "\n", "# Adding adherence for map_summary_polyline\n", "\n", "map_summary_polyline = AdherenceSimulator(map_summary_polyline)\n", "\n", "# Adding adherence for elev_high\n", "\n", "elev_high = AdherenceSimulator(elev_high)\n", "\n", "# Adding adherence for elev_low\n", "\n", "elev_low = AdherenceSimulator(elev_low)\n", "\n", "# Adding adherence for average_cadence\n", "\n", "average_cadence = AdherenceSimulator(average_cadence)\n", "\n", "# Adding adherence for average_watts\n", "\n", "average_watts = AdherenceSimulator(average_watts)\n", "\n", "# Adding adherence for kilojoules\n", "\n", "kilojoules = AdherenceSimulator(kilojoules)\n" ] }, { "cell_type": "markdown", "id": "c617a06c", "metadata": {}, "source": [ "And now we have significantly fewer datapoints! This will give us a more realistic situation, where participants may take off their device for days or weeks at a time.\n", "\n", "Now let's detect non-adherence. We will return a Pandas DataFrame sampled at every day." ] }, { "cell_type": "code", "execution_count": 39, "id": "35f1ddb5", "metadata": {}, "outputs": [], "source": [ "distance_df = pd.DataFrame.from_dict(distance)\n", "moving_time_df = pd.DataFrame.from_dict(moving_time)\n", "elapsed_time_df = pd.DataFrame.from_dict(elapsed_time)\n", "total_elevation_gain_df = pd.DataFrame.from_dict(total_elevation_gain)\n", "average_speed_df = pd.DataFrame.from_dict(average_speed)\n", "max_speed_df = pd.DataFrame.from_dict(max_speed)\n", "average_heartrate_df = pd.DataFrame.from_dict(average_heartrate)\n", "max_heartrate_df = pd.DataFrame.from_dict(max_heartrate)\n", "map_summary_polyline_df = pd.DataFrame.from_dict(map_summary_polyline)\n", "elev_high_df = pd.DataFrame.from_dict(elev_high)\n", "elev_low_df = pd.DataFrame.from_dict(elev_low)\n", "average_cadence_df = pd.DataFrame.from_dict(average_cadence)\n", "average_watts_df = pd.DataFrame.from_dict(average_watts)\n", "kilojoules_df = pd.DataFrame.from_dict(kilojoules)" ] }, { "cell_type": "markdown", "id": "c6ee7ad7", "metadata": {}, "source": [ "We can plot this out, and we get adherence at one-day frequency throughout the entirety of the data collection period. For this chart we will plot Energy consumed over the time period from the dailySummary dataframe." ] }, { "cell_type": "code", "execution_count": 40, "id": "b4153da9", "metadata": {}, "outputs": [ { "data": { "image/png": "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VVdd1eKx8117/nnbX7X02muvRUFBQQwePLjF46KWInavpVWrVjX5uzsi4vDDD48FCxbE9u3bW/xa+SbfaikiYu7cuTFkyJD4n//5nxg0aNBu+88777w455xzIiJi27Zt8fTTT8fy5cvjhBNOaNXr5Bu1tHst7WrZsmXx4IMPxtVXXx29e/du1evkm3yrpebmGxGxdevWmDdvXkydOjUmT57c4rGbI5S3ESUlJXHSSSdF586dG7c988wzsWrVqhg3blxUVFREaWlpk3P69+8f1dXVUVlZGf369YuTTjqpyf6HHnooampq4oQTTojCwsIYO3ZskzHeeeedeOqpp+LTn/70h87r3XffjYEDBzbZ1rlz5/jYxz4Wa9asadx27bXXxmc+85mYMGFCi77f5uZ74IEHRufOneOdd95p3F9SUhKFhYVRWVnZuK29XKPXXnstunfvHpdeeml8+tOfjjPOOCMeeOCBaGho2Ou4vXr1ii5duuz2PVVUVDR+/cQTT8Spp576oeOwu/b887a/amnp0qXRs2fPuOmmm+LEE0+MU089Nb73ve9FXV3dh46LWtr1e9pZS/3792/yd3dExNtvvx3btm3b65usfJdvtRQR8eUvfzluueWW6NOnz16Pmz9/fowYMSIuu+yyOOOMM+Lkk0/e6/H5Ti3t3V133RVlZWXx+c9/vtlj812+1VJz8915TWbMmNHkH6dzQShvo15++eW45pprYuLEiTF+/Pioqalp8gMREY1f7+lN889//vO4/fbb46tf/WoMGzZst/3r1q2L888/P/r06RMXXXTRh86jurp6t9eNiOjSpUvU1tZGRMSjjz4ay5cvj2uuuaZV3+Pe5ltUVBSnn356fP/7349FixZFfX19/N///V8899xzsW3btohoX9fo9ddfj6qqqvjc5z4X999/f5x99tnxr//6r3H33Xf/SeOSG2ppRyivra2NESNGxNSpU+Oiiy6KJ554Iq677roPHZfdqaWIM888M6ZNmxazZ8+O+vr6mDt3buPiXDv//qZ5Hb2WWmPw4MHx4x//OL71rW/F//7v/8aUKVNyMm6+UEt/sHr16vj5z3++13ny4fKtlpqbby4V79fR2SczZ86MK664Io455pjG//F06dJlt+Le+XW3bt2abP/P//zPuPnmm+PMM8+MK6+8crfxV6xYERdccEHU19fHgw8+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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "distance_df_daily = distance_df.assign(start_date = distance_df.get('start_date').apply(lambda x: x[:10]))\n", "distance_df_daily = distance_df_daily.groupby('start_date').sum(numeric_only=True)\n", "\n", "import matplotlib.pyplot as plt\n", "import datetime\n", "\n", "dates = pd.date_range(start_date,end_date)\n", "\n", "energy = []\n", "\n", "for d in dates:\n", " res = distance_df_daily[distance_df_daily.index == datetime.datetime.strftime(d,\n", " '%Y-%m-%d')]['distance']\n", " if len(res) == 0:\n", " energy.append(None)\n", " else:\n", " energy.append(res.iloc[0])\n", "\n", "plt.figure(figsize=(12, 6))\n", "plt.plot(dates, energy)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "22f206e8", "metadata": {}, "source": [ "## 6. Visualization\n", "\n", "We've extracted lots of data, but what does it look like?\n", "\n", "In this section, we will be visualizing our three kinds of data in a simple, customizable plot! This plot is intended to provide a starter example for plotting, whereas later examples emphasize deep control and aesthetics." ] }, { "cell_type": "code", "execution_count": 41, "id": "c5870d43", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQQAAALICAYAAAApE/3aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACAbklEQVR4nOzdZ5hV5dk24GtogggK2IKKBcWGsaNGjUoSNYmJJQLG3l6NhmjExNheS2Iv0USj0SQaey9Ro0ZFsSMWlKiosYOACtLbMMz+fvDNfhmZQYYZMuA6z+PgANZea+177X3PMPviWc9TUSqVSgEAAAAACqFFcxcAAAAAAPz3CAQBAAAAoEAEggAAAABQIAJBAAAAACgQgSAAAAAAFIhAEAAAAAAKRCAIAAAAAAUiEAQAAACAAhEIAgAA85g9e3ZzlwAALCKtmrsAABrntNNOy2233ZYk2XPPPXPeeec1c0XU54MPPsi9996bZ599NqNGjcqkSZPSoUOHrLDCCunVq1d23XXXbLHFFs1dZrM48cQTc88996RXr1654YYbGnRsZWVlrr766jzwwAMZPXp0WrdunRVWWCG33XZbOnbsuIgqXnxUVlbmnnvuyYMPPpi33norU6ZMyTLLLJMePXrkBz/4QX7yk5+kTZs29R7/xRdf5C9/+UueeOKJfPLJJ2nXrl3WWmut/PjHP06/fv3SsmXLRfbc//nPf3LDDTfkhRdeyJgxY5IkK620UrbaaqsceOCBWWeddRb+hfn/3n777fz1r3/NCy+8kC+++CLLLbdcevbsmX333Tff/va353vsZ599lmuvvTaDBg3KJ598kjZt2qRbt2753ve+l/333z8dOnRodH2Nef3r8s477+QnP/lJKisrc/3112errbZaqLr++c9/ZuDAgfn973+/UMc3hp6ev8b0dJK88MILufXWW/PKK69k3Lhxad++fTbYYIPss88+2WWXXRpd35f9/e9/z7nnnpv+/fvnF7/4RZ37rLvuug065yqrrJLHH3+8KcoDKKyKUqlUau4iAFg4M2bMyLbbbpspU6YkSdq2bZunnnoqyy67bDNXxpddfPHFueaaa1JVVTXf/b7zne/kggsuyDLLLPNfqmzx0JhA8IQTTsg//vGPWts6d+6c559/vilLXCx99tlnOeKIIzJ8+PB69+nZs2euuuqqLL/88vM8NmLEiPz0pz/N559/Xuexm266af7617/W2Y+Nfe4bbrgh5513Xr1fE61atcqpp56an/70p/We/6sMHDgwxx57bGbNmlXn4wcccEBOPfXUOh8bMmRIfv7zn2fSpEl1Pr7iiivmT3/6U775zW8udH2Nef3rUllZmb333jtvv/12kix0IHjJJZfkz3/+80J9PTaWnp6/xvR0qVTK7373u9x00031nn+PPfbIueeemxYtmuZGstdeey0HHXRQpk+f3qSBYI8ePXL//fc3RYkAheWWYYAl2MMPP5wpU6Zk9dVXz3LLLZcZM2bknnvuae6y+JI//OEPufrqq1NVVZVddtklV199dZ588sm89NJLefLJJ3P11Vend+/eSeZ82DviiCO+MjhkjhkzZuSf//xnkmS77bbLQw89lCFDhuTee+9t3sL+C6qrq3P00Udn+PDhadmyZQ4//PA88MADef7553P77benT58+qaioyOuvv57+/funurq61vHTpk3LYYcdls8//zwrrLBCLr744jz33HN55JFHcsQRR6Rly5YZOnRoTj755CZ/7scffzxnnXVWqqqq0qNHj/zpT3/Ks88+m8ceeywXX3xxVllllVRVVeXMM8/Mk08+uVCvz5tvvpkBAwZk1qxZ2WijjXLDDTdk8ODBufPOO/Pd7343yZwAp65wZMyYMTn66KMzadKkLL/88jnrrLMycODADBw4MGeffXa6dOmSzz77LEcddVQmTJiwUPU15vWvzyWXXFIOAxvj008/bfQ5Foaenr/G9HSSXHrppeXHvv3tb+fWW2/Ns88+mxtvvDG9evVKktx777257rrrFqq+Lxs2bFgOP/zwTJ8+/Sv3feWVV77y1/e///0kSbt27dwNAdAUSgAssfbff/9Sjx49SieffHLpxBNPLPXo0aO06667NndZzOXTTz8t9ezZs9SjR4/S+eefP999Tz/99FKPHj1KPXr0KN1zzz3/nQIXE7/5zW9KPXr0KO2///4NOm706NHl1+zxxx9fRNUtnv75z3+Wr/3222+vc5+///3v5X0eeuihWo/99a9/LfXo0aO0wQYblN566615jr3xxhvLx7788stN+tw/+MEPSj169CjtsssupSlTpsxz7IQJE0q9e/cu9ejRo/TDH/5wvq9DfY444ohSjx49St/73vfmeY7q6urSMcccU+rRo0epV69epcmTJ9d6/Iwzzij16NGjtNFGG5WGDx8+z7mHDRtWWm+99Uo9evQoXXXVVQtVX2Ne/7oMHjy4XFPNr8GDBy9UbQv79dhYenr+GtPT77zzTmmDDTYo9ejRozRgwIDS7Nmzaz0+e/bsUp8+fUo9evQobbvttqWqqqqFqrHGTTfdVP63r+bXH//4x4U+3+23314+zx133NGo2gCYwwhBgCXUiBEj8uKLLyaZMzLqBz/4QZLk/fffzwsvvNCcpTGX5557LpWVlUmSI444Yr77nnzyyeU57x566KFFXtvXwdwjKZdeeulmrOS/71//+leSZLXVVsvee+9d5z4HHHBA+dbGuUcllUql/P3vf0+S7LbbbnXervfTn/40a6yxRpLkjjvuaLLnfvfdd/Puu+8mSY488si0b99+nmOXXXbZHHrooUnmzMn2ySef1Pkc9XnvvfcyaNCgep+joqIiJ554Ylq0aJEJEybk0UcfrfV4zd979+6d9dZbb57zb7TRRllrrbWSzLklsqEa+/p/2eTJk3PiiSemuro6e+21V4PrWVzo6fo1tqdvueWWVFVVpUuXLjnjjDPmuSW4RYsWOfDAA5Mk06dPz0cffdSg+moMGzYs++23X84888xUVlZmww03XKjzzG3EiBE555xzkiTf/e53631/AGgYgSDAEuruu+9OqVTKUkstlR122CHf+ta3ssIKKyRJbr311nn2/+tf/5p1110366+//nxvBxsxYkTWXXfdrLvuunXedvnkk0/mF7/4Rbbbbrv07NkzW2+9dQ477LA88MADKdUzLW3N+Z577rncd9992WWXXdKzZ898+9vfzvnnn19r3//85z8566yzsvvuu6dXr17ZcMMNs9VWW6VPnz657LLL5nt73qxZs3L33Xfnpz/9abbeeutsuumm6du3b+64446USqUcdthhWXfddXPZZZfVefz48eNz6aWXZvfdd89mm22WjTfeOLvuumvOPvvsjB49ut7nnZ/PPvus/OeZM2fOd982bdpkt912yyabbJKuXbvWemzkyJHl1/G9997LBx98kOOPPz7bbrttNt544/zwhz/MBRdcUO+8WTWmTZuWv/zlL+nbt2+23HLLbLTRRvnOd76TU089Ne+9995XXs/CvP81hg4dmmOPPTa9e/fON7/5zeyyyy659NJLM23atK983i974YUXsu666+Y73/lOeduBBx5Yfo1GjhyZpGG9N3bs2FxyySXZY489summm+ab3/xmdt5555x22mnlD/v11VETPgwfPjwDBgzIdtttVz7+97//ffkaZ8+enRtuuCF77rlnNtlkk2y++eY56KCDFmq+wy+++CKtWrXKRhttlIqKijr3adGiRVZbbbUktXtx+PDh5b/P/Rp++diaW9kff/zxWu9vY5575MiR5fnb5jf/3uqrr17+89zHL4inn346yZyQZKeddqpzn2984xtZf/31kySPPfZYrccee+yx3HPPPTnuuOO+8rlatWr4Gn2Nff2/7Le//W1GjRqV7373u9ljjz0aXE+Nyy67LOuuu2556okhQ4bM8zVVY8qUKbn66qvTt2/fbLHFFtloo42y00475de//nVeffXVhXp+PV2/xvR0qVQq/yfTPvvsU+9iON///vfz73//Oy+//HI58G6oX/7yl3nppZdSUVGR/fbbLzfffPNCnWduv/3tbzNt2rQss8wyOf300xt9PgDmsMowwBKourq6HNbttNNO5ZFRu+22W6699to8+uijGTduXLp06VI+5kc/+lEuvvjiVFdX56GHHsrBBx9c57kfeOCBJHNGW+28887l7ZWVlTnxxBPL87XVGD9+fJ555pk888wzufvuu/PHP/6x3gnw//Wvf9UKKz/99NMst9xy5b9ffvnlufzyy+f54DthwoRMmDAhw4YNy1133ZVbbrkl3/jGN2rtM3Xq1PzsZz/LkCFDam1/7bXX8tprr+Wpp57K7Nmz66wrSQYPHpxjjjkmEydOrLX9gw8+yAcffJDbb789F1xwQYNXYFx11VXLf7744otz7rnnzneFywX5sPP666/nt7/9bXkxmeT/Rqjcdddd+ctf/lLnh9K33347P/vZzzJq1Kha20eOHJk77rgjd999d0466aQccMAB8xzb2Pf/iiuuyB/+8Ida2z788MNceeWVefTRR8sfsheVr+q9QYMG5de//vU8C0h89NFH+eijj3LnnXfm+OOPz2GHHVbvczz44IM54YQTak32/9FHH+Wqq67KkCFDcs011+Soo47K4MGDax03ePDgDBkyJJdddll5HrAFccMNN6S6unq+83OVSqWMGDEiSWqtuDz3ognzG8FTEy5MmDAhI0eOLL9PjXnuHXfcMS+//HKmTp2atm3b1nv83COUGrpadM31de3aNZ07d653vw022CBvvPFG3njjjVrb27Ztmw022KDe45599tlySLzddts1qLa560sW7vWf24MPPpj77rsvXbp0ye9+97v85z//aXA9DfXaa6/lmGOOKa+iW2PUqFG57777ct999+Wggw4qj1hbUHq6fo3p6ZEjR+aLL75Ikmy99da19q+qqiqH2i1btmzwqtZ12WqrrfKrX/2qUQvu1HjyySfz1FNPJUmOOuqorLjiio0+JwBzGCEIsAR67rnnyqHO3LeH1YwMmTVrVu66665ax6y00krlDwIPPvhgveeuCXy++93v1roF85RTTik/1rdv39x9990ZMmRIHnzwwRx99NFp3bp1nn322Rx33HH1jmS59dZb06NHj9x666155plnctFFF2XPPfdMMmeBlMsuuyylUinbbrttrrvuujz11FN56qmnct1112XHHXdMkowePTp//OMf5zn3b37zm3IYeMABB+TBBx/M888/n6uuuirrrLNOHnnkkXmCmBrvvPNOjjzyyEycODGrrrpqLrjggjz11FN5/vnnc/XVV6dnz56ZMWNGBgwYkJdffrne164uO+20Uzp16pQk+cc//pHvf//7ueKKK/Lmm2/OMyn9gjrjjDMyY8aMHH300Xnsscfy9NNP5/TTT0+HDh0yYcKEHH744Rk/fnytYz777LMccsghGTVqVDp37pzTTz89jz/+eAYPHpzrr78+2267bWbPnp2zzjprntAvadz7f/fdd5fDwC222CI33nhjBg8enHvvvTd77rln3n333TzxxBMNeg222GKLvPLKK7Vqvfrqq8uTz6+yyiq19p9f7w0dOjS/+MUvygtI/Pa3v80TTzyR559/PldeeWXWW2+9zJ49OxdccEFuueWWems68cQTs9JKK+UPf/hDnnnmmdx7773lifqHDh2avfbaK0OGDMnhhx+ehx56KM8//3x+//vfZ9lll011dXUuvPDCBr0GyZwRS3Xdnljj0UcfzdixY5Mkm2++eXl7ze2KrVq1ysorr1zv8XOPVP3yCLGFfe4a7du3rzd8qK6uzu23354k6dKlS9Zcc816n6cuNdc3dyBfl5rrGzNmzHwX8pk9e3bGjRuXoUOH5swzz8yRRx6ZJNlmm20WakReU7z+yZxg+4wzzkgyZxTV/IKiBXHkkUfmlVdeyY9+9KMkc963L39NffTRRzniiCMyZsyYtG/fPieccEIeffTRDB48ONddd12556+77rr8/ve/b3ANerpujenpuUPi1VdfPV988UXOP//89O7dOxtttFF69uyZn/70p3V+72+ov/3tb7n++uubJAxM5vxHWpKsvPLK5VuaAWgaRggCLIFqwr4VVlih1uiU9dZbL+utt17eeuut3Hbbbfmf//mfWrc+7b777nnuuefy2muvZcSIEfOMNnnrrbfKHxx233338vbnn38+9913X5I5occhhxxSfmzZZZfNsccem/XXXz+/+MUv8tRTT+XRRx+tNbqwRosWLfLHP/6x/EGo5kNnMueW5iRZZ5118uc//zlt2rQpP7bSSiulV69e2XvvvfPGG2+Ub52qMXjw4PJ8Sb/85S9z1FFHlR/bcccds/nmm6dv3755//3363w9zzzzzMyYMSOrrrpq7rzzznKAlyQ77LBDtt566+y///4ZNmxYzjzzzPJrsSDatWuXSy65JEcccUQqKyvz0Ucf5Q9/+EP+8Ic/pEOHDtlss82y5ZZbZtttt53viKS5TZs2Leeff36tIGLffffN+uuvn/333z8TJ07MFVdckVNOOaX8+EUXXZRx48Zl2WWXzW233ZZu3bqVH9tqq62y5ZZbpn///uVVVL/73e9mqaWWStK493/GjBnlD3Sbb755rr322vJ726lTp5x33nnp2LFjg1e1bNmyZdq3b19rNE7btm3r/TA/v94766yzUllZmU6dOuW2226r9YG7d+/e2WabbXLQQQfltddey/nnn59ddtmlzuClVatWufnmm7PSSislmfP1edFFF6V3796pqqoq3+Y991ySP/zhDzNx4sSceeaZ+fDDDzNq1Kh5bhdfWOPHjy/Pu9WxY8da11wTGC+zzDLzHRE0962FXx49u7DPvSD+9re/5a233koy5xbHhowyq3n+ZE5/zk/N9ZVKpUyaNKneQG3IkCHzjKo+4IAD8qtf/SqtW7duUG1z19eY179UKuWkk07KxIkTs9deezVodGl92rRpkzZt2tQaMfblr6mLL744EyZMSJs2bXL99denZ8+e5ce23nrrbLnlljnmmGPy2GOP5a9//Wt23333rLPOOo2uLdHTycL19NxTSYwePTo///nPy8FmMiesrAl+Bw0alPPOO2+hRwo2NOicn6eeeqq8avahhx5a6+cCABrPCEGAJczEiRPLcwP96Ec/mueH9ppRTyNHjpwnONt5553Lo/7qGiVYc7vwCiuskG222aa8vWZU1CqrrJKDDjqozrp23nnnbLbZZklSHgXxZeutt16dHxaqq6uz4447Zo899sjRRx9d5w/9LVq0yBZbbJEk84x+q7l9epVVVimP3Jlbhw4d8pvf/KbOmv7zn//kpZdeSpIcffTRtcLAGksttVR5LrG33367wYsIbLPNNrnnnnvKI2dqTJ48OU8++WR5tFrv3r1z8803f+XIwV69etU5KmnTTTctf0h98MEHyyP1Jk6cWH6/999//1phYI0WLVqUX6Nx48Zl4MCB5cca8/4PHjy4/MHzV7/6VZ3v7YABAxp8+1xD1dd7b775Zl5//fUkSf/+/escfdOuXbv89re/TTJnsv265tZMkh//+MflMLDGSiutVA7el1pqqTpHuGy66ablP89vfs+GmDZtWo4++ujy3Je//vWvawUJNfNZ1oS+9Zk7cP2qOTAX9Lm/yr/+9a9ccsklSZI11lhjvrdp12dhrq9m8Z+6fPk2+2TOf8xcdNFFtW4RX5T1ffn1v+GGG/Lss89mlVVWqRX+L0rjx4/PI488kmTO95K5w8AaLVu2zG9/+9u0adMmpVKpzjltF4aeXvienjp1anlb//79M3ny5Pz617/OU089lX//+9+54447yv+5eN9999U5Cr85XHvttUmSzp07p2/fvs1cDcDXj0AQYAnzwAMPlH/IrysU+tGPflQe3fHlD2JLL710eRTJl28NKpVK5dBot912qxU01qxmvMEGG2T69OmZOnVqnb822WSTJHNuj6zrtuGauZu+rEWLFunfv3/OP//88mrJc6uurs4777xTvr3ry7f2PfPMM0nm3J5b36iL7bffPu3atZtn+9xzDvbo0aPea1tvvfXKr0lDbxtOkrXXXjs33HBDHnzwwQwYMCC9evWa54PdJ598kjPPPDP77rtvrfkBv6yu16hGzWTzY8eOLY+sGDp0aDm0WG+99eq9xuWXX768MM3c19iY97/mNu2a0ZB1adu27ULNw9YQ9fXe3O///OaHnDtQ/PI8lTU23njjOrfXzOW51lpr1Tm/2NxzLs4vlFpQU6ZMyRFHHJFXXnklyZxpBb78Ybop5glb2Oeen4ceeijHH398Zs+enWWWWSaXXXbZfG/hrE9TX9+3v/3tPP/88/n3v/+du+++OzvvvHOmTZuWG264Icccc8x/vb533303F110USoqKnLuuefWO29rU3v55ZfLX9vz+3rp0qVL+T9A6vt6aQg93bjrm3texLFjx+bKK6/M4YcfnpVWWilt2rTJN7/5zVx99dXl78PXXHNNgxc9aWpvv/12nnvuuSRzRuPW9e83AI3jlmGAJUzN7cKrrrpqKioq8s4778yzT8+ePfPqq69m0KBB+fTTT2uNWtpjjz1y33335e233857772X7t27J0leeeWV8hxFc98uPGXKlPJk5I8++mj51tz5mTJlSiZPnjzPqK8Fmd9q7Nixef755/Puu+9mxIgR+eijj/L+++/XuxJtZWVl+XaoNdZYo97ztmzZMquvvnr5lq0aNRPEJ8nee+/9lfUlWegVh5Oke/fu6d69e4488shUVlZm2LBhGTx4cB577LHypPFDhw7Nr371q/z5z3+u8xw9evSo9/xzr2L56aefZr311qt1jb/4xS8WqM6aa2zs+19znrpGJc6tpg8Xlfp6r2ZRhI4dO5bD0Pp07949H3zwQb3vf12jS5OUQ+r6Vvasb0XThfHpp5/myCOPLPfSrrvumt/97nfz7Ffz4fqrRkjNmDGj/Of5LZbQkOeuz4033pizzz471dXVad++fa666qp5er2qqmq+NS+99NKpqKgoX99XBaxzX9/8Rl7N3RsbbrhhLrvssvz617/Offfdl8cffzzPPvtstt1225RKpfmumr3UUkulVatWjXr9Z82alV//+teZOXNmDjrooGy11VbzPUdTmrv3v+prtnv37nnmmWca9f0y0dNN0dNzh2k77bRTtt1223mOa9myZQYMGJBnnnkmlZWVefLJJ9OnT5/Mnj271jm/rG3btoskjK25Y6GioqLWXMkANB2BIMAS5K233iqvHDhy5MivnMNo9uzZuf3222uFQNtss01WXHHFfPbZZ3nggQdy7LHHJvm/H7579OhRazTV3LcaNcSUKVPmCQTn94F75syZOeecc3LHHXfMsxrwUkstla222irV1dXl0Wo15r59+Ks+3M29SMrcdTbUwhxTlzZt2mSLLbbIFltskf79++fpp5/OCSeckC+++CJPPPFE3nzzzTrnFZzf7bVzf/CbPHnyQtdbc0xj3/+aGr7qvVnUI5zq672a66yrN76s5rWtL/Bp7hEsw4cPz5FHHlm+7XivvfbKWWedVeeH9Zoemjp1akqlUr2hZM37l9QfeDb0ub+suro655xzTm644YYkyXLLLVfvStn33XdfTjrppHrPNXDgwKy66qrl8HXu+utSs6p0y5YtG3QLaJIcf/zx5bk1Bw4cmG233TaffPJJvvOd79R7zLnnnpu99tqrUa//H//4x7z55pvp3r17jj/++AbV3Fhzfy/5qq+Zr/p6WRB6uml6eu4RifMLkDfYYIO0b98+U6dOLa+i/dJLL813MY/rr79+kYTSNf/5tPnmm893kRgAFp5AEGAJcueddzb4mDvuuCNHH310+UNMixYtsttuu+Waa67Jgw8+mGOPPTZVVVV5+OGHk8yZB21ucwc5//M//5Nf/epXjbiC+h133HHlees23HDD7LDDDllnnXWy9tprZ6211kqrVq1yySWXzBMIzh3CfNUHz7lvm6ox9/UNGzbsK+dnaohPP/00d9xxR8aOHZt99tkn66233nz333777XPeeeeVF5147bXX6gwE5zeaZO7XoObD7tyv0YMPPtig0XiNff9rPpDW9drPrSlulV0YNaHGgoQWNeFocwd/dXnyySfzy1/+snwdP/vZz8rzXtalZjTtrFmz8tlnn80z92GNuefO+8Y3vtEkzz236dOnZ8CAAXn88ceTJKuttlr+8pe/NHphgjXXXDNDhgypc+6/udWMXltppZUavMjDyiuvnOWXXz5jx46tcwXg+WnM618z3cN77733lSu51gQ5q6yySvk1boy5Q8Bp06bVO+o1afzXi56urTE9PffcqPP7N66ioqIcCM5vVOCi9p///CcffPBBkvlPkQFA4wgEAZYQlZWVuf/++5MkW265ZW688cb57n/WWWflhhtuyKeffponnnii1gqUe+yxR6655pp8+OGHefvtt/P555/niy++SIsWLeYZddixY8css8wymTJlSvmW4vrMb1TG/LzyyivlMPCAAw7IqaeeWud+X15MpKa+5ZZbLhMmTMhHH30039o+/vjjebbPvaLryJEj5xuWNfT6Jk2alMsuuyzJnA9nXxUIJnPe2xr1BX8jRoyoczL/JOUPUcmcECCp/aH3k08+adA1Nvb9r3l9P/zww1RXV9cbujQ0UGkqNfVNmjQpn3/++XxvG37vvfdqHbO4uP/++/Ob3/wms2fPTqtWrXLGGWekT58+8z1m7tsWhw8fXm948uabbyaZ0wd1LbiyMM9dY8qUKTn00EPLi/RsvPHGufLKK8tzLtZlr732WqDbB2uub8SIEZkyZUq9I1Brrm/uUdEfffRRzj333IwYMSKnnXbafEc/1XyN1gTnq666annuzgWpL2nc6//fVvM9JZnz9VAzb2hdGvP1oqfn1ZienvvfnrmnkPiyqqqq8srLNa/fVltttUA93ZTmXhDte9/73n/1uQGKxKIiAEuIxx9/PBMmTEhSe46/+sw9H17NKrE11l133fIHhMcffzwPPfRQkjmr13751pyKiopsvvnmSZLnnntuviO9Dj/88HzrW9/KwQcfXOeiIvUZOnRo+c/9+vWrc5/q6uq88MILtf5eo+YD+5NPPlnv8w4ZMqTO219rVi5OUmtl3S975ZVXsvHGG2eXXXYpv15fZa211spyyy2XZM5IzQUZBTd3aLn22mvXuc9TTz1V7/E117DGGmuUR8xsvvnm5SBuftf4ySefZNNNN813v/vdXH/99Uka//5/+9vfTjJnNFHNBPFfVl1dXV4Y5r9t7vf/X//6V737DR8+vBw417c4SnMYOHBgTjzxxMyePTtLL710/vznPy9QeLHOOuuUw536Ro5VV1fniSeeSJJst91284S9C/vcyZz/4DjiiCPKwclOO+2U66+/fr7BSUPssMMOSeZMmzBo0KA69xk9enR5brjtt9++vL1jx4558skn8+677873a33o0KHl2zc33HDDBtXXmNf/n//8Z1555ZV6f1199dXlc1x99dV55ZVX5llE6qvU9x8fm222Wfl7yfy+XsaNG1cezT33KtoLQk/XrTE93aVLl2y00UZJkscee2yeaTlqvPjii+WQu6HvW1OqWdTqG9/4RlZcccVmqwPg604gCLCEqFlMZKmllsquu+76lfuvt9565Q+pzz777DyjAmpCxYEDB5Y/XNQXNNasqDhhwoRceOGFde7z6KOP5plnnsm4cePSrVu3Bo2km3tOppp5i77s8ssvz4cfflj+e82quXPXN3LkyFx33XXzHDtz5sx66/7mN79ZHknxl7/8pdZz1JgxY0bOO++8zJw5M5988slX3qZXo2XLltlvv/2SzAnbjjvuuPnOyTdjxoycc845SeYsDrLNNtvUud/999+ff//73/NsHzJkSHml6D333LO8ffnlly+vPnzXXXfVuUpydXV1zj333EyfPn2eEYiNef+33HLL8kIn559/fp3zGf7973//ytGHi0rPnj3LXyeXX355nXXMmDEjZ555ZpI5X39fvq2+uYwcOTK/+c1vUlVVlbZt2+Zvf/tbrRBgfioqKsrXcffdd5dHFc3tlltuKX89HHLIIU323ElywQUXlPtwl112yeWXX/6V80w2xGqrrVYOsi+77LJ55l0rlUo577zzUl1dnU6dOtX63tepU6fyaqt33313nd+Tpk2bVl5com3btgv0nzRza8zr365du7Rv377eX3O/jm3btk379u0bfNtuzffkub/PJnMW56kZbX7jjTfm9ddfn+fY6urqnHnmmZk1a1YqKioWeLGmRE/PT2N6Ovm//2z76KOPaoXGNWbOnJmLLrooyZyRoP/NxWq+rGau5AX9txaAhSMQBFgCfPrpp3n22WeTJL17957vvE1zqxnZUCqVctttt9V67Ec/+lFatmyZf//73xk7dmzatm2bnXfeuc7zfOc738mOO+6YJLnpppty9NFH56WXXsr48ePz/vvv509/+lN5cvtOnTrl5z//eYOub9ttty0HSL/73e9y3333ZcyYMfn000/z9NNP52c/+1n+9Kc/1Tpm7mBtu+22Kwde5513Xs4777y89957GT9+fJ5//vnsv//+tQK0L4eVp512Wlq1apVJkyalX79+ufHGGzNy5MiMGzcuzzzzTA4++ODyqI/DDjus1m1zX+VnP/tZOVx47LHHyh8UX3vttXz22Wf54osv8tZbb+W6667LbrvtlhdeeCFt2rTJ2WefXe/k9bNmzcqhhx6aW2+9NZ999lnGjBmT6667LkceeWSqq6uzxhpr5NBDD611zG9+85sss8wymTVrVg477LBceeWV+fDDD/PFF1/kpZdeys9+9rPyJO677bZbrVFwjXn/W7RokTPPPLO8IvZPf/rTPPnkkxk/fnzee++9nHvuubngggsWySqVC+r0009P69atM378+PTr1y+33357Ro8enS+++CKDBg3KvvvuWx7F+pvf/GaxmeD+ggsuKIcCv/71r7Puuutm6tSp9f768pxghx9+eFZaaaXMmjUrhxxySO688858/vnnGTFiRC655JKcffbZSeaEG1/+YN6Y53777bfLUx6svvrqOe200zJz5sz5Hl/fiKb5Oemkk9KiRYt8+OGH2XffffPMM8/kiy++yBtvvJFf/OIX5XlTf/GLX8yzQMYJJ5yQdu3aZebMmdlvv/1y00035eOPP864cePy6KOPpl+/fuXQ4le/+tVC9URjXv9FrWZk89tvv5033ngj48ePL4eDJ5xwQjp27JjKysocdNBB+dvf/pYRI0Zk/PjxeeGFF3LooYeWRw8ecsghDapdT89fY3r6Jz/5SXlKiksvvTSnnHJK3nzzzfL7dsABB5QD3tNOO63Bc2o2lalTpy7w6vQANE5FqSH3dAHQLP785z/nkksuSZJcddVV5XDmq0yePDnbbbddZsyYkS5dumTQoEFp06ZN+fHDDjusfKvmbrvtlosvvrjec02ZMiXHH398vbcqJXNGol155ZXzfNBad911kyT9+/evteLx3C6++OI6Ry3U6NChQ/r06ZNrrrkmyZyRHnOHVpMnT87BBx9c54iVZM48TQ8++GBmzJiRX/7ylznqqKNqPT5w4MD86le/mu/iEn369MmZZ57Z4PBq+vTpOe+88+pcQfnLVllllZx99tnzjA4cOXJkefXSXXfdNQMHDpxn9E4yZ56pq666qs55u4YOHZr+/ftn7Nix9T7/TjvtlEsuuWSeEUWNef+T5N57782pp55aZ82rrLJKvve97+Xvf/97evXqVV6Zc0HM/brUtdrlgvRekgwaNCgDBgyodwRnq1atMmDAgBx22GG1tr/wwgvlhRvqW23zgAMOyJAhQ+q9tq+6hrqMGjUqvXv3btCt+XU9/5tvvplDDz20zvk5kzm3m19zzTW1Rjo19rlPOeWUBi+QtLArmd5999353//931RVVdX5+CGHHJITTzyxzseeffbZHHfcceU51b6sZcuWOf744+fpiYZYmNf/qyxIT36Vp59+OocffnitbXOfa9iwYTn66KPz+eef13uOQw89NMcff3xatVqwKcv19IJpTE9Pnjw5Rx99dIYMGVLn4y1btsxJJ52UAw44oMF1zc+Cfh9O5iwosttuuyWZs5J3zSJbADQ9i4oALAHuueeeJHNu16oZbbYgOnTokF122SX/+Mc/yiNbfvjDH5Yf33333cuB4FfdBrnMMsvkqquuymOPPZZ77703r732WsaPH5/WrVtnzTXXTO/evXPAAQeUV5VtqOOPPz4bbrhhbrnllrz55puZOnVqll566XTr1i3bb7999t1333Ts2DG33XZbpk6dmkcffbRWINihQ4fceuutuemmm3L//ffngw8+SKlUSo8ePbLvvvtm9913Ly/KUtcqi9/5znfyyCOP5IYbbshTTz2VESNGZObMmenUqVM23XTT9OvXL9tuu+1CXVu7du1y5pln5sADD8zDDz+cwYMH55NPPsn48eMze/bsLL/88llnnXXy3e9+N7vttttX3t63ww475Kijjsrll1+eF198MbNmzcqaa66ZPfbYI3vvvXe9x2+66aZ5+OGHc/PNN+fxxx/PBx98kKlTp6Zjx47ZaKONsueee+b73/9+ncc29v3fY489stFGG+Vvf/tbhgwZkk8//TTLL798vvOd76R///65/fbbG/aiNrEdd9wxjzzySK677ro8+eST5Vvsu3btmm9961vZZ599GrQ686I2bNiwBoUX9dlggw3y4IMP5q9//Wsef/zxjBo1Ki1atEj37t3zox/9KPvtt19at27dpM9dM9r2v2GvvfbKhhtumL/97W954YUXMm7cuCy99NLp2bNn9t1331qLLX3ZtttumwceeCDXX399Bg0aVO6JlVdeOVtvvXUOPPDARvfEwrz+/w3bb799TjvttFx//fX55JNP0qFDh1r/kfDNb34zDz/8cG688cYMHDgwH3zwQWbNmpWVV145W2yxRfr169fgUY16esE0pqc7dOiQ66+/Pvfff3/+8Y9/5I033sjUqVOz4oorplevXjnggAPqXNn+v2nSpEnlPy/o3RAALBwjBAEohJkzZ5Y/oJ5//vnZY489mregBpp7FNm55567QKtSAgAA1MUIQQCWeH//+9/z4YcfZsstt6w1AnJuc88huNZaa/23SgMAAFjsWFQEgCXe5MmTc8stt+S0006rc76v2bNn58orr0wy57br5r4lCgAAoDkJBAFY4v3gBz9Iy5YtM2XKlBxyyCF54oknyqsUP//88zniiCPKcyX+6le/WuBJ7gEAAL6OfCICYInXvXv3nHrqqTnrrLPyxhtv5Gc/+9k8+7Ro0SI///nP85Of/KQZKgQAAFh8CAQB+FrYd999s9lmm+WGG27Iiy++mNGjR6dVq1ZZaaWVsuWWW6Zfv37p2bNnc5cJAADQ7KwyDAAAAAAFYg5BAAAAACgQgSAAAAAAFIg5BBfQpEmTMnPmzOYugyVUq1at0qlTp4wfPz5VVVXNXQ5LID1EY+khmoI+orH0EI2lh2gK+ojGWmqppdKxY8fmLqNR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AECBCAQBAAAAoEAEggAAAABQIAJBAAAAACgQgSAAAAAAFIhAEAAAAAAKRCAIAAAAAAUiEAQAAACAAhEIAgAAAECBCAQBAAAAoEAEggAAAABQIAJBAAAAACgQgSAAAAAAFIhAEAAAAAAKRCAIAAAAAAUiEAQAAACAAhEIAgAAAECBCAQBAAAAoEAEggAAAABQIAJBAAAAACgQgSAAAAAAFIhAEAAAAAAKRCAIAAAAAAUiEAQAAACAAhEIAgAAAECBCAQBAAAAoEAEggAAAABQIAJBAAAAACgQgSAAAAAAFEirBdnpzjvvbNBJ995774UqBgAAAABYtBYoELzjjjvq3N6iRYt06NAhU6dOTVVVVVq1apVllllGIAgAAAAAi6kFCgRvu+228p///e9/5w9/+EMOPfTQbL311mnRYs5dx6+++mquvPLKHHjggYumUgAAAACg0Ro8h+A111yTvn375lvf+lY5DEySTTbZJP369cutt97apAUCAAAAAE2nwYHg2LFjs+KKK9b52LLLLpsJEyY0tiYAAAAAYBFpcCC4+uqr5+GHH051dXWt7ZWVlbnvvvuyzjrrNFlxAAAAAEDTWqA5BOe277775uyzz07//v2zySabpEOHDpk4cWKGDh2aGTNm5Mwzz1wUdQIAAAAATaDBgeAGG2yQ3/3ud7n33nvz0ksvZcqUKenQoUM22mij7L333ll55ZUXRZ0AAAAAQBNocCCYJGuttVYGDBjQ1LUAAAAAAIvYQgWCSTJ06NAMGzYs48ePz7777psPPvgga621VlZYYYWmrA8AAAAAaEINDgRnzpyZCy+8MP/+97/Trl27TJ8+PT/+8Y/zyCOP5MMPP8wZZ5yR1VZbbVHUCgAAAAA0UoNXGb7lllvy/vvv53//93/zt7/9rby9f//+6dy5c2677bYmLRAAAAAAaDoNDgSfe+657LvvvunZs2cqKirK2zt16pS99torb731VpMWCAAAAAA0nQYHglOnTq13nsD27dtnxowZjS4KAAAAAFg0GhwIduvWLU8//XSdj7388svmDwQAAACAxViDFxXZa6+9ctFFF2XKlCnZfPPNkyRvvvlmBg0alEcffTTHHntskxcJAAAAADSNBgeCW265ZX7xi1/kpptuytChQ5MkN9xwQzp27Jj/+Z//ydZbb93kRQIAAAAATaPBgWCSbLfddtluu+0yatSoTJ48Oe3bt0/Xrl3TokWD70AGAAAAAP6LFjrBmzJlSkaNGpWPPvooHTt2zJgxY1IqlZqyNgAAAACgiS3UCMG7774799xzTyorK5Mka6+9dm677bZMmjQpp556atq3b9+kRQIAAAAATaPBIwQffvjh3H777dltt91y9tlnl7fvuuuu+fTTT3Pbbbc1aYEAAAAAQNNpcCD40EMPZY899ki/fv2y1lprlbdvuumm2WefffLSSy81aYEAAAAAQNNpcCA4duzYbLDBBnU+tsoqq2TixImNLgoAAAAAWDQaHAh26dIl77zzTp2Pvffee+nSpUujiwIAAAAAFo0GLyrSu3fv3HHHHWnTpk0233zzJMmMGTMyePDg3HPPPfnRj37U5EUCAAAAAE2jwYHg7rvvns8++yw33XRTbrrppiTJmWeemSTZfvvts8ceezRpgQAAAABA02lwIFhRUZEjjjgiu+22W954441Mnjw57du3z/rrr59u3botihoBAAAAgCbS4ECwRteuXVNRUZEpU6Zk2WWXzYorrtiUdQEAAAAAi8BCBYKPPvpo7rrrrowfP768bYUVVsi+++6bb33rW01WHAAAAADQtBocCD7yyCP529/+li222CJbbbVVll122UycODHPP/98/vCHP6RVq1bp1avXoqgVAAAAAGikBgeC//znP7PzzjvnsMMOq7X929/+dq6++urcddddAkEAAAAAWEy1aOgB48aNy5ZbblnnY1tvvXU++eSTRhcFAAAAACwaDQ4Eu3fvnldffbXOx955552svvrqja0JAAAAAFhEGnzL8E9+8pNceumlmT59enbYYYd07tw5kyZNyosvvpgHHnggBx98cN58883y/htssEGTFgwAAAAALLwGB4Jnn312kuTxxx/P448/Ps/jf/3rX2v9/bbbblvI0gAAAACAptbgQPD0009fFHUAAAAAAP8FDQ4E3QIMAAAAAEuuBgWC77//fpZeeumsvPLKSZLJkyfnH//4R0aOHJlu3bplt912S8eOHRdJoQAAAABA4y3QKsNVVVW56KKLctJJJ2Xw4MFJksrKypx22mm5//7788UXX+SJJ57IySefnEmTJi3SggEAAACAhbdAgeDDDz+cV199NQcddFB69+6dJPnXv/6VUaNGpV+/frngggty2WWXpV27drn77rsXacEAAAAAwMJboEDw6aefzo9+9KP84Ac/KN8S/Pzzz6dNmzbZbbfdkiRt27bN97///bz88suLrloAAAAAoFEWKBAcM2ZM1l9//fLfp0+fnvfffz/rrrtu2rRpU97etWvXfPHFF01fJQAAAADQJBYoEKyurk5FRUX572+//XZKpVI23HDDWvtNnTq1VkAIAAAAACxeFigQ7Nq1a95///3y32tuC954441r7Td06NB07dq1CcsDAAAAAJpSqwXZafvtt89dd92VDh06pLq6OoMGDcoaa6yRtdZaq7zP888/nyeeeCL77LPPIisWAAAAAGicBQoEf/CDH+Tjjz/OVVddlSTp0qVLfvGLX5QfP+644zJq1KhssMEG+f73v79oKgUAAAAAGm2BAsEWLVrk6KOPTt++fTNx4sSsvvrqadXq/w7dbLPNsttuu2WHHXaotR0AAAAAWLw0KL1bfvnls/zyy8+z/YADDmiyggAAAACARWeBFhUBAAAAAL4eBIIAAAAAUCDNPuHflClTcvPNN+eVV17J9OnT061bt+y3335Zb7316tz/s88+yzXXXJPhw4dnqaWWSu/evdO3b9+0aDEn26yurs4BBxyQWbNm1Tpu7733Tt++fRf59QAAAADA4qzZA8FLL700EyZMyLHHHptll102Dz30UM4666xccMEF6dq1a619q6qqcvbZZ+cb3/hGfve732XMmDH585//nBYtWpTDvlGjRmXWrFm58MILs+yyy5aPbdu27X/1ugAAAABgcdSoW4anTZuWTz75JLNmzUp1dXWDjx8zZkyGDRuWww8/POuvv366du2aQw89NJ06dcrTTz89z/6DBw/O2LFj079//3Tr1i29evXKvvvum3/+85/lEYEff/xx2rVrl9VXXz3LLbdc+ZdAEAAAAAAWcoTgG2+8kZtuuinvvfdeKioqcs455+Qf//hHunTpkgMPPHCBz9OhQ4eceOKJ6d69e3lbRUVFKioqMnXq1Hn2f+utt7LmmmtmmWWWKW/r2bNnpk+fng8//DDrrLNOPv7446y66qoLc1kAAAAA8LXX4BGCr7/+es4666y0adMm++23X0qlUpJk9dVXz4MPPpgHHnhggc/Vvn37bLbZZmndunV52+DBgzNmzJhssskm8+w/bty4dOnSpda2Tp06lR9L5owQnD17ds4+++z8z//8T0488cQ89dRTDb1MAAAAAPhaavAIwVtuuSVbbrllBgwYkNmzZ+emm25Kkuy1116ZMWNGBg4cmN12222hinn77bdz5ZVXplevXtlss83mebyysjLt27evta0mTKysrEySjBgxItXV1enbt286d+6coUOH5oorrkhVVVV69+69UHUlScuWLWsFl9AQrVq1qvU7NJQeorH0EE1BH9FYeojG0kM0BX1EY7Vs2bK5S2i0Bnf/hx9+mD59+iSZc3vv3DbeeOM8+OCDC1XIiy++mD/+8Y9Zd911c8wxx9S5T+vWredZPbjm7zVzBF588cWprq4u/32NNdbI2LFjc//99zcqEOzYseNCHws1aka0wsLSQzSWHqIp6CMaSw/RWHqIpqCPKLIGB4JLL710xo8fX+djY8eOzdJLL93gIh5++OFce+212WabbdK/f/96U/rll18+H3/8ca1tNbV07tw5SdKmTZt5jltttdXqXKSkISZNmpSZM2c26hwUV6tWrdKpU6eMHz8+VVVVzV0OSyA9RGPpIZqCPqKx9BCNpYdoCvqIxlpqqaWW+IFjDQ4Et9xyy9x6663p1q1b1lxzzSRzRgqOGzcu99xzT523+s7PI488kmuuuSbf//73c/DBB88z6nBu66+/fp588slMmzatHDy+/vrradeuXdZYY41MnTo1/fv3z0EHHZQdd9yxfNx7772X1VZbraGXWsvs2bPnGZ0IDVVVVaWPaBQ9RGPpIZqCPqKx9BCNpYdoCvqIhfV1uN28wVew77775j//+U9OPvnkLLfcckmSP/zhDxk3blyWX3757Lvvvgt8rlGjRuXaa69Nr169sueee2bixInlx9q0aZM2bdpkypQpWWaZZdKqVatyGHnppZdmv/32y2effZabb745u+22W1q1apVWrVqlZ8+eueWWW7Lssstm5ZVXzgsvvJCnn346J554YkMvFQAAAAC+dipKNcsEN8CsWbPy5JNP5vXXX8+UKVOy9NJLZ4MNNshOO+2UpZZaaoHPc/fdd+fWW2+t87EddtghO+64Y84888ycfvrp2XDDDZMkY8aMyV//+tcMHz48yyyzTHr37p0+ffqkRYs5CyZPnz49t99+ewYPHpxJkyZllVVWyd57751evXo19DJrGT9+fKZPn96oc1BcrVu3zgorrJDPP//c/0CxUPQQjaWHaAr6iMbSQzSWHqIp6CMaq127dkv8HJQLFQgWkUCQxvAPDo2lh2gsPURT0Ec0lh6isfQQTUEf0Vhfh0CwwbcM33nnnfU+VlFRkbZt22bllVfOxhtv/LW4pxoAAAAAvk4anNg99dRTGTduXKqqqtKiRYt06NAhkydPTnV1da39Vl111Zx++ulL/KorAAAAAPB10qKhB/Tr1y+tW7fOsccem5tuuilXX311br755hx//PHp2LFjjjvuuFx00UVJkptvvrnJCwYAAAAAFl6DA8E77rgj++yzT771rW+VF/KoqKhIr1690rdv39x2221ZbbXVstdee2Xo0KFNXjAAAAAAsPAaHAiOHTs2K6+8cp2PrbDCCvnss8+SJF26dMmUKVMaVx0AAAAA0KQaHAiuttpqGThwYJ2PPf744+natWuSZNSoUencuXPjqgMAAAAAmlSDFxXp06dPLrzwwvzmN7/JVlttlY4dO2bixIl58cUX89FHH+X444/PBx98kJtuuik77bTToqgZAAAAAFhIDQ4EN9tss5xyyim54447cscdd6S6ujotW7bMeuutl9NPPz3rrbdeXnrppXzrW99Kv379FkXNAAAAAMBCanAgmCQ9e/ZMz549U1VVlSlTpqRjx47lBUaSZIsttsgWW2zRZEUCAAAAAE1joQLBysrKfPzxx5k1a1ZKpVJGjRqVUqmUmTNnZvjw4dlvv/2auk4AAAAAoAk0OBB844038vvf/77eFYTbtWsnEAQAAACAxVSDA8Fbb701HTt2zJFHHpmnnnoqLVq0yE477ZShQ4fmkUceycknn7wo6gQAAAAAmkCLr96ltg8//DB77713evXqlS222CLjxo3LpptumkMPPTS9e/fOXXfdtSjqBAAAAACaQIMDwVKplM6dOydJVl555YwYMaL82NZbb50PPvig6aoDAAAAAJpUgwPBlVZaKR9//HGSpGvXrpk5c2ZGjRqVJKmqqsr06dObtkIAAAAAoMk0OBDcfvvtc9NNN+Xhhx9Ox44ds9Zaa+Vvf/tbXnrppdx1111ZbbXVFkWdAAAAAEATaHAg+OMf/zjf+9738p///CdJcvjhh+fDDz/MhRdemE8++ST7779/kxcJAAAAADSNBq8yPHr06BxwwAHlv3fv3j2XX355Pvnkk3Tt2jVLL710kxYIAAAAADSdBo8QPO200/LUU0/V2tauXbusvfbawkAAAAAAWMw1OBBs2bJl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gbRq7gKmTJmSm2++Oa+88kqmT5+ebt26Zb/99st6661X5/6fffZZrrnmmgwfPjxLLbVUevfunb59+6ZFi//LNh9++OE88MADGT9+fLp3755DDjkka6655n/rkgAAAABgsdXsIwQvvfTSvPPOOzn22GNz7rnnZo011shZZ52VUaNGzbNvVVVVzj777CTJ7373uxx++OF55JFHcuedd5b3GTRoUG688cb069cv559/flZcccWcddZZmTRp0n/tmgAAAABgcdWsgeCYMWMybNiwHH744Vl//fXTtWvXHHrooenUqVOefvrpefYfPHhwxo4dm/79+6dbt27p1atX9t133/zzn//MrFmzkiT33HNPdt1112y//fZZddVVc9RRR6VNmzYZOHDgf/vyAAAAAGCx06yBYIcOHXLiiSeme/fu5W0VFRWpqKjI1KlT59n/rbfeypprrpllllmmvK1nz56ZPn16Pvzww0ycODGjR4/ORhttVH68ZcuWWX/99TN8+PBFezEAAAAAsARo1jkE27dvn80226zWtsGDB2fMmDHZZJNN5tl/3Lhx6dKlS61tnTp1Kj/WsmXLJJlnn86dO+ejjz5qVK0tW7ZM69atG3UOiqtVq1a1foeG0kM0lh6iKegjGksP0Vh6iKagj2ismvxpSbZYdf/bb7+dK6+8Mr169ZonKEySysrKtG/fvta2mpCusrIylZWVtbbNvU/NYwurY8eOjToekv8LsGFh6SEaSw/RFPQRjaWHaCw9RFPQRxTZYhMIvvjii/njH/+YddddN8ccc0yd+7Ru3bo8V2CNmr+3bds2bdq0qbVt7n3atm3bqPomTZqUmTNnNuocFFerVq3SqVOnjB8/PlVVVc1dDksgPURj6SGagj6isfQQjaWHaAr6iMZaaqmllviBY4tFIPjwww/n2muvzTbbbJP+/fvXO2x3+eWXz8cff1xr2/jx45PMuS245lbh8ePHZ9VVVy3v88UXX6Rz586NqnH27NnzBI3QUFVVVfqIRtFDNJYeoinoIxpLD9FYeoimoI9YWF+H282bdVGRJHnkkUdyzTXXZNddd82xxx473xd1/fXXzwcffJBp06aVt73++utp165d1lhjjSy77LLp2rVr3njjjfLjs2fPzvDhw7P++usv0usAAAAAgCVBswaCo0aNyrXXXptevXplzz33zMSJEzNhwoRM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WFK0bNkyrVu3bu4yWEK1atWq1u/QUHqIxtJDNAV9RGPpIRpLD9EU9BGN1bJly+YuodEqSqVSqbmLAAAAAAD+O9wyDAAAAAAFIhAEAAAAgAIRCAIAAABAgQgEAQAAAKBABIIAAAAAUCACQQAAAAAoEIEgAAAAABSIQBAAAAAACkQgCAAAAAAFIhAEAAAAgAIRCAIAAABAgQgEAQAAAKBABIIAAAAAUCCtmruAL5syZUpuvvnmvPLKK5k+fXq6deuW/fbbL+utt16S5PXXX8+NN96YkSNHZvnll0+fPn2y7bbblo8fO3ZsbrzxxrzxxhupqqrK2muvnQMPPDCrrbZakqS6ujoPPPBABg4cmC+++CIrrLBCfvjDH+Y73/nOfOuaPHlyrr322gwdOjRJsu222+aAAw7IUkstVT7vnXfemUGDBmXixIlZddVV069fv2y22WbzPW9lZWWuv/76DB48OJWVldl8881zyCGHpGPHjvPsWyqVcs4552TWrFk544wzFvg1LZqi9dDcrr766syaNSs///nPy9t+/vOf5/PPP69z/zPOOCMbbLDBAp+/KIrWQ2PGjMn111+fN998M0myySab5MADD0znzp3L+3zVNTOvJbWP5jZr1qycdNJJWXPNNWt9X/kqdX0vSpInnngiDzzwQD777LN06tQpvXv3zo9//OO0aOH/J+tStB76qnqT5JhjjsmYMWNqHbfDDjs0qD+LZEnuoYV5rxfk5+phw4bllltuyciRI7Pccsvle9/7Xn784x8v4CtaTEXrowX5XlTjrbfeyumnn57bbrvtK17FYluSe+jdd9/NDTfckHfffTcdO3bMTjvtlL333nu+P7vU/Ew+cODATJs2LRtssEEOO+ywrLjiiuV9nnvuudx9990ZPXp0OnfunO9+97v58Y9/nIqKioa/wAVQtB6a2z333JPXXnttngxo/Pjxue666/Lqq6+mRYsW2WSTTXLwwQfXmSXVq7SY+d3vflc6/vjjS2+++Wbpk08+Kf31r38t7bfffqVPPvmkNHLkyNK+++5buuWWW0ojR44s/eMf/yjts88+pWHDhpVKpVKpsrKyNGDAgNLpp59eevfdd0sff/xx6aKLLiodfvjhpYkTJ5ZKpVLprrvuKh188MGlZ599tjR69OjSo48+Wtpnn31KgwYNmm9dZ5xxRunEE08svffee6V///vfpaOPPrp02WWXlR+/6aabSocddljp5ZdfLo0ZM6Z01113lfr161d677335nveP/3pT6X+/fuX3nzzzdJ//vOf0gknnFA67bTT6tz3/vvvL/Xp06d0+umnN+AVLZ6i9VCpVCrNnj27dNNNN5X69OlTuvzyy2s9NnHixNL48ePLvz777LPSMcccUzrzzDNLVVVVDX15C6FIPVRZWVk6+uijS+eee27po48+Kn3wwQel0047rXTCCSeUqqurS6VS6SuvmbotqX00t2uuuabO7yv1md/3oqeeeqq0zz77lB599NHS6NGjS88++2zpwAMPLN1xxx0LdO4iKlIPLUi906dPL/Xt27f08ssv1/p3berUqQ19aQtjSe2hhX2vv+rn6k8++aS07777lu64447SmDFjSs8++2xpv/32Kz388MML+xIXQpH6aEHqrTF8+PDSIYccUurTp8/CvrSFsaT20CeffFLaf//9S1dddVVp1KhRpeeff7504IEHlu699975nvf2228vHXrooaWXX3659MEHH5TOOuus0jHHHFOaNWtWqVQqlYYOHVrq169f6cEHHyx9+umnpcGDB5cOOOCA0j//+c/GvMxfa0XroRoPP/xwqW/fvvNkQDXXdOqpp5bef//90jvvvFM67rjjSuecc04DXtVSabEKBEePHl3q06dPafjw4eVt1dXVpf79+5duvfXW0lVXXVU66aSTah1z6aWXls4666xSqVQqvfbaa6U+ffqUxo0bV3585syZpf333780cODAUqlUKh155JGlu+66q9Y5rrjiinpDuFKpVHr77bdLffr0KY0YMaK87dVXXy317du3/FzXX3996emnn6513MEHH1z6xz/+Ue95x40bV+rbt2/plVdeKW/75JNPSn369Cm9/fbbtfb96KOPSgcffHDp5JNPFgjOR9F6qFQqlUaMGFE69dRTS4cddljpqKOO+soPXdddd13psMMOm+eHGuYoWg+NHj26dPHFF9fqhyFDhpT69OlT3vZV18y8luQ+qjF06NDS4YcfXhowYMACBYJf9b3o1FNPLV155ZW1tt1xxx2ln/3sZ1957iIqWg8tSL3/+c9/Sn369ClNnjx5vudijiW5hxbmvV6Qn6sfeOCB0iGHHFLruAsvvLB03nnnLfDzFE3R+mhB6q2qqir9/e9/L+2zzz6lE044QSD4FZbkHrr88stLJ554Yvk/yUulUum2224rnX/++fWed9asWaUDDzyw9K9//au8bcqUKaX99tuv/HP6E088UbrllltqHXfBBRc0OMwpiqL1UKk059+0c889t7T//vuXfvnLX86TAT3xxBOl/fffvzR+/PjytqFDh5b69+9fmjZt2nzPPbfF6h6dDh065MQTT0z37t3L2yoqKlJRUZGpU6dm+PDh6dmzZ61jevbsmbfeeiulUindunXLSSedVOs2t5phmFOnTk11dXV+/vOfZ4cddqh1joqKikyZMqXeuoYPH55OnTpl1VVXLW/bcMMNk8wZJp4kBxxwQLbbbrskc25XeOihhzJjxozyfnWpOXbufbp27ZrOnTuXb92rOd8f/vCH9O3bN127dq33fBSvh5LkjTfeyCqrrJKLL7641jD0uowcOTIPPfRQDjzwwIYNJS6QovXQyiuvnAEDBpT7YezYsXnkkUey5pprpkOHDuXnnt81M68luY+SZNKkSbnyyitz5JFHlvvgq3zV96L99ttvntvyWrRokalTpy7Q+YumaD30VfUmyUcffZRll102yyyzzFeejyW7hxbmvV6Qn6uXXXbZTJkyJc8880xKpVI+/vjjvPXWW1lnnXUW+HmKpmh9tCDfi2bMmJHhw4fnlFNOyfe///0FPndRLck99Nprr2XbbbetdRtv3759c8IJJ9R73g8//DDTp0+vdU3t27fPmmuumeHDhydJdtxxx+yzzz5J5tyqOmzYsLz55pvZeOON6z1vkRWth5Lk/fffT6tWrXLRRRdl7bXXnufxV199NRtttFGWW2658rZNNtkkl112Wdq1azffc89tsZpDsH379vPMdTV48OCMGTMmm2yySZ588sksv/zytR7v1KlTZs6cmcmTJ2e55ZbLpptuWuvxhx56KJWVldl4443TokWLbLTRRrUeHzt2bJ599tnsvPPO9dY1bty4dOnSpda2Vq1apUOHDhk7dmyt7U8//XQuv/zylEql9OnTp1bTftkXX3yRjh07pk2bNvNc07hx48p/v/HGG9O5c+fsuuuuueKKK+o9H8XroSTZZZdd5vv43G677bZ069Yt3/72txf4mKIpYg/VOOusszJs2LC0b98+p59+evkfri+++GK+1yxcnteS3kd//vOfs9lmm2WLLbbIAw88sEDX/FXfi2rmeKkxbdq0PPLII9lkk00W6PxFU7Qe+qp6k+Tjjz9O27Ztc/HFF+ftt98uz8Pz/e9/3zyUdViSe2hh3usF+bl6m222yeuvv57LLrssl19+eaqrq7Pddttlzz33rLfeoitaHy3I96L27dvnvPPOS5IMGjSo3hqZY0ntoWnTpmXChAlp3759rrzyygwdOjTt27fPDjvsMN/5j2u+39R1TXN/xq+p8xe/+EVmz56djTfeeL71FlnReihJtthii2yxxRb1Pj569Oisv/76ufPOO/Pkk0+We2j//fdP+/bt6z3uyxbrn57efvvtXHnllenVq1c222yzzJw5M61a1c4wa/7RnzVr1jzHDxkyJDfffHN++MMfplu3bvM8PmHChJxzzjlZbrnlstdee9VbR2VlZVq3bj3P9tatW8/zvOuvv37OP//87L///rn77rvzyCOP1Hveuq6n5ppqzvvqq6/m2WefzVFHHWWC0YXwde+hhvjss88yZMiQ+dbJvIrUQ/vvv3/OPvvs9OjRI7/73e/KP1A39JqZ15LUR48++mhGjhyZgw46qEHX2BAzZszIBRdckMrKyuy///6L7Hm+TorWQ3XVO2LEiEydOjVbb711Tj311Oy888657bbbcscddyz08xTJktRDC/NeL8jP1RMnTsznn3+efv365dxzz83PfvazDB06VA81wNe9jxpaLw23pPTQ9OnTkyTXX399ll9++Zx88snZfffdc8899+T222+v97wzZ85Mkjqv6cvXs/TSS+ecc87Jcccdlw8//DCXXXZZvefl/3zde2hBTJs2LU8++WQ++uijHHvssTniiCPy1ltv5YILLmjQHVyL1QjBub344ov54x//mHXXXTfHHHNMkjlvalVVVa39Kisrk2Sele0eeeSRXHPNNdl+++3r/LAxatSonHvuuZk9e3bOOOOMcoo6YMCAWiuynnzyyXV+8SZzmuvLz7v88stn+eWXzxprrJExY8bkvvvuy84775xzzjmnPEQ4SY444og6r6fmmpZaaqlMmjQpV1xxRQ4//PBaw1tZMEXooe23336BX4+nnnoqyy23XLbccssFPqboitZDa6yxRpLkuOOOy9FHH51BgwZl7733btA1M68lqY9GjRqVG2+8Maecckratm1b5/U09nvRhAkTct555+XTTz/Nqaee+pVTHVC8Hqqv3pNPPjmVlZVZeuml8//au/+YKsv/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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#@title Basic Plot\n", "feature = \"average_speed\" #@param ['moving_time', 'elapsed_time','total_elevation_gain','average_speed']\n", "start_date = \"2022-03-04\" #@param {type:\"date\"}\n", "time_interval = \"full time\" #@param [\"one week\", \"full time\"]\n", "smoothness = 0.02 #@param {type:\"slider\", min:0, max:1, step:0.01}\n", "smooth_plot = True #@param {type:\"boolean\"}\n", "\n", "import matplotlib.dates as mdates\n", "import matplotlib.pyplot as plt\n", "from datetime import datetime, timedelta\n", "\n", "start_date = datetime.strptime(start_date, '%Y-%m-%d')\n", "\n", "if time_interval == \"one week\":\n", " day_idxes = [i for i,d in enumerate(dates) if d >= start_date and d <= start_date + timedelta(days=7)]\n", " end_date = start_date + timedelta(days=7)\n", "elif time_interval == \"full time\":\n", " day_idxes = [i for i,d in enumerate(dates) if d >= start_date]\n", " end_date = dates[-1]\n", "\n", "if feature == \"moving_time\":\n", " moving_time_daily = moving_time_df.assign(start_date = moving_time_df.get('start_date').apply(lambda x: x[:10]))\n", " moving_time_daily = moving_time_daily.groupby('start_date').sum(numeric_only=True)\n", " concat_moving_time = []\n", " for i,d in enumerate(dates):\n", " day = d.strftime('%Y-%m-%d')\n", " if i in day_idxes:\n", " mt = moving_time_daily[moving_time_daily.index==day]\n", " if len(mt) != 0:\n", " concat_moving_time += [(day,mt.iloc[0].moving_time)]\n", " else:\n", " concat_moving_time += [(day,None)]\n", " ts = [x[0] for x in concat_moving_time]\n", "\n", " day_arr = [x[1] for x in concat_moving_time]\n", "\n", " sigma = 200 * smoothness\n", "\n", " title_fillin = \"Moving Time\"\n", "\n", "if feature == \"elapsed_time\":\n", " elapsed_time_daily = elapsed_time_df.assign(start_date = elapsed_time_df.get('start_date').apply(lambda x: x[:10]))\n", " elapsed_time_daily = elapsed_time_daily.groupby('start_date').sum(numeric_only=True)\n", " concat_elapsed_time = []\n", " for i,d in enumerate(dates):\n", " day = d.strftime('%Y-%m-%d')\n", " if i in day_idxes:\n", " et = elapsed_time_daily[elapsed_time_daily.index==day]\n", " if len(et) != 0:\n", " concat_elapsed_time += [(day,et.iloc[0].elapsed_time)]\n", " else:\n", " concat_elapsed_time += [(day,None)]\n", " ts = [x[0] for x in concat_elapsed_time]\n", "\n", " day_arr = [x[1] for x in concat_elapsed_time]\n", "\n", " sigma = 200 * smoothness\n", "\n", " title_fillin = \"Elpased Time\"\n", "\n", "if feature == \"total_elevation_gain\":\n", " total_elevation_gain_daily = total_elevation_gain_df.assign(start_date = total_elevation_gain_df.get('start_date').apply(lambda x: x[:10]))\n", " total_elevation_gain_daily = total_elevation_gain_daily.groupby('start_date').sum(numeric_only=True)\n", " concat_total_elevation_gain = []\n", " for i,d in enumerate(dates):\n", " day = d.strftime('%Y-%m-%d')\n", " if i in day_idxes:\n", " et = total_elevation_gain_daily[total_elevation_gain_daily.index==day]\n", " if len(et) != 0:\n", " concat_total_elevation_gain += [(day,et.iloc[0].total_elevation_gain)]\n", " else:\n", " concat_total_elevation_gain += [(day,None)]\n", " ts = [x[0] for x in concat_total_elevation_gain]\n", "\n", " day_arr = [x[1] for x in concat_total_elevation_gain]\n", "\n", " sigma = 200 * smoothness\n", "\n", " title_fillin = \"Total Elevation Gain\"\n", "\n", "if feature == \"average_speed\":\n", " average_speed_daily = average_speed_df.assign(start_date = average_speed_df.get('start_date').apply(lambda x: x[:10]))\n", " average_speed_daily = average_speed_daily.groupby('start_date').sum(numeric_only=True)\n", " concat_average_speed = []\n", " for i,d in enumerate(dates):\n", " day = d.strftime('%Y-%m-%d')\n", " if i in day_idxes:\n", " et = average_speed_daily[average_speed_daily.index==day]\n", " if len(et) != 0:\n", " concat_average_speed += [(day,et.iloc[0].average_speed)]\n", " else:\n", " concat_average_speed += [(day,None)]\n", " ts = [x[0] for x in concat_average_speed]\n", "\n", " day_arr = [x[1] for x in concat_average_speed]\n", "\n", " sigma = 200 * smoothness\n", "\n", " title_fillin = \"Average Speed\"\n", " \n", "with plt.style.context('ggplot'):\n", " fig, ax = plt.subplots(figsize=(15, 8))\n", "\n", " if smooth_plot:\n", " def to_numpy(day_arr):\n", " arr_nonone = [x for x in day_arr if x is not None]\n", " mean_val = int(np.mean(arr_nonone))\n", " for i,x in enumerate(day_arr):\n", " if x is None:\n", " day_arr[i] = mean_val\n", "\n", " return np.array(day_arr)\n", "\n", " none_idxes = [i for i,x in enumerate(day_arr) if x is None]\n", " day_arr = to_numpy(day_arr)\n", " from scipy.ndimage import gaussian_filter\n", " day_arr = list(gaussian_filter(day_arr, sigma=sigma))\n", " for i, x in enumerate(day_arr):\n", " if i in none_idxes:\n", " day_arr[i] = None\n", "\n", " plt.plot(ts, day_arr)\n", " start_date_str = start_date.strftime('%Y-%m-%d')\n", " end_date_str = end_date.strftime('%Y-%m-%d')\n", " plt.title(f\"{title_fillin} from {start_date_str} to {end_date_str}\",\n", " fontsize=20)\n", " plt.xlabel(\"Date\")\n", " plt.xticks(ts[::int(len(ts)/8)])\n", " plt.ylabel(title_fillin)" ] }, { "cell_type": "markdown", "id": "6eb3667d", "metadata": {}, "source": [ "This plot allows you to quickly scan your data at many different time scales (week and full) and for different kinds of measurements (heart rate and weight), which enables easy and fast data exploration.\n", "\n", "Furthermore, the smoothness parameter makes it easy to look for patterns in long-term trends." ] }, { "cell_type": "markdown", "id": "1b3da7f9", "metadata": {}, "source": [ "# 7. Advanced Visualization\n", "\n", "Now we'll do some more advanced plotting that at times features hardcore matplotlib hacking with the benefit of aesthetic quality." ] }, { "cell_type": "markdown", "id": "45b4f134", "metadata": {}, "source": [ "## 7.1 Visualizing participant's Overall Activity!" ] }, { "cell_type": "markdown", "id": "645c3133", "metadata": {}, "source": [ "Whenever our participant is curious and logs into Strava to check their overall summary, the Strava app would present their data in the form of a barchart. It should look something similar to this:
\n", "\n", "
\n", "Above is a plot from the app!

\n", "\n", "Now that we have user's data, let's try to recreate the chart above using our python skills!" ] }, { "cell_type": "code", "execution_count": 42, "id": "925077c4", "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", "
nameidstart_datetotal_elevation_gaindistancemoving_time
0Morning Run71705527902022-05-19T13:56:56Z62.3394584.11994
1Morning Run71547938212022-05-16T15:40:51Z68.9012898.41252
2Afternoon Run71547937742022-05-16T00:19:48Z29.5292747.31049
3Morning Run71547937912022-05-14T17:31:06Z154.2074472.21822
4Afternoon Ride71274068692022-05-03T14:06:34Z0.0000.06
5Morning Run71274068942022-05-03T13:43:13Z0.0001320.5632
\n", "
" ], "text/plain": [ " name id start_date total_elevation_gain \\\n", "0 Morning Run 7170552790 2022-05-19T13:56:56Z 62.339 \n", "1 Morning Run 7154793821 2022-05-16T15:40:51Z 68.901 \n", "2 Afternoon Run 7154793774 2022-05-16T00:19:48Z 29.529 \n", "3 Morning Run 7154793791 2022-05-14T17:31:06Z 154.207 \n", "4 Afternoon Ride 7127406869 2022-05-03T14:06:34Z 0.000 \n", "5 Morning Run 7127406894 2022-05-03T13:43:13Z 0.000 \n", "\n", " distance moving_time \n", "0 4584.1 1994 \n", "1 2898.4 1252 \n", "2 2747.3 1049 \n", "3 4472.2 1822 \n", "4 0.0 6 \n", "5 1320.5 632 " ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "elevation_df = total_elevation_gain_df.assign(total_elevation_gain \n", " = total_elevation_gain_df['total_elevation_gain'].apply(lambda elevation: elevation*3.281))\n", "elevation_df = elevation_df.merge(distance_df.get(['distance','start_date']),on='start_date')\n", "elevation_df = elevation_df.merge(moving_time_df.get(['moving_time','start_date']),on='start_date')\n", "elevation_df" ] }, { "cell_type": "code", "execution_count": 43, "id": "a6dcef62", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "mv: rename MusticaPro-SemiBold.otf to /usr/share/fonts/truetype/: No such file or directory\n", "zsh:1: command not found: fc-cache\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'mustica-pro' not found.\n", "findfont: Font family 'mustica-pro' not found.\n" ] }, { "data": { "image/png": "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AAAAAACu74qfMxIAAAAAAADAlYEwEgAAAAAAAIBDEEYCAAAAAAAAcAjCSAAAAAAAAAAOQRjpgp599lklJycrICBAERERGjp0qPbs2WPRp3fv3jKZTBY/9957r1Xjf/DBB3J3d9fkyZMbonwADmDN+8S5Zs2aJZPJpP79+9fa9vzzz8tkMql3794NVDEARzl58qTuv/9+xcXFycfHR927d9eGDRsuuE9GRoZMJpMSExNrbVuwYIFMJpOaNWvWQBUDaAhr1qzRkCFDFBMTI5PJpM8///y8/Xbt2qUbb7xRQUFB8vPzU3JysnJycuocl88TwJXPmu8S99xzj1q0aCEfHx+Fh4frpptu0u7duy847pmcYvbs2bW2DRo0SCaTSbNmzbLnocBJCCNd0OrVqzV58mR9//33Wr58uSorK9WvXz+VlpZa9Js0aZJyc3PNP3PmzLFq/LfeekuPPPKIPvjgA506deqS662oqLjkMQDYxtr3iXNFR0frm2++0aFDhyza582bp9jY2IYsGYCD3HXXXVq+fLneffddbd++Xf369VPfvn3166+/XnA/Pz8/FRQUKDMz06L9rbfe4v0BuAKVlpaqY8eOeu211+rss2/fPvXo0UNt2rTRqlWrtG3bNj3++ONq1KjRBcfm8wRwZbPmu0SXLl2Unp6uXbt2aenSpTIMQ/369VN1dfUFx27atKkyMjIs2n799VetXLlS0dHRDXE4cALCSBe0ZMkSjR8/Xm3btlXHjh2VkZGhnJwcbdq0yaKfr6+voqKizD+BgYEXHTs7O1vr1q3To48+qlatWumzzz6z2J6RkaHg4GB9/vnnSkhIUKNGjZSWlqaDBw+a+8yaNUudOnXSv//9b8XHx1/0wwoA+7P2feJcERER6tevn95++21z27p163T06FENGjTIou+GDRt0ww03KCwsTEFBQerVq5c2b95s3j5hwgQNHjzYYp/KykpFRETorbfessNRArDVb7/9pk8//VRz5sxRz5491bJlS82aNUstW7bU3LlzL7ivh4eHbr/9ds2bN8/cdujQIa1atUq33367Rd99+/bppptuUmRkpPz9/ZWcnKwVK1aYtz/55JNq165drdfo1KmTHn/88Us8SgDWGDBggJ5++mndfPPNdfb5y1/+ooEDB2rOnDnq3LmzWrRooRtvvFEREREXHJvPE8CVzZrvEnfffbd69uypZs2a6eqrr9bTTz+tgwcPav/+/Rcce/DgwTp69KjWrl1rbnv77bfVr1+/Wu8t7777rrp27aqAgABFRUXp9ttvV0FBgSTJMAy1bNlSL7zwgsU+WVlZMplM2rt37yWeBVwKwsjfgaKiIklSSEiIRfv777+vsLAwtWvXTjNmzFBZWdlFx0pPT9egQYMUFBSkO+6447z/gy8rK9Pf/vY3vfPOO1q7dq0KCws1cuRIiz579+7Vp59+qs8++0xZWVn1PzgAdlHX+8T5TJgwweKvlfPmzdPo0aPl5eVl0e/kyZMaN26cvvvuO33//fdKSEjQwIEDdfLkSUmnr75asmSJcnNzzfssXrxYZWVlGjFihB2OCoCtqqqqVF1dXesPhT4+Pvruu+8uuv+ECRP08ccfmz9TZGRkqH///oqMjLToV1JSooEDB2rlypXasmWL+vfvryFDhphv7ZwwYYJ27dplcXv4li1btG3bNt15552XepgA7KCmpkZffvmlWrVqpbS0NEVERCglJaXO27nPxecJwHVc7LtEaWmp0tPTFR8fr6ZNm15wLC8vL40ePVrp6enmtoyMDE2YMKFW38rKSj311FPaunWrPv/8c+3fv1/jx4+XJJlMJk2YMMFiHOl0pnHmD65wIgMurbq62hg0aJBx7bXXWrS/+eabxpIlS4xt27YZ7733nnHVVVcZN99880XHatq0qfH5558bhmEYR44cMby8vIxffvnF3Cc9Pd2QZHz//ffmtl27dhmSjPXr1xuGYRgzZ840PD09jYKCAnsdJoBLUNf7xLlmzpxpdOzY0aioqDAiIiKM1atXGyUlJUZAQICxdetW489//rPRq1evC75OQECAsWjRInNbUlKS8dxzz5mfDxkyxBg/fvwlHxOA+ktNTTV69epl/Prrr0ZVVZXx7rvvGm5ubkarVq3q3Cc9Pd0ICgoyDMMwOnXqZLz99ttGTU2N0aJFC+OLL74wXnzxRSMuLu6Cr9u2bVvj1VdfNT8fMGCAcd9995mfT5061ejdu/clHRuA+pFkLFy40KItNzfXkGT4+voa//jHP4wtW7YYzz77rGEymYxVq1bVORafJwDXcqHvEq+99prh5+dnSDJat25t7N2794Jj9erVy/jzn/9sZGVlGQEBAUZJSYmxevVqIyIiwqisrDQ6duxozJw5s879N2zYYEgyTp48aRiGYfz666+Gu7u7OYuoqKgwwsLCjIyMjPofMOyCKyNd3OTJk7Vjxw59+OGHFu1333230tLS1L59e40ePVrvvPOOFi5cqH379tU51vLly1VaWqqBAwdKksLCwnTDDTdY3I4lnb5NKzk52fy8TZs2Cg4O1q5du8xtcXFxCg8Pt8chArhEdb1P1MXT01N33HGH0tPTtWDBArVq1UodOnSo1S8/P1+TJk1SQkKCgoKCFBgYqJKSEotJ7e+66y7zXyvz8/P11VdfnfevngAc591335VhGLrqqqvk7e2tV155RaNGjZKbm3UfG89chbB69WqLzw1nKykp0UMPPaTExEQFBwfL399fu3btsnh/mDRpknl+6oqKCs2fP5/3B+AyUlNTI0m66aab9MADD6hTp0569NFHNXjwYL3xxhsX3Z/PE4BruNB3idGjR2vLli1avXq1WrVqpdtuu82qdSc6duyohIQEffLJJ5o3b57GjBkjDw+PWv02bdqkIUOGKDY2VgEBAerVq5ckmd8fYmJiNGjQIHNmsWjRIpWXl+vWW2+9lEOGHdT+bcJlTJkyRYsXL9aaNWvUpEmTC/ZNSUmRdPr26RYtWpy3z1tvvaXjx4/Lx8fH3FZTU6Nt27bpiSeesPpLinR6knsAzmfL+8TZJkyYoJSUFO3YsaPOD/vjxo3TsWPH9PLLLysuLk7e3t5KTU21WLRq7NixevTRR5WZmal169YpPj5e11133SUfF4D6a9GihTlILC4uVnR0tEaMGKHmzZtbtf/o0aP1yCOPaNasWXV+eXjooYe0fPlyvfDCC2rZsqV8fHx0yy23WLw/DBkyRN7e3lq4cKG8vLxUWVmpW265xW7HCeDShIWFycPDQ0lJSRbtiYmJVk3rIPF5ArjSXey7RFBQkIKCgpSQkKBu3bqpcePGWrhwoUaNGnXRsSdMmKDXXntNO3fu1A8//FBre2lpqdLS0pSWlqb3339f4eHhysnJUVpamsX7w1133aUxY8boxRdfVHp6ukaMGCFfX99LO3BcMsJIF2QYhqZOnaqFCxdq1apVio+Pv+g+Z+ZtrGt1qmPHjumLL77Qhx9+qLZt25rbq6ur1aNHDy1btkz9+/eXdHq+qY0bN+qaa66RJO3Zs0eFhYVKTEy8xCMDYC/1eZ84W9u2bdW2bVtt27at1sIUZ6xdu1avv/66+aqogwcP6ujRoxZ9QkNDNXToUKWnpyszM5O54IDLiJ+fn/z8/HTixAktXbpUc+bMsWq/kJAQ3Xjjjfr444/rvDpq7dq1Gj9+vHlhjJKSkloT2nt4eGjcuHFKT0+Xl5eXRo4cafEHUQDO5eXlpeTkZO3Zs8ei/aefflJcXJxVY/B5Argy1ee7hGEYMgxD5eXlVr3G7bffroceekgdO3as9UcPSdq9e7eOHTum2bNnm+eh3LhxY61+AwcOlJ+fn+bOnaslS5ZozZo1Vr0+GhZhpAuaPHmy5s+fry+++EIBAQHKy8uTdPqvEj4+Ptq3b5/mz5+vgQMHKjQ0VNu2bdMDDzygnj17nvfWCOn0LVuhoaG67bbbZDKZLLYNHDhQb731ljmM9PT01NSpU/XKK6/Iw8NDU6ZMUbdu3czhJADnu9j7hDW+/vprVVZWKjg4+LzbExISzCvcFRcX6+GHHz7v2HfddZcGDx6s6upqjRs3rt7HBMA+li5dKsMw1Lp1a+3du1cPP/yw2rRpY9OX+4yMDL3++usKDQ097/aEhAR99tlnGjJkiEwmkx5//HHzLZ9nu+uuu8x/zDx7VU0ADa+kpMRitdns7GxlZWUpJCREsbGxkqSHH35YI0aMUM+ePXX99ddryZIlWrRokVatWmX16/B5ArjyXOy7xC+//KKPPvpI/fr1U3h4uA4dOqTZs2fLx8fnvNO3nE/jxo2Vm5srT0/P826PjY2Vl5eXXn31Vd17773asWOHnnrqqVr93N3dNX78eM2YMUMJCQlKTU2t/4HDbpgz0gXNnTtXRUVF6t27t6Kjo80/H330kaTTf8VcsWKF+vXrpzZt2ujBBx/U8OHDtWjRojrHnDdvnm6++eZaQaQkDR8+XP/5z3/Mf6H09fXV9OnTdfvtt+vaa6+Vv7+/+bUBXB4u9j5hDT8/vzq/OEinp3Y4ceKErr76ao0ZM0Z/+tOfFBERUatf3759FR0drbS0NMXExNTncADYUVFRkSZPnqw2bdpo7Nix6tGjh5YuXVrnl4Hz8fHxqTOIlKR//OMfaty4sbp3764hQ4YoLS1NV199da1+CQkJ6t69u9q0aWOeUgaAY2zcuFGdO3dW586dJUnTpk1T586d9de//tXc5+abb9Ybb7yhOXPmqH379vr3v/+tTz/9VD169LD6dfg8AVx5LvZdolGjRvr22281cOBAtWzZUiNGjFBAQIDWrVt33n+/dQkODq5zirfw8HBlZGRowYIFSkpK0uzZs/XCCy+ct+/EiRNVUVHBVdOXEZNhGIazi4DryMjI0P3336/CwkJnlwLgClFSUqKrrrpK6enpGjZsmLPLAXAZMQxDCQkJ+uMf/6hp06Y5uxwAlzE+TwCoy7fffqs+ffro4MGDioyMdHY5ELdpAwCcpKamRkePHtXf//53BQcH68Ybb3R2SQAuI0eOHNGHH36ovLw8rmQAUCc+TwCoS3l5uY4cOaJZs2bp1ltvJYi8jBBGAgCcIicnR/Hx8WrSpIkyMjLOu+IugN+viIgIhYWF6Z///KcaN27s7HIAXKb4PAGgLh988IEmTpyoTp066Z133nF2OTgLt2kDAAAAAAAAcAgWsAEAAAAAAADgEISRAAAAAAAAAByCMBIAAAAAAACAQxBGAgAAAAAAAHAIwkgAAAAAAAAADkEYCQAAAAAAAMAhCCMBAAAAAAAAOARhJAAAAAAAAACHIIwEAAAAAAAA4BD/D2CfJhVkYaKSAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from datetime import datetime, timedelta, date\n", "import seaborn as sns\n", "\n", "#@title Set date range for the chart above\n", "\n", "start = \"2022-04-25\" #@param {type:\"date\"}\n", "end = \"2022-05-25\" #@param {type:\"date\"}\n", "\n", "#Converting all the elevation gains from metres to feet\n", "elevation_df = total_elevation_gain_df.assign(total_elevation_gain \n", " = total_elevation_gain_df['total_elevation_gain'].apply(lambda elevation: elevation*3.281))\n", "elevation_df = elevation_df.merge(distance_df.get(['distance','start_date']),on='start_date')\n", "elevation_df = elevation_df.merge(moving_time_df.get(['moving_time','start_date']),on='start_date')\n", "\n", "#Function that converts data into a date time object\n", "datefixer = lambda date: datetime.fromisoformat(date[0:10])\n", "\n", "#Applying datefixer function to every column of elevation_df\n", "elevation_df = elevation_df.assign(date \n", " = elevation_df.get('start_date').apply(datefixer))\n", "\n", "#Dictionary to store dates froms start to end date along with elevations\n", "date_etime = {}\n", "\n", "#Starting date of our chart\n", "start_date = date(int(start.split('-')[0]),int(start.split('-')[1]),\n", " int(start.split('-')[2]))\n", "\n", "#Ending date of our chart\n", "end_date = date(int(end.split('-')[0]),int(end.split('-')[1]),\n", " int(end.split('-')[2]))\n", "\n", "#A list of all dates between start and end date\n", "dates = list(pd.date_range(start_date,end_date-timedelta(days=1),freq='d'))\n", "\n", "# Storing toal distance, time and elevation\n", "total_distance = 0\n", "total_time = 0\n", "total_elevation = 0\n", "\n", "#Loop to find the elevation for each date within the Data Frame\n", "for date_val in dates:\n", " #Initializes the current date in the dictionary as zero\n", " date_etime[str(date_val.day)+\" \"+str(date_val.month_name())[:3]] = 0\n", " for actvity_index in range(len(elevation_df)):\n", " #Checks if the current date is in the activity DataFrame\n", " if(date_val == elevation_df.iloc[actvity_index].get('date')):\n", " #Storing total time, distance and elevation\n", " total_distance = (total_distance \n", " + elevation_df.iloc[actvity_index].get('distance'))\n", " total_time = (total_time +\n", " elevation_df.iloc[actvity_index].get('moving_time'))\n", " total_elevation = (total_elevation +\n", " elevation_df.iloc[actvity_index].get('total_elevation_gain'))\n", " #Stores the elevation of current date in dictionary\n", " date_etime[(str(date_val.day)+\" \"+\n", " str(date_val.month_name())[:3])] = (date_etime[\n", " str(date_val.day)+\" \"+str(date_val.month_name())[:3]] +\n", " elevation_df.iloc[actvity_index].get('total_elevation_gain'))\n", "#Resetting seaborn to prevent interference with matplotlib plots\n", "sns.reset_orig()\n", "\n", "\n", "# custom font\n", "# https://stackoverflow.com/questions/35668219/how-to-set-up-a-custom-font-with-custom-path-to-matplotlib-global-font\n", "# download the font and unzip (quiet so it does not print)\n", "!wget -q 'https://dl.dafont.com/dl/?f=mustica_pro'\n", "!unzip -qo \"index.html?f=mustica_pro\"\n", "\n", "# move to directory where fonts should be kept\n", "!mv MusticaPro-SemiBold.otf /usr/share/fonts/truetype/\n", "\n", "# build cache, redirect to /dev/null to suppress stdout output\n", "!fc-cache -f -v > /dev/null\n", "\n", "import matplotlib as mpl\n", "import matplotlib.font_manager as fm\n", "\n", "# try and except, just in case something fails we fallback onto the\n", "# default font\n", "try:\n", " fe = fm.FontEntry(\n", " #font name\n", " fname='/usr/share/fonts/truetype/MusticaPro-SemiBold.otf',\n", " name='mustica-pro')\n", " fm.fontManager.ttflist.insert(0, fe) # or append is fine\n", " mpl.rcParams['font.family'] = fe.name # = 'your custom ttf font name'\n", "except:\n", " pass\n", "\n", "#Creating a matplotlib plot of size 16,4\n", "plt1 = plt.figure(figsize=(16,4))\n", "ax = plt1.gca()\n", "\n", "#Plotting a bar chart with our data in the dictionary\n", "plt.bar(date_etime.keys(),date_etime.values(),color=\"#0098DB\", width=0.9)\n", "\n", "#Adding the title to the chart\n", "plt.title( \"$\\\\bf{\"+str(round(total_distance / 1609,1))+\"}$mi | \"+\n", " \"$\\\\bf{\"+str(round(total_time/3600))+\"}$h \"+\"$\\\\bf{\"+\n", " str(round(total_time%60))+\"}$m | \"\n", " +\"$\\\\bf{\"+str(round(total_elevation))+\"}$ft\")\n", "\n", "#Only showing xticks for one day/week\n", "ax.set_xticks(ax.get_xticks()[::7])\n", "\n", "#Limiting the y-axis based on our reference chart\n", "plt.ylim((0,350))\n", "plt.ylabel(\"Total Elevation Gain (Feet)\",color=\"#a1a1a1\")\n", "\n", "# Removing the spines on top, left and right\n", "ax.spines['top'].set_visible(False)\n", "ax.spines['right'].set_visible(False)\n", "ax.spines['left'].set_visible(False)\n", "\n", "ax.tick_params(left=False, bottom=True)\n", "\n", "#Setting the bottom spine to be the same color as the reference chart\n", "ax.spines['bottom'].set_color('#0098DB')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "04c96606", "metadata": {}, "source": [ "## 7.2 Visualizing participant's Weekly Summary!" ] }, { "cell_type": "markdown", "id": "617a9da7", "metadata": {}, "source": [ "If our participant is curious about a more detailed breakdown of their runs, Strava would show you their weekly summary using the following chart:
\n", "\n", "
\n", "Again, Let's try to recreate it using the data we have fetched from the Strava API

\n", "Note: Weekly summary includes all the runs, walks and rides walks recorded by the participant." ] }, { "cell_type": "markdown", "id": "7ef03022", "metadata": {}, "source": [ "Enter the dates for the start and end dates for this chart below! " ] }, { "cell_type": "code", "execution_count": 44, "id": "34eb7b18", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABPYAAALjCAYAAACRT4tLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABv1UlEQVR4nO3dd7xU9Zk/8OdcOkiRLqAiggqoqGBvpIgE0URjNHaDpqhxNdmNm91fsmrKpmyyidls4iYqJsayEgu2WKOiCDYEFcGCIiAivYOUe35/sA4c5l64fe7ceb9fL14yz5w55xnuF7x8OM98kzRN0wAAAAAAikpZoRsAAAAAAKpPsAcAAAAARUiwBwAAAABFSLAHAAAAAEVIsAcAAAAARUiwBwAAAABFSLAHAAAAAEVIsAcAAAAARUiwBwAAAABFSLAHAAAAAEWoxsHe7Nmz449//GOce+65MWTIkNh1112jRYsW0blz5zjwwAPj61//ejz99NNVPl/fvn0jSZIa/Rg+fHhN38ZO3XDDDZlrfe5zn6u3a5WKjRs3xqRJk+I///M/44ILLojDDz88dtttt2jTpk20aNEiunbtGsOGDYtLL700nnnmmTq//jXXXJO3hr71rW9V6xwPPvhgg65DAAAAgO01r+4LXnnllfjGN74RL7zwQoXPL1u2LJYtWxavvfZa/OEPf4jhw4fHn/70p9hjjz1q3WxlevbsWW/n/tOf/pR5/Nhjj8WHH34Yu+22W71ds6kbP358fOlLX6r0+SVLlsSSJUvi5Zdfjt///vfxmc98Jm666aZ6XUO33357/Md//Ec0b1613xLbrwsAAACAhlbtYO/NN9/MC/X22Wef2H///aNr166xfPnyeO6552LevHkREfHUU0/FkUceGc8880z069ev0vNecMEFsWTJkir1MGfOnLj//vtzj88999zqvo0qmTVrVjz77LOZ2ubNm+Mvf/lLfOc736mXa5aali1bxsCBA6N///7RuXPnSNM0FixYEJMnT47FixdHRMQTTzwRxxxzTDz77LP1Fu599NFH8cgjj8RJJ52002OXL1+eWX8AAAAAhVDtYO8T/fv3j4svvjjOPffc6N27d+a58vLyuPnmm+Pyyy+PtWvXxvz58+Occ86J5557LpIkqfB81157bZWv/Z3vfCcXrHTv3j1GjhxZ07exQ3/+859zP2/Tpk2sW7cuIrbcrSXYq7nddtstvve978XIkSNj2LBh0apVq7xjNm3aFH/+85/jm9/8Zqxbty7mzp0bl156aTzwwAN12sugQYPijTfeiIgtX++qBHt33nlnrF+/Pu/1AAAAAA2p2p+xt9tuu8XYsWNj5syZ8c///M95oV5ERFlZWYwZMyb+8pe/5GqTJ0+ORx99tHbdxpY75m699dbc43POOafK45PVkaZpJtj76U9/Gi1btoyIiOnTp8fLL79c59csFUcffXT88Ic/jKOPPrrCUC8ionnz5jFmzJi4/vrrc7WHHnoodydoXTnggANiyJAhERFx3333xYoVK3b6mk/GcFu0aBFnnXVWnfYDAAAAUFXVDvaOP/74uPDCC6NZs2Y7PfbUU0+Nww47LPf4wQcfrO7l8jz66KPx4Ycf5h5feOGFtT5nRSZMmBCzZ8+OiIh27drFRRddFKNGjco97zPWGsZZZ50Vbdq0iYgtYevUqVPr/BoXXHBBRESsX78+7rzzzh0eO2vWrHjuueciImLUqFHRtWvXOu8HAAAAoCpqvCtuVR199NG5n38SlNXGtoHaQQcdFAceeGCtz7mz65x22mnRrl27OO+883K122+/PTZu3Filc2274+8nvwYzZ86MK6+8MgYNGhQdOnSIDh06xIEHHhjf+973YsGCBTs954UXXpg758033xwRWz777brrrovjjjsuevfuHc2bN48kSWL58uVVft+NTYsWLaJjx465x6tWrarza5x99tm5uz63vUuzIts+f/7551frOu+//378/ve/j7POOiv233//6NixY7Ro0SK6dOkSBxxwQFxyySUxefLkHZ7jV7/6Ve7rfuKJJ1b52k8++WTudT179qzy2gUAAAAar3oP9rb9TL3NmzfX6lwrVqyI8ePH5x5/cqdVXVu7dm389a9/zT3+JNAbPXp07LrrrhERsXjx4hrfgfjHP/4xDjrooLjuuutixowZsWrVqli1alW89tpr8eMf/zgGDRoU9913X7XOOXHixDjwwAPjyiuvjGeeeSbmz59f61/vxmDx4sWxaNGi3OO+ffvW+TV69OgRI0aMiIgtv47vvfdehcelaRq33HJLRER07tw5Ro8eXeVrfOc734m99torLr300rjjjjti+vTpsXLlyti0aVMsXbo0Xn/99bj++uvjyCOPjLPOOivWrl1b4XnOP//83Pjy448/HnPnzq3S9W+88cbMOVq0aFHl3gEAAIDGqd6Dvddeey338913371W59p204IWLVrEOeecU6vzVebuu+/O3RnWq1ev+MxnPhMRW3ZwPfPMM3PH1WQcd/z48fG1r30tPv744+jdu3eceeaZcdFFF8Wxxx4bZWVbvhzLli2L008/PR555JEqnfOdd96Jk046KebOnRvt27ePk046Kb761a/G6aefHt27d692j41FmqZx1VVX5QLKPfbYIw499NB6udYnd99t/9mK23rmmWdyod+ZZ56Z+8zFqpg7d26kaRpJksR+++0Xn//852PMmDHx9a9/PU4//fTYe++9c8fecccd8aUvfSnSNM07T5cuXeK0006LiC2b1IwdO3an116+fHncdddduccXX3xxlfsGAAAAGq96DfbmzJkTf//733OPP/vZz9bqfNsGaZ/73OeiW7dutTpfVa5z9tln5wK3iMiM4z744IOxePHiap37qquuirKysvjlL38Zc+bMiTvuuCNuuOGGmDBhQrz22msxePDgiIjYuHFjXHjhhbFs2bKdnvNnP/tZrFixIi677LKYP39+PPDAA/GHP/whxo0bF/PmzYsOHTpUq8dC2rRpU8yfPz/uvvvu+NSnPpULrlq0aBG///3v62WjlIiIz3/+87mR30/uyttebcZwhw4dGmPHjo2FCxfGjBkz4t57740bb7wxrr/++hg3bly88847MWHChOjfv39EbNkoZNtNYrb1ta99LffzsWPHVhgAbuu2227LBeLHHnts7LPPPtXqHQAAAGic6jXY+/a3v5252+rkk0+u8blmzZoVEydOzD2urzHcefPmZcLIbYO8iIijjjoqd3fVxo0b4/bbb6/W+Tds2BD//u//Ht/+9rczgWFExKBBg+Lxxx/PbciwYMGC+NWvfrXTc27atCkuvvji+O1vfxu77LJL5rkWLVrkXaex6d+/f+7z31q0aBG9e/eOL37xi/H0009HxJadmB977LHM5iV1rXXr1nHGGWdERP5ai9iyscYn49n77LNPHHHEEdU6/3e+85248MILd7jZxrHHHhuPPfZYtG7dOiIi/uu//qvC44YPH54L52bPnh1PPPHEDq+97Riuu/UAAACg6ai3xOdPf/pTZvzvJz/5Se6zwWpi27ulunTpUq3PN6uOW265JcrLyyMi4sADD6xwc45zzz039/PqjuPutdde8Y//+I+VPt+zZ8/4t3/7t9zjG2+8cad3ZLVu3Tp+/vOfV6uPYnHRRRfF22+/Hccff3y9X2vbu/C2H8e99957Y8WKFXnH1bW+ffvGpz71qYiIePHFF2PlypUVHrdtQLdtcLe9qVOnxpQpUyIiomPHjvGlL32pDrsFAAAACqle5hpfeuml+MY3vpF7fNZZZ8XZZ59d4/Nt/7lnZ511VrU+36w6tg3qtr9bb9v6tddeGxERL7/8ckyfPj03Qrsz2+7AWplzzz03vvWtb8XmzZtj/vz58eabb8Z+++1X6fEjRozIbepRjM4777zcBhnr16+P+fPnx/PPPx9Lly6NG2+8MR566KH42c9+VunXo64cc8wx0a9fv3j33XfjzjvvjN/85je5MPqTdZEkSa37mDNnTrzwwgvx1ltvxfLly2PdunWZ8PaTz/FL0zSmTZsWxx57bN45Lrzwwvje974XGzZsiHvuuSeWLl0anTt3zjtu29Dv7LPPjjZt2tSqdwAAAKDxqPNg77333ouTTz4595leBx54YFx//fW1OueECRNi9uzZucf1NYb7/PPPx5tvvhkREWVlZZWGkXvvvXccddRR8dxzz0XEltCnqnfMHXnkkTs9Ztddd41999033njjjYiIeOWVV3YY7A0dOrRK126srr766rzahg0b4pZbbol//Md/jA8//DDOP//8mD17dnz/+9+v114+CW2XL18e9913X3zpS1+KBQsWxGOPPRYREccff3zsscceNTr3pEmT4rvf/W4888wzO70L8xOVfYZjt27d4gtf+ELceeed8fHHH8ett94al19+eeaY9evXZz6nzxguAAAANC11Oor74YcfxgknnBALFiyIiIh+/frFww8/XOvNG7a9W2/w4MExbNiwWp2vMtverfeZz3wmevXqVemx29619Ze//CX3WYI7U9VQaNvjPrmbrTJ1vYnIX/7yl/jmN7+5wx9Lly6t02tur2XLlnHRRRfFo48+Gi1atIiILQHg9p99V9cqGse99dZbc1/fmo7h3nTTTXH00UfHhAkTqhzqRURud+aKbLuJRkXjuPfcc09u85WDDz44DjnkkGp0DAAAADR2dXbH3pIlS+KEE06IWbNmRcSWDQ8ef/zx2G233Wp13rVr18a4ceNyj+vrbr2PP/447rjjjtzjbT9HryJnnnlmXHHFFbFhw4b48MMP47HHHouRI0fu9Dpt27atUj/t2rXL/XxH4U5E1Pl45eOPP77Tzw78p3/6pwpHP+vaYYcdFueff37uswZ/9atfxdFHH11v1+vXr18cc8wx8eyzz8bDDz8cixYtygV8bdu2jdNPP73a53zjjTfi61//ei7QGzx4cHzta1+LI488Mvbcc8/o0KFDbsOMiC1jtp/8+n/yeY8V+fSnPx177713zJo1K6ZNmxYvv/xy5u5Nm2YAAABA01Ynd+ytXLkyTjzxxJg+fXpERHTt2jUef/zx2GuvvWp97nvuuScXbDVr1myngVtN3X///bm7myK2BIif7NRa0Y/OnTvHhg0bcsdXdRONtWvXVum4NWvW5H7evn37Kr6LpumEE07I/by+79iL2HpX3qZNm+Kqq66KV199NSIiTj311Bp9LX7961/Hpk2bIiLixBNPjClTpsQ//MM/xKGHHhrdu3fPhHoROw9yP5EkSaWbaLz33nu53Z3btGkT55xzTrX7BgAAABq3Wgd7a9asiVGjRsXLL78cEVt23nz44Ydj0KBBtW4uIhuYjRgxotZ3AFblOjWx7a6pOzJnzpwqnW/u3Lm5n3ft2rXGfdXEzTffHGma7vBH3759G6yfbTcGWbJkSb1f74wzzsiFbTfffHOuXtMx3CeeeCL38x/96Ec73fjl/fffr/K5v/KVr+RGlW+77bZYt25dRESMHTs2d4fg6aefHh07dqxu2wAAAEAjV6tR3PXr18cpp5ySu4uqbdu28eCDD9bZZg4ffPBBJhSprzHchQsXxsMPP5x7fOCBB1Z5vPX111+PNWvWxPr16+POO++Mr371qzs8fvLkyXHSSSft8Jjly5fHzJkzc49L/bPRPvzww9zPG2L8t2PHjnHKKafEnXfemav16tUrPvvZz9bofPPnz8/9/IADDtjhsStWrMjdIVgVPXr0iFNOOSXuuuuuWLFiRdx1111x9tlnZwLJiy66qNo9AwAAAI1fjYO9jRs3xhe/+MXcuF+rVq1i/Pjxdfr5Z3/5y19ynzHWqVOn+PznP19n597WrbfemhuV7NKlS7z00ku5u6B25vLLL4/f/va3EbHlrr+dBXu33357XHPNNdGsWbMd9vPJZg277bZb7LvvvlXqpal64IEHcj8fOHBgg1zz/PPPzwR755xzTpSV1ewG121ft3bt2mjVqlWlx95www2xcePGap3/a1/7Wtx1110RsWUct2vXrrk7PgcMGBDHH398DboGAAAAGrsaJRWbN2+Os88+Ox566KGIiGjevHnceeedNb6jqTLbjseeeeaZeZ9FVh/XOeOMM6oc6kVkN9mYOHFivPPOOzs8ftasWfGrX/2q0uc/+uij+MEPfpB7fNFFF0WSJFXup7HbtGlTlUaWP/HQQw/lQquIiC9+8Yv10VaekSNHxosvvpj78a//+q81Ple/fv1yP7/vvvsqPe7tt9+Oa6+9ttrnP+GEE3KfZ/n000/H1VdfnXvO3XoAAADQdFU72EvTNC666KL461//uuUEZWVxyy23xCmnnFKnjb344osxY8aM3OP6GsOdNm1aTJs2Lfe4upsMHH744bH33nvnHn+yg2plWrZsGf/8z/8c1113Xd6OpzNmzIgTTjghFi5cGBFbxiy/9a1vVaufxm716tWx1157xb/927/Fm2++Welxy5Ytix/96Edx2mmn5T4rrn///ju9I7KuNGvWLIYNG5b70alTpxqf6+STT879/Nvf/nY88sgjecc88cQTMXz48Fi1alVmR+SqSJIkF+ClaRovvPBCRGwJ3C+88MIa9w0AAAA0btUexf3973+fucNt7733jmeffTaeffbZKr3+k7HVndk2INtnn33iyCOPrF6jVbTte9lrr73iqKOOqvY5zjnnnNxddrfccktce+21ld5l9/Of/zyuvPLKuPLKK+MXv/hFHHPMMbHLLrvEW2+9Fc8++2wu7GvevHncdNNNDfKZcg1t2bJl8cMf/jB++MMfRq9eveLAAw+M7t27R9u2bWP16tXxzjvvxJQpUzK7Dvfs2TPuu+++HY6xNlZXXnll3HDDDbFo0aJYunRpjBw5Mg455JAYNGhQJEkSU6ZMye0ofeKJJ0b37t3jlltuqdY1xowZE9dcc01upDwiYvTo0dGjR486fS8AAABA41HtYO+Tu8k+8fbbb8fbb79d5ddXJdjbsGFD3H777bnH9XW33qZNm+LWW2/NPT777LNrNPZ67rnn5oK92bNnx9NPPx3Dhw+v8NjPf/7z0apVq7jiiiti3rx5cccdd+Qd06lTp7jpppti1KhR1e6lsSsrK4vmzZvnAqj58+dnNpeoyGmnnRa/+c1vonfv3g3RYp3r3r17jB8/Pk455ZRYvHhxRERMmTIlpkyZkjnuC1/4Qtx8881xxRVXVPsau+22W4wePTruvffeXO3iiy+uVd8AAABA41arXXHry4MPPhhLliyJiC1B0HnnnVcv13n44YczQWV1x3A/MWDAgDj00EPjxRdfjIiIm2++udJgLyLiG9/4Rhx77LFx/fXXx+OPPx7z5s2LiIi+ffvGySefHJdffnnstttuNeqlsevQoUMsWbIkHn/88Zg4cWK88sor8e6778aiRYvi448/jnbt2sWuu+4agwcPjsMPPzzOPvvs6N+/f6HbrrUjjzwypk+fHr/+9a/j/vvvj3fffTcitgRyQ4cOjXPPPTczslsTp512Wi7Y69OnT4wcObK2bQMAAACNWJJ+8gFm1Ju+ffvG+++/HxER7733XvTt27ewDdEkfeUrX4mbb745IiK+973vxQ9/+MPCNgQAAADUqxrtigs0LqtWrYpx48ZFxJa7XMeMGVPgjgAAAID6JtiDJuDGG2+MNWvWRMSWDTj22muvAncEAAAA1DfBHhS52bNnx49+9KPc429961sF7AYAAABoKI1y8wxgx6688sqI2LKr8IMPPhhr166NiIhPf/rTccIJJxSwMwAAAKChCPagCF133XV5te7du8cNN9xQgG4AAACAQjCKC0WsWbNm0atXrxgzZky89NJLPlsPAAAASkiSpmla6CYAAAAAgOpxxx4AAAAAFCHBHgAAAAAUIcEeAAAAABQhwR4AAAAAFCHBHgAAAAAUIcEeAAAAABQhwR4AAAAAFCHBHgAAAAAUIcEeAAAAABQhwR4AAAAAFCHBHgAAAAAUIcEeAAAAABQhwR4AAAAAFCHBHgAAAAAUIcEeAAAAABQhwR4AAAAAFCHBHgAAAAAUIcEeAAAAABQhwR4AAAAAFCHBXgO78MILI0mSuPDCC+v83H379o0kSeKpp56q83PXleHDh0eSJHHNNdcUuhWiONZMRMTmzZvjP//zP+Pggw+Odu3aRZIkkSRJ3HvvvYVuDQAAAAqmwYK9NE3j9ttvj1NPPTV23333aN26dXTu3DkOOuiguOqqq+L999+vk+v87W9/iwsvvDD233//6NixYzRv3jzatm0be+yxR4wcOTKuu+66WLlyZZ1cq1Q11NeyJl5//fX4xS9+EV/+8pdjyJAh0adPn2jTpk20atUqunXrFocddlhcfvnlMWnSpJ2ey1qqG3WxXq688sr4x3/8x5g6dWps2rQpevToET169IjWrVtHRMTNN98c11xzTaMPKAEAAKBOpQ3go48+Sg8//PA0Iir90bp16/R//ud/anyNFStWpCNGjNjhNT750a1bt/SZZ56pw3dYdd/97nfTfffdN/3ud79b5+fec88904hIn3zyyTo/9ydq+7U8/vjj04hIr7766nrp7+tf/3qV1kBEpOecc066YcOGvHMUy1qqC/W9Zuri9/7KlSvTFi1apBGR/vznP0/Ly8vzjqnvdQUAAACNUb3fsbd27doYPnx4PP/88zs8bv369fH1r389br755hpd51vf+lY8+uijVTp20aJFceqpp8by5ctrdK3a+MlPfhIzZ86Mn/zkJw1+7dpqqK9lQ7n11lvjxz/+cV69WNZSY1dX62XmzJmxcePGiIi45JJLIkmSum4VAAAAilK9B3tXX311zJgxI/c4SZK49tpr44033ojHH388DjjggMzxV1xxRSxYsKBa19iwYUPceuutmVrHjh3jpptuijfeeCOeeuqpOO644zLPL168OB544IFqvpvS1hBfy9rq2LFjnHrqqfG73/0uHn300Xj11Vfj9ddfj/Hjx8cJJ5yQd/yf/vSnzGNrqe7U1XpZu3Zt7ue77LJL/TUMAAAAxaY+bwdcvXp12r59+8zY3fnnn5855s0330yTJMkc84Mf/KBa1/nwww/zxvu2P8ecOXPyjvnpT3+aOWbbcb6NGzem//mf/5kedNBBabt27dJu3bqln//859OpU6fmjl+zZk36wx/+MB08eHDatm3btHPnzukZZ5yRvvPOO5X2esEFF6QRkV5wwQXVeo9VUZ9jlXX1tdz217i8vDz9wx/+kB522GFp+/bt01122SU94ogj0ltuuaXO+0/TNN20aVO6xx575I2Bbquu1tL277W+1lNt1deaqYv1Mnbs2B2O8B5//PE7PSYi0vfee69O3xsAAAA0FvV6x97DDz8cq1atytS+9KUvZR7vs88+MWTIkExt3Lhx1bpO9+7do23btpnaJx+qX9njiIg999yzwvNt3LgxRo4cGd/+9rfjjTfeiIgtI5fjx4+PY445Jl566aVYsmRJHHPMMfH9738/Zs2aFWmaxtKlS+POO++Mo446KubMmVOt99DY1fXXcvPmzXHqqafG1772tZgyZUokSRKrV6+OyZMnx3nnnRdXX3113b6B/1NeXp553K9fv8zjul5LEaW5nupivbRp0yZ69OgRu+66a672yaYZPXr0iM6dO+eOadGiRUREtGvXLnNMjx49olmzZnX99gAAAKBRqNdg78UXX8yrDR48OK+2//77Zx6/8cYbmfG7nSkrK4tLLrkkU7vuuutiwoQJsW7dupgzZ05cdtllmed79+4dJ598coXn+93vfhdTp06NcePGxerVq2PVqlXxwgsvRL9+/WL16tVxxRVXxFe/+tVYtmxZPPLII7FmzZpYvXp1PP7449GtW7dYuHBh/Ou//muV+y8Gdf21/O///u946qmn4uabb46VK1fGihUrYu7cubmvyY9+9KN4++23a9zv+vXrY/bs2TF79ux49dVX4+67746RI0fGvHnzMsd985vfzDyu67UUUZrrqS7Wy5lnnhkLFiyIu+++O/f8ggULcj/uvvvu3DFHHXVURET80z/9U+aYBQsWxO67716Xbw0AAAAajeb1efL33nsvr9a9e/ed1jZv3hxz5syJ/fbbr8rX+vd///dYtWpV/PGPf4w0TeODDz6I448/vsJjBwwYEHfffXe0a9euwueXL18ezzzzTBxzzDG52qGHHhp//OMf4zOf+Uw899xz0aZNm3j11Vejf//+uWM+85nPxE9/+tO46KKL4u67746NGzfm7iQqdnX9tVy2bFn8/e9/j0996lO5Wp8+fWLcuHHRr1+/mD9/ftx5553x//7f/6tRv5MnT86ce3vt2rWL733ve3khXkTdrqWI0lxPDfl7HwAAAEpVvd6xt2LFirxamzZt8mrbjz5GRLV3GW3ZsmX8/ve/j9/85jfRvHnleeUZZ5wRU6ZMybtTaFvHHHNMJoT5xPHHHx+tWrWKiIjTTz89E8J84sQTT4yIiHXr1tXqjrPGpq6/lkcffXSFwVurVq1yv4avvvpqDTrdubZt28bPf/7zuOKKKyp8vi7XUkRprqeG/L0PAAAApared8XdXpqmVapV1+zZs2Po0KFx+eWXx6ZNmyo97s4774y99torHnnkkUqPOeywwyqsN2vWLLp27RoRW+64qkiPHj1yP1+2bFlVWi9atflaHn744ZU+16tXr4iIWLp0ac0a24m1a9fGZZddFoceemiFd5bV5VqKsJ4+UV+/9wEAAKBU1Wuw17Fjx7zaunXrqlTr1KlTla+zefPmOOmkk2Lq1Km52h577BG33nprTJ8+PSZMmBBf/OIXc88tXrw4TjrppJg2bVqF52vfvn2l1/rkDq7Kjtn2Dq+NGzdW+T00dnX9tazKr3Ftfv2GDx8eaZpGeXl5LFq0KCZOnBhjxozJHDN9+vQ499xzM7W6XksRpbmeGur3PgAAAJSyev2Mvb322iuvtnDhwthll10ytY8++ijzuFmzZrHHHntU+ToPP/xwbrfRT/zlL3+JY489Nvf4qKOOisGDB8ebb74ZEVsCnJ/97Gdx2223Vfk6payhvpZ1LUmS6Nq1a3Tt2jW3wcJNN92Ue/65556LadOm5XZntZbqRrGuFwAAACgm9XrHXkXjhdOnT8+rvfbaa5nHgwYNqvCztyozc+bMvNohhxySedysWbM44IADMrXXX3+9ytcodQ31taxvBx98cF5t28+us5bqRlNZLwAAANCY1WuwN3LkyLwRwzvvvDPzeObMmXmbJHzpS1/KPL7mmmsiSZLcj759+2aer2in0FdeeSXzePPmzXkhQrNmzar0Pqi7r2V9mj17dixZsqTS58vLy+PBBx/Mq28bJFlLdaOh10tZ2ZY/ynxmHwAAAKWkXoO9du3axde//vVM7dZbb40f/OAHMWPGjHjiiSfy/iLfoUOH+OpXv1qt61R0d9B5550Xd9xxR8yYMSOeffbZOOuss3Kjkzt6HRVrqK9lbTz11FPRp0+fOO200+J//ud/YtKkSfH222/HK6+8EnfeeWeMGDEiHn744cxrWrVqFUceeWTusbVUNxp6vXTo0CEi7KgLAABAaanXz9iLiLj22mvjwQcfjBkzZkTEljtqrr766rj66qsrPP66666Lnj17VusaRxxxRBx33HExYcKEXG327Nlx1llnVfqali1bxpVXXlmt65S6hvha1tb69evjnnvuiXvuuadKx//Lv/xL7LrrrrnH1lLdacj1sv/++8f48ePjoYceiquuuip69+5d474BAACgWNTrHXsRW8Ycn3zyyTjssMN2eFzr1q3j+uuvjwsvvLDa10iSJP7617/mNkfYmV133TXuuuuuGDRoULWvVcoa4mvZUNq0aRP//u//nhcyWUt1pyHXywUXXBCtW7eOd955J/bYY4/o2bNn9O3bN/r27Rvz5s2r8XkBAACgMav3O/YiInr06BGTJ0+OO+64I+644454+eWXY9GiRdGmTZvYc88948QT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oSmw3ikl1julxHqnVFjrlBLrnVJSSuu9we/YS5Kkyf+iRkR06NChJN4nRFjvlBbrnVJivVMqrHVKifVOKbHebZ4BAAAAAEVJsAcAAAAARUiwV02tWrWKq6++Olq1alXoVqDeWe+UEuudUmK9UyqsdUqJ9U4psd63qvPNMwAAAACA+ueOPQAAAAAoQoI9AAAAAChCgj0AAAAAKEKCPQAAAAAoQoI9AAAAAChCTTrY+8lPfhKHHnpotG/fPrp37x5f+MIX4s0338w9P3v27EiSpMIf48aN2+n5b7/99mjWrFlcdtll9fk2oEp2tt4jIhYsWBDnnXde9OzZM9q1axeHHHJI3HXXXVU6/6RJk6JZs2Zx0kkn1Uf7UC1VWe+zZs2KU089Nbp16xYdOnSIM844Iz766KMqnd96pzH5/e9/HwceeGB06NAhOnToEEceeWT87W9/yxyzfv36uOyyy6JLly6xyy67xBe/+MUqr3ffz9DYTJgwIU4++eTo1atXJEkS9957705fc/PNN0eSJDFw4MC858aNGxdJkkTfvn3rvlmopap8T7O9a665JpIkiZEjR+Y99x//8R+RJEkMHz68njqGmqvK9zTbs953rkkHe08//XRcdtllMXny5Hjsscdi48aNMWLEiFizZk1EROy+++7x4YcfZn5ce+21scsuu8TnPve5nZ7/xhtvjKuuuipuv/32WL9+fa373bBhQ63PQena2XqPiDj//PPjzTffjPvuuy9ee+21OO200+KMM86IV155Zafnv/HGG+Pyyy+PCRMmxPz582vd7+bNm6O8vLzW56E07Wy9r1mzJkaMGBFJksTf//73mDhxYmzYsCFOPvnkKq07653GpE+fPvHTn/40Xn755XjppZfi05/+dHz+85+P6dOn54751re+Fffff3+MGzcunn766Zg/f36cdtppVTq/72dobNasWRNDhgyJ//7v/67W69q1axcLFy6MSZMmZeo33nhj7LHHHnXZItSZqnwPX5HddtstnnzyyZg3b16mftNNN1nvNFpV+Z6mItb7TqQlZOHChWlEpE8//XSlxxx00EHpmDFjdnqud999N23Tpk26fPny9PDDD09vvfXWzPNjx45NO3bsmN5zzz1p//7901atWqUjRoxI58yZkzvm6quvTocMGZL+8Y9/TPv27ZsmSVLzNwfbqWi9t2vXLv3zn/+cOa5z587pH//4xx2ea9WqVekuu+ySzpw5Mz3zzDPTH//4x5nnn3zyyTQi0gceeCA94IAD0latWqWHH354+tprr+WO+eT3xPjx49OBAwemzZo1S997773av1FI89f7I488kpaVlaUrVqzIHbN8+fI0SZL0scce2+G5rHeKwa677precMMNaZpuWdstWrRIx40bl3t+xowZaUSkkyZN2uF5fD9DYxcR6T333LPT4z5Zq9/85jfTiy++OFefO3du2qpVq/S73/1uuueee+bq77zzTnrKKaek3bt3T9u1a5cOGzYs8/+Ha6+9Nh08eHDedYYMGZJ+73vfq9V7gh2pyt9ZP/lzd/To0emPfvSjXH3ixIlp165d00suuSQ9/vjjc/UXXngh/exnP5t26dIl7dChQ3rcccelL7/8cu75r3zlK+lJJ52UucaGDRvSbt265f5fA/Vl2+9pKmK971yTvmNveytWrIiIiM6dO1f4/MsvvxxTp06Niy66aKfnGjt2bJx00knRsWPHOPfcc+PGG2/MO2bt2rXx4x//OP785z/HxIkTY/ny5fHlL385c8w777wTd911V9x9990xderU6r8pqERF6/2oo46K//3f/42lS5dGeXl53HHHHbF+/fqd3rp85513xn777Rf77rtvnHvuuXHTTTdFmqZ5x33nO9+JX/7yl/Hiiy9Gt27d4uSTT46NGzfmnl+7dm387Gc/ixtuuCGmT58e3bt3r5s3S8nbfr1//PHHkSRJtGrVKndM69ato6ysLJ599tkdnst6pzHbvHlz3HHHHbFmzZo48sgjI2LL9y8bN26Mz372s7nj9ttvv9hjjz3y7lzanu9naGrGjBkTd955Z6xduzYitozojhw5Mnr06JE5bvXq1TFq1Kh44okn4pVXXomRI0fGySefHHPmzMmdZ8aMGfHiiy/mXvPKK6/Eq6++Gl/5ylca7g1Rcnb2d9ZtjRkzJm6++ebc45tuuinOOeecaNmyZea4VatWxQUXXBDPPvtsTJ48OQYMGBCjRo2KVatWRUTExRdfHA8//HB8+OGHudc88MADsXbt2jjzzDPr4F1Bvoq+p9kR630HCp0sNpTNmzenJ510Unr00UdXeswll1ySDhw4sErn2n333dN77703TdM0XbRoUdqyZcv03XffzR0zduzYNCLSyZMn52qf/Ov5888/n6bpluS5RYsW6cKFC2v6tqBCla33ZcuWpSNGjEgjIm3evHnaoUOH9JFHHtnp+Y466qj017/+dZqmabpx48a0a9eu6ZNPPpl7/pM7mO64445cbcmSJWmbNm3S//3f/03TdOvvialTp9bBO4StKlrvCxcuTDt06JBeccUV6Zo1a9LVq1en3/zmN9OISL/2ta/t8HzWO43Rq6++mrZr1y5t1qxZ2rFjx/TBBx/MPXfrrbemLVu2zHvNoYceml511VWVntP3MxSDqOYde2m6ZQLnT3/6U1peXp7uvffe6fjx49Nf/epXmTv2KjJ48OD0v/7rv3KPP/e5z6WXXHJJ7vHll1+eDh8+vCZvA6qkKn9nTdOtdzBt2LAh7d69e/r000+nq1evTtu3b59OmzYtveKKKzJ3MFV0nfbt26f3339/rjZo0KD0Zz/7We7xySefnF544YW1fk+wvR19T1MR633nSuaOvcsuuyxef/31uOOOOyp8ft26dXHbbbdV6W69xx57LNasWROjRo2KiIiuXbvGCSecEDfddFPmuObNm8ehhx6ae7zffvtFp06dYsaMGbnannvuGd26davJW4JKVbbev//978fy5cvj8ccfj5deeim+/e1vxxlnnBGvvfZaped6880344UXXoizzjorIras6zPPPLPCuzq2/ZeWzp07x7777ptZ7y1btowDDzywtm8PMipa7926dYtx48bF/fffH7vsskt07Ngxli9fHoccckiUlVX+vz7rncZq3333jalTp8bzzz8fl1xySVxwwQXxxhtv1Oqcvp+hqRozZkyMHTs2nn766cwa39bq1avjn/7pn2LgwIHRqVOn2GWXXWLGjBm5O/YiIr761a/mPntyw4YNcdttt8WYMWMa8q1QYnb2d9bttWjRIs4999wYO3ZsjBs3LvbZZ58Kv/f46KOP4qtf/WoMGDAgOnbsGB06dIjVq1dn1vvFF18cY8eOzR3/t7/9zXqnXtT0exrrvXLNC91AQ/jmN78ZDzzwQEyYMCH69OlT4TF//etfY+3atXH++efv9Hw33nhjLF26NNq0aZOrlZeXx6uvvhrXXnvtDv/SuL127dpV+VioisrW+6xZs+K3v/1tvP766zF48OCIiBgyZEg888wz8d///d9x/fXXV3i+G2+8MTZt2hS9evXK1dI0jVatWsVvf/vb6NixY5V7a9OmTSRJ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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#@title Set date range for the chart above\n", "\n", "start = \"2022-04-27\" #@param {type:\"date\"}\n", "end = \"2022-05-04\" #@param {type:\"date\"}\n", "\n", "#Function that converts data into a date time object\n", "datefixer = lambda date: datetime.fromisoformat(date[0:10])\n", "\n", "#Applying datefixer function to every column of df_strava_summary\n", "df_strava_summary = elevation_df.assign(date \n", " =elevation_df.get('start_date').apply(datefixer))\n", "\n", "#Dictionary to store the hourly frequency\n", "date_etime = {}\n", "\n", "#Starting date of our chart\n", "start_date = date(int(start.split('-')[0]),\n", " int(start.split('-')[1]),int(start.split('-')[2]))\n", "\n", "#Ending date of our chart\n", "end_date = date(int(end.split('-')[0]),\n", " int(end.split('-')[1]),int(end.split('-')[2]))\n", "\n", "#Creating a list of dates between start and end date\n", "dates = list(pd.date_range(start_date,end_date-timedelta(days=1),freq='d'))\n", "\n", "# Storing toal distance, time and elevation\n", "total_distance = 0\n", "total_time = 0\n", "total_elevation = 0\n", "\n", "for date_val in dates:\n", " date_etime[str(date_val.day)+\" \"+str(date_val.month_name())[:3]] = 0\n", " for actvity_index in range(len(df_strava_summary)):\n", " #Checks if the current date is in the activity DataFrame\n", " if(date_val == df_strava_summary.iloc[actvity_index].get('date')):\n", "\n", " #Storing total time, distance and elevation\n", "\n", " total_distance = (total_distance +\n", " df_strava_summary.iloc[actvity_index].get('distance'))\n", " \n", " total_time = (total_time +\n", " df_strava_summary.iloc[actvity_index].get('moving_time'))\n", " \n", " total_elevation = (total_elevation +\n", " df_strava_summary.iloc[actvity_index].get('total_elevation_gain'))\n", " \n", " #Stores the elevation of moving time in dictionary\n", " date_etime[str(date_val.day)+\" \"\n", " +str(date_val.month_name())[:3]] = (date_etime[str(date_val.day)\n", " +\" \"+str(date_val.month_name())[:3]] +\n", " df_strava_summary.iloc[actvity_index].get('moving_time')/60)\n", "\n", "#Resetting seaborn to prevent interference with matplotlib plots\n", "sns.reset_orig()\n", "\n", "# Creating a matplotlib plot of size 16,8\n", "plt1 = plt.figure(figsize=(16,8))\n", "ax = plt1.gca()\n", "\n", "\n", "plt.plot(list(date_etime.keys()),list(date_etime.values()),color=\"#FC5200\",\n", " marker='o', fillstyle='none', lw=3, markerfacecolor='white', ms=20, \n", " mew=3, markeredgecolor='#FC5200')\n", "\n", "plt.fill_between(list(date_etime.keys()),\n", " list(date_etime.values()), facecolor='#FC5200',alpha=0.1)\n", "\n", "\n", "\n", "# Adding veritcal grids\n", "plt.grid(axis=\"x\")\n", "\n", "# Hiding the y-ticks\n", "ax.axes.get_yaxis().set_visible(False)\n", "\n", "#Adding the title to the chart\n", "plt.suptitle(list(date_etime.keys())[0]+\" - \"+\n", " list(date_etime.keys())[-1],fontsize=24,x=0.195)\n", "#Adding the subtitle to the chart\n", "plt.title( \"$\\\\bf{\"+str(round(total_distance / 1609,1))+\"}$mi | \"+\n", " \"$\\\\bf{\"+str(round(total_time/3600))+\"}$h \"+\"$\\\\bf{\"+\n", " str(round(total_time%60))+\"}$m | \"+\"$\\\\bf{\"+\n", " str(round(total_elevation))+\"}$ft\",fontsize=18,loc='left')\n", "\n", "# Removing the spines on top, left and right\n", "ax.spines['top'].set_visible(False)\n", "ax.spines['right'].set_visible(False)\n", "ax.spines['left'].set_visible(False)" ] }, { "cell_type": "markdown", "id": "9dd8c005", "metadata": {}, "source": [ "Above is a plot we created ourselves!" ] }, { "cell_type": "markdown", "id": "9be8cea0", "metadata": {}, "source": [ "## 7.3 Visualizing Participant's Runs!" ] }, { "cell_type": "markdown", "id": "ce720159", "metadata": {}, "source": [ "Strava's website and app allows the user to visualize the routes for all their activities recorded synced on the Strava application. It is a very interesting feature as it lets the participants view the exact route they took during their activity on an actual map.\n", "\n", "
\n", "\n", "\n", "Let's try to recreate the plots using the participant's data!

\n", "Here's a reference to how our overall result will look like\n", "\n", "" ] }, { "cell_type": "markdown", "id": "03750fa0", "metadata": {}, "source": [ "Interestingly, Strava provides us with this route data in the form of polylines. In the df_strava dataframe we can see a column called summary_polyline for all the individual activities. We will be using this column for our plot!
\n", "\n", "Polyline is a encoded format that store coordinate location and it has to be decoded before it can be used. If we have a closer look into it, it is a bunch of characters that make no sense to an average reader." ] }, { "cell_type": "code", "execution_count": 45, "id": "5d90c263", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import polyline\n", "import folium\n", "\n", "#Dictionary to save the coordinates of the first ride\n", "my_ride = map_summary_polyline_df.iloc[1].get(['map.summary_polyline']).apply(polyline.decode)['map.summary_polyline']\n", "\n", "#Select one activity to find the centroid of the map.\n", "centroid = [\n", " np.mean([coord[0] for coord in my_ride]), \n", " np.mean([coord[1] for coord in my_ride])\n", " ]\n", "\n", "#Creating a map \n", "m = folium.Map(location=centroid, zoom_start=13)\n", "\n", "# Plot all rides on map\n", "for i in range(len(map_summary_polyline_df.head())):\n", " if len(map_summary_polyline_df.iloc[i].get(['map.summary_polyline'])['map.summary_polyline']) == 0:\n", " continue\n", "\n", " # Polyline.decode is a function that helps us decode this polyline data to coordinates\n", " my_ride = map_summary_polyline_df.iloc[i].get(['map.summary_polyline']).apply(polyline.decode)['map.summary_polyline']\n", " # We plot the route on the map.\n", " folium.PolyLine(my_ride, color='red').add_to(m)\n", "display(m)" ] }, { "cell_type": "markdown", "id": "72662856", "metadata": {}, "source": [ "# 8. Data Analysis" ] }, { "cell_type": "markdown", "id": "537ccc99", "metadata": {}, "source": [ "Now that we have found, the weekly summary for the participant's activity time, let's plot some graphs to see if there is a correlation between the various metrics of the participants data." ] }, { "cell_type": "markdown", "id": "922d9a21", "metadata": {}, "source": [ "In order to focus on the just the runs, we will have to clean the dataframe and only keep activities of the type 'Run'." ] }, { "cell_type": "code", "execution_count": 46, "id": "fcbcd807", "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", "
nameidstart_datemax_speedmax_heartrate
0Morning Run77951337962022-05-21T16:16:08Z3.7177.0
1Afternoon Run77951337872022-05-20T21:52:46Z4.0186.0
2Morning Run71705527902022-05-19T13:56:56Z4.2159.0
3Morning Run71547937912022-05-14T17:31:06Z3.7156.0
4Morning Run71274068942022-05-03T13:43:13Z3.5174.0
6Lunch Run70562769062022-04-28T18:40:55Z3.7NaN
\n", "
" ], "text/plain": [ " name id start_date max_speed max_heartrate\n", "0 Morning Run 7795133796 2022-05-21T16:16:08Z 3.7 177.0\n", "1 Afternoon Run 7795133787 2022-05-20T21:52:46Z 4.0 186.0\n", "2 Morning Run 7170552790 2022-05-19T13:56:56Z 4.2 159.0\n", "3 Morning Run 7154793791 2022-05-14T17:31:06Z 3.7 156.0\n", "4 Morning Run 7127406894 2022-05-03T13:43:13Z 3.5 174.0\n", "6 Lunch Run 7056276906 2022-04-28T18:40:55Z 3.7 NaN" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "strava_df = max_speed_df.merge(max_heartrate_df.get(['start_date','max_heartrate']),on='start_date')\n", "\n", "def filterRuns(data):\n", " dataframe = []\n", " for i in range(len(data)):\n", " name = data.iloc[i].get('name')\n", " if 'run' in name.lower():\n", " dataframe.append(True)\n", " else:\n", " dataframe.append(False)\n", " return dataframe\n", "\n", "\n", "strava_df = strava_df[filterRuns(strava_df)]\n", "strava_df" ] }, { "cell_type": "code", "execution_count": 47, "id": "d155c0c4", "metadata": {}, "outputs": [], "source": [ "# We will drop the null values and only get the columns we need\n", "df_runs_cleaned = strava_df.get(['max_speed','max_heartrate']).dropna()" ] }, { "cell_type": "markdown", "id": "ed50a304", "metadata": {}, "source": [ "As the strava api returns the max_speed values in meters/second and our above plots use miles, we will convert max speed to km/hour to maintain consistency." ] }, { "cell_type": "code", "execution_count": 48, "id": "4b7928f0", "metadata": {}, "outputs": [], "source": [ "df_runs_cleaned = df_runs_cleaned.assign(max_speed =\n", " df_runs_cleaned.get('max_speed').apply(lambda x: x*3.6))" ] }, { "cell_type": "markdown", "id": "dfbfab58", "metadata": {}, "source": [ "Let's plot the cleaned Data Frame below!" ] }, { "cell_type": "code", "execution_count": 49, "id": "85938c27", "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", "
max_speedmax_heartrate
013.32177.0
114.40186.0
215.12159.0
313.32156.0
412.60174.0
\n", "
" ], "text/plain": [ " max_speed max_heartrate\n", "0 13.32 177.0\n", "1 14.40 186.0\n", "2 15.12 159.0\n", "3 13.32 156.0\n", "4 12.60 174.0" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_runs_cleaned" ] }, { "cell_type": "markdown", "id": "4f2820d5", "metadata": {}, "source": [ "Maybe the heart rate is correlated with how fast you run. Let's test if this hypothesis is true. We will do so by plotting a scatterplot between those two metrics and finding the correlation." ] }, { "cell_type": "markdown", "id": "8be82bd2", "metadata": {}, "source": [ "First, we will plot a chart to see if there is a visual correlation between a partcipant's max heart rate and their max speed." ] }, { "cell_type": "code", "execution_count": 50, "id": "0f0abe31", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Maximum Speed (km/hr)')" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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NecOGJMZuuOXeynAmLiuUXt7k1av7qm5s0yASsa9B5QP9x9QPtx/QHnU8r3X1hxXU6LqRs4UpLOzueChO4VdNchzzz2nHXbYYcSwUkrXsrfffnv9+c9/LuYtAAAAAAAAANShogLLvr4+TZ8+fb3XbbLJJurq6irmLQAAAAAAAADUoaICy5133llPPfWUuru7R7zG93298MIL2mGHHYpeHAAAAAAAAID6UlRgefrppyuVSumEE07Q4sWLhzzf09OjM844Q8uXL9fXv/71MS8SAAAAAAAAQH0o6hTPO++8UzvuuKOefPJJ7bffftp11121+eaby3EcLV68WM8884zWrl2rzs5OXXzxxXmvNcbotttuK8niAQAAAAAAANSWogLL3MAxCAI9/fTTevrpp4dct3z5ci1fvjzvMWNMMW8JAAAAAAAAoA4UFVjecsstpV4HAAAAAAAAABQXWO6xxx6lXgcAAAAAAAAAFBdY5urr69Pzzz+vxYsXy/M8zZgxQ9tvv73i8Xgp1gcAAAAAAACgjhQdWHZ1denSSy/Vr371K/X19eU919zcrM9//vM6+eSTFYvFxrxIAAAAAAAAAPWhqMByzZo1+tznPqfXXntNrutq11131fTp0yVJ7733nl588UVdd911ev7553X99dcTWgIAAAAAAAAoSFGB5bXXXqt//vOf+uhHP6oLLrhAG2ywQd7z77//vk477TQ9+eSTuvHGG/Wf//mfJVksAAAAAAAAgNrmFPOi3/3ud5oyZYp+8IMfDAkrJWnGjBm65pprNGnSJN11111jXiQAAAAAAACA+lBUYLl06VLttttuSiQSI17T0tKiWbNm6f333y96cQAAAAAAAADqS1GB5SabbKJ33nlnvdctXbpUU6dOLeYtAAAAAAAAANShogLLo446SgsWLNDtt98+4jUPPfSQnnvuOf37v/970YsDAGAiRNbqvaXd+sc7q/Te0m5F1pZ7SQAAAABQtwoaunPnnXfmfRyLxbTlllvqO9/5ju6//3598pOf1MYbb6x4PK4lS5boscce0z333KNdd91VO++887gsHACAUnjt3VX64/Pva9mqXoWR5DrS5EmNmrPzDG218aRyLw8AAAAA6o6xdv3bSLbddlsZY/Iey33Z+p576aWXxrrOsgvDSCtWrC3oWs9z1NHRrJUr1yoIonFeWWkYI3X3+lrT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SrJYAAAAAAAAALWtqMDyjTfe0Gc/+1mtWbMmG1QaY/K+L6UPEG1rayvRUgEAAAAAAADUuqICy2uvvVZdXV3aaaed9MlPflLPPvusHnzwQZ111llKpVJ67LHH9Nhjj2nrrbfWPffcU+IlAwAAAAAAAKhVRZ1h+eSTT6q9vV033HCDvvCFL+izn/2srLXabLPNdMwxx+jHP/6xTjzxRP3zn//UXXfdVeo1AwAAAAAAAKhRRQWWy5Yt04477qiWlhZJ0rbbbitrrV588cXsNSeffLI6Ozv1y1/+sjQrBQAAAAAAAFDzigosY7GYmpqash93dnaqublZr732WvYxz/O000476fXXXx/7KgEAAAAAAADUhaICy4022khvvPFG3mObbbaZXnrppbzHrLXq6+srfnUAAAAAAAAA6kpRgeXee++tf/7zn7rxxhuzk8F32mknvfbaa3ruueckSStWrNCzzz6r6dOnl261AAAAAAAAAGpaUYHlF7/4RU2aNEnf//73deqpp0qSjjzySFlrdcIJJ+irX/2qPv3pT6u7u1tz584t6YIBAAAAAAAA1K6iAsspU6Zo/vz52nfffTV58mRJ0jbbbKNvfvOb6u7u1oMPPqilS5dqu+2205e//OWSLhgAAAAAAABA7TI20+kukXfffVcvvPCCOjo6tOeee8pxispEK04YRlqxYm1B13qeo46OZq1cuVZBEI3zykrDGKm719eaHr/cSwHGxHWN2tubtHp1j8KwpL+9AVgH7j2gfLj/gPLh/gPKo5bvvbbmuJoSXrmXMS46O5vluoXlhCX/Gdh444218cYbl/rTAgAAAAAAAKgDY9r++Nprr+nb3/62DjzwQO26664644wzJEnf+c53dNttt6nEmzcBAAAAAAAA1Liid1j+8pe/1DnnnKNUKpV9LIrS9ecnnnhCt99+u5555hldeumlNVMLBwAAAAAAADC+ikoSn332WZ111llqaGjQGWecoV//+td5z3/ta1/TlClT9MADD+jee+8tyUIBAAAAAAAA1L6iAsvrr79exhj9+Mc/1jHHHKMPfehDec/vv//+uuWWW+S6rn7xi1+UZKEAAAAAAAAAal9RgeVzzz2n3XbbTTvttNOI12y22WaaNWuW3nzzzWLXBgAAAAAAAKDOFBVY9vb2qr29fb3XJRIJrV27tpi3AAAAAAAAAFCHigosN9poIy1YsEBhGI54je/7WrhwoWbMmFH04gAAAAAAAADUl6ICywMOOECLFi3SpZdeOuI1l156qZYuXar99tuv6MUBAAAAAAAAqC9eMS867rjj9Lvf/U433HCDHn/8cc2cOVOS9Oabb+qKK67Qo48+qgULFmjq1Kn60pe+VNIFAwAAAAAAAKhdRQWWra2tuvXWW/XNb35TTz/9tBYuXChJeuGFF/TCCy9Ikrbbbjtddtll6ujoKN1qAQAAAAAAANS0ogJLSZo6dapuvfVWvfDCC3riiSf0wQcfKAxDTZkyRbNmzdKee+5ZynUCAAAAAAAAqANFB5YZO+20k3baaadSrAUAAAAAAABAnStq6A4AAAAAAAAAjIeCdlh+4QtfKPoNjDG6+eabi349AAAAAAAAgPpRUGD51FNPjficMUbW2nU+DwAAAAAAAACFKCiwvOCCC4Z9/Oc//7mef/75EZ8HAAAAAAAAgNEoKLA85JBDhn38r3/9q55//vkRnwcAAAAAAACA0WDoDgAAAAAAAICKQWAJAAAAAAAAoGIQWAIAAAAAAACoGASWAAAAAAAAACoGgSUAAAAAAACAikFgCQAAAAAAAKBieIVcdM899wz7+DvvvLPO5zMOPvjg0awJAAAAAAAAQJ0qKLA844wzZIwZ9jlrrf77v/97na8nsAQAAAAAAABQiIICy1mzZo33OgAAAAAAAACgsMDy1ltvHe91AAAAAAAAAABDdwAAAAAAAABUDgJLAAAAAAAAABWDwBIAAAAAAABAxSCwBAAAAAAAAFAxCCwBAAAAAAAAVAwCSwAAAAAAAAAVg8ASAAAAAAAAQMUgsAQAAAAAAABQMbxiX3jbbbfp5z//ud5++22lUqkRrzPGaOHChcW+DQAAAAAAAIA6UlRgefvtt+u73/2urLXrvbaQawAAAAAAAABAKjKwnD9/vhzH0VlnnaUDDjhAbW1tMsaUem0AAAAAAAAA6kxRgeW7776rvfbaS//+7/9e6vUAAAAAAAAAqGNFDd2ZOnUqVW8AAAAAAAAAJVdUYHnYYYfp2Wef1WuvvVbq9QAAAAAAAACoY0VVwr/0pS/plVde0ZFHHqnPf/7z2mabbdTe3j7i9bNnzy56gQAAAAAAAADqR1GBZTKZVDKZVFdXl6655pp1XmuM0cKFC4taHAAAAAAAAID6UlRgeckll+jBBx+UMUZbbrmlOjs7S70uAAAAAAAAAHWoqMDygQceUEtLi2655RZtv/32pV4TAAAAAAAAgDpV1NCdrq4uzZo1i7ASAAAAAAAAQEkVFVhuueWWWrVqVYmXAgAAAAAAAKDeFRVYfuELX9Bzzz2nP/7xjyVeDgAAAAAAAIB6VtQZljvuuKPmzJmjL3/5y5ozZ4523nlntbe3y/OG/3SHHXbYmBYJAAAAAAAAoD4UFVh+8pOflDFG1lo98sgj+sMf/rDO6wksAQAAAAAAABSiqMDy4IMPljGm1GsBAAAAAAAAUOeKCiwvvPDCUq9jRNdee60ee+wx3XrrrdnHlixZogsvvFB//vOf5bqu9t57b/3v//6vOjs7s9fMnz9fN9xwg5YuXaoddthBZ555JlPNAQAAAAAAgApX1NCdiTJ//nxdfvnleY+lUikde+yxev/993XLLbfouuuu08svv6zTTz89e83dd9+t73//+zr11FN11113aeONN9YXv/hFrVixYoJ/BAAAAAAAAABGo6gdlo8//viorp89e/aorl+8eLHOPvtsPfnkk9p8883znvv1r3+t9957Tw8++KAmT54sSTrjjDN0zjnnqLu7Wy0tLbrmmmt01FFH6aCDDpIknX/++frYxz6mO+64QyeccMKo1gIAAAAAAABg4hQVWH7xi18c1RmWL7300qg+/4IFCxSLxXTvvffqqquu0nvvvZd97rHHHtNee+2VDSslaZ999tFDDz0kSVq+fLnefPPNvJDU8zzNnDlTTz/99JgCS88rbEOq6zp531YL13XkupxNiuqWf/9F5V0MUEe494Dy4f4Dyof7DyiPWr73XNcUnD/VsqICy1mzZg37eBRF6urq0htvvKEgCLTffvtpyy23HPXnnzt3rubOnTvsc2+88YZmzpypq666Svfcc4+CINDee++tb33rW2pra9OiRYskSdOnT8973ZQpU/Tyyy+Pei0ZjmPU0dE8qte0tTUW/X7lYGJJObGifkkAFaelpaHcSwDqUu69Z4yU/mcwI+NIRkZRFCmy5VodUNv42geUD/cfUB61eO+1NMbU3pIo9zLKrqh0KncAznDWrFmjs846S48//rj++7//u6iFjaS7u1v33HOPZs+erUsuuUSrV6/WBRdcoC9/+cu69dZb1dvbK0mKx+N5r0skEkomk0W/bxRZdXX1FHSt6zpqa2tUV1evwrB6kv7uXl9relLlXgYwJq7rqKWlQd3dfVV1/wHVxkiSMelQ0kgx11Vra4P6kr6MtXIdR45j5DqS65hsMyOwVqkwUioVKhmEiiLJWhJMYCz42geUD/cfUB61fO/ZIK7ID8q9jHHR1tZYcBt5XLbTtba26vvf/77+3//7f7rssst0ySWXlOxze56npqYmXXLJJYrFYpKk9vZ2HX744XrxxRfV0JBO11Op/OAtmUyqsXFsOx6DYHQ3QRhGo35NuRiTXm8Y8pdGVLv0PcevZ2Ds0mGkkVH623T4mD4+xHWMHMdJf2ukeNzTpElNWrVqrXx/4GufjaQgyv9aGHMcxRtdNdtIqSBSyo+U9EOFkVXE9kugCHztA8qH+w8oj9q998LQVk2WNJ7Grf8bj8e122676a9//WtJP++0adNkrc2GlZK09dZbS5Leffdd7bnnnpKkJUuWaKuttspes2TJEk2dOrWkawEAoFY4xqR3RLpGntsfRDrpYDLz/XR0mf4D4eBNkZldkoVulkxfbxT3XCVirloUU5DZeemHCkKryNqCPx8AAACA2jGup3guW7YsW9EulVmzZunll19WX19f9rFXX31VkrTZZptpgw020BZbbKEnn3wy+3wQBHrmmWdGPHsTAIB64zjpYLIh7qqtKaaOtoQ2aE+os7VBbU0xNSU8NcRcxVxHjjGSTYeM1hYeShbKWklW8hxHzY0xbdDeqA3aG9TeHFdjwpXnOhrFrD8AAACg6kTW6r2l3Xr9/dV6e/EaRXX+L/fjssMyDEP97Gc/03PPPacdd9yxpJ/73//93zV//nx94xvf0H/913+pq6tL3/72t7Xnnnvqwx/+sCTp2GOP1Xe/+11tttlm2nHHHXXdddepr69Phx12WEnXAgBAtXAcI8cYea5RPOYq5jmKuUbGOJIGdjKW+zxJ2x+MOsaoIe6pMRFTZCP5QaSkHylFdRwAAAA15rV3V+mPz7+v5at7tWFHs9b0pNTZmtC8vTbTdpt3lnt5ZVFUYDlnzpwRnwvDUF1dXUqlUjLG6Oijjy52bcPq7OzU/PnzdcEFF+jwww9XPB7Xxz72MZ1xxhnZa4444gitWbNGl19+uVatWqUddthBN954ozo76/P/ZABAdUtP2zYDZ0qanAncmTMmlfmfgWszL3Ydo5jnyHONnAoLKNfHWiuTUx23iskPIvk+1XEAAABUv9feXaW7H3tDST9Uc4On5kZPKT/Qu0vX6uYHXtF//Ns2dRlaGlvE31S23Xbb9V4zbdo0HXfccTrqqKOKWlilCcNIK1asLehaz3PU0dGslSvXVs1BqcZkpoT75V4KMCaua9Te3qTVq3tq7vBl1La8MFKDBtxkzpQ0Rk7/4yN/9R76xESEeRP9tS/z8+UHkfwgVDIVyg+twigivETd4WsfUD7cf0B51Mq9F1mrG3/7khat6FFbU1yOYzS1o0lrelNKpkKt6k5p4w2b9fXP7pI+pqnKdXY2j++U8IcffnjE5xzHUVNTk9rb24v51AAA1KRMEKn+3ZFO/85H13XkOUZOZvK2Wf+AG+rQA9Vx1zFyc6rjmanjqVSo0FIdBwAAQOX6YNlaLVvVq6aEJzMokDTGqLnB06IVPXp78RptPq2tTKssj6ICy4022qjU6wAAoOpld0kq/W16N2Tu1O3Mt7m7JIepM1vJDrNTEiPLVMcTnquGmCvbRHUcAAAAla2nL1AYacRdh57nqKcvUHcdtmHHPHRn+fLlSiaT67xmxowZY30bAADKLnNOZF51280NJPt3TfbvlEz/Kym7JCda5uc65jqKe45amuLyg0ipIFQqFSoVRooiwksAAACUV1ODJ9dJH0PoeO6Q54MgkusatTTFyrC68ioqsAyCQJdcconuvPNOdXd3r/NaY4wWLlxY1OIAANXBmPQU6loIgYYMuHEkzxk4R9J1jFzjyHHVf45MOpQc7sdd6QNt6kFudbwx7qkptzqeCpXyI6rjAAAAKIvpk5s1eVKjFq3oVZvr5NXCrbVa2xdo4w2btenU1jKusjyKCiyvu+463XjjjZKkxsZGtba2DunaAwBqn+MYxVyjxoSnRNxT0g/V2+crFVT24JMhA25ckw4lHSMnJ5jMnCc5UnU78ziqx5DquJX8MFKqvzoeUh0HAADABHGM0ZydZ+jux95QV4+v5gZXkaxSfnrgTkPc1by9NquJgTujVVRg+atf/UrxeFxXX3219t5771KvCQBQ4VzHKO45amyIKREbmFjdEHPVEHfVl0oHl36QDn8mWu6AG6c/mMzdJem4Rp7jyHHyd0lKVLfryZDqeGNMfmjlUx0HAADABNlq40k6ZO8t9Mfn39fy1b1a2xso6UfaeMNmzdtrM223eWe5l1gWRQWWixcv1kc+8hHCSgCoI8akB8U0xF01Jjx5riM73E40OzHB5ZBdkv2DbFx3YPq2Y9Y/4IZdkpAGwkvPMfKGqY4n/UgR1XEAAACMg602nqQtNmrXB8vWKhF31dYU18ZTWupyZ2VGUYHlpptuut6zKwEAtcExRp6XPv+vIeHKMSZ7LuA69QeXjXFXfX6onr5Afn/oU4jBA24cMxBEZgbceO5AbduwSxIlVFB1PGKWOwAAAErDMUYbbdiitua4mhJjnpFd9Yr6GTj66KN19tln65lnntHMmTNLvSYAQAVwsrVvT4mYm44D7dAwcH2sVTr0ac0JLoN01Ta7S1Lpbx1H8nJ2STpOJpxcz4AbKxEdYbwMVx0PQqtUECqZCuVTHQcAAABKqqjA8vDDD9fbb7+tY445RgceeKC22WYbtbe3j3j9YYcdVvQCAQATy3VNemdkwlPMc9M7Ke3YS9O5wWXSDxWEVk5m6raz/l2SVLdRCTK/LgdPHU/6kXyf6jgAAABQCkUFlitWrNBf//pXBUGg++67T/fdd986ryewBIDKlns+ZVOD13/mo11/7bsI1kpxz1V88FcgdkmiCmWq45njDwZXx4PQylIdBwAAAEalqMDywgsv1IIFC9TY2KhZs2aps7NTpo4PAgWAamWM5HmOmkZ7PiWAIUasjveHl1THAQAAgMIUFVg++uij6uzs1N13362pU6eWek0AgHHmOEYxz1FjwlNDzJUxxZ1PCWB4edXxhKemhpjCqH/quB8q5afDy0KHUAEAAAD1pKjAsq+vT//6r/9KWAkAVcLkTNuOu44aG2JKxJxsqEJmAowva60cM7Q6nsyZOk51HAAAAEgrKrDcZptt9P7775d6LQCAMTBGMjLZcNJ10udSeq6R4zrZ4TYD51OWe8VAfRpcHW9tjCkI0lPH+/xQAdVxAAAA1DmnmBedcMIJWrhwoX7605+Wej0AgHUwRnJMOnj0XEfxmKPGhKvWppjam+PqaEtog/YGTW5vUGdbo9pb4mpujKkh5irmOv1nVJKCAJUicxSD66ar452tDdqgrVHtLQk1JTx5/fctAAAAUE+K2mHpOI7mzJmjc889Vz/72c+0yy67qL29XZ439NMZY3TKKaeMeaEAUC9y69tGRq5r5PXvjszdKekYI8cx/buwhu7GIpgEqk+6Oq7+6rinyEbyg4HBPWFkFUXc2wAAAKhtRQWWJ5xwgkz/Lp1XX31Vr7766pBrMs8TWAJAvsHVbWOUDiS9/Nq246h/Z5XRcIGkJIILoIZZa2VkFPeMEjFHrUpXx5NBOrykOg4AAIBaVVRg+ZWvfEWGehIAjGjILslhzpNM75BU/5mS0vC7JNOPA6hv2anjrlGT66m5IaYwSp97mUqFSgVMHQcAAEDtKCqw/OpXv1rqdQBAVckEkTJDz5VMV7fza9umf5ekNHQiN7skAYwW1XEAAADUsqICSwCoB9ldkkp/m94NmRNKOplv171LUlay7JIEME6ojgMAAKDWFBRYXnHFFTLG6Atf+IImTZqkK664YlRvcuqppxa1OACYKE7/bkjXzQ0kTd6Am/RRGOySBFC5cqvjzV6mOh4pFURKpkL5VMcBAABQBQoKLH/0ox/JGKNPfepTmjRpUvbjdU2gzR26Q2AJoNIYkw4pPddRwnMUi7mKuU42lBzutzembgOoJpld344x2eq4tZFSVMcBAABQ4QoKLDNDdjo6OvI+BoBqkal3u45RIuYqFnMUcx25jqPcgJJQsj5F1urtxWvU3eOrpSmmTae29k9oB2pH+ve3gep4i2IKgszuy0BBf3jJb4MAAAAot4ICy8FDdhi6A6AaGJM+WzLmGcVjruKeK89Nh1AElMh46c0V+s0Tb2nRih6FoZXrGk3rbNK8vTbTdpt3lnt5wLjI/NbnuY5injNQHe/feekHluo4AAAAysYp5kULFy4s6LowDPXDH/6wmLcAgKIZI8Vjrtqb45rcntCklgY1xj25jpG1Q8+fRP166c0VuvmBV/Tu0m4lYq7aWuJKxFy9u3Stbn7gFb305opyLxEYd+nfF/ur43FPk1oa0r93tsbV0hhTzHPkOOw4BgAAwMQpKrD87Gc/q+uvv36d1/zzn//U4YcfrquuuqqohQHAaBilh0w0NcTU0ZrQBm0Naoh7ktZ93i7qV2StfvPEW+pLBZrUklA85sox6d24k1ri6kuF+s0Tb7HDDHVnoDruqrUppg3aG9TZllBbU0yJWHooGScmAAAAYDwVFVhK0qWXXqqjjz5aixYtynvcWqvrr79ehx56qBYuXKjNNttszIsEgJEYI8U8R63NcW3Q1qhJLXE1JmLlXhaqwNuL12jRih41N8SGnMtsjFFzg6dFK3r09uI1ZVohUH7WSrKS5zhqboxpg/ZGbdDeoPbmuBoTrjzXIbwEAABAyRUVWN51113adttt9fTTT+uggw7Sr3/9a0nSm2++qSOPPFKXXnqpoijSiSeeqHvvvbekCwYAKT3huyHualL/bsrmBk+Ooe6NwnX3+ApDK88b/kuh5zkKQ6vuHn+CVwZUJmulKMqvjm/QnlBHa0LNVMcBAABQQgUN3Rls66231h133KEf/vCH+vGPf6xvfetbuuuuu/Tcc8+pt7dXu+yyi77zne/oX/7lX0q9XgB1zDEmG1Q2xj15npOtexNUYrRammJyXaMgiBSPuUOeD4JIrmvU0sSOXWA41lqZ/up4IubKKiY/iOT3D+4JwvTQHn5/BgAAwGgVFVhKkud5+q//+i/tscceOv744/X4449Lkg488EBdeumlJVsggPrmOEauY5SIuUrEXcX664eZIRFAsTad2qppnU16d+laxTwnrxZurdXavkAbb9isTae2lnGVQHXI/HYccx3FPUctTfF0eBmESqZC+aFVGEWElwAAAChI0WdYStK9996r0047TWEYqqOjQ5L0u9/9TqeddppWrlxZkgUCqC9G6g8oHbU1xdTZmtDk9ga1NsUUc9O/ZfEXXpSCY4zm7bWZGuKuVnWnlPJDRdYq5Yda1Z1SQ9zVvL02k8MBfcCoZKrjrtNfHW9NV8cnZarjLtVxAAAArFtRgeU777yjL33pSzr99NO1bNkyHX744XrwwQd10003afr06br33ns1b9483XfffaVeL4AaYZQemJP5z3XTVe+25rg62hrU2dag5saYPNfp301Z7hWjFm23eaf+49+20cYbNivph+rqTinph9p4w2b9x79to+027yz3EoGql6mOJzxXbU0xbTCpQR2tTB0HAADAyIwtolO5yy67qK+vT1OnTtV5552nffbZJ/vc2rVrdeGFF+qOO+6QMUZ77723rr/++pIuuhzCMNKKFWsLutbzHHV0NGvlyrUKgmicV1Yaxkjdvb7WMFyi7gz+S6KRyXwn57H875hBTw6Ej+ln0h/3/wW0/9vM48pck/0fyTGS57pyHTPmmnc13n8ov8havb14jbp7fLU0xbTp1FZ2Vo4S9x5GK/N1ww8ipYJQqVSoVBgpijj3crRc16i9vUmrV/coDPnJAyYS9x9QHrV877U1x9WUKPoEx4rW2dks1y1s72RRPwN9fX065JBD9D//8z9qbc0/26u5uVnnnnuuDjjgAP3v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q1auXKkzZ84U2X0AAIB3IbAEAAD3HJPJpMcff1zXr1/X/v373bZZv369jEajnnrqqVyvs2fPHo0cOVJt2rRReHi4oqKi1LVrV3300Ucym82udlu2bFFYWJgiIyN1/vz5bNc4deqUIiIiFB4erv/5n/+R5P4Zls5j27Zt07Zt29SrVy89/PDDiomJ0euvv65r165Jkr744gt16dJFjRs3VufOnTV//nxZLBbXde703MN+/fopLCxMu3fvdh0bO3aswsLCdPLkSX311Vfq1q2bIiMj1bp1a02ePFnp6emy2WxauHChOnXqpMaNG+vPf/6zli1bJofDkevnl9Uvv/wiSTIYDLm2+ctf/qJu3bqpRo0armPO5ya+/fbb+umnnzRo0CBFRUWpRYsWGjFihI4ePer2WhkZGVq4cKGeeeYZNW7cWI888oj69++vrVu35nr/3bt3a8iQIWrevLkiIiL05JNPau7cuUpPT3fbfs+ePRo0aJCaNm2q6OhojR49WklJSfn5OLJZvHixrFarevbsma/2ycnJ6tSpk8LCwvS3v/3Ndbxdu3Zq3ry5MjIy9MEHH6hdu3aKiIhQ586d9Y9//EOSlJKSokmTJqlVq1Zq0qSJevXqpX379rm9z/bt22UymRQTE5PjtTNnzmjkyJFq3ry5GjdurO7du2vNmjU52rVr107R0dE6efKkunfvrvDwcD3++ONKSEhwtenZs6dsNpsWL16cr/cPAABKPgJLAABwT3ryyScluS8Lt9ls2rhxo6Kjo3Nd0fbpp59q4MCB2rp1q2rVqqV27dqpfv36OnHihGbPnq1XXnnF1bZ9+/bq1q2bMjIy9Oabb7qOWywWxcXFyWw266WXXlJ4ePgd+/3f//3fGjZsmG7duqWWLVtKylyd+MILL2jGjBmaOHGiypYtq5iYGP3888+aM2eOZsyYUZCPJlczZ87U2LFjFRAQoJYtWyo9PV3//Oc/FRcXp7i4OM2ZM0fVq1dXkyZNdObMGb311ltaunRpvq7doEEDSdLkyZOVmJjots1jjz2madOmub67rE6fPq3nn39ex44dU+vWrVW9enVt2bJFvXv31vbt27O1TUtLU9++fTVjxgxduXJFMTExioyMVGJiooYPH665c+fmuP4nn3yiQYMGac+ePapTp44ee+wxpaWlad68eXr++edzPGPxiy++0KBBg7R37141aNBAzZs3186dO9WrV69cA053zGaz1q1bpypVqigiIuKO7a9fv67Y2FidP39eAwYM0NixY7O9brPZFBsbq0WLFqlu3bpq0qSJzp8/r6lTp2r+/Pnq3bu3vv32W0VEROiBBx7Qjz/+qNjYWLfB7/bt29W0aVMFBQVlO37x4kX17NlTCQkJio6OVv369XX06FHFxcXps88+y3Edi8WioUOHKjU1VW3btpXBYHD9PEhSRESEQkND9a9//SvbLwIAAEDp5evpDgAAAHhCmzZtFBwcrE2bNmnSpEny8fFxvbZnzx5du3ZNf/7zn92em5ycrPfff1/ly5fX8uXL9eCDD7peS0hI0IABA7Rp0yZdunRJ1apVkySNHz9ee/bs0e7du7V69Wp169ZN8+fP17FjxxQdHa0hQ4bkq9/btm3TG2+8ob59+0qSLl++rM6dO+vo0aM6fvy4lixZoubNm0uSduzYoSFDhmjlypUaM2aMjMa7+131d999pw8//FDt27eXJB09elTPPvusNm3apLJly2rVqlWuzVc+//xzvfnmm1qxYoX69+9/x2sPHz5c3333nU6fPq3evXurevXqiomJUdOmTdW0aVPVrFkzz/P37dunqKgoLViwQOXLl5ckLV++XJMmTdL48eP17bffqkyZMpKkKVOm6PDhw3r66ac1efJkV+B27tw5xcbGat68eXrkkUdcgfDevXs1c+ZMVatWTQsWLHCFaWazWZMmTdKqVas0efJkVzD8f//3f5oyZYr8/Py0aNEi1/dx7do1DR48WJcvX873Z56YmKj09HRXkJeXtLQ0DR48WKdOnVK/fv3017/+NUebGzdu6Pz581q3bp1q164tSVqyZIneffddzZkzRxEREVq2bJkqVKggSXrllVe0fv16ffnll2rUqJHrOhcuXNCZM2f0l7/8Jcc9kpOT1bFjR82YMUMBAQGSpAULFmjmzJlavHix+vTpk639rVu3FBISouXLl8tkMslut+f4WW3atKnWr1+vhIQE1/cCAABKL1ZYAgCAe5LJZFL79u117dq1HGXhGzZskK+vrzp37uz23KtXr6pjx44aMWJEtrBSkmtFmZS50sypXLlymjJliiRp+vTp2rVrlxYuXKiyZctq+vTp+Q4TH3roIVdYKWU+469p06aSMleNOsMxSXr00UcVFBSktLQ0V8n13XjsscdcYaUkNWrUyPX++/Tpk22naOdnd3sJfG7q16+vzz//XFFRUZKkpKQkrVq1SuPGjVOHDh30xBNPKD4+PtcVdr6+vpo5c6YrrJSkXr16qW3btrpy5Yo2bdokKTPgXbt2rapUqZItrJSk2rVru1YkxsfHu44vWrTItYt51pV/JpNJkyZNUuXKlbVhwwZXEPnVV1/p1q1bev7557N9HyEhIa6fgfxy/mxmva87N2/e1NChQ3X06FH16dNHEyZMyLVtbGysK6yUpC5durj+efTo0a6wUpI6duwoKef3uGPHDkly+/xKHx8fTZ482RVWStLAgQNlNBp18eJFpaWl5Tjnueeek8lkkiS3Y8H5/nMrTwcAAKULgSUAALhnuSsLN5vN2rx5s1q2bKmKFSu6Pa9hw4aaNWuWBg4c6Dpms9l07tw5rVu3zlUenPXZkVLmqs6ePXvql19+0ZAhQ2S1WvXGG29keybjnTRu3DjHMefmPLeHWgaDQcHBwZIyn9l4t/K6d1hYWLbjZcuWlaQClfCGhYVp+fLlWrNmjUaPHq0WLVooMDBQknT27FlNnz5dPXr00PXr13OcGxUVperVq+c47gzcnEFXQkKCbDabIiIicpQyS1KrVq1kNBr1ww8/yGazyWazuZ6nmDV8dAoICFB0dHS2dgcOHJAkt88JbdSoke677758fR5S5mpNSXn+jFitVr344ov64YcfVK9ePU2cODHPa97+PWbd3On2n6Fy5cpJyvk9bt++XQ888IDq1KmT4/q1a9fOMXb8/f1d97lx40aOc+4UyN5///2S/vN5AACA0o2ScAAAcM9q1aqVypUrp02bNmnixIny8fHR999/r5SUlFzLwZ1sNpu++eYbrV+/XqdOnVJSUpJrx3Fn6a67DWfGjh2rLVu26Nq1a2rRooW6du1aoD5nXUHo5Lxf1pVxt79WGApy77u5b4MGDdSgQQMNGzZMFotFhw4d0rp16/Tll1/qxIkTevPNN/XBBx9kO6dWrVpur+UsyU9OTpYk16Y3W7duzRGyZnXz5k2lpKTI4XDo5s2bkqRmzZrl2W9nmOa8V9WqVd22u//++/MdvDlXxjoD4NzafP/99/L19dXp06e1efNmdejQIdf2eX1Xt3/H7r7HjIwM7du3Tz169HB7fWfIeTvnYxdsNluO19z9bGXlDN4LY6UwAADwfgSWAADgnmUymdShQwetWrVKBw4cUExMjDZs2CB/f/88A5/09HQNGDBAhw8fVkBAgMLDw9WqVSvVr19fjzzyiKZMmeJaZXe7o0ePulYI/vjjjzpz5kyOsvK8+PoW7X++uQuTnPz8/IrknikpKTp79qzKli2runXr5rhndHS0oqOj1aZNG40YMUIbN25URkaG/P39Xe2yPoM0K2do7HzdbrdLkurVq6c//elPd+yb8/MwmUy5PiLAyRma3imsza2v7jhD8Ly+F0nq3r27WrdurVdeeUVvvfWWYmJiXCHf7e72Z2jv3r26detWrjvN/5Gw+k6PRHB+j87PAwAAlG4ElgAA4J72xBNPaNWqVfrmm28UFRWlrVu3qm3btrmGPZK0ePFiHT58WC1atNCcOXNyrChLTU11e15aWprGjRsnh8OhJ598Ul9//bXGjh2rzz//vEAh1t1wBkPO4O527sp1i9rOnTv16quvqk2bNlq4cGGu7dq3b6+KFSvq+vXrSk1NVZUqVVyv5baRjXNFpXOlpfOcP/3pT/naPd1sNsvPz09Wq1XvvPOO6zmLealatapOnTqln3/+WfXq1cvxunMFZn44Vx66K4N3qlSpkqZOnSqj0aivvvpKO3fu1PTp0/X222/n+z4FsWPHDgUEBCgmJqZIru/OtWvXJN15JSYAACgdeIYlAAC4p7Vs2VIVKlTQ5s2b9d133+m3337TU089lec5P/74oySpb9++OcLKy5cv63//938l5QwFp02bpp9//llPP/20Zs6cqYcffliHDh3KtsFLUXM+tzElJSXHMzZTU1N15syZYuuLU+PGjWU0GrV7927XZ+fO1atXdePGDVWsWFGVK1fO9tqBAwfcbubi3GzHuRrQuUHRgQMHXKXeWR05ckSdOnXSSy+9JIfDIZPJpIcfflh2u107d+7M0d7hcKhfv37q1auXDh8+LElq0aJFtntndf78eZ09ezbX93g75+Y4ee0s7uvr6wqiJ02apICAAK1YscL1TM3CtmPHDjVr1izbCtei5gx53T0zEwAAlD4ElgAA4J7m5+enDh066MqVK5o9e7aCgoL0+OOP53mOc/OQbdu2ZXtOZVJSkl588UVX2WrWjW527typFStWqEKFCho/fryMRqPefvtt+fn5ac6cOTp58mQRvLucKlSooGrVqslsNmv58uWu4xkZGZo4caJHSm5r1qypbt26yWq1avDgwW6DwZ9//lkvv/yyrFarYmNjc5Qd//bbb5o4cWK2zWH++c9/6vvvv1edOnVcgWXNmjXVvn17Xbp0SePHj88Wcv7yyy8aP368zp8/r/vuu891D+fmSpMnT9axY8dc7e12u2bPnq39+/fr4sWLro1j/uu//kvly5fXl19+qW+//dbVPusK2/xy7pp+8ODBfLWvWbOmRowYIYfDoQkTJhRo06P8OHPmjP7973+73R28KDl/SdCkSZNivS8AAPAMSsIBAMA978knn9TKlSt15swZdenSRQEBAXm279u3r77++mutXLlSiYmJql+/vq5du6Yff/xRDodDderU0dmzZ3X16lVJmSsXx48fL0kaN25ctp21Bw8erI8//lhjxozRihUriuw5kVm98MILmjJliqZMmaL169ercuXKSkxMlMViUbt27bR169Yi78Pt3nrrLaWkpGjLli164YUXdN999yksLEwBAQFKSkrS0aNHZbPZ1KNHDw0ZMiTH+SEhIdq4caMSExMVGRmpCxcu6NixY6pQoYKmT5+erZR78uTJOn/+vNavX69du3YpIiJCBoNBCQkJSk9PV5MmTTR69GhX+w4dOig2NlaLFy9Wz5491ahRI4WGhur48eO6cOGCAgMDNWfOHNc9KlWqpHfffVejRo3SyJEjFRUVpdDQUO3fv18Oh0O1a9fWuXPn8vW5NGvWTMHBwUpMTJTNZsvXowNiY2O1du1anT59WvPnz8/2Xu7Wjh07JKlYA0u73a7ExEQFBwe73akdAACUPqywBAAA97yYmBhVrFhRku64O7iUWcK8bNkyPfroo0pNTdXWrVt1/vx5dejQQcuXL9crr7wiKXMFpiRNnTpVly9fVuvWrdWtW7ds1xoxYoRq166tY8eO6aOPPircN5aLfv36adq0aQoPD9exY8d04MABNWvWTKtWrcqx6U1xMZlM+vDDD/XJJ5+oa9euMplMSkhI0JYtW3TlyhU98cQT+vTTTzV16lS3m7rUrl1bf//731WjRg1t375dV69e1bPPPquVK1cqMjIyW9tKlSppxYoVevnllxUaGqoDBw7o4MGDqlOnjv7617/q008/VWBgYLZzxowZo48++kgxMTE6d+6ctm/fLqPRqB49emjNmjU5Vv61b99ey5YtU/v27XX27Fnt3LlTERERWrZsmUJDQ/P9uQQEBKhLly5KS0vTrl278nWOn5+f3nrrLRkMBsXHx+v48eP5vt+dbN++XXXq1FHNmjUL7Zp3snfvXqWkpOTrlwkAAKB0MDgKUpMCAAAAeJF9+/apf//+atKkiT7//HNPd6dIJCUlqVOnTmrTpo0+/PBDT3en2I0cOVJbt27Vxo0bVb16dU93BwAAFANWWAIAAABerHr16urZs6e+++47Xbx40dPdKVZJSUnasmWLevbsSVgJAMA9hMASAAAA8HKjRo1SlSpVNGPGDE93pVi9//77qly5skaNGuXprgAAgGJEYAkAAAB4ufLly2vatGn69ttv9cMPP3i6O8Xi4MGD2rBhg/72t7+pfPnynu4OAAAoRjzDEgAAAAAAAIDXYIUlAAAAAAAAAK9BYAkAAAAAAADAaxBYAgAAAAAAAPAaBJYAAAAAAAAAvAaBJQAAAAAAAACvQWAJAAAAAAAAwGsQWAIAAAAAAADwGgSWAAAAAAAAALzG/wNBr69pPcgY7wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Setting Figure Size in Seaborn\n", "sns.set(rc={'figure.figsize':(16,8)})\n", "\n", "# Setting Seaborn plot style\n", "sns.set_style(\"darkgrid\")\n", "\n", "#Plotting our data\n", "plot = sns.regplot(data=df_runs_cleaned, x=\"max_speed\", y=\"max_heartrate\")\n", "\n", "#Renaming x and y labels\n", "plot.set_ylabel(\"Maximum Heart Rate (bpm)\", fontsize = 16)\n", "plot.set_xlabel(\"Maximum Speed (km/hr)\", fontsize = 16)\n" ] }, { "cell_type": "markdown", "id": "43467c5f", "metadata": {}, "source": [ "As we can see from the scatterplot above, our regression line hints that there might be a correlation between maximum speed and maximum heart rate. Let's compute $R^2$ just to see exactly how correlated.\n", "\n", "We'll follow [this documentation](https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.stats.linregress.html) and perform a linear regression to obtain the coefficient of determination." ] }, { "cell_type": "code", "execution_count": 51, "id": "29b76987", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Slope: -1.57\n", "Coefficient of determination: 0.0154\n", "p-value: 0.842\n" ] } ], "source": [ "from scipy import stats\n", "\n", "slope, intercept, r_value, p_value, std_err = stats.linregress(\n", " df_runs_cleaned.get('max_speed'), df_runs_cleaned.get('max_heartrate'))\n", "\n", "print(f'Slope: {slope:.3g}')\n", "print(f'Coefficient of determination: {r_value**2:.3g}')\n", "print(f'p-value: {p_value:.3g}')" ] }, { "cell_type": "markdown", "id": "23cb6fee", "metadata": {}, "source": [ "As we can see that the p-value is slightly over 30% which means that there is not enough evidence to convincingly conclude that that there is a correlation between heart rate and speed. Let's try to locate the outliers in this data and find points that might be skewing our dataset and preventing us from gathering enough evidence to prove our correlation." ] }, { "cell_type": "markdown", "id": "dbd9a666", "metadata": {}, "source": [ "## 9.0 Outlier Detection" ] }, { "cell_type": "markdown", "id": "511819b5", "metadata": {}, "source": [ "Before finding the individual outlier values, it would be interesting to see the summary of our max_speed and max_heartrate parameters. It will give us a clear idea of what values are typical and which values can be considered atypical based on the data that we recieved from Strava." ] }, { "cell_type": "code", "execution_count": 52, "id": "5b5df96f", "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", "
max_speedmax_heartrate
count5.0000005.00000
mean13.752000170.40000
std0.99895912.62141
min12.600000156.00000
25%13.320000159.00000
50%13.320000174.00000
75%14.400000177.00000
max15.120000186.00000
\n", "
" ], "text/plain": [ " max_speed max_heartrate\n", "count 5.000000 5.00000\n", "mean 13.752000 170.40000\n", "std 0.998959 12.62141\n", "min 12.600000 156.00000\n", "25% 13.320000 159.00000\n", "50% 13.320000 174.00000\n", "75% 14.400000 177.00000\n", "max 15.120000 186.00000" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_runs_cleaned_summary = df_runs_cleaned.describe().get(\n", " ['max_speed','max_heartrate'])\n", "df_runs_cleaned_summary" ] }, { "cell_type": "markdown", "id": "dc81bcf2", "metadata": {}, "source": [ "To locate the outliers we will be using a supervised as well as unsupervised algorithm called the Elliptic Envelope. In statistical studies, Elliptic Envelope created an imaginary elliptical area around a given dataset where values inside that imaginary area is considered to be normal data, and anything else is assumed to be outliers. It assumes that the given Data follows a gaussian distribution.\n", "\n", "\"The main idea is to define the shape of the data and anomalies are those observations that lie far outside the shape. First a robust estimate of covariance of data is fitted into an ellipse around the central mode. Then, the Mahalanobis distance that is obtained from this estimate is used to define the threshold for determining outliers or anomalies.\" [(S. Shriram and E. Sivasankar ,2019, pp. 221-225)](https://ieeexplore.ieee.org/document/9004325)" ] }, { "cell_type": "code", "execution_count": 53, "id": "78697539", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 4\n", "-1 1\n", "Name: outlier, dtype: int64\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/saarth/opt/anaconda3/lib/python3.9/site-packages/sklearn/base.py:441: UserWarning: X does not have valid feature names, but EllipticEnvelope was fitted with feature names\n", " warnings.warn(\n", "/Users/saarth/opt/anaconda3/lib/python3.9/site-packages/sklearn/base.py:441: UserWarning: X does not have valid feature names, but EllipticEnvelope was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "from sklearn.covariance import EllipticEnvelope\n", "\n", "#create the model, set the contamination as 0.02\n", "EE_model = EllipticEnvelope(contamination = 0.02)\n", "\n", "#implement the model on the data\n", "outliers = EE_model.fit_predict(df_runs_cleaned[[\"max_speed\", \"max_heartrate\"]])\n", "\n", "#extract the labels\n", "df_runs_cleaned[\"outlier\"] = outliers\n", "\n", "#change the labels\n", "# We use -1 to mark an outlier and +1 for an inliner\n", "df_runs_cleaned[\"outlier\"] = df_runs_cleaned[\"outlier\"].apply(\n", " lambda x: str(-1) if x == -1 else str(1))\n", "\n", "#extract the score\n", "df_runs_cleaned[\"EE_scores\"] = EE_model.score_samples(\n", " df_runs_cleaned[[\"max_speed\", \"max_heartrate\"]])\n", "\n", "#print the value counts for inlier and outliers\n", "print(df_runs_cleaned[\"outlier\"].value_counts())" ] }, { "cell_type": "markdown", "id": "19ce0fd8", "metadata": {}, "source": [ "Below we will replot the df_runs_cleaned dataframe to see how the two new columns were applied to it!" ] }, { "cell_type": "code", "execution_count": 54, "id": "f292c728", "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", "
max_speedmax_heartrateoutlierEE_scores
013.32177.01-0.236364
114.40186.01-2.624880
215.12159.0-1-15.545455
313.32156.01-2.982775
412.60174.01-2.155981
\n", "
" ], "text/plain": [ " max_speed max_heartrate outlier EE_scores\n", "0 13.32 177.0 1 -0.236364\n", "1 14.40 186.0 1 -2.624880\n", "2 15.12 159.0 -1 -15.545455\n", "3 13.32 156.0 1 -2.982775\n", "4 12.60 174.0 1 -2.155981" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_runs_cleaned" ] }, { "cell_type": "markdown", "id": "01de6e15", "metadata": {}, "source": [ "Now that we have labeled the outliers as -1, let's try to see which values of max heartrate and max speed are being considered as outliers by our Elliptic Envelope Algorithm." ] }, { "cell_type": "code", "execution_count": 55, "id": "62439842", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
max_heartratemax_speed
2159.015.12
\n", "
" ], "text/plain": [ " max_heartrate max_speed\n", "2 159.0 15.12" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "outlier_df = df_runs_cleaned[df_runs_cleaned.get('outlier')=='-1'].get(\n", " ['max_heartrate','max_speed'])\n", "outlier_df" ] }, { "cell_type": "markdown", "id": "f29ca36a", "metadata": {}, "source": [ "Using the dataframe above, we can highlight these outlier values in our original scatterplot in order to visually asses which pair/s of max speed and max heart rate values are not following the general trend seen in our scatterplot." ] }, { "cell_type": "code", "execution_count": 56, "id": "ef579e0c", "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", "
max_speedmax_heartrateoutlierEE_scores
013.32177.01-0.236364
114.40186.01-2.624880
313.32156.01-2.982775
412.60174.01-2.155981
\n", "
" ], "text/plain": [ " max_speed max_heartrate outlier EE_scores\n", "0 13.32 177.0 1 -0.236364\n", "1 14.40 186.0 1 -2.624880\n", "3 13.32 156.0 1 -2.982775\n", "4 12.60 174.0 1 -2.155981" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_runs_cleaned.drop(outlier_df.index)" ] }, { "cell_type": "code", "execution_count": 57, "id": "d2cd4290", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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AAAAQNOYUmB51lln6eWXX572k/35z3/W6aefPu3zAAAAAAAAAGhPUwosc7mcjj76aF100UXq7e2t+kmefvppnX/++TruuOMUhmyGCgAAAAAAAGDTprSH5Q033KCvf/3ruuqqq3TzzTfr4IMP1pIlS7Tffvtpp5122mggTxiGWrZsmR555BHdfffdevzxx+V5nv7lX/5Fp5122oz8QwAAAAAAAAC0vikFlpZl6cwzz9RRRx2lr3zlK7rzzjv1q1/9SpLk+756enqUSqUUBIEGBga0du1aFYtFGWPkuq5OOukknX322erp6ZnRfwwAAAAAAACA1jalwHLMNttsoy9+8Yv6l3/5F912222677779Ic//EEvvPDC5JO6rvbZZx/9zd/8jY4//nh1d3fXs2YAAAAAAAAAbaqqwHJMd3e3zjrrLJ111lkqFotas2aN1q5dq3K5rI6ODm233XbyPK/etQIAAAAAAABoczUFlhNFIhEtXrxYixcvrkc9AAAAAAAAAOawKU0JBwAAAAAAAIDZQGAJAAAAAAAAoGkQWAIAAAAAAABoGgSWAAAAAAAAAJoGgSUAAAAAAACApkFgCQAAAAAAAKBpuNM9QalU0lNPPaUVK1Zo/vz5estb3qLXXntNixcvrkd9AAAAAAAAAOaQmgPLcrmsq666SkuXLtW6deskSe985zv1lre8Reeee65yuZwuu+wybb/99nUrFgAAAAAAAEB7q6klvFwu66yzztLXvvY15XI57bXXXjLGjN8/NDSkZcuW6b3vfa/WrFlTt2IBAAAAAAAAtLeaAsulS5fqN7/5jd72trfp5z//uW655ZZJ93/3u9/Vu971Lq1Zs0bXXXddXQoFAAAAAAAA0P5qCixvvfVWdXZ26oorrtCCBQs2uj8ajerzn/+8Fi5cqF//+tfTLhIAAAAAAADA3FBTYPnCCy9ov/32UyKR2Owxnudpn3320auvvlpzcQAAAAAAAADmlpoCS9d1NTQ0tNXjBgYG5LrTHkQOAAAAAAAAYI6oKbB8/etfryeffFIrVqzY7DEvv/yynnzySe2xxx41FwcAAAAAAABgbqkpsDz55JOVy+X04Q9/WE8//fRG9z/zzDP66Ec/qmKxqBNPPHHaRQIAAAAAAACYG2rq1z7qqKP04IMP6rvf/a6OP/54pVIpWZal++67T4cddph6e3tljNHRRx+td73rXfWuGQAAAAAAAECbqnmDyc9+9rN64xvfqGuvvVbPP/+8JKm/v1+StHjxYv3DP/yDPvCBD9SnSgAAAAAAAABzwrQm4pxwwgk64YQTtGbNGr322msKw1ALFizQNttsU6/6AAAAAAAAAMwhNQWWt912m7bbbju95S1vkSTNnz9f8+fP3+i4n/3sZ1q2bJnOOeec6VUJAAAAAAAAYE6oaejOeeedp+9+97tbPe6HP/yhrr/++lqeAgAAAAAAAMAcNKUVlrfddpvK5fKk21588UV973vf2+xjhoeH9cADD8jzvOlVCAAAAAAAAGDOmFJguWzZMt10002yLEuSZFmWHn/8cT3++ONbfJwxRscff/z0qwQAAAAAAAAwJ0wpsDznnHM0PDw8/vdbb71V22+//fgelpvi+7523HFHnXzyydOvEgAAAAAAAMCcMKXAMpVK6cILLxz/+6233qo3vvGNk24DAAAAAAAAgOmqaUr4008/Xe86AAAAAAAAAKC2KeEbMsYoDMPxX+VyWSMjI3rxxRf1jW98ox5PAQAAAAAAAGAOqGmFpSTdfPPNuummm/Tqq68qCIItHnvqqafW+jQAAAAAAAAA5pCaAssf//jH+vznP7/V4+bPn6+//du/reUpAAAAAAAAAMxBNbWEf/vb35ZlWfrXf/1XPfLII7rgggtk27Z+9atf6Xe/+50uvfRSZTIZBUGgf/zHf6x3zQAAAAAAAADaVE2B5TPPPKOddtpJZ555ppLJpN785jcrDEP97ne/Uzqd1lFHHaUrrrhC/f39+vrXv17vmgEAAAAAAAC0qZoCy5GREe26667jf995551lWZaeeuqp8dv2339/vf71r9evf/3r6VcJAAAAAAAAYE6oKbBMJpMqFArjf/d9XwsWLNBf/vKXScdtv/32WrFixfQqBAAAAAAAADBn1BRY7rHHHvrDH/6gfD4/ftsuu+yiJ554QsaY8dtWr16tSCQy/SoBAAAAAAAAzAk1BZZHH320BgcHdeqpp+rhhx+WJB188MHq6+vTZZddpuHhYf3whz/U73//e+200051LRgAAAAAAABA+6opsDzhhBP0N3/zN/rDH/6gb3zjG5Kk97znPcpkMrr22mu1//7767zzzpNlWTr11FPrWC4AAAAAAACAdubW8iDHcfS///u/uvfee1UqlSRV9rW88cYb9ZnPfEaPP/64MpmMTj31VB111FF1LRgAAAAAAABA+6opsBxzxBFHTPr7rrvuqptuumlaBQEAAAAAAACYu2pqCZ+qwcFBnX/++TP5FAAAAAAAAADaSFUrLJ944gn9/Oc/18DAgHbbbTcdf/zxisfjmzz2e9/7ni655BINDAzo85//fF2KBQAAAAAAANDephRYGmP06U9/Wrfccsv43y3L0nXXXadvfOMb2m677caPffbZZ/XpT39af/jDH2SMUSaTmZnKAQAAAAAAALSdKbWEf//739d3v/tdWZalI488Uqeddpp22203vfrqqzr33HPHj7v22mv1d3/3d/rDH/4gSfq7v/s7/fjHP56RwgEAAAAAAAC0nymtsLzttttkWZYuvvji8anfn/jEJ3T22Wfr17/+tZ555hl961vf0ne+8x0ZY7TbbrvpM5/5jN785jfPaPEAAAAAAAAA2suUVlg+99xz2mmnncbDSkmybVsf+tCHZIzRF7/4RX3729+W4zj62Mc+pltvvZWwEgAAAAAAAEDVprTCct26dZsMIHfbbTdJ0gMPPKCenh5deeWV2muvvepbIQAAAAAAAIA5Y0qBZblcViKR2Oj2ZDIpSXIcR9ddd5123nnn+lYHAAAAAAAAYE6ZUkv41hxwwAGElQAAAAAAAACmrS6BZSaTqcdpAAAAAAAAAMxxU2oJ3xrLsupxGgAAAAAAAGBuCENZgwOy+vtlDw7IyuelcllyXZloVGFHp0xXl0xHp2TXZc1hy6hLYDmTrr76at1///266aabxm9btWqVLrroIv3617+W4zg6+OCD9R//8R+TVnouXbpU1113nVavXq299tpL559/vvbcc89G/BMAAAAAAACAipEROc//Re7yP8pe1Ssrm5XCsHKfbU/6s4nHFS7sVnnPvRTstLO0iRkz7cgyxpitHbTHHnvUvIrSsiwtX768pscuXbpUn//857XffvuNB5bFYlEnnHCCksmk/vM//1OlUkn//u//rsWLF+vaa6+VJN166636r//6L33uc5/TnnvuqWuuuUa/+tWv9JOf/KTm9vUgCNXXNzKlY13XVldXQv39IyqXw5qeb7ZZljScK2ldttToUoBpcRxLHR1xDQ5mFQRb/fYGoE649oDG4fpDu7AkdSQjikaafl3NuFb87Ae0g5a99koluU88Lvf3j8heu0bG92XmzZOJ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Nl+uTBRvdGEAAAAAZlxNgeXPfvazzd5n27bi8bg6OjpqLmrZsmXyPE+33367rrrqKr366qvj97300kvKZrPaeeedN/nYp59+WiMjIzrwwAPHb0un09pzzz318MMPE1gCaHq2bSkWcZSIReTY7FOJOc5Icd9VNOIoly8rWwhUDsJGVwUAAABgBtUUWG6zzTb1rmOSJUuWTNqTcqJnn31WknTTTTfp17/+tWzb1l//9V/r4x//uFKp1Pjqz0WLFk163MKFC6e0MnRLXHdqW346jj3p91bhOLYch/3C0NomX3+tFWpYluS5jlKxiPyITVCJljLTr32OpEjKUTJuNJIvKVcoK2AwDyCptV/7gA05rj3lz13NoFU/+wGtjmuv/U17SvjatWtVKBS2eMzixYun+zTjnn32Wdm2rYULF+prX/uaXnrpJX3pS1/Sn/70J91www3jU8k33KvS930NDg7W/Ly2bamrK1HVY9LpWM3P1wiWV5DtzejgeGDWJJPRRpdQFduyFI+6SsYjcmx+cIDWNRuvffMkFYplDWdLKpQDwn1gVKu99gGbkopHlEq03tyBVvvsB7QLrr32VVM6VS6Xdckll+h73/uehoeHt3isZVlavnx5TcVtytlnn633vve96urqkiS97nWv04IFC3TSSSfpySefVDRaeaNWLBbH/yxJhUJBsVjtX8hhaDQ0lJ3SsY5jK52OaWgop6CF2taGcyWtyxYbXQYwLY5jK5mMang43xLXn21ZikYcJeOeTLmsocFyo0sCatKI1z7HsuSERsP5ooqlkH1eMWe12msfsCVWGKhcLDW6jClr1c9+QKvj2mtN6XRsyqtiawosr7nmGl1//fWSpFgsplQqJcuanRVBtm2Ph5VjdtttN0mVYUBjreCrVq3S9ttvP37MqlWrtPvuu0/rucvl6i6CIAirfkyjWFal3iDgwx5aXeWaa/av50r7t61EzFPUc2VCo1LYGt8vgC2Z7dc+25I64hHlioGy+ZJKTBTHnNQar33A1liSgnKost1674la6bMf0E649tpXTYHlD3/4Q0UiEX31q1/VwQcfXO+atujcc8/VqlWr9I1vfGP8tieffFKStOuuu2q77bZTMpnUQw89NB5YDg0Nafny5TrllFNmtVYA2BTHsRT3XSWiriSLVWHANBkjRT1HUW/9RPESP2kHAAAAWlZNgWVv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BAAAAAAAABAzCCwBAAAAAAAAxAwCSwAAAAAAAAAxg8ASAAAAAAAAQMwgsDxDs2fPVr9+/QocW7lypW688UY1a9ZMHTt21JNPPimfz1fsOUKhkDIyMpSenl7gv2effbasuw/EtaLG37Jly9S9e3dlZGSoc+fOmjNnjizLOuV53n//fV177bXKyMhQz549tX79+rLsNhD3Smvsde3atdC9b+zYsWXZdSDuFTX+Tvbggw+qY8eOpz0P9z7gzJXW+OP+B5yZosbegw8+WGgcnW78ce+Lb/ZodyCevPbaa5o+fbpatGgRObZlyxbdeeedGjFihK6++modOHBADz/8sH799Vc98cQTRZ7n22+/VW5urt59911VrVo1cjwhIaHMXwMQr4oaf2vXrtV9992nBx54QFdeeaW+/vprjRkzRk6nUwMGDCjyPBs2bND999+v0aNH6/LLL9eiRYs0dOhQvfPOO6pfv355vRwgbpTW2MvOztZ3332n2bNn6+KLL44cd7vdZf4agHhV1Pg72ccff6w333xT55577inPw70POHOlNf64/wFnprix980332jYsGHq27dv5JhpmsWeh3tf/GOGZQn8+OOPGjZsmKZMmaK6desWeGzBggVq3bq1hg0bprp166pDhw4aNWqU3nvvPfn9/iLP98033ygpKUkNGzZU9erVI/8lJiaWw6sB4supxt+RI0c0dOhQ9evXT3Xq1FHXrl112WWXad26dcWeb86cOercubP69++v+vXra8yYMbr44ov1j3/8o4xfCRBfSnvs7d27V+FwWM2aNStw7/N6vWX8SoD4c6rxl+/w4cN66KGH1KpVq9Oej3sfUHKlPf64/wElc6qxZ1mW9u7dq8aNGxcYR2lpacWej3tf/COwLIEdO3bI4XBoyZIlatq0aYHHBg0apDFjxhQ4ZrPZFAgEdOLEiSLP980335DoAyV0qvF3ww03aOTIkZKkcDiszz77TJs3b9bll19e5LnC4bC2bt2qtm3bFjjeunVrbd68uUz6D8Sr0hx7Ut69r1q1akpJSSnLbgMVwqnGn5T3D7exY8eqR48epw1MuPcBZ6Y0x5/E/Q8oqVONvX//+9/Kzs7WBRdcUKJzce+rGFgSXgIdO3Ysdm+ERo0aFfj/QCCg+fPnq3HjxsWm/bt371YwGNTgwYO1a9cu1axZUwMGDFCPHj1Kve9A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WqRFixapUaNGWrVqlV599VVNmzZN8+bN06pVqzR69Gj5fD6NGjVKP/30U7S7W+6mTZum48ePa9SoUdHuSoTf79f69et1xRVXlNk17r77bh0/flxPP/10mV0DAADEHgJLAABQ6bRt21aJiYn6+OOPi10WvmXLFh0+fLhMw5jipKWlqX79+kpLSyv3a0fLkiVLJEmjR49WtWrVCjxmt9s1ePBgdezYUTk5OXrnnXei0MPo+fbbb7Vw4UJdf/31qlGjRrS7E/H5558rKytLHTp0KLNr1KxZUz169NCiRYu0b9++MrsOAACILQSWAACg0nE6nbrqqqv0yy+/aNOmTUW2Wbp0qWw2m6699tpiz7N+/XqNGDFC7du3V+PGjdWsWTP16NFDzz//vPx+f6TdihUrlJ6eroyMDB04cKDAOfbs2aMmTZqocePG+u///m9JRe9hmX9s1apVWrVqlXr37q1LLrlEbdq00f3336+jR49Kkt588011795dTZs2Vbdu3fTcc88pEAhEznO6fQ/79eun9PR0ffbZZ5FjY8eOVXp6unbv3q23335bPXv2VEZGhtq1a6cJEyYoOztboVBIc+bMUdeuXdW0aVP95S9/0euvvy7Lsop9/072888/S5IMwyi2zV//+lf17NlT5557buRY/r6Jjz32mL7++mvddtttatasmdq2bavhw4drx44dRZ4rNzdXc+bM0fXXX6+mTZvq0ksvVf/+/bVy5cpir//ZZ59pyJAhat26tZo0aaJrrrlGzz77rLKzs4tsv379et12221q2bKlWrRooVGjRungwYMleTsKmDdvnoLBoHr16lWi9ocPH1bXrl2Vnp6uv//975HjHTt2VOvWrZWbm6tnnnlGHTt2VJMmTdStWze98sorkqRjx45p/Pjxuvzyy9W8eXP17t1bGzduLPI6q1evltPpVJs2bQo9tm/fPo0YMUKtW7dW06ZNdcMNN+jdd98t1K5jx45q0aKFdu/erRtuuEGNGzfWVVddpS1btkTa9OrVS6FQSPPmzSvR6wcAAPGPwBIAAFRK11xzjaSil4WHQiEtX75cLVq0KHZG28svv6yBAwdq5cqVOv/889WxY0c1aNBA33zzjaZPn6577rkn0rZTp07q2bOncnNz9cgjj0SOBwIBjR49Wn6/X3fddZcaN2582n7/13/9l4YNGyafz6fLLrtMUt7sxNtvv11TpkzRww8/LK/XqzZt2uiHH37QjBkzNGXKlDN5a4o1depUjR07Vm63W5dddpmys7P1z3/+U6NHj9bo0aM1Y8YM1a5dW82bN9e+ffv06KOP6tVXXy3RuRs2bChJmjBhgrZu3VpkmyuvvFJPPvlk5LM72d69e3XLLbdo586dateunWrXrq0VK1aoT58+Wr16dYG2J06cUN++fTVlyhQdOXJEbdq0UUZGhrZu3ao77rhDzz77bKHzv/jii7rtttu0fv161atXT1deeaVOnDihmTNn6pZbbim0x+Kbb76p2267TRs2bFDDhg3VunVrrV27Vr179y424CyK3+/Xe++9p+rVq6tJkyanbf/LL79o0KBBOnDggAYMGKCxY8cWeDwUCmnQoEF66aWXVL9+fTVv3lwHDhzQpEmT9Nxzz6lPnz768MMP1aRJE/3pT3/SF198oUGDBhUZ/K5evVotW7ZUQkJCgePff/+9evXqpS1btqhFixZq0KCBduzYodGjR+u1114rdJ5AIKChQ4cqMzNTHTp0kGEYkZ8HSWrSpIlq1Kihf/3rXwV+EQAAACoue7Q7AAAAEA3t27dXUlKSPvroI40fP16maUYeW79+vY4ePaq//OUvRT738OHDevrpp5WSkqIFCxboggsuiDy2ZcsWDRgwQB999JEOHTqkWrVqSZLGjRun9evX67PPPtM777yjnj176rnnntPOnTvVokULDRkypET9XrVqlR566CH17dtXkvTjjz+qW7du2rFjh3bt2qX58+erdevWkqQ1a9ZoyJAhWrRokcaMGSOb7Y/9rvqTTz7RrFmz1KlTJ0nSjh07dOONN+qjjz6S1+vV4sWLI8VX3njjDT3yyCNauHCh+vfvf9pz33HHHfrkk0+0d+9e9enTR7Vr11abNm3UsmVLtWzZUnXq1Dnl8zdu3KhmzZpp9uzZSklJkSQtWLBA48eP17hx4/Thhx8qMTFRkjRx4kRt375d1113nSZMmBAJ3L799lsNGjRIM2fO1KWXXhoJhDds2KCpU6eqVq1amj17diRM8/v9Gj9+vBYvXqwJEyZEguH//d//1cSJE+VwOPTSSy9FPo+jR49q8ODB+vHHH0v8nm/dulXZ2dmRIO9UTpw4ocGDB2vPnj3q16+f/va3vxVqc/z4cR04cEDvvfee6tatK0maP3++nnjiCc2YMUNNmjTR66+/ripVqkiS7rnnHi1dulRvvfWWLr744sh5vvvuO+3bt09//etfC13j8OHD6tKli6ZMmSK32y1Jmj17tqZOnap58+bp1ltvLdDe5/MpLS1NCxYskNPpVDgcLvSz2rJlSy1dulRbtmyJfC4AAKDiYoYlAAColJxOpzp16qSjR48WWha+bNky2e12devWrcjn/vTTT+rSpYuGDx9eIKyUFJlRJuXNNMuXnJysiRMnSpImT56sdevWac6cOfJ6vZo8eXKJw8SLLrooElZKeXv8tWzZUlLerNH8cEySrrjiCiUkJOjEiRORJdd/xJVXXhkJKyXp4osvjrz+W2+9tUCl6Pz37vdL4IvToEEDvfHGG2rWrJkk6eDBg1q8eLEeeOABde7cWVdffbXmzp1b7Aw7u92uqVOnRsJKSerdu7c6dOigI0eO6KOPPpKUF/AuWbJE1atXLxBWSlLdunUjMxLnzp0bOf7SSy9FqpifPPPP6XRq/PjxqlatmpYtWxYJIt9++235fD7dcsstBT6PtLS0yM9ASeX/bJ583aLk5ORo6NCh2rFjh2699VY9+OCDxbYdNGhQJKyUpO7du0f+PGrUqEhYKUldunSRVPhzXLNmjSQVuX+laZqaMGFCJKyUpIEDB8pms+n777/XiRMnCj3n5ptvltPplKQix0L+6y9ueToAAKhYCCwBAEClVdSycL/fr48//liXXXaZUlNTi3xeo0aNNG3aNA0cODByLBQK6dtvv9V7770XWR588t6RUt6szl69eunnn3/WkCFDFAwG9dBDDxXYk/F0mjZtWuhYfnGe34dahmEoKSlJUt6ejX/Uqa6dnp5e4LjX65WkM1rCm56ergULFujdd9/VqFGj1LZtW3k8HknS/v37NXnyZN1000365ZdfCj23WbNmql27dqHj+YFbftC1ZcsWhUIhNWnSpNBSZkm6/PLLZbPZ9PnnnysUCikUCkX2Uzw5fMzndrvVokWLAu02b94sSUXuE3rxxRfrnHPOKdH7IeXN1pR0yp+RYDCoO++8U59//rkuvPBCPfzww6c85+8/x5OLO/3+Zyg5OVlS4c9x9erV+tOf/qR69eoVOn/dunULjR2XyxW5zvHjxws953SB7HnnnSfp/98PAABQsbEkHAAAVFqXX365kpOT9dFHH+nhhx+WaZr69NNPdezYsWKXg+cL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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Setting Figure Size in Seaborn\n", "sns.set(rc={'figure.figsize':(16,8)})\n", "\n", "# Setting Seaborn plot style\n", "sns.set_style(\"darkgrid\")\n", "\n", "# Plotting our data\n", "# We will calculate the regression line while not accounting for our outliers\n", "plot = sns.regplot(data=df_runs_cleaned.drop(outlier_df.index), x=\"max_speed\",\n", " y=\"max_heartrate\")\n", "\n", "#Renaming x and y labels\n", "plot.set_ylabel(\"Maximum Heart Rate (bpm)\", fontsize = 16)\n", "plot.set_xlabel(\"Maximum Speed (km/hr)\", fontsize = 16)\n", "\n", "# Plotting the outlier and highlighting it\n", "plt.scatter(outlier_df.get('max_speed'),outlier_df.get('max_heartrate'))\n", "plt.scatter(outlier_df.get('max_speed'),outlier_df.get('max_heartrate'),\n", " facecolors='red',alpha=.35, s=500)" ] }, { "cell_type": "markdown", "id": "d6eb9511", "metadata": {}, "source": [ "Thus, the points highlighted in red are ones that seem to not be following the general trend of our dataset. Lastly, let's see what the new p-value is after outlier removal!" ] }, { "cell_type": "code", "execution_count": 58, "id": "44d7a7e7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Slope: 8.01\n", "Coefficient of determination: 0.223\n", "p-value: 0.528\n" ] } ], "source": [ "slope, intercept, r_value, p_value, std_err = stats.linregress(\n", " df_runs_cleaned.drop(outlier_df.index).get('max_speed'), \n", " df_runs_cleaned.drop(outlier_df.index).get('max_heartrate'))\n", "\n", "print(f'Slope: {slope:.3g}')\n", "print(f'Coefficient of determination: {r_value**2:.3g}')\n", "print(f'p-value: {p_value:.3g}')" ] }, { "cell_type": "markdown", "id": "b07fd314", "metadata": {}, "source": [ "Our new p-value after removing any outliers is 77.8% which is more than 30%. Therefore, after removing the outliers, our result is statistically less significant which means that there is not enough evidence to conclude that that there is a correlation between maximum speed and the maximum heart rate." ] } ], "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.13" } }, "nbformat": 4, "nbformat_minor": 5 }