{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Comparing Heart Rate.ipynb", "version": "0.3.2", "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "metadata": { "id": "l5gLIqggxasH", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "outputId": "7fdfde64-8292-4b4e-d547-6a4da75f82f4" }, "cell_type": "code", "source": [ "!pip install fitparse" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "text": [ "Requirement already satisfied: fitparse in /usr/local/lib/python3.6/dist-packages (1.0.1)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "WuqsY4o5yYSE", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "outputId": "f51569db-87e1-461d-fcb8-78a39f4f555b" }, "cell_type": "code", "source": [ "!git clone https://gist.github.com/kmader/da7c7ef23f53b7e9e1e672d189afee02" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "fatal: destination path 'da7c7ef23f53b7e9e1e672d189afee02' already exists and is not an empty directory.\n" ], "name": "stdout" } ] }, { "metadata": { "id": "7VpECBHzya99", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "from pathlib import Path\n", "from glob import glob\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import fitparse\n", "plt.style.use('ggplot')" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "JQ3SU2cqylkJ", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 52 }, "outputId": "a064a9fb-83b2-4569-e72c-0b2dc84bf92d" }, "cell_type": "code", "source": [ "fit_files = list(Path('.').glob('*/*.fit'))\n", "fit_files" ], "execution_count": 4, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[PosixPath('da7c7ef23f53b7e9e1e672d189afee02/garmin.fit'),\n", " PosixPath('da7c7ef23f53b7e9e1e672d189afee02/wahoo.fit')]" ] }, "metadata": { "tags": [] }, "execution_count": 4 } ] }, { "metadata": { "id": "8G02w6hMyppC", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def parse_fit(in_path):\n", " fit_data = fitparse.FitFile(str(in_path))\n", " fit_df = pd.DataFrame([\n", " {k['name']: k['value']\n", " for k in a.as_dict()['fields']} \n", " for a in fit_data.get_messages('record')])\n", " fit_df['elapsed_time'] = (fit_df['timestamp']-fit_df['timestamp'].min()).dt.total_seconds()\n", " return fit_df" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "Ce7L1ASryvgQ", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 378 }, "outputId": "db3f291e-ba77-4076-ae9c-c10a309ebc65" }, "cell_type": "code", "source": [ "both_fit_df = pd.concat([parse_fit(c_file).assign(device=c_file.stem) \n", " for c_file in fit_files]).reset_index()\n", "both_fit_df.describe().T.query('count>4000')" ], "execution_count": 6, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
| \n", " | count | \n", "mean | \n", "std | \n", "min | \n", "25% | \n", "50% | \n", "75% | \n", "max | \n", "
|---|---|---|---|---|---|---|---|---|
| index | \n", "6583.0 | \n", "1.645267e+03 | \n", "950.275348 | \n", "0.0 | \n", "8.225000e+02 | \n", "1.645000e+03 | \n", "2.468000e+03 | \n", "3.301000e+03 | \n", "
| altitude | \n", "6348.0 | \n", "4.344762e+02 | \n", "26.444938 | \n", "403.2 | \n", "4.086000e+02 | \n", "4.152000e+02 | \n", "4.608000e+02 | \n", "4.684000e+02 | \n", "
| cadence | \n", "6583.0 | \n", "7.960398e+01 | \n", "11.938950 | \n", "0.0 | \n", "8.000000e+01 | \n", "8.200000e+01 | \n", "8.500000e+01 | \n", "1.140000e+02 | \n", "
| distance | \n", "6582.0 | \n", "5.039808e+03 | \n", "3015.163122 | \n", "0.0 | \n", "2.296352e+03 | \n", "5.082555e+03 | \n", "7.688613e+03 | \n", "9.921690e+03 | \n", "
| elapsed_time | \n", "6583.0 | \n", "1.645267e+03 | \n", "950.275348 | \n", "0.0 | \n", "8.225000e+02 | \n", "1.645000e+03 | \n", "2.468000e+03 | \n", "3.301000e+03 | \n", "
| enhanced_altitude | \n", "6348.0 | \n", "4.344762e+02 | \n", "26.444938 | \n", "403.2 | \n", "4.086000e+02 | \n", "4.152000e+02 | \n", "4.608000e+02 | \n", "4.684000e+02 | \n", "
| enhanced_speed | \n", "6582.0 | \n", "2.786078e+00 | \n", "0.797892 | \n", "0.0 | \n", "2.323000e+00 | \n", "2.858500e+00 | \n", "3.331000e+00 | \n", "1.340800e+01 | \n", "
| heart_rate | \n", "6583.0 | \n", "1.469424e+02 | \n", "15.640800 | \n", "57.0 | \n", "1.330000e+02 | \n", "1.520000e+02 | \n", "1.590000e+02 | \n", "1.750000e+02 | \n", "
| position_lat | \n", "6458.0 | \n", "5.653898e+08 | \n", "67669.839447 | \n", "565274178.0 | \n", "5.653227e+08 | \n", "5.654013e+08 | \n", "5.654451e+08 | \n", "5.655004e+08 | \n", "
| position_long | \n", "6458.0 | \n", "1.016611e+08 | \n", "179685.124652 | \n", "101321891.0 | \n", "1.014933e+08 | \n", "1.017024e+08 | \n", "1.018297e+08 | \n", "1.018898e+08 | \n", "
| speed | \n", "6582.0 | \n", "2.786078e+00 | \n", "0.797892 | \n", "0.0 | \n", "2.323000e+00 | \n", "2.858500e+00 | \n", "3.331000e+00 | \n", "1.340800e+01 | \n", "