Created
February 7, 2025 22:19
-
-
Save mattharrison/0e2b7fb295e2f16558bf20214fed5129 to your computer and use it in GitHub Desktop.
accelerate-w-polars.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/mattharrison/0e2b7fb295e2f16558bf20214fed5129/accelerate-w-polars.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [], | |
| "metadata": { | |
| "id": "aawghS8mb7DQ" | |
| }, | |
| "execution_count": null, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## Install Accelerator\n", | |
| "\n", | |
| "I'm using an L4" | |
| ], | |
| "metadata": { | |
| "id": "n7VzCZm3b71M" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "!nvidia-smi | head" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "dKoMnjG2b-gU", | |
| "outputId": "e0b155b8-f0be-461b-fb3e-d08a0b342eb1" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Sat Feb 1 21:35:14 2025 \n", | |
| "+-----------------------------------------------------------------------------------------+\n", | |
| "| NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 |\n", | |
| "|-----------------------------------------+------------------------+----------------------+\n", | |
| "| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n", | |
| "| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n", | |
| "| | | MIG M. |\n", | |
| "|=========================================+========================+======================|\n", | |
| "| 0 NVIDIA L4 Off | 00000000:00:03.0 Off | 0 |\n", | |
| "| N/A 44C P8 12W / 72W | 0MiB / 23034MiB | 0% Default |\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "!uv pip install --system -U --extra-index-url=https://pypi.nvidia.com polars[gpu] cudf-polars-cu12" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "ZAA-HavTcGna", | |
| "outputId": "e53f31ae-71ee-4bdc-8bf4-2b244566f90c" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "\u001b[2mUsing Python 3.11.11 environment at /usr\u001b[0m\n", | |
| "\u001b[2K\u001b[2mResolved \u001b[1m15 packages\u001b[0m \u001b[2min 9.33s\u001b[0m\u001b[0m\n", | |
| "\u001b[2K\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/77.59 KiB\n", | |
| "\u001b[2K\u001b[2A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2K\u001b[2A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/15.58 MiB\n", | |
| "\u001b[2K\u001b[3A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2K\u001b[3A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/33.88 MiB\n", | |
| "\u001b[2K\u001b[4A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/33.88 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m\u001b[2m------------------------------\u001b[0m\u001b[0m 0 B/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 16.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 32.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 32.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 48.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 32.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 64.00 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 16.00 KiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mcudf-polars-cu12\u001b[0m \u001b[32m-------------------------\u001b[2m-----\u001b[0m\u001b[0m 64.00 KiB/77.59 KiB\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 430.18 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 32.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 96.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 1.05 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[6A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 525.85 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 176.00 KiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 143.89 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m--\u001b[2m----------------------------\u001b[0m\u001b[0m 1.89 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m------\u001b[2m------------------------\u001b[0m\u001b[0m 653.16 KiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m---\u001b[2m---------------------------\u001b[0m\u001b[0m 1.08 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 175.21 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m--\u001b[2m----------------------------\u001b[0m\u001b[0m 2.17 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m---------\u001b[2m---------------------\u001b[0m\u001b[0m 1.08 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.84 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-\u001b[2m-----------------------------\u001b[0m\u001b[0m 432.00 KiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m---\u001b[2m---------------------------\u001b[0m\u001b[0m 2.86 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (0/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m----------\u001b[2m--------------------\u001b[0m\u001b[0m 1.16 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.91 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m---\u001b[2m---------------------------\u001b[0m\u001b[0m 3.00 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m---\u001b[2m---------------------------\u001b[0m\u001b[0m 3.45 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠹\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m----------\u001b[2m--------------------\u001b[0m\u001b[0m 1.20 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.91 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 4.57 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 4.33 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠹\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-----------\u001b[2m-------------------\u001b[0m\u001b[0m 1.25 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.91 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m------\u001b[2m------------------------\u001b[0m\u001b[0m 5.70 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 5.92 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠹\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-----------\u001b[2m-------------------\u001b[0m\u001b[0m 1.28 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.92 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 6.92 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m------\u001b[2m------------------------\u001b[0m\u001b[0m 7.43 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠹\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-----------\u001b[2m-------------------\u001b[0m\u001b[0m 1.31 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.94 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m--------\u001b[2m----------------------\u001b[0m\u001b[0m 8.12 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-------\u001b[2m-----------------------\u001b[0m\u001b[0m 8.68 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠸\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m------------\u001b[2m------------------\u001b[0m\u001b[0m 1.34 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.95 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m---------\u001b[2m---------------------\u001b[0m\u001b[0m 9.61 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m--------\u001b[2m----------------------\u001b[0m\u001b[0m 10.10 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠸\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m------------\u001b[2m------------------\u001b[0m\u001b[0m 1.36 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 1.97 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------\u001b[2m--------------------\u001b[0m\u001b[0m 10.94 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m---------\u001b[2m---------------------\u001b[0m\u001b[0m 11.27 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠸\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m------------\u001b[2m------------------\u001b[0m\u001b[0m 1.45 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----\u001b[2m--------------------------\u001b[0m\u001b[0m 2.03 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-----------\u001b[2m-------------------\u001b[0m\u001b[0m 11.92 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m----------\u001b[2m--------------------\u001b[0m\u001b[0m 12.42 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠸\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.47 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.11 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m------------\u001b[2m------------------\u001b[0m\u001b[0m 13.23 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-----------\u001b[2m-------------------\u001b[0m\u001b[0m 13.84 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠼\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.48 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.12 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 14.55 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m------------\u001b[2m------------------\u001b[0m\u001b[0m 15.12 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠼\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.48 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.13 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m---------------\u001b[2m---------------\u001b[0m\u001b[0m 15.86 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 16.41 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠼\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.48 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.14 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------\u001b[2m--------------\u001b[0m\u001b[0m 17.08 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 17.81 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠴\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.50 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.16 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-----------------\u001b[2m-------------\u001b[0m\u001b[0m 18.50 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m----------------\u001b[2m--------------\u001b[0m\u001b[0m 19.19 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠴\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.52 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.17 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m------------------\u001b[2m------------\u001b[0m\u001b[0m 19.73 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-----------------\u001b[2m-------------\u001b[0m\u001b[0m 20.55 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠴\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.52 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.17 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-------------------\u001b[2m-----------\u001b[0m\u001b[0m 21.03 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m------------------\u001b[2m------------\u001b[0m\u001b[0m 21.86 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠴\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.53 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.17 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m--------------------\u001b[2m----------\u001b[0m\u001b[0m 22.47 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-------------------\u001b[2m-----------\u001b[0m\u001b[0m 23.08 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠴\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.55 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.17 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------\u001b[2m--------\u001b[0m\u001b[0m 23.83 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m--------------------\u001b[2m----------\u001b[0m\u001b[0m 24.36 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠦\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.56 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.17 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------\u001b[2m--------\u001b[0m\u001b[0m 24.00 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m---------------------\u001b[2m---------\u001b[0m\u001b[0m 26.72 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠦\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-------------\u001b[2m-----------------\u001b[0m\u001b[0m 1.58 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.17 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------\u001b[2m--------\u001b[0m\u001b[0m 24.00 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-----------------------\u001b[2m-------\u001b[0m\u001b[0m 28.81 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠦\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 1.59 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.19 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------\u001b[2m--------\u001b[0m\u001b[0m 24.00 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m------------------------\u001b[2m------\u001b[0m\u001b[0m 30.30 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠧\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 1.61 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.19 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------\u001b[2m--------\u001b[0m\u001b[0m 24.00 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m--------------------------\u001b[2m----\u001b[0m\u001b[0m 32.30 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠧\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 1.62 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.19 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------\u001b[2m--------\u001b[0m\u001b[0m 24.02 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m---------------------------\u001b[2m---\u001b[0m\u001b[0m 34.37 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠧\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 1.62 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.19 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-----------------------\u001b[2m-------\u001b[0m\u001b[0m 25.52 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 35.59 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠧\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 1.64 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m-----\u001b[2m-------------------------\u001b[0m\u001b[0m 2.20 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m------------------------\u001b[2m------\u001b[0m\u001b[0m 27.05 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-----------------------------\u001b[2m-\u001b[0m\u001b[0m 36.25 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠧\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m--------------------\u001b[2m----------\u001b[0m\u001b[0m 2.43 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m------\u001b[2m------------------------\u001b[0m\u001b[0m 2.61 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m-------------------------\u001b[2m-----\u001b[0m\u001b[0m 27.80 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-----------------------------\u001b[2m-\u001b[0m\u001b[0m 36.44 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠇\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m-----------------------\u001b[2m-------\u001b[0m\u001b[0m 2.75 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m------\u001b[2m------------------------\u001b[0m\u001b[0m 2.75 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m--------------------------\u001b[2m----\u001b[0m\u001b[0m 29.31 MiB/33.88 MiB\n", | |
| "\u001b[2mpyarrow \u001b[0m \u001b[32m-----------------------------\u001b[2m-\u001b[0m\u001b[0m 36.48 MiB/38.22 MiB\n", | |
| "\u001b[2K\u001b[5A\u001b[37m⠇\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m------------------------\u001b[2m------\u001b[0m\u001b[0m 2.82 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m------\u001b[2m------------------------\u001b[0m\u001b[0m 2.78 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[4A\u001b[37m⠇\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m------------------------\u001b[2m------\u001b[0m\u001b[0m 2.84 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m------\u001b[2m------------------------\u001b[0m\u001b[0m 2.78 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[4A\u001b[37m⠇\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumba \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 3.33 MiB/3.65 MiB\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m----------\u001b[2m--------------------\u001b[0m\u001b[0m 4.92 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[4A\u001b[37m⠇\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 7.05 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[3A\u001b[37m⠇\u001b[0m \u001b[2mPreparing packages...\u001b[0m (1/6)\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m--------------\u001b[2m----------------\u001b[0m\u001b[0m 7.05 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[3A\u001b[37m⠋\u001b[0m \u001b[2mPreparing packages...\u001b[0m (3/6)\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m------------------\u001b[2m------------\u001b[0m\u001b[0m 9.23 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[3A\u001b[37m⠋\u001b[0m \u001b[2mPreparing packages...\u001b[0m (3/6)\n", | |
| "\u001b[2mnumpy \u001b[0m \u001b[32m--------------------------\u001b[2m----\u001b[0m\u001b[0m 13.08 MiB/15.58 MiB\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[3A\u001b[37m⠋\u001b[0m \u001b[2mPreparing packages...\u001b[0m (3/6)\n", | |
| "\u001b[2mpolars \u001b[0m \u001b[32m----------------------------\u001b[2m--\u001b[0m\u001b[0m 30.97 MiB/33.88 MiB\n", | |
| "\u001b[2K\u001b[2A\u001b[37m⠋\u001b[0m \u001b[2mPreparing packages...\u001b[0m (3/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (5/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (5/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (5/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (5/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (5/6)\n", | |
| "\u001b[2K\u001b[1A\u001b[37m⠙\u001b[0m \u001b[2mPreparing packages...\u001b[0m (5/6)\n", | |
| "\u001b[2K\u001b[2mPrepared \u001b[1m6 packages\u001b[0m \u001b[2min 2.03s\u001b[0m\u001b[0m\n", | |
| "\u001b[2mUninstalled \u001b[1m5 packages\u001b[0m \u001b[2min 140ms\u001b[0m\u001b[0m\n", | |
| "\u001b[2K\u001b[2mInstalled \u001b[1m6 packages\u001b[0m \u001b[2min 23ms\u001b[0m\u001b[0m\n", | |
| " \u001b[32m+\u001b[39m \u001b[1mcudf-polars-cu12\u001b[0m\u001b[2m==24.12.0\u001b[0m\n", | |
| " \u001b[31m-\u001b[39m \u001b[1mllvmlite\u001b[0m\u001b[2m==0.43.0\u001b[0m\n", | |
| " \u001b[32m+\u001b[39m \u001b[1mllvmlite\u001b[0m\u001b[2m==0.44.0\u001b[0m\n", | |
| " \u001b[31m-\u001b[39m \u001b[1mnumba\u001b[0m\u001b[2m==0.60.0\u001b[0m\n", | |
| " \u001b[32m+\u001b[39m \u001b[1mnumba\u001b[0m\u001b[2m==0.61.0\u001b[0m\n", | |
| " \u001b[31m-\u001b[39m \u001b[1mnumpy\u001b[0m\u001b[2m==1.26.4\u001b[0m\n", | |
| " \u001b[32m+\u001b[39m \u001b[1mnumpy\u001b[0m\u001b[2m==2.1.3\u001b[0m\n", | |
| " \u001b[31m-\u001b[39m \u001b[1mpolars\u001b[0m\u001b[2m==1.9.0\u001b[0m\n", | |
| " \u001b[32m+\u001b[39m \u001b[1mpolars\u001b[0m\u001b[2m==1.14.0\u001b[0m\n", | |
| " \u001b[31m-\u001b[39m \u001b[1mpyarrow\u001b[0m\u001b[2m==17.0.0\u001b[0m\n", | |
| " \u001b[32m+\u001b[39m \u001b[1mpyarrow\u001b[0m\u001b[2m==18.1.0\u001b[0m\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "!ls" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "Fis0cHU4cOg3", | |
| "outputId": "2f44d32f-ace5-4ea8-fdf3-f8dd0ba607bc" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "sample_data\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "from google.colab import drive\n", | |
| "drive.mount('/content/drive')" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "968gae16cXvY", | |
| "outputId": "88544d9d-797c-4f9d-96e2-65d00161d59f" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Mounted at /content/drive\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "d9LYQMCab0QS", | |
| "outputId": "fdf893ab-0e85-4de2-b068-294533ce6580" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'1.21.0'" | |
| ] | |
| }, | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import polars as pl\n", | |
| "pl.__version__" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "!ls /content/drive/MyDrive/Colab\\ Notebooks/clients/nvidia/GTC2024" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "W3mQ91Mccs4V", | |
| "outputId": "1bc15ac2-612b-4524-8346-f4f076159302" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "accelerate-w-polars.ipynb data\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "XYVbxPvab0QT" | |
| }, | |
| "source": [ | |
| "## Getting Data\n", | |
| "\n", | |
| "If you threaten to delete your Strava account, they will let you download all your data [^q]\n", | |
| "\n", | |
| "[^q]: https://support.strava.com/hc/en-us/articles/216918437-Exporting-your-Data-and-Bulk-Export" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "SqCzOxCjb0QU", | |
| "outputId": "6e7df78c-a79c-44c9-b706-bac5a216499c" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "total 118121\n", | |
| "-rw------- 1 root root 120955549 Feb 1 01:40 activities.parquet\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!ls -l /content/drive/MyDrive/Colab\\ Notebooks/clients/nvidia/GTC2024/data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "VJ9WELGIb0QU", | |
| "outputId": "7d780e06-f0ab-437a-f20b-82ea296229f7" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Activity ID,Activity Date,Activity Name,Activity Type,Activity Description,Elapsed Time,Distance,Max Heart Rate,Relative Effort,Commute,Activity Private Note,Activity Gear,Filename,Athlete Weight,Bike Weight,Elapsed Time,Moving Time,Distance,Max Speed,Average Speed,Elevation Gain,Elevation Loss,Elevation Low,Elevation High,Max Grade,Average Grade,Average Positive Grade,Average Negative Grade,Max Cadence,Average Cadence,Max Heart Rate,Average Heart Rate,Max Watts,Average Watts,Calories,Max Temperature,Average Temperature,Relative Effort,Total Work,Number of Runs,Uphill Time,Downhill Time,Other Time,Perceived Exertion,Type,Start Time,Weighted Average Power,Power Count,Prefer Perceived Exertion,Perceived Relative Effort,Commute,Total Weight Lifted,From Upload,Grade Adjusted Distance,Weather Observation Time,Weather Condition,Weather Temperature,Apparent Temperature,Dewpoint,Humidity,Weather Pressure,Wind Speed,Wind Gust,Wind Bearing,Precipitation Intensity,Sunrise Time,Sunset Time,Moon Phase,Bike,Gear,Precipitation Probability,Precipitation Type,Cloud Cover,Weather Visibility,UV Index,Weather Ozone,Jump Count,Total Grit,Average Flow,Flagged,Average Elapsed Speed,Dirt Distance,Newly Explored Distance,Newly Explored Dirt Distance,Activity Count,Total Steps,Carbon Saved,Pool Length,Training Load,Intensity,Average Grade Adjusted Pace,Timer Time,Total Cycles,Media\n", | |
| "484762708,\"Jan 1, 2016, 9:59:32 PM\",Mueller Park Snowshoe,Snowshoe,w/ family,9797,3.28,,,,,,activities/536281923.gpx.gz,81.64659881591797,,9797.0,3082.0,3282.39990234375,3.0,,105.38999938964844,,1586.699951171875,1694.199951171875,35.099998474121094,0.006093100178986788,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762713,\"Jan 11, 2016, 8:35:00 PM\",Mueller Park Ski,Backcountry Ski,With Car at end,5438,8.34,,,,,,activities/536281927.gpx.gz,81.64659881591797,,5438.0,3492.0,8344.599609375,21.700000762939453,,274.0150146484375,,1381.800048828125,1871.5,47.79999923706055,-2.550149917602539,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762714,\"Jan 16, 2016, 2:53:15 PM\",Mueller Park Ski,Backcountry Ski,\"\",6963,5.24,,,,,,activities/536281925.gpx.gz,81.64659881591797,,6963.0,3915.0,5241.2001953125,7.699999809265137,,284.45599365234375,,1592.699951171875,1882.800048828125,48.5,0.032435301691293716,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762723,\"Jan 2, 2016, 4:44:20 PM\",Mueller Park Run,Run,With Tyler,5248,10.89,,,false,,Luna Sandals Oso,activities/536281928.gpx.gz,81.64659881591797,,5248.0,4619.0,10894.2001953125,7.5,,421.48199462890625,,1585.0999755859375,1906.0,47.79999923706055,0.07343360036611557,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,1225675.0,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762726,\"Dec 23, 2013, 2:03:46 PM\",Tom's hill,Backcountry Ski,Tom's hill,12289,8.78,,,,,,activities/536281939.gpx.gz,81.64659881591797,,12289.0,7478.0,8782.900390625,10.5,,650.3150024414062,,2237.300048828125,2766.89990234375,48.599998474121094,0.006831460166722536,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762736,\"Apr 18, 2014, 7:09:10 PM\",Snowbird,Alpine Ski,\"\",10885,33.70,,,,,,activities/536281936.gpx.gz,81.64659881591797,,10885.0,7482.0,33706.5,18.799999237060547,,4017.570068359375,,2401.199951171875,3347.0,50.0,-0.1741500049829483,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762737,\"Jan 25, 2016, 4:25:01 PM\",Park City,Alpine Ski,\"\",9729,37.83,,,,,,activities/536281931.gpx.gz,81.64659881591797,,9729.0,8799.0,37836.30078125,19.0,,3574.889892578125,,2101.10009765625,2948.5,49.79999923706055,0.0007928889826871455,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762739,\"Jan 15, 2016, 4:39:51 PM\",Park City,Alpine Ski,Solo,9139,37.05,,,,,,activities/536281932.gpx.gz,81.64659881591797,,9139.0,7788.0,37057.5,15.699999809265137,,3085.389892578125,,2101.300048828125,2956.0,49.70000076293945,0.0008095530210994184,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n", | |
| "484762742,\"Jan 5, 2016, 4:36:26 PM\",Canyons,Alpine Ski,With Wilsons,26401,57.76,,,,,,activities/536281921.gpx.gz,81.64659881591797,,26401.0,12845.0,57767.3984375,16.799999237060547,,5239.39990234375,,2107.800048828125,2833.0,50.0,-0.058856699615716934,,,,,,,,,,,,,,,,,,,,,,,,,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"\"\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!head data/activities.csv" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "-3x6vWHNb0QU", | |
| "outputId": "db0aa9d4-3b94-4d35-cb0f-edd8abc92637" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (990, 94)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>Activity ID</th><th>Activity Date</th><th>Activity Name</th><th>Activity Type</th><th>Activity Description</th><th>Elapsed Time</th><th>Distance</th><th>Max Heart Rate</th><th>Relative Effort</th><th>Commute</th><th>Activity Private Note</th><th>Activity Gear</th><th>Filename</th><th>Athlete Weight</th><th>Bike Weight</th><th>Elapsed Time_duplicated_0</th><th>Moving Time</th><th>Distance_duplicated_0</th><th>Max Speed</th><th>Average Speed</th><th>Elevation Gain</th><th>Elevation Loss</th><th>Elevation Low</th><th>Elevation High</th><th>Max Grade</th><th>Average Grade</th><th>Average Positive Grade</th><th>Average Negative Grade</th><th>Max Cadence</th><th>Average Cadence</th><th>Max Heart Rate_duplicated_0</th><th>Average Heart Rate</th><th>Max Watts</th><th>Average Watts</th><th>Calories</th><th>Max Temperature</th><th>Average Temperature</th><th>…</th><th>Apparent Temperature</th><th>Dewpoint</th><th>Humidity</th><th>Weather Pressure</th><th>Wind Speed</th><th>Wind Gust</th><th>Wind Bearing</th><th>Precipitation Intensity</th><th>Sunrise Time</th><th>Sunset Time</th><th>Moon Phase</th><th>Bike</th><th>Gear</th><th>Precipitation Probability</th><th>Precipitation Type</th><th>Cloud Cover</th><th>Weather Visibility</th><th>UV Index</th><th>Weather Ozone</th><th>Jump Count</th><th>Total Grit</th><th>Average Flow</th><th>Flagged</th><th>Average Elapsed Speed</th><th>Dirt Distance</th><th>Newly Explored Distance</th><th>Newly Explored Dirt Distance</th><th>Activity Count</th><th>Total Steps</th><th>Carbon Saved</th><th>Pool Length</th><th>Training Load</th><th>Intensity</th><th>Average Grade Adjusted Pace</th><th>Timer Time</th><th>Total Cycles</th><th>Media</th></tr><tr><td>i64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>f64</td><td>str</td><td>str</td><td>bool</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>…</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>484762708</td><td>"Jan 1, 2016, 9:59:32 PM"</td><td>"Mueller Park Snowshoe"</td><td>"Snowshoe"</td><td>"w/ family"</td><td>9797</td><td>3.28</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>"activities/536281923.gpx.gz"</td><td>81.646599</td><td>null</td><td>9797.0</td><td>3082.0</td><td>3282.399902</td><td>3.0</td><td>null</td><td>105.389999</td><td>null</td><td>1586.699951</td><td>1694.199951</td><td>35.099998</td><td>0.006093</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>484762713</td><td>"Jan 11, 2016, 8:35:00 PM"</td><td>"Mueller Park Ski"</td><td>"Backcountry Ski"</td><td>"With Car at end"</td><td>5438</td><td>8.34</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>"activities/536281927.gpx.gz"</td><td>81.646599</td><td>null</td><td>5438.0</td><td>3492.0</td><td>8344.599609</td><td>21.700001</td><td>null</td><td>274.015015</td><td>null</td><td>1381.800049</td><td>1871.5</td><td>47.799999</td><td>-2.55015</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>484762714</td><td>"Jan 16, 2016, 2:53:15 PM"</td><td>"Mueller Park Ski"</td><td>"Backcountry Ski"</td><td>""</td><td>6963</td><td>5.24</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>"activities/536281925.gpx.gz"</td><td>81.646599</td><td>null</td><td>6963.0</td><td>3915.0</td><td>5241.200195</td><td>7.7</td><td>null</td><td>284.455994</td><td>null</td><td>1592.699951</td><td>1882.800049</td><td>48.5</td><td>0.032435</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>484762723</td><td>"Jan 2, 2016, 4:44:20 PM"</td><td>"Mueller Park Run"</td><td>"Run"</td><td>"With Tyler"</td><td>5248</td><td>10.89</td><td>null</td><td>null</td><td>false</td><td>null</td><td>"Luna Sandals Oso"</td><td>"activities/536281928.gpx.gz"</td><td>81.646599</td><td>null</td><td>5248.0</td><td>4619.0</td><td>10894.200195</td><td>7.5</td><td>null</td><td>421.481995</td><td>null</td><td>1585.099976</td><td>1906.0</td><td>47.799999</td><td>0.073434</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1.225675e6</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>484762726</td><td>"Dec 23, 2013, 2:03:46 PM"</td><td>"Tom's hill"</td><td>"Backcountry Ski"</td><td>"Tom's hill"</td><td>12289</td><td>8.78</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>"activities/536281939.gpx.gz"</td><td>81.646599</td><td>null</td><td>12289.0</td><td>7478.0</td><td>8782.900391</td><td>10.5</td><td>null</td><td>650.315002</td><td>null</td><td>2237.300049</td><td>2766.899902</td><td>48.599998</td><td>0.006831</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>13375285162</td><td>"Jan 16, 2025, 11:47:52 PM"</td><td>"Evening walk"</td><td>"Walk"</td><td>null</td><td>4400</td><td>3.73</td><td>null</td><td>null</td><td>false</td><td>null</td><td>"Luna Sandals Oso"</td><td>"activities/13375285162.gpx"</td><td>null</td><td>null</td><td>4400.0</td><td>3123.0</td><td>3734.699951</td><td>2.793333</td><td>"1.1958693265914917"</td><td>1077.065674</td><td>1077.065674</td><td>-245.399994</td><td>460.200012</td><td>50.0</td><td>-0.002678</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>374.655945</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1.225675e6</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>"0.848795473575592"</td><td>2143.800049</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>13381425823</td><td>"Jan 17, 2025, 7:17:10 PM"</td><td>"Morning walk"</td><td>"Walk"</td><td>null</td><td>1567</td><td>2.08</td><td>null</td><td>null</td><td>false</td><td>null</td><td>"Luna Sandals Oso"</td><td>"activities/13381425823.gpx"</td><td>null</td><td>null</td><td>1567.0</td><td>1428.0</td><td>2087.300049</td><td>2.98</td><td>"1.4616947174072266"</td><td>26.953091</td><td>26.953091</td><td>4.9</td><td>22.9</td><td>22.38806</td><td>-0.095818</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>209.392807</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1.225675e6</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>"1.332035779953003"</td><td>1811.300049</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>13391655502</td><td>"Jan 18, 2025, 7:32:25 PM"</td><td>"Basin 13"</td><td>"Alpine Ski"</td><td>null</td><td>10485</td><td>38.82</td><td>null</td><td>null</td><td>false</td><td>null</td><td>null</td><td>"activities/13391655502.gpx"</td><td>null</td><td>null</td><td>10485.0</td><td>7920.0</td><td>38826.199219</td><td>19.719999</td><td>"4.9022979736328125"</td><td>4198.770508</td><td>4198.790039</td><td>1948.099976</td><td>2692.800049</td><td>50.0</td><td>0.008242</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>"3.7030234336853027"</td><td>4177.5</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>13408704724</td><td>"Jan 20, 2025, 3:46:17 PM"</td><td>"DV 14"</td><td>"Alpine Ski"</td><td>null</td><td>19235</td><td>51.45</td><td>null</td><td>null</td><td>false</td><td>null</td><td>null</td><td>"activities/13408704724.gpx"</td><td>null</td><td>null</td><td>19235.0</td><td>11398.0</td><td>51452.300781</td><td>23.74</td><td>"4.514151573181152"</td><td>5577.28125</td><td>5577.28125</td><td>2185.199951</td><td>2915.600098</td><td>50.0</td><td>-0.005831</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>"2.674931049346924"</td><td>7265.899902</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr><tr><td>13480080256</td><td>"Jan 28, 2025, 5:22:45 PM"</td><td>"Brighton 15"</td><td>"Alpine Ski"</td><td>null</td><td>31277</td><td>71.92</td><td>null</td><td>null</td><td>false</td><td>null</td><td>null</td><td>"activities/13480080256.gpx"</td><td>null</td><td>null</td><td>31277.0</td><td>14011.0</td><td>71927.203125</td><td>24.469999</td><td>"5.1336236000061035"</td><td>6887.742188</td><td>6887.742188</td><td>2668.600098</td><td>3195.5</td><td>50.0</td><td>0.012791</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>…</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>"2.2996835708618164"</td><td>12016.700195</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>""</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (990, 94)\n", | |
| "┌──────────────┬──────────────┬──────────────┬─────────────┬───┬──────────┬───────┬────────┬───────┐\n", | |
| "│ Activity ID ┆ Activity ┆ Activity ┆ Activity ┆ … ┆ Average ┆ Timer ┆ Total ┆ Media │\n", | |
| "│ --- ┆ Date ┆ Name ┆ Type ┆ ┆ Grade ┆ Time ┆ Cycles ┆ --- │\n", | |
| "│ i64 ┆ --- ┆ --- ┆ --- ┆ ┆ Adjusted ┆ --- ┆ --- ┆ str │\n", | |
| "│ ┆ str ┆ str ┆ str ┆ ┆ Pace ┆ str ┆ str ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ --- ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ str ┆ ┆ ┆ │\n", | |
| "╞══════════════╪══════════════╪══════════════╪═════════════╪═══╪══════════╪═══════╪════════╪═══════╡\n", | |
| "│ 484762708 ┆ Jan 1, 2016, ┆ Mueller Park ┆ Snowshoe ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 9:59:32 PM ┆ Snowshoe ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 484762713 ┆ Jan 11, ┆ Mueller Park ┆ Backcountry ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2016, ┆ Ski ┆ Ski ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 8:35:00 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 484762714 ┆ Jan 16, ┆ Mueller Park ┆ Backcountry ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2016, ┆ Ski ┆ Ski ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 2:53:15 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 484762723 ┆ Jan 2, 2016, ┆ Mueller Park ┆ Run ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 4:44:20 PM ┆ Run ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 484762726 ┆ Dec 23, ┆ Tom's hill ┆ Backcountry ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2013, ┆ ┆ Ski ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 2:03:46 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 13375285162 ┆ Jan 16, ┆ Evening walk ┆ Walk ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2025, ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 11:47:52 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 13381425823 ┆ Jan 17, ┆ Morning walk ┆ Walk ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2025, ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 7:17:10 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 13391655502 ┆ Jan 18, ┆ Basin 13 ┆ Alpine Ski ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2025, ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 7:32:25 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 13408704724 ┆ Jan 20, ┆ DV 14 ┆ Alpine Ski ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2025, ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 3:46:17 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 13480080256 ┆ Jan 28, ┆ Brighton 15 ┆ Alpine Ski ┆ … ┆ null ┆ null ┆ null ┆ │\n", | |
| "│ ┆ 2025, ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ 5:22:45 PM ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "└──────────────┴──────────────┴──────────────┴─────────────┴───┴──────────┴───────┴────────┴───────┘" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "pl.read_csv('data/activities.csv')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "8T89B1ePb0QU" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import gpxpy\n", | |
| "\n", | |
| "data = gpxpy.parse(open('data/activities/13480080256.gpx'))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "nYUA3mx1b0QU", | |
| "outputId": "b8c18fcf-d682-4afc-8b0a-bf6c63f6268c" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'Brighton 15'" | |
| ] | |
| }, | |
| "execution_count": 62, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data.tracks[0].name" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "LEav63jWb0QU", | |
| "outputId": "fa535f14-d2c6-419d-d469-4b790e038aa1" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['__class__',\n", | |
| " '__delattr__',\n", | |
| " '__dir__',\n", | |
| " '__doc__',\n", | |
| " '__eq__',\n", | |
| " '__format__',\n", | |
| " '__ge__',\n", | |
| " '__getattribute__',\n", | |
| " '__gt__',\n", | |
| " '__hash__',\n", | |
| " '__init__',\n", | |
| " '__init_subclass__',\n", | |
| " '__le__',\n", | |
| " '__lt__',\n", | |
| " '__module__',\n", | |
| " '__ne__',\n", | |
| " '__new__',\n", | |
| " '__reduce__',\n", | |
| " '__reduce_ex__',\n", | |
| " '__repr__',\n", | |
| " '__setattr__',\n", | |
| " '__sizeof__',\n", | |
| " '__slotnames__',\n", | |
| " '__slots__',\n", | |
| " '__str__',\n", | |
| " '__subclasshook__',\n", | |
| " 'add_elevation',\n", | |
| " 'add_missing_data',\n", | |
| " 'adjust_time',\n", | |
| " 'clone',\n", | |
| " 'comment',\n", | |
| " 'description',\n", | |
| " 'extensions',\n", | |
| " 'get_bounds',\n", | |
| " 'get_center',\n", | |
| " 'get_duration',\n", | |
| " 'get_elevation_extremes',\n", | |
| " 'get_location_at',\n", | |
| " 'get_moving_data',\n", | |
| " 'get_nearest_location',\n", | |
| " 'get_points_no',\n", | |
| " 'get_time_bounds',\n", | |
| " 'get_uphill_downhill',\n", | |
| " 'gpx_10_fields',\n", | |
| " 'gpx_11_fields',\n", | |
| " 'has_elevations',\n", | |
| " 'has_times',\n", | |
| " 'join',\n", | |
| " 'length_2d',\n", | |
| " 'length_3d',\n", | |
| " 'link',\n", | |
| " 'link_text',\n", | |
| " 'link_type',\n", | |
| " 'move',\n", | |
| " 'name',\n", | |
| " 'number',\n", | |
| " 'reduce_points',\n", | |
| " 'remove_elevation',\n", | |
| " 'remove_empty',\n", | |
| " 'remove_time',\n", | |
| " 'segments',\n", | |
| " 'simplify',\n", | |
| " 'smooth',\n", | |
| " 'source',\n", | |
| " 'split',\n", | |
| " 'type',\n", | |
| " 'walk']" | |
| ] | |
| }, | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dir(data.tracks[0])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "6YbJFYyhb0QU", | |
| "outputId": "7f88c026-6682-4140-872a-1f6cad580ec5" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "shape: (30_547, 10)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ speed_bet ┆ name ┆ type ┆ filename │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ ween ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f64 ┆ f64 ┆ ┆ --- ┆ str ┆ str ┆ str │\n", | |
| "│ ┆ f64 ┆ ┆ ┆ ┆ f64 ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", | |
| "│ null ┆ 0.0 ┆ 40.59895 ┆ -111.58352 ┆ … ┆ null ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 7.527056 ┆ 40.599017 ┆ -111.58351 ┆ … ┆ 7.527056 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 3.311347 ┆ 40.599037 ┆ -111.58348 ┆ … ┆ 3.311347 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 3 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 1.287244 ┆ 40.599035 ┆ -111.58346 ┆ … ┆ 1.287244 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 8 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 1.325377 ┆ 40.599024 ┆ -111.58346 ┆ … ┆ 1.325377 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.0 ┆ 40.598024 ┆ -111.58345 ┆ … ┆ 0.0 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 0.0 ┆ 40.598024 ┆ -111.58345 ┆ … ┆ 0.0 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 0.0 ┆ 40.598024 ┆ -111.58345 ┆ … ┆ 0.0 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 0.0 ┆ 40.598024 ┆ -111.58345 ┆ … ┆ 0.0 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 0.0 ┆ 40.598024 ┆ -111.58345 ┆ … ┆ 0.0 ┆ Brighton ┆ AlpineSki ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ 15 ┆ ┆ vities/13 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 480080256 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴───────────┴───────────┴───────────┘\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import polars as pl\n", | |
| "import gpxpy\n", | |
| "import numpy as np\n", | |
| "\n", | |
| "def gpx_to_polars(fname):\n", | |
| " # Parse the GPX file\n", | |
| " data = gpxpy.parse(open(fname))\n", | |
| " prev = None\n", | |
| " data_dict = {'course': [],\n", | |
| " 'distance_2d': [],\n", | |
| " 'latitude': [],\n", | |
| " 'longitude': [],\n", | |
| " 'time': [],\n", | |
| " 'elevation': [],\n", | |
| " 'speed_between': [],\n", | |
| " }\n", | |
| " name = None\n", | |
| " type_ = None\n", | |
| " filename = fname\n", | |
| "\n", | |
| " # Iterate through tracks, segments, and points\n", | |
| " for track in data.tracks:\n", | |
| " if name is None:\n", | |
| " name = track.name\n", | |
| " type_ = track.type\n", | |
| "\n", | |
| " for seg in track.segments:\n", | |
| " for i, pt in enumerate(seg.points):\n", | |
| " if prev is None:\n", | |
| " prev = pt\n", | |
| " for key in data_dict:\n", | |
| " attr = getattr(pt, key)\n", | |
| " if callable(attr):\n", | |
| " data_dict[key].append(attr(prev))\n", | |
| " else:\n", | |
| " data_dict[key].append(attr)\n", | |
| " prev = pt\n", | |
| " data_dict['name'] = [name] * len(data_dict['course'])\n", | |
| " data_dict['type'] = [type_] * len(data_dict['course'])\n", | |
| " data_dict['filename'] = [filename] * len(data_dict['course'])\n", | |
| " # Create a Polars DataFrame\n", | |
| " df = (pl.DataFrame(data_dict)\n", | |
| " )\n", | |
| " return df\n", | |
| " (df\n", | |
| " #.with_columns([pl.col(\"time\").str.strptime(pl.Datetime, \"%Y-%m-%dT%H:%M:%SZ\", strict=False)])\n", | |
| " .with_columns(\n", | |
| " travelled= pl.col(\"distance_2d\").cum_sum(),\n", | |
| " elapsed=(pl.col(\"time\") - pl.col(\"time\").min()).dt.total_seconds()\n", | |
| " )\n", | |
| " .with_columns(\n", | |
| " avg_velocity=pl.col(\"travelled\") / pl.col(\"elapsed\"),\n", | |
| " rolling_travelled=pl.col(\"travelled\").rolling_mean(window_size=5),\n", | |
| " rolling_elapsed=pl.col(\"elapsed\").rolling_mean(window_size=5),\n", | |
| " )\n", | |
| " .with_columns(\n", | |
| " rolling_velocity=pl.col(\"rolling_travelled\") / pl.col(\"rolling_elapsed\"),\n", | |
| " rolling_between=pl.col(\"speed_between\").rolling_mean(window_size=5),\n", | |
| " )\n", | |
| " )\n", | |
| "\n", | |
| " return df\n", | |
| "\n", | |
| "# Example usage:\n", | |
| "#crash_gpx = gpxpy.parse(open('/Users/matt/Downloads/Face_plant.gpx'))\n", | |
| "df = gpx_to_polars('data/activities/13480080256.gpx')\n", | |
| "print(df)\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "TTpbSjcYb0QV" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import glob\n", | |
| "\n", | |
| "files = glob.glob('data/activities/*.gpx')\n", | |
| "dfs = []\n", | |
| "for file in files:\n", | |
| " df = gpx_to_polars(file)\n", | |
| " dfs.append(df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "T2LvhVw0b0QV" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "(pl.concat(dfs)\n", | |
| " .write_parquet('data/activities.parquet')\n", | |
| ")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "u9GfD8KVb0QV" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "(#tweak_strava(raw)\n", | |
| "raw\n", | |
| "# make time naive - no tz\n", | |
| " .with_columns(time=pl.col('time').dt.replace_time_zone(None))\n", | |
| " .write_parquet('activities_naive.parquet')\n", | |
| ")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "BuNIhjerb0QV" | |
| }, | |
| "source": [ | |
| "\n", | |
| "## Load Data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 654 | |
| }, | |
| "id": "PV0mJdKlb0QV", | |
| "outputId": "e2056135-3a81-4ec0-fff8-ac2fed949724" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (5_050_370, 10)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ speed_bet ┆ name ┆ type ┆ filename │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ ween ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f64 ┆ f64 ┆ ┆ --- ┆ str ┆ str ┆ str │\n", | |
| "│ ┆ f64 ┆ ┆ ┆ ┆ f64 ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ null ┆ 365 and ┆ ebikeride ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ spork ┆ ┆ vities/11 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370844 ┆ -111.90171 ┆ … ┆ 6.705301 ┆ 365 and ┆ ebikeride ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ spork ┆ ┆ vities/11 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370807 ┆ -111.90171 ┆ … ┆ 4.161328 ┆ 365 and ┆ ebikeride ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 9 ┆ ┆ ┆ spork ┆ ┆ vities/11 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370784 ┆ -111.90172 ┆ … ┆ 2.62628 ┆ 365 and ┆ ebikeride ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ┆ spork ┆ ┆ vities/11 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ 1.273223 ┆ 365 and ┆ ebikeride ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ spork ┆ ┆ vities/11 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ 0.172201 ┆ Morning ┆ walking ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ walk ┆ ┆ vities/59 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879282 ┆ -111.85536 ┆ … ┆ 0.238017 ┆ Morning ┆ walking ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ walk ┆ ┆ vities/59 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879291 ┆ -111.85536 ┆ … ┆ 0.528465 ┆ Morning ┆ walking ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ walk ┆ ┆ vities/59 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879301 ┆ -111.85537 ┆ … ┆ 0.421153 ┆ Morning ┆ walking ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ walk ┆ ┆ vities/59 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879309 ┆ -111.85537 ┆ … ┆ 1.023777 ┆ Morning ┆ walking ┆ data/acti │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ ┆ walk ┆ ┆ vities/59 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴───────────┴───────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 10)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th></tr><tr><td>null</td><td>f64</td><td>f64</td><td>f64</td><td>datetime[μs, UTC]</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56 UTC</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>null</td><td>6.704555</td><td>41.370844</td><td>-111.901712</td><td>2024-06-29 16:54:57 UTC</td><td>1712.9</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>null</td><td>4.160126</td><td>41.370807</td><td>-111.901719</td><td>2024-06-29 16:54:58 UTC</td><td>1712.8</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>null</td><td>2.62628</td><td>41.370784</td><td>-111.901726</td><td>2024-06-29 16:54:59 UTC</td><td>1712.8</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.90173</td><td>2024-06-29 16:55:00 UTC</td><td>1712.7</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855361</td><td>2021-09-09 16:01:42 UTC</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>null</td><td>0.238017</td><td>40.879282</td><td>-111.85536</td><td>2021-09-09 16:01:43 UTC</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>null</td><td>1.05693</td><td>40.879291</td><td>-111.855364</td><td>2021-09-09 16:01:45 UTC</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>null</td><td>1.259495</td><td>40.879301</td><td>-111.855371</td><td>2021-09-09 16:01:48 UTC</td><td>1479.1</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>null</td><td>1.023777</td><td>40.879309</td><td>-111.855377</td><td>2021-09-09 16:01:49 UTC</td><td>1479.1</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 63 | |
| } | |
| ], | |
| "source": [ | |
| "import polars as pl\n", | |
| "import polars.selectors as cs\n", | |
| "file = '/content/drive/MyDrive/Colab Notebooks/clients/nvidia/GTC2024/data/activities.parquet'\n", | |
| "#file = 'activities_naive.parquet'\n", | |
| "raw = pl.read_parquet(file)\n", | |
| "raw" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "c2zX6r_wb0QV" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "fXbAws6gb0QV" | |
| }, | |
| "source": [ | |
| "## Types" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "6DgAImEJb0QV", | |
| "outputId": "db5ddeed-51f1-40e9-aec5-ba21c797acc3" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "['course', 'distance_2d', 'latitude', 'longitude', 'time', 'elevation', 'speed_between', 'name', 'type', 'filename']\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(raw.columns)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "8Nt84aaQb0QV", | |
| "outputId": "8ea76f73-ed37-4162-c5de-35c47d4e8a75" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[Null,\n", | |
| " Float64,\n", | |
| " Float64,\n", | |
| " Float64,\n", | |
| " Datetime(time_unit='us', time_zone='UTC'),\n", | |
| " Float64,\n", | |
| " Float64,\n", | |
| " String,\n", | |
| " String,\n", | |
| " String]" | |
| ] | |
| }, | |
| "execution_count": 72, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "cols = ['course', 'distance_2d', 'latitude', 'longitude', 'time', 'elevation',\n", | |
| " 'speed_between', 'name', 'type', 'filename']\n", | |
| "raw[cols].dtypes" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "1J9PPp-Sb0QV", | |
| "outputId": "da197c68-a485-42dd-91f5-07509db9095b" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "506546445" | |
| ] | |
| }, | |
| "execution_count": 91, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# 506 MB\n", | |
| "raw[cols].estimated_size()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "XBwkc8Pzb0QV" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "Jmf9uR_wb0QV" | |
| }, | |
| "source": [ | |
| "## Ints" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "qSAANvE2b0QV", | |
| "outputId": "5da75ce1-0c83-44d6-fd2a-9e698256dfdb" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 11)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th></tr><tr><td>null</td><td>f64</td><td>f64</td><td>f64</td><td>datetime[μs, UTC]</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>i64</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56 UTC</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>6.704555</td><td>41.370844</td><td>-111.901712</td><td>2024-06-29 16:54:57 UTC</td><td>1712.9</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>4.160126</td><td>41.370807</td><td>-111.901719</td><td>2024-06-29 16:54:58 UTC</td><td>1712.8</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>2.62628</td><td>41.370784</td><td>-111.901726</td><td>2024-06-29 16:54:59 UTC</td><td>1712.8</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.90173</td><td>2024-06-29 16:55:00 UTC</td><td>1712.7</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855361</td><td>2021-09-09 16:01:42 UTC</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>0.238017</td><td>40.879282</td><td>-111.85536</td><td>2021-09-09 16:01:43 UTC</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>1.05693</td><td>40.879291</td><td>-111.855364</td><td>2021-09-09 16:01:45 UTC</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>1.259495</td><td>40.879301</td><td>-111.855371</td><td>2021-09-09 16:01:48 UTC</td><td>1479.1</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>1.023777</td><td>40.879309</td><td>-111.855377</td><td>2021-09-09 16:01:49 UTC</td><td>1479.1</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 11)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ name ┆ type ┆ filename ┆ id │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f64 ┆ f64 ┆ ┆ str ┆ str ┆ str ┆ i64 │\n", | |
| "│ ┆ f64 ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370844 ┆ -111.90171 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370807 ┆ -111.90171 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 9 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370784 ┆ -111.90172 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879282 ┆ -111.85536 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879291 ┆ -111.85536 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879301 ┆ -111.85537 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879309 ┆ -111.85537 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴───────────┴───────────┴───────────┘" | |
| ] | |
| }, | |
| "execution_count": 80, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# add a id from the filename\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "pzNvp7Dkb0QV", | |
| "outputId": "1629c1a9-df6e-4eb8-ca04-4ea0a9f56661" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 11)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th></tr><tr><td>null</td><td>f64</td><td>f64</td><td>f64</td><td>datetime[μs, UTC]</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>i64</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56 UTC</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>6.704555</td><td>41.370844</td><td>-111.901712</td><td>2024-06-29 16:54:57 UTC</td><td>1712.9</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>4.160126</td><td>41.370807</td><td>-111.901719</td><td>2024-06-29 16:54:58 UTC</td><td>1712.8</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>2.62628</td><td>41.370784</td><td>-111.901726</td><td>2024-06-29 16:54:59 UTC</td><td>1712.8</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.90173</td><td>2024-06-29 16:55:00 UTC</td><td>1712.7</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855361</td><td>2021-09-09 16:01:42 UTC</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>0.238017</td><td>40.879282</td><td>-111.85536</td><td>2021-09-09 16:01:43 UTC</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>1.05693</td><td>40.879291</td><td>-111.855364</td><td>2021-09-09 16:01:45 UTC</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>1.259495</td><td>40.879301</td><td>-111.855371</td><td>2021-09-09 16:01:48 UTC</td><td>1479.1</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr><tr><td>null</td><td>1.023777</td><td>40.879309</td><td>-111.855377</td><td>2021-09-09 16:01:49 UTC</td><td>1479.1</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 11)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ name ┆ type ┆ filename ┆ id │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f64 ┆ f64 ┆ ┆ str ┆ str ┆ str ┆ i64 │\n", | |
| "│ ┆ f64 ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370844 ┆ -111.90171 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370807 ┆ -111.90171 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 9 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370784 ┆ -111.90172 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ 365 and ┆ ebikeride ┆ data/acti ┆ 117698380 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ spork ┆ ┆ vities/11 ┆ 26 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 769838026 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ .gp… ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879282 ┆ -111.85536 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879291 ┆ -111.85536 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879301 ┆ -111.85537 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879309 ┆ -111.85537 ┆ … ┆ Morning ┆ walking ┆ data/acti ┆ 593262822 │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ walk ┆ ┆ vities/59 ┆ 8 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 32628228. ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ gpx ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴───────────┴───────────┴───────────┘" | |
| ] | |
| }, | |
| "execution_count": 84, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# add an elapsed column to each activity\n", | |
| "# add a id from the filename\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id))\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "qtHmKREqb0QV", | |
| "outputId": "79a79525-e05b-483a-ea47-3b337eddf976" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th></tr><tr><td>null</td><td>f64</td><td>f64</td><td>f64</td><td>datetime[μs, UTC]</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56 UTC</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td></tr><tr><td>null</td><td>6.704555</td><td>41.370844</td><td>-111.901712</td><td>2024-06-29 16:54:57 UTC</td><td>1712.9</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td></tr><tr><td>null</td><td>4.160126</td><td>41.370807</td><td>-111.901719</td><td>2024-06-29 16:54:58 UTC</td><td>1712.8</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td></tr><tr><td>null</td><td>2.62628</td><td>41.370784</td><td>-111.901726</td><td>2024-06-29 16:54:59 UTC</td><td>1712.8</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.90173</td><td>2024-06-29 16:55:00 UTC</td><td>1712.7</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855361</td><td>2021-09-09 16:01:42 UTC</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td></tr><tr><td>null</td><td>0.238017</td><td>40.879282</td><td>-111.85536</td><td>2021-09-09 16:01:43 UTC</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td></tr><tr><td>null</td><td>1.05693</td><td>40.879291</td><td>-111.855364</td><td>2021-09-09 16:01:45 UTC</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td></tr><tr><td>null</td><td>1.259495</td><td>40.879301</td><td>-111.855371</td><td>2021-09-09 16:01:48 UTC</td><td>1479.1</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td></tr><tr><td>null</td><td>1.023777</td><td>40.879309</td><td>-111.855377</td><td>2021-09-09 16:01:49 UTC</td><td>1479.1</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬────────────┬────────────┬─────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ type ┆ filename ┆ id ┆ elapsed │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f64 ┆ f64 ┆ ┆ str ┆ str ┆ i64 ┆ i64 │\n", | |
| "│ ┆ f64 ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪════════════╪════════════╪═════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 0 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370844 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 1 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370807 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 2 │\n", | |
| "│ ┆ ┆ ┆ 9 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370784 ┆ -111.90172 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 4 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4275 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879282 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4276 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879291 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4278 │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879301 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4281 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879309 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4282 │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴────────────┴────────────┴─────────┘" | |
| ] | |
| }, | |
| "execution_count": 87, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# add an elapsed column to each activity\n", | |
| "# add a id from the filename\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed)\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "vuxd-45ab0QW", | |
| "outputId": "071c9c05-03d3-48ec-cb1d-73dea42b6efe" | |
| }, | |
| "outputs": [ | |
| { | |
| "ename": "InvalidOperationError", | |
| "evalue": "conversion from `i64` to `i16` failed in column 'time' for 231842 out of 5050370 values: [32768, 32769, … 82899]", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mInvalidOperationError\u001b[0m Traceback (most recent call last)", | |
| "Cell \u001b[0;32mIn[88], line 15\u001b[0m\n\u001b[1;32m 3\u001b[0m calc_id \u001b[38;5;241m=\u001b[39m (pl\u001b[38;5;241m.\u001b[39mcol(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfilename\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 4\u001b[0m \u001b[38;5;241m.\u001b[39mstr\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 5\u001b[0m \u001b[38;5;241m.\u001b[39mlist\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 6\u001b[0m \u001b[38;5;241m.\u001b[39mstr\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.gpx\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;241m.\u001b[39mcast(pl\u001b[38;5;241m.\u001b[39mInt64)\n\u001b[1;32m 8\u001b[0m )\n\u001b[1;32m 9\u001b[0m calc_elapsed \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 10\u001b[0m (pl\u001b[38;5;241m.\u001b[39mcol(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;241m-\u001b[39m pl\u001b[38;5;241m.\u001b[39mcol(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mmin())\n\u001b[1;32m 11\u001b[0m \u001b[38;5;241m.\u001b[39mdt\u001b[38;5;241m.\u001b[39mtotal_seconds()\n\u001b[1;32m 12\u001b[0m \u001b[38;5;241m.\u001b[39mover(pl\u001b[38;5;241m.\u001b[39mcol(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mid\u001b[39m\u001b[38;5;124m'\u001b[39m))\n\u001b[1;32m 13\u001b[0m )\n\u001b[0;32m---> 15\u001b[0m (\u001b[43mraw\u001b[49m\n\u001b[1;32m 16\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mselect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcols\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;66;43;03m# add elapsed time\u001b[39;49;00m\n\u001b[1;32m 18\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwith_columns\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcalc_id\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 19\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;66;43;03m# needs to be in its own with_columns because we reference id\u001b[39;49;00m\n\u001b[1;32m 20\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwith_columns\u001b[49m\u001b[43m(\u001b[49m\u001b[43melapsed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcalc_elapsed\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcast\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mInt16\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 21\u001b[0m \n\u001b[1;32m 22\u001b[0m )\n", | |
| "File \u001b[0;32m~/.envs/menv/lib/python3.10/site-packages/polars/dataframe/frame.py:9586\u001b[0m, in \u001b[0;36mDataFrame.with_columns\u001b[0;34m(self, *exprs, **named_exprs)\u001b[0m\n\u001b[1;32m 9440\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mwith_columns\u001b[39m(\n\u001b[1;32m 9441\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 9442\u001b[0m \u001b[38;5;241m*\u001b[39mexprs: IntoExpr \u001b[38;5;241m|\u001b[39m Iterable[IntoExpr],\n\u001b[1;32m 9443\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mnamed_exprs: IntoExpr,\n\u001b[1;32m 9444\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DataFrame:\n\u001b[1;32m 9445\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 9446\u001b[0m \u001b[38;5;124;03m Add columns to this DataFrame.\u001b[39;00m\n\u001b[1;32m 9447\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 9584\u001b[0m \u001b[38;5;124;03m └─────┴──────┴─────────────┘\u001b[39;00m\n\u001b[1;32m 9585\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 9586\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlazy\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwith_columns\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mexprs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mnamed_exprs\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcollect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_eager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", | |
| "File \u001b[0;32m~/.envs/menv/lib/python3.10/site-packages/polars/lazyframe/frame.py:2056\u001b[0m, in \u001b[0;36mLazyFrame.collect\u001b[0;34m(self, type_coercion, _type_check, predicate_pushdown, projection_pushdown, simplify_expression, slice_pushdown, comm_subplan_elim, comm_subexpr_elim, cluster_with_columns, collapse_joins, no_optimization, streaming, engine, background, _check_order, _eager, **_kwargs)\u001b[0m\n\u001b[1;32m 2054\u001b[0m \u001b[38;5;66;03m# Only for testing purposes\u001b[39;00m\n\u001b[1;32m 2055\u001b[0m callback \u001b[38;5;241m=\u001b[39m _kwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost_opt_callback\u001b[39m\u001b[38;5;124m\"\u001b[39m, callback)\n\u001b[0;32m-> 2056\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m wrap_df(\u001b[43mldf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcollect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcallback\u001b[49m\u001b[43m)\u001b[49m)\n", | |
| "\u001b[0;31mInvalidOperationError\u001b[0m: conversion from `i64` to `i16` failed in column 'time' for 231842 out of 5050370 values: [32768, 32769, … 82899]" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# cast ints to int16\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int16))\n", | |
| "\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "ik7-wJ0nb0QW", | |
| "outputId": "3e10a354-6052-461d-dd29-79a3dac97222" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (9, 3)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>statistic</th><th>id</th><th>elapsed</th></tr><tr><td>str</td><td>f64</td><td>f64</td></tr></thead><tbody><tr><td>"count"</td><td>5.05037e6</td><td>5.05037e6</td></tr><tr><td>"null_count"</td><td>0.0</td><td>0.0</td></tr><tr><td>"mean"</td><td>7.3017e9</td><td>289710.218237</td></tr><tr><td>"std"</td><td>3.8561e9</td><td>1.8556e7</td></tr><tr><td>"min"</td><td>4.86569874e8</td><td>0.0</td></tr><tr><td>"25%"</td><td>3.8631e9</td><td>1843.0</td></tr><tr><td>"50%"</td><td>8.0096e9</td><td>4121.0</td></tr><tr><td>"75%"</td><td>1.0564e10</td><td>8384.0</td></tr><tr><td>"max"</td><td>1.3480e10</td><td>1.2386e9</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (9, 3)\n", | |
| "┌────────────┬──────────────┬───────────────┐\n", | |
| "│ statistic ┆ id ┆ elapsed │\n", | |
| "│ --- ┆ --- ┆ --- │\n", | |
| "│ str ┆ f64 ┆ f64 │\n", | |
| "╞════════════╪══════════════╪═══════════════╡\n", | |
| "│ count ┆ 5.05037e6 ┆ 5.05037e6 │\n", | |
| "│ null_count ┆ 0.0 ┆ 0.0 │\n", | |
| "│ mean ┆ 7.3017e9 ┆ 289710.218237 │\n", | |
| "│ std ┆ 3.8561e9 ┆ 1.8556e7 │\n", | |
| "│ min ┆ 4.86569874e8 ┆ 0.0 │\n", | |
| "│ 25% ┆ 3.8631e9 ┆ 1843.0 │\n", | |
| "│ 50% ┆ 8.0096e9 ┆ 4121.0 │\n", | |
| "│ 75% ┆ 1.0564e10 ┆ 8384.0 │\n", | |
| "│ max ┆ 1.3480e10 ┆ 1.2386e9 │\n", | |
| "└────────────┴──────────────┴───────────────┘" | |
| ] | |
| }, | |
| "execution_count": 95, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# describe\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed)\n", | |
| " .select(cs.integer())\n", | |
| " .describe()\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "55mMPVx6b0QW", | |
| "outputId": "952a07e6-ea48-4a81-aea2-efdd3f448f11" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "iinfo(min=-32768, max=32767, dtype=int16)" | |
| ] | |
| }, | |
| "execution_count": 96, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "np.iinfo(np.int16)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "6LvtSwg1b0QW", | |
| "outputId": "dddc88d4-39e0-427b-f3d0-c101be53f20d" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "iinfo(min=-2147483648, max=2147483647, dtype=int32)" | |
| ] | |
| }, | |
| "execution_count": 97, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "np.iinfo(np.int32)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "WAmNveytb0QW", | |
| "outputId": "889fad07-d58d-4d9c-b45e-5f1df78879de" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th></tr><tr><td>null</td><td>f64</td><td>f64</td><td>f64</td><td>datetime[μs, UTC]</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>i32</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56 UTC</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td></tr><tr><td>null</td><td>6.704555</td><td>41.370844</td><td>-111.901712</td><td>2024-06-29 16:54:57 UTC</td><td>1712.9</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td></tr><tr><td>null</td><td>4.160126</td><td>41.370807</td><td>-111.901719</td><td>2024-06-29 16:54:58 UTC</td><td>1712.8</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td></tr><tr><td>null</td><td>2.62628</td><td>41.370784</td><td>-111.901726</td><td>2024-06-29 16:54:59 UTC</td><td>1712.8</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.90173</td><td>2024-06-29 16:55:00 UTC</td><td>1712.7</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855361</td><td>2021-09-09 16:01:42 UTC</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td></tr><tr><td>null</td><td>0.238017</td><td>40.879282</td><td>-111.85536</td><td>2021-09-09 16:01:43 UTC</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td></tr><tr><td>null</td><td>1.05693</td><td>40.879291</td><td>-111.855364</td><td>2021-09-09 16:01:45 UTC</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td></tr><tr><td>null</td><td>1.259495</td><td>40.879301</td><td>-111.855371</td><td>2021-09-09 16:01:48 UTC</td><td>1479.1</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td></tr><tr><td>null</td><td>1.023777</td><td>40.879309</td><td>-111.855377</td><td>2021-09-09 16:01:49 UTC</td><td>1479.1</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬────────────┬────────────┬─────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ type ┆ filename ┆ id ┆ elapsed │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f64 ┆ f64 ┆ ┆ str ┆ str ┆ i64 ┆ i32 │\n", | |
| "│ ┆ f64 ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪════════════╪════════════╪═════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 0 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370844 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 1 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370807 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 2 │\n", | |
| "│ ┆ ┆ ┆ 9 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370784 ┆ -111.90172 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 4 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4275 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879282 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4276 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879291 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4278 │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879301 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4281 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879309 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4282 │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴────────────┴────────────┴─────────┘" | |
| ] | |
| }, | |
| "execution_count": 89, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# cast ints to int16\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| "\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "CC1LDWhhb0QW", | |
| "outputId": "cd6ac1f9-89e7-4e5b-f320-653efb2875c7" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "567150885" | |
| ] | |
| }, | |
| "execution_count": 90, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# cast ints to int16\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| " .estimated_size()\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "exA3RvO5b0QW" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "HVnVCbiob0QW" | |
| }, | |
| "source": [ | |
| "## Floats\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "l2GDDsIub0QW", | |
| "outputId": "8df59bad-c2f8-4732-c0be-3b13e4ec4319" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>elevation</th><th>speed_between</th></tr><tr><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>1713.0</td><td>null</td></tr><tr><td>6.704555</td><td>41.370844</td><td>-111.901712</td><td>1712.9</td><td>6.705301</td></tr><tr><td>4.160126</td><td>41.370807</td><td>-111.901719</td><td>1712.8</td><td>4.161328</td></tr><tr><td>2.62628</td><td>41.370784</td><td>-111.901726</td><td>1712.8</td><td>2.62628</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.90173</td><td>1712.7</td><td>1.273223</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855361</td><td>1479.0</td><td>0.172201</td></tr><tr><td>0.238017</td><td>40.879282</td><td>-111.85536</td><td>1479.0</td><td>0.238017</td></tr><tr><td>1.05693</td><td>40.879291</td><td>-111.855364</td><td>1479.0</td><td>0.528465</td></tr><tr><td>1.259495</td><td>40.879301</td><td>-111.855371</td><td>1479.1</td><td>0.421153</td></tr><tr><td>1.023777</td><td>40.879309</td><td>-111.855377</td><td>1479.1</td><td>1.023777</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 5)\n", | |
| "┌─────────────┬───────────┬─────────────┬───────────┬───────────────┐\n", | |
| "│ distance_2d ┆ latitude ┆ longitude ┆ elevation ┆ speed_between │\n", | |
| "│ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ f64 ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", | |
| "╞═════════════╪═══════════╪═════════════╪═══════════╪═══════════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.901772 ┆ 1713.0 ┆ null │\n", | |
| "│ 6.704555 ┆ 41.370844 ┆ -111.901712 ┆ 1712.9 ┆ 6.705301 │\n", | |
| "│ 4.160126 ┆ 41.370807 ┆ -111.901719 ┆ 1712.8 ┆ 4.161328 │\n", | |
| "│ 2.62628 ┆ 41.370784 ┆ -111.901726 ┆ 1712.8 ┆ 2.62628 │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ 1712.7 ┆ 1.273223 │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.855361 ┆ 1479.0 ┆ 0.172201 │\n", | |
| "│ 0.238017 ┆ 40.879282 ┆ -111.85536 ┆ 1479.0 ┆ 0.238017 │\n", | |
| "│ 1.05693 ┆ 40.879291 ┆ -111.855364 ┆ 1479.0 ┆ 0.528465 │\n", | |
| "│ 1.259495 ┆ 40.879301 ┆ -111.855371 ┆ 1479.1 ┆ 0.421153 │\n", | |
| "│ 1.023777 ┆ 40.879309 ┆ -111.855377 ┆ 1479.1 ┆ 1.023777 │\n", | |
| "└─────────────┴───────────┴─────────────┴───────────┴───────────────┘" | |
| ] | |
| }, | |
| "execution_count": 98, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# cast\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| " .select(cs.float())\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Z1Ehq7_8b0QW", | |
| "outputId": "8000e794-bb69-4912-8e53-21159ff1db8d" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']" | |
| ] | |
| }, | |
| "execution_count": 112, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# cast\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| " .select(cs.float())\n", | |
| " .columns\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "x03Lx0w4b0QW", | |
| "outputId": "ab45299b-63cf-4ce9-a97a-87702d4fa8d5" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th></tr><tr><td>null</td><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, UTC]</td><td>f32</td><td>f32</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>i32</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56 UTC</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td></tr><tr><td>null</td><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 16:54:57 UTC</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td></tr><tr><td>null</td><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 16:54:58 UTC</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td></tr><tr><td>null</td><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 16:54:59 UTC</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 16:55:00 UTC</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 16:01:42 UTC</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td></tr><tr><td>null</td><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 16:01:43 UTC</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td></tr><tr><td>null</td><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 16:01:45 UTC</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td></tr><tr><td>null</td><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 16:01:48 UTC</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td></tr><tr><td>null</td><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 16:01:49 UTC</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬────────────┬────────────┬─────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ type ┆ filename ┆ id ┆ elapsed │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f32 ┆ f32 ┆ ┆ str ┆ str ┆ i64 ┆ i32 │\n", | |
| "│ ┆ f32 ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪════════════╪════════════╪═════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 0 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370846 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 1 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370808 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 2 │\n", | |
| "│ ┆ ┆ ┆ 8 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370785 ┆ -111.90172 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 4 │\n", | |
| "│ ┆ ┆ ┆ 3 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4275 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879284 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4276 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879292 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4278 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879299 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4281 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879311 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4282 │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴────────────┴────────────┴─────────┘" | |
| ] | |
| }, | |
| "execution_count": 115, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# need less than 7 decimal digits of precision\n", | |
| "# convert to float32\n", | |
| "# cast\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| " .with_columns(pl.col(float_cols).cast(pl.Float32))\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "itp8eWSUb0QX" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Jm8eho6eb0QX" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "vFCFhOR5b0QX" | |
| }, | |
| "source": [ | |
| "## Strings" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "cQr4EYIib0QX", | |
| "outputId": "98bddf27-eddf-4c20-852a-9a4644821a61" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 3)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>name</th><th>type</th><th>filename</th></tr><tr><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td></tr><tr><td>…</td><td>…</td><td>…</td></tr><tr><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr><tr><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 3)\n", | |
| "┌───────────────┬───────────┬─────────────────────────────────┐\n", | |
| "│ name ┆ type ┆ filename │\n", | |
| "│ --- ┆ --- ┆ --- │\n", | |
| "│ str ┆ str ┆ str │\n", | |
| "╞═══════════════╪═══════════╪═════════════════════════════════╡\n", | |
| "│ 365 and spork ┆ ebikeride ┆ data/activities/11769838026.gp… │\n", | |
| "│ 365 and spork ┆ ebikeride ┆ data/activities/11769838026.gp… │\n", | |
| "│ 365 and spork ┆ ebikeride ┆ data/activities/11769838026.gp… │\n", | |
| "│ 365 and spork ┆ ebikeride ┆ data/activities/11769838026.gp… │\n", | |
| "│ 365 and spork ┆ ebikeride ┆ data/activities/11769838026.gp… │\n", | |
| "│ … ┆ … ┆ … │\n", | |
| "│ Morning walk ┆ walking ┆ data/activities/5932628228.gpx │\n", | |
| "│ Morning walk ┆ walking ┆ data/activities/5932628228.gpx │\n", | |
| "│ Morning walk ┆ walking ┆ data/activities/5932628228.gpx │\n", | |
| "│ Morning walk ┆ walking ┆ data/activities/5932628228.gpx │\n", | |
| "│ Morning walk ┆ walking ┆ data/activities/5932628228.gpx │\n", | |
| "└───────────────┴───────────┴─────────────────────────────────┘" | |
| ] | |
| }, | |
| "execution_count": 116, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| " .with_columns(pl.col(float_cols).cast(pl.Float32))\n", | |
| " .select(cs.string())\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "WWcuhXrPb0Qa", | |
| "outputId": "1e08395e-9a2b-4681-94de-4bebac6dfcea" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<polars.expr.string.ExprStringNameSpace at 0x14699f070>" | |
| ] | |
| }, | |
| "execution_count": 120, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "pl.col('').str" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "dr_YCcOdb0Qa", | |
| "outputId": "4f3cb3c0-0ef0-447c-e187-6682eb7dfd31" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['__class__',\n", | |
| " '__delattr__',\n", | |
| " '__dict__',\n", | |
| " '__dir__',\n", | |
| " '__doc__',\n", | |
| " '__eq__',\n", | |
| " '__format__',\n", | |
| " '__ge__',\n", | |
| " '__getattribute__',\n", | |
| " '__gt__',\n", | |
| " '__hash__',\n", | |
| " '__init__',\n", | |
| " '__init_subclass__',\n", | |
| " '__le__',\n", | |
| " '__lt__',\n", | |
| " '__module__',\n", | |
| " '__ne__',\n", | |
| " '__new__',\n", | |
| " '__reduce__',\n", | |
| " '__reduce_ex__',\n", | |
| " '__repr__',\n", | |
| " '__setattr__',\n", | |
| " '__sizeof__',\n", | |
| " '__str__',\n", | |
| " '__subclasshook__',\n", | |
| " '__weakref__',\n", | |
| " '_accessor',\n", | |
| " '_pyexpr',\n", | |
| " 'concat',\n", | |
| " 'contains',\n", | |
| " 'contains_any',\n", | |
| " 'count_matches',\n", | |
| " 'decode',\n", | |
| " 'encode',\n", | |
| " 'ends_with',\n", | |
| " 'escape_regex',\n", | |
| " 'explode',\n", | |
| " 'extract',\n", | |
| " 'extract_all',\n", | |
| " 'extract_groups',\n", | |
| " 'extract_many',\n", | |
| " 'find',\n", | |
| " 'find_many',\n", | |
| " 'head',\n", | |
| " 'join',\n", | |
| " 'json_decode',\n", | |
| " 'json_path_match',\n", | |
| " 'len_bytes',\n", | |
| " 'len_chars',\n", | |
| " 'normalize',\n", | |
| " 'pad_end',\n", | |
| " 'pad_start',\n", | |
| " 'replace',\n", | |
| " 'replace_all',\n", | |
| " 'replace_many',\n", | |
| " 'reverse',\n", | |
| " 'slice',\n", | |
| " 'split',\n", | |
| " 'split_exact',\n", | |
| " 'splitn',\n", | |
| " 'starts_with',\n", | |
| " 'strip_chars',\n", | |
| " 'strip_chars_end',\n", | |
| " 'strip_chars_start',\n", | |
| " 'strip_prefix',\n", | |
| " 'strip_suffix',\n", | |
| " 'strptime',\n", | |
| " 'tail',\n", | |
| " 'to_date',\n", | |
| " 'to_datetime',\n", | |
| " 'to_decimal',\n", | |
| " 'to_integer',\n", | |
| " 'to_lowercase',\n", | |
| " 'to_time',\n", | |
| " 'to_titlecase',\n", | |
| " 'to_uppercase',\n", | |
| " 'zfill']" | |
| ] | |
| }, | |
| "execution_count": 121, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dir(pl.col('').str)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "KOkpOSQXb0Qa", | |
| "outputId": "b23f621e-46cb-4b15-bcb0-4f666392bad0" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "263290777" | |
| ] | |
| }, | |
| "execution_count": 123, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# cast to categorical removes 50% of the size\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| " .with_columns(pl.col(float_cols).cast(pl.Float32))\n", | |
| " .with_columns(cs.string().cast(pl.Categorical))\n", | |
| " .estimated_size()\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "VD3y1LpTb0Qa", | |
| "outputId": "01629417-a59a-4d5e-d729-2d2c3860bd56" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['name', 'type', 'filename']" | |
| ] | |
| }, | |
| "execution_count": 125, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# cast to categorical removes 50% of the size\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(elapsed=calc_elapsed.cast(pl.Int32))\n", | |
| " .with_columns(pl.col(float_cols).cast(pl.Float32))\n", | |
| " #.with_columns(cs.string().cast(pl.Categorical))\n", | |
| " .select(cs.string())\n", | |
| " .columns\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "6L4WvjaQb0Qa", | |
| "outputId": "05cd54e9-02fe-4473-ebce-5c39e51934cc" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th></tr><tr><td>null</td><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, UTC]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56 UTC</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td></tr><tr><td>null</td><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 16:54:57 UTC</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td></tr><tr><td>null</td><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 16:54:58 UTC</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td></tr><tr><td>null</td><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 16:54:59 UTC</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 16:55:00 UTC</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 16:01:42 UTC</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td></tr><tr><td>null</td><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 16:01:43 UTC</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td></tr><tr><td>null</td><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 16:01:45 UTC</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td></tr><tr><td>null</td><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 16:01:48 UTC</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td></tr><tr><td>null</td><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 16:01:49 UTC</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬────────────┬────────────┬─────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ type ┆ filename ┆ id ┆ elapsed │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f32 ┆ f32 ┆ ┆ cat ┆ cat ┆ i64 ┆ i32 │\n", | |
| "│ ┆ f32 ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪════════════╪════════════╪═════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 0 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370846 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 1 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370808 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 2 │\n", | |
| "│ ┆ ┆ ┆ 8 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370785 ┆ -111.90172 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 4 │\n", | |
| "│ ┆ ┆ ┆ 3 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4275 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879284 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4276 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879292 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4278 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879299 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4281 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879311 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4282 │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴────────────┴────────────┴─────────┘" | |
| ] | |
| }, | |
| "execution_count": 127, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# cast to categorical removes 50% of the size\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " )\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "gEnicOApb0Qa", | |
| "outputId": "4b0b79fc-fb2e-48ef-b4d9-89dc1cfb1f94" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<polars.expr.categorical.ExprCatNameSpace at 0x3247797b0>" | |
| ] | |
| }, | |
| "execution_count": 119, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "pl.col('cat').cat" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "_g4SYzJMb0Qa", | |
| "outputId": "616d3fe4-7aa8-45dc-9d91-6f56a030852d" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['__class__',\n", | |
| " '__delattr__',\n", | |
| " '__dict__',\n", | |
| " '__dir__',\n", | |
| " '__doc__',\n", | |
| " '__eq__',\n", | |
| " '__format__',\n", | |
| " '__ge__',\n", | |
| " '__getattribute__',\n", | |
| " '__gt__',\n", | |
| " '__hash__',\n", | |
| " '__init__',\n", | |
| " '__init_subclass__',\n", | |
| " '__le__',\n", | |
| " '__lt__',\n", | |
| " '__module__',\n", | |
| " '__ne__',\n", | |
| " '__new__',\n", | |
| " '__reduce__',\n", | |
| " '__reduce_ex__',\n", | |
| " '__repr__',\n", | |
| " '__setattr__',\n", | |
| " '__sizeof__',\n", | |
| " '__str__',\n", | |
| " '__subclasshook__',\n", | |
| " '__weakref__',\n", | |
| " '_accessor',\n", | |
| " '_pyexpr',\n", | |
| " 'ends_with',\n", | |
| " 'get_categories',\n", | |
| " 'len_bytes',\n", | |
| " 'len_chars',\n", | |
| " 'starts_with']" | |
| ] | |
| }, | |
| "execution_count": 122, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dir(pl.col('cat').cat)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "kCuYx-7Yb0Qa" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "ba3TaTSSb0Qa" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "I1B7RzXsb0Qa" | |
| }, | |
| "source": [ | |
| "## Dates\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "3ByN8k-vb0Qa", | |
| "outputId": "a49eb9c1-35b7-4dbe-d120-82c9751f805f" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th></tr><tr><td>null</td><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, America/Denver]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 10:54:56 MDT</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td></tr><tr><td>null</td><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 10:54:57 MDT</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td></tr><tr><td>null</td><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 10:54:58 MDT</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td></tr><tr><td>null</td><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 10:54:59 MDT</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 10:55:00 MDT</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 10:01:42 MDT</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td></tr><tr><td>null</td><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 10:01:43 MDT</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td></tr><tr><td>null</td><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 10:01:45 MDT</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td></tr><tr><td>null</td><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 10:01:48 MDT</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td></tr><tr><td>null</td><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 10:01:49 MDT</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬───────────┬────────────┬────────────┬─────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ type ┆ filename ┆ id ┆ elapsed │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f32 ┆ f32 ┆ ┆ cat ┆ cat ┆ i64 ┆ i32 │\n", | |
| "│ ┆ f32 ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪═══════════╪════════════╪════════════╪═════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 0 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370846 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 1 │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370808 ┆ -111.90171 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 2 │\n", | |
| "│ ┆ ┆ ┆ 8 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370785 ┆ -111.90172 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ ebikeride ┆ data/activ ┆ 1176983802 ┆ 4 │\n", | |
| "│ ┆ ┆ ┆ 3 ┆ ┆ ┆ ities/1176 ┆ 6 ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4275 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879284 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4276 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879292 ┆ -111.85536 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4278 │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879299 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4281 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879311 ┆ -111.85537 ┆ … ┆ walking ┆ data/activ ┆ 5932628228 ┆ 4282 │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ ┆ ities/5932 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴───────────┴────────────┴────────────┴─────────┘" | |
| ] | |
| }, | |
| "execution_count": 129, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# convert date to local time\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " time=pl.col('time').dt.convert_time_zone('America/Denver')\n", | |
| " )\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "8VtnCyIBb0Qa", | |
| "outputId": "c8dc2dfe-f739-4359-8a28-ed5da46d201c" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 13)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th></tr><tr><td>null</td><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, America/Denver]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td><td>duration[μs]</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 10:54:56 MDT</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td></tr><tr><td>null</td><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 10:54:57 MDT</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>1s</td></tr><tr><td>null</td><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 10:54:58 MDT</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>2s</td></tr><tr><td>null</td><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 10:54:59 MDT</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>3s</td></tr><tr><td>null</td><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 10:55:00 MDT</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>4s</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 10:01:42 MDT</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>1h 11m 15s</td></tr><tr><td>null</td><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 10:01:43 MDT</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>1h 11m 16s</td></tr><tr><td>null</td><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 10:01:45 MDT</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>1h 11m 18s</td></tr><tr><td>null</td><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 10:01:48 MDT</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>1h 11m 21s</td></tr><tr><td>null</td><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 10:01:49 MDT</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>1h 11m 22s</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 13)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬────────────┬────────────┬─────────┬───────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ filename ┆ id ┆ elapsed ┆ period │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f32 ┆ f32 ┆ ┆ cat ┆ i64 ┆ i32 ┆ duration[ │\n", | |
| "│ ┆ f32 ┆ ┆ ┆ ┆ ┆ ┆ ┆ μs] │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪════════════╪════════════╪═════════╪═══════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ data/activ ┆ 1176983802 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ities/1176 ┆ 6 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ ┆ │\n", | |
| "│ null ┆ 6.704555 ┆ 41.370846 ┆ -111.90171 ┆ … ┆ data/activ ┆ 1176983802 ┆ 1 ┆ 1s │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ities/1176 ┆ 6 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ ┆ │\n", | |
| "│ null ┆ 4.160126 ┆ 41.370808 ┆ -111.90171 ┆ … ┆ data/activ ┆ 1176983802 ┆ 2 ┆ 2s │\n", | |
| "│ ┆ ┆ ┆ 8 ┆ ┆ ities/1176 ┆ 6 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ ┆ │\n", | |
| "│ null ┆ 2.62628 ┆ 41.370785 ┆ -111.90172 ┆ … ┆ data/activ ┆ 1176983802 ┆ 3 ┆ 3s │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ities/1176 ┆ 6 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ ┆ │\n", | |
| "│ null ┆ 1.26929 ┆ 41.370773 ┆ -111.90173 ┆ … ┆ data/activ ┆ 1176983802 ┆ 4 ┆ 4s │\n", | |
| "│ ┆ ┆ ┆ 3 ┆ ┆ ities/1176 ┆ 6 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 0.344402 ┆ 40.87928 ┆ -111.85536 ┆ … ┆ data/activ ┆ 5932628228 ┆ 4275 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ities/5932 ┆ ┆ ┆ 15s │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.238017 ┆ 40.879284 ┆ -111.85536 ┆ … ┆ data/activ ┆ 5932628228 ┆ 4276 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ities/5932 ┆ ┆ ┆ 16s │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 1.05693 ┆ 40.879292 ┆ -111.85536 ┆ … ┆ data/activ ┆ 5932628228 ┆ 4278 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ities/5932 ┆ ┆ ┆ 18s │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 1.259495 ┆ 40.879299 ┆ -111.85537 ┆ … ┆ data/activ ┆ 5932628228 ┆ 4281 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ ities/5932 ┆ ┆ ┆ 21s │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 1.023777 ┆ 40.879311 ┆ -111.85537 ┆ … ┆ data/activ ┆ 5932628228 ┆ 4282 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ ┆ 7 ┆ ┆ ities/5932 ┆ ┆ ┆ 22s │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴────────────┴────────────┴─────────┴───────────┘" | |
| ] | |
| }, | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# create elapsed time\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " time=pl.col('time').dt.convert_time_zone('America/Denver')\n", | |
| " )\n", | |
| " .with_columns(period=(pl.col('time')-pl.col('time').first()).over(pl.col('id')))\n", | |
| "\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "0ocyHfjFb0Qa", | |
| "outputId": "3c800f23-3876-4d84-8281-89c34dbe001f" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<polars.expr.datetime.ExprDateTimeNameSpace at 0x14699f160>" | |
| ] | |
| }, | |
| "execution_count": 130, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "pl.col('time').dt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "apueg-6sb0Qa", | |
| "outputId": "c4792218-a89a-4682-c6e3-81ed130efc4e" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['__class__',\n", | |
| " '__delattr__',\n", | |
| " '__dict__',\n", | |
| " '__dir__',\n", | |
| " '__doc__',\n", | |
| " '__eq__',\n", | |
| " '__format__',\n", | |
| " '__ge__',\n", | |
| " '__getattribute__',\n", | |
| " '__gt__',\n", | |
| " '__hash__',\n", | |
| " '__init__',\n", | |
| " '__init_subclass__',\n", | |
| " '__le__',\n", | |
| " '__lt__',\n", | |
| " '__module__',\n", | |
| " '__ne__',\n", | |
| " '__new__',\n", | |
| " '__reduce__',\n", | |
| " '__reduce_ex__',\n", | |
| " '__repr__',\n", | |
| " '__setattr__',\n", | |
| " '__sizeof__',\n", | |
| " '__str__',\n", | |
| " '__subclasshook__',\n", | |
| " '__weakref__',\n", | |
| " '_accessor',\n", | |
| " '_pyexpr',\n", | |
| " 'add_business_days',\n", | |
| " 'base_utc_offset',\n", | |
| " 'cast_time_unit',\n", | |
| " 'century',\n", | |
| " 'combine',\n", | |
| " 'convert_time_zone',\n", | |
| " 'date',\n", | |
| " 'datetime',\n", | |
| " 'day',\n", | |
| " 'dst_offset',\n", | |
| " 'epoch',\n", | |
| " 'hour',\n", | |
| " 'is_leap_year',\n", | |
| " 'iso_year',\n", | |
| " 'microsecond',\n", | |
| " 'millennium',\n", | |
| " 'millisecond',\n", | |
| " 'minute',\n", | |
| " 'month',\n", | |
| " 'month_end',\n", | |
| " 'month_start',\n", | |
| " 'nanosecond',\n", | |
| " 'offset_by',\n", | |
| " 'ordinal_day',\n", | |
| " 'quarter',\n", | |
| " 'replace',\n", | |
| " 'replace_time_zone',\n", | |
| " 'round',\n", | |
| " 'second',\n", | |
| " 'strftime',\n", | |
| " 'time',\n", | |
| " 'timestamp',\n", | |
| " 'to_string',\n", | |
| " 'total_days',\n", | |
| " 'total_hours',\n", | |
| " 'total_microseconds',\n", | |
| " 'total_milliseconds',\n", | |
| " 'total_minutes',\n", | |
| " 'total_nanoseconds',\n", | |
| " 'total_seconds',\n", | |
| " 'truncate',\n", | |
| " 'week',\n", | |
| " 'weekday',\n", | |
| " 'with_time_unit',\n", | |
| " 'year']" | |
| ] | |
| }, | |
| "execution_count": 131, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dir(pl.col('time').dt)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "InPcWdv4b0Qb" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "fWxP_JNNb0Qb" | |
| }, | |
| "source": [ | |
| "## Missing Data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Ix8WRnVvb0Qb", | |
| "outputId": "7c288f71-4ce6-4080-d3ed-960f22024c3f" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (1, 13)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>5050370</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>2293</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (1, 13)\n", | |
| "┌─────────┬─────────────┬──────────┬───────────┬───┬──────────┬─────┬─────────┬────────┐\n", | |
| "│ course ┆ distance_2d ┆ latitude ┆ longitude ┆ … ┆ filename ┆ id ┆ elapsed ┆ period │\n", | |
| "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ u32 ┆ u32 ┆ u32 ┆ u32 ┆ ┆ u32 ┆ u32 ┆ u32 ┆ u32 │\n", | |
| "╞═════════╪═════════════╪══════════╪═══════════╪═══╪══════════╪═════╪═════════╪════════╡\n", | |
| "│ 5050370 ┆ 0 ┆ 0 ┆ 0 ┆ … ┆ 0 ┆ 0 ┆ 0 ┆ 0 │\n", | |
| "└─────────┴─────────────┴──────────┴───────────┴───┴──────────┴─────┴─────────┴────────┘" | |
| ] | |
| }, | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# where are values missing (null)?\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " time=pl.col('time').dt.convert_time_zone('America/Denver')\n", | |
| " )\n", | |
| " .with_columns(period=(pl.col('time')-pl.col('time').first()).over(pl.col('id')))\n", | |
| " .null_count()\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "yEwNZJ9Zb0Qb", | |
| "outputId": "e36f718f-95c2-44b6-fc23-6ac6469b332e" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (2_293, 13)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>course</th><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th></tr><tr><td>null</td><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, America/Denver]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td><td>duration[μs]</td></tr></thead><tbody><tr><td>null</td><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 10:54:56 MDT</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td></tr><tr><td>null</td><td>0.0</td><td>38.651745</td><td>-109.668266</td><td>2021-11-26 13:03:10 MST</td><td>1392.300049</td><td>null</td><td>"Bar m"</td><td>"cycling"</td><td>"data/activities/6310856608.gpx"</td><td>6310856608</td><td>0</td><td>0µs</td></tr><tr><td>null</td><td>0.0</td><td>40.863651</td><td>-111.833046</td><td>2020-01-01 13:13:21 MST</td><td>1628.199951</td><td>null</td><td>"Kenny Creek"</td><td>"Snowshoe"</td><td>"data/activities/2974143712.gpx"</td><td>2974143712</td><td>0</td><td>0µs</td></tr><tr><td>null</td><td>0.276011</td><td>40.86248</td><td>-111.821152</td><td>2020-01-01 14:11:43 MST</td><td>1829.300049</td><td>null</td><td>"Kenny Creek"</td><td>"Snowshoe"</td><td>"data/activities/2974143712.gpx"</td><td>2974143712</td><td>3502</td><td>58m 22s</td></tr><tr><td>null</td><td>0.0</td><td>40.86248</td><td>-111.821152</td><td>2020-01-01 14:11:44 MST</td><td>1829.300049</td><td>null</td><td>"Kenny Creek"</td><td>"Snowshoe"</td><td>"data/activities/2974143712.gpx"</td><td>2974143712</td><td>3503</td><td>58m 23s</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>null</td><td>1.030039</td><td>40.851273</td><td>-111.823189</td><td>2020-09-21 09:42:31 MDT</td><td>1844.400024</td><td>null</td><td>"Birthday hike/run"</td><td>"hiking"</td><td>"data/activities/4092734339.gpx"</td><td>4092734339</td><td>3056</td><td>50m 56s</td></tr><tr><td>null</td><td>0.0</td><td>40.747234</td><td>-111.562019</td><td>2021-07-08 17:58:54 MDT</td><td>1918.599976</td><td>null</td><td>"The dropout"</td><td>"cycling"</td><td>"data/activities/5597638888.gpx"</td><td>5597638888</td><td>0</td><td>0µs</td></tr><tr><td>null</td><td>0.0</td><td>40.916195</td><td>-111.861771</td><td>2016-09-05 11:40:12 MDT</td><td>1449.300049</td><td>null</td><td>"Deuel Creek Lunch Run"</td><td>"running"</td><td>"data/activities/701803795.gpx"</td><td>701803795</td><td>0</td><td>0µs</td></tr><tr><td>null</td><td>0.0</td><td>46.914665</td><td>-121.640488</td><td>2022-07-15 13:54:52 MDT</td><td>1944.699951</td><td>null</td><td>"Silver forest "</td><td>"hiking"</td><td>"data/activities/7475182621.gpx"</td><td>7475182621</td><td>0</td><td>0µs</td></tr><tr><td>null</td><td>0.0</td><td>40.87928</td><td>-111.855194</td><td>2021-09-09 08:50:27 MDT</td><td>1479.099976</td><td>null</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>0</td><td>0µs</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (2_293, 13)\n", | |
| "┌────────┬────────────┬───────────┬────────────┬───┬────────────┬────────────┬─────────┬───────────┐\n", | |
| "│ course ┆ distance_2 ┆ latitude ┆ longitude ┆ … ┆ filename ┆ id ┆ elapsed ┆ period │\n", | |
| "│ --- ┆ d ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ null ┆ --- ┆ f32 ┆ f32 ┆ ┆ cat ┆ i64 ┆ i32 ┆ duration[ │\n", | |
| "│ ┆ f32 ┆ ┆ ┆ ┆ ┆ ┆ ┆ μs] │\n", | |
| "╞════════╪════════════╪═══════════╪════════════╪═══╪════════════╪════════════╪═════════╪═══════════╡\n", | |
| "│ null ┆ 0.0 ┆ 41.370804 ┆ -111.90177 ┆ … ┆ data/activ ┆ 1176983802 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ities/1176 ┆ 6 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 9838026.gp ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ … ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.0 ┆ 38.651745 ┆ -109.66826 ┆ … ┆ data/activ ┆ 6310856608 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ities/6310 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 856608.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.0 ┆ 40.863651 ┆ -111.83304 ┆ … ┆ data/activ ┆ 2974143712 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 6 ┆ ┆ ities/2974 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 143712.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.276011 ┆ 40.86248 ┆ -111.82115 ┆ … ┆ data/activ ┆ 2974143712 ┆ 3502 ┆ 58m 22s │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ities/2974 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 143712.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.0 ┆ 40.86248 ┆ -111.82115 ┆ … ┆ data/activ ┆ 2974143712 ┆ 3503 ┆ 58m 23s │\n", | |
| "│ ┆ ┆ ┆ 2 ┆ ┆ ities/2974 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 143712.gpx ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ null ┆ 1.030039 ┆ 40.851273 ┆ -111.82318 ┆ … ┆ data/activ ┆ 4092734339 ┆ 3056 ┆ 50m 56s │\n", | |
| "│ ┆ ┆ ┆ 9 ┆ ┆ ities/4092 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 734339.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.0 ┆ 40.747234 ┆ -111.56201 ┆ … ┆ data/activ ┆ 5597638888 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 9 ┆ ┆ ities/5597 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 638888.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.0 ┆ 40.916195 ┆ -111.86177 ┆ … ┆ data/activ ┆ 701803795 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 1 ┆ ┆ ities/7018 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 03795.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.0 ┆ 46.914665 ┆ -121.64048 ┆ … ┆ data/activ ┆ 7475182621 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 8 ┆ ┆ ities/7475 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 182621.gpx ┆ ┆ ┆ │\n", | |
| "│ null ┆ 0.0 ┆ 40.87928 ┆ -111.85519 ┆ … ┆ data/activ ┆ 5932628228 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ ┆ 4 ┆ ┆ ities/5932 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 628228.gpx ┆ ┆ ┆ │\n", | |
| "└────────┴────────────┴───────────┴────────────┴───┴────────────┴────────────┴─────────┴───────────┘" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# which rows are they?\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " time=pl.col('time').dt.convert_time_zone('America/Denver')\n", | |
| " )\n", | |
| " .with_columns(period=(pl.col('time')-pl.col('time').first()).over(pl.col('id')))\n", | |
| " #.null_count()\n", | |
| " .filter(pl.col('speed_between').is_null())\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Sgx009QZb0Qb", | |
| "outputId": "c4d986bb-d374-4f9f-878d-9ff23a997014" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (1, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>elevation</th><th>speed_between</th><th>id</th><th>elapsed</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (1, 7)\n", | |
| "┌─────────────┬──────────┬───────────┬───────────┬───────────────┬─────┬─────────┐\n", | |
| "│ distance_2d ┆ latitude ┆ longitude ┆ elevation ┆ speed_between ┆ id ┆ elapsed │\n", | |
| "│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ u32 ┆ u32 ┆ u32 ┆ u32 ┆ u32 ┆ u32 ┆ u32 │\n", | |
| "╞═════════════╪══════════╪═══════════╪═══════════╪═══════════════╪═════╪═════════╡\n", | |
| "│ 0 ┆ 0 ┆ 0 ┆ 0 ┆ 0 ┆ 0 ┆ 0 │\n", | |
| "└─────────────┴──────────┴───────────┴───────────┴───────────────┴─────┴─────────┘" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# what about nans?\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "\n", | |
| "(raw\n", | |
| " .select(cols)\n", | |
| " # add elapsed time\n", | |
| " .with_columns(id=calc_id)\n", | |
| " # needs to be in its own with_columns because we reference id\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " time=pl.col('time').dt.convert_time_zone('America/Denver')\n", | |
| " )\n", | |
| " #.null_count()\n", | |
| " # no nan_count\n", | |
| " #.filter(pl.col('speed_between').is_null())\n", | |
| " .with_columns(period=(pl.col('time')-pl.col('time').first()).over(pl.col('id')))\n", | |
| " .select(cs.numeric().is_nan().sum())\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "FLWpICrbb0Qb" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "WzLbsRDhb0Qb" | |
| }, | |
| "source": [ | |
| "## Create a function" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 636 | |
| }, | |
| "id": "HuTDh0mFb0Qb", | |
| "outputId": "d393b7bb-1d86-4b75-bb7f-f79b10bae494" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬─────────┬───────────┐\n", | |
| "│ distance_2 ┆ latitude ┆ longitude ┆ time ┆ … ┆ filename ┆ id ┆ elapsed ┆ period │\n", | |
| "│ d ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ --- ┆ f32 ┆ f32 ┆ datetime[ ┆ ┆ str ┆ i64 ┆ i32 ┆ duration[ │\n", | |
| "│ f32 ┆ ┆ ┆ μs] ┆ ┆ ┆ ┆ ┆ μs] │\n", | |
| "╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═════════╪═══════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ 72 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:56 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 6.704555 ┆ 41.370846 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 1 ┆ 1s │\n", | |
| "│ ┆ ┆ 11 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:57 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 4.160126 ┆ 41.370808 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 2 ┆ 2s │\n", | |
| "│ ┆ ┆ 18 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:58 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 2.62628 ┆ 41.370785 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 3 ┆ 3s │\n", | |
| "│ ┆ ┆ 26 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:59 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 4 ┆ 4s │\n", | |
| "│ ┆ ┆ 33 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:55:00 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4275 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 15s │\n", | |
| "│ ┆ ┆ ┆ 16:01:42 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 0.238017 ┆ 40.879284 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4276 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 16s │\n", | |
| "│ ┆ ┆ ┆ 16:01:43 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.05693 ┆ 40.879292 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4278 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 18s │\n", | |
| "│ ┆ ┆ ┆ 16:01:45 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.259495 ┆ 40.879299 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4281 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 7 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 21s │\n", | |
| "│ ┆ ┆ ┆ 16:01:48 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.023777 ┆ 40.879311 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4282 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 77 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 22s │\n", | |
| "│ ┆ ┆ ┆ 16:01:49 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "└────────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴─────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th></tr><tr><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs]</td><td>f32</td><td>f32</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>i32</td><td>duration[μs]</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td></tr><tr><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 16:54:57</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>1s</td></tr><tr><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 16:54:58</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>2s</td></tr><tr><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 16:54:59</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>3s</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 16:55:00</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>4s</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 16:01:42</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>1h 11m 15s</td></tr><tr><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 16:01:43</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>1h 11m 16s</td></tr><tr><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 16:01:45</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>1h 11m 18s</td></tr><tr><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 16:01:48</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>1h 11m 21s</td></tr><tr><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 16:01:49</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>1h 11m 22s</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 74 | |
| } | |
| ], | |
| "source": [ | |
| "import polars as pl\n", | |
| "import polars.selectors as cs\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "cols = ['course', 'distance_2d', 'latitude', 'longitude', 'time', 'elevation',\n", | |
| " 'speed_between', 'name', 'type', 'filename']\n", | |
| "# drop course because it is all null\n", | |
| "final_cols = ['distance_2d', 'latitude', 'longitude', 'time', 'elevation', 'speed_between',\n", | |
| " 'name', 'type', 'filename', 'id', 'elapsed', 'period']\n", | |
| "\n", | |
| "def tweak_strava(df):\n", | |
| " return (df\n", | |
| " .select(cols) # checking input\n", | |
| " .with_columns(id=calc_id)\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " #pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " #time=pl.col('time').dt.convert_time_zone('America/Denver')\n", | |
| " )\n", | |
| " .with_columns(period=(pl.col('time')-pl.col('time').first()).over(pl.col('id')))\n", | |
| " .select(final_cols) # checking output\n", | |
| " )\n", | |
| "#file = '/content/drive/MyDrive/Colab Notebooks/clients/nvidia/GTC2024/data/activities.parquet'\n", | |
| "file = 'activities_naive.parquet'\n", | |
| "raw = pl.read_parquet(file)\n", | |
| "tweak_strava(raw)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "VGAXTJ9fb0Qb" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "Pynwx0Ktb0Qb" | |
| }, | |
| "source": [ | |
| "## Laziness & Chaining" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 683 | |
| }, | |
| "id": "pF9LMgz6b0Qb", | |
| "outputId": "e965a99a-e09b-4a80-d812-04b000cc31a4" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 230 µs, sys: 52 µs, total: 282 µs\n", | |
| "Wall time: 287 µs\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "<LazyFrame at 0x794FE57435D0>" | |
| ], | |
| "text/html": [ | |
| "<h4>NAIVE QUERY PLAN</h4><p>run <b>LazyFrame.show_graph()</b> to see the optimized version</p><?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n", | |
| "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n", | |
| " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", | |
| "<!-- Generated by graphviz version 2.43.0 (0)\n", | |
| " -->\n", | |
| "<!-- Title: polars_query Pages: 1 -->\n", | |
| "<svg width=\"1779pt\" height=\"406pt\"\n", | |
| " viewBox=\"0.00 0.00 1779.00 406.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", | |
| "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 402)\">\n", | |
| "<title>polars_query</title>\n", | |
| "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-402 1775,-402 1775,4 -4,4\"/>\n", | |
| "<!-- p1 -->\n", | |
| "<g id=\"node1\" class=\"node\">\n", | |
| "<title>p1</title>\n", | |
| "<polygon fill=\"none\" stroke=\"black\" points=\"914.5,-398 856.5,-398 856.5,-362 914.5,-362 914.5,-398\"/>\n", | |
| "<text text-anchor=\"middle\" x=\"885.5\" y=\"-376.3\" font-family=\"Times,serif\" font-size=\"14.00\">π 12/12</text>\n", | |
| "</g>\n", | |
| "<!-- p2 -->\n", | |
| "<g id=\"node2\" class=\"node\">\n", | |
| "<title>p2</title>\n", | |
| "<polygon fill=\"none\" stroke=\"black\" points=\"1141.5,-326 629.5,-326 629.5,-290 1141.5,-290 1141.5,-326\"/>\n", | |
| "<text text-anchor=\"middle\" x=\"885.5\" y=\"-304.3\" font-family=\"Times,serif\" font-size=\"14.00\">WITH COLUMNS [[(col("time")) - (col("time").first())].over([col("id")]).alias("period")]</text>\n", | |
| "</g>\n", | |
| "<!-- p1--p2 -->\n", | |
| "<g id=\"edge1\" class=\"edge\">\n", | |
| "<title>p1--p2</title>\n", | |
| "<path fill=\"none\" stroke=\"black\" d=\"M885.5,-361.7C885.5,-350.85 885.5,-336.92 885.5,-326.1\"/>\n", | |
| "</g>\n", | |
| "<!-- p3 -->\n", | |
| "<g id=\"node3\" class=\"node\">\n", | |
| "<title>p3</title>\n", | |
| "<polygon fill=\"none\" stroke=\"black\" points=\"1771,-254 0,-254 0,-218 1771,-218 1771,-254\"/>\n", | |
| "<text text-anchor=\"middle\" x=\"885.5\" y=\"-232.3\" font-family=\"Times,serif\" font-size=\"14.00\">WITH COLUMNS [col("distance_2d").strict_cast(Float32), col("latitude").strict_cast(Float32), col("longitude").strict_cast(Float32), col("elevation").strict_cast(Float32), col("speed_between").strict_cast(Float32), [(col("time")) - (col("time").min())].dt.total_seconds().over([col("id")]).strict_cast(Int32).alias("elapsed")]</text>\n", | |
| "</g>\n", | |
| "<!-- p2--p3 -->\n", | |
| "<g id=\"edge2\" class=\"edge\">\n", | |
| "<title>p2--p3</title>\n", | |
| "<path fill=\"none\" stroke=\"black\" d=\"M885.5,-289.7C885.5,-278.85 885.5,-264.92 885.5,-254.1\"/>\n", | |
| "</g>\n", | |
| "<!-- p4 -->\n", | |
| "<g id=\"node4\" class=\"node\">\n", | |
| "<title>p4</title>\n", | |
| "<polygon fill=\"none\" stroke=\"black\" points=\"1282,-182 489,-182 489,-146 1282,-146 1282,-182\"/>\n", | |
| "<text text-anchor=\"middle\" x=\"885.5\" y=\"-160.3\" font-family=\"Times,serif\" font-size=\"14.00\">WITH COLUMNS [col("filename").str.split([String(/)]).list.get([dyn int: -1]).str.replace([String(.gpx), String()]).strict_cast(Int64).alias("id")]</text>\n", | |
| "</g>\n", | |
| "<!-- p3--p4 -->\n", | |
| "<g id=\"edge3\" class=\"edge\">\n", | |
| "<title>p3--p4</title>\n", | |
| "<path fill=\"none\" stroke=\"black\" d=\"M885.5,-217.7C885.5,-206.85 885.5,-192.92 885.5,-182.1\"/>\n", | |
| "</g>\n", | |
| "<!-- p5 -->\n", | |
| "<g id=\"node5\" class=\"node\">\n", | |
| "<title>p5</title>\n", | |
| "<polygon fill=\"none\" stroke=\"black\" points=\"914.5,-110 856.5,-110 856.5,-74 914.5,-74 914.5,-110\"/>\n", | |
| "<text text-anchor=\"middle\" x=\"885.5\" y=\"-88.3\" font-family=\"Times,serif\" font-size=\"14.00\">π 10/10</text>\n", | |
| "</g>\n", | |
| "<!-- p4--p5 -->\n", | |
| "<g id=\"edge4\" class=\"edge\">\n", | |
| "<title>p4--p5</title>\n", | |
| "<path fill=\"none\" stroke=\"black\" d=\"M885.5,-145.7C885.5,-134.85 885.5,-120.92 885.5,-110.1\"/>\n", | |
| "</g>\n", | |
| "<!-- p6 -->\n", | |
| "<g id=\"node6\" class=\"node\">\n", | |
| "<title>p6</title>\n", | |
| "<polygon fill=\"none\" stroke=\"black\" points=\"1005,-38 766,-38 766,0 1005,0 1005,-38\"/>\n", | |
| "<text text-anchor=\"middle\" x=\"885.5\" y=\"-22.8\" font-family=\"Times,serif\" font-size=\"14.00\">Parquet SCAN [activities_naive.parquet]</text>\n", | |
| "<text text-anchor=\"middle\" x=\"885.5\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\">π */10;</text>\n", | |
| "</g>\n", | |
| "<!-- p5--p6 -->\n", | |
| "<g id=\"edge5\" class=\"edge\">\n", | |
| "<title>p5--p6</title>\n", | |
| "<path fill=\"none\" stroke=\"black\" d=\"M885.5,-73.81C885.5,-62.98 885.5,-49.01 885.5,-38.02\"/>\n", | |
| "</g>\n", | |
| "</g>\n", | |
| "</svg>\n" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 75 | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "raw_lazy = pl.scan_parquet(file)\n", | |
| "tweak_strava(raw_lazy)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 671 | |
| }, | |
| "id": "KdPezDp8b0Qb", | |
| "outputId": "fc7b6f79-d32d-4606-c81c-31290840b278" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 4.53 s, sys: 913 ms, total: 5.44 s\n", | |
| "Wall time: 1.11 s\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬─────────┬───────────┐\n", | |
| "│ distance_2 ┆ latitude ┆ longitude ┆ time ┆ … ┆ filename ┆ id ┆ elapsed ┆ period │\n", | |
| "│ d ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ --- ┆ f32 ┆ f32 ┆ datetime[ ┆ ┆ str ┆ i64 ┆ i32 ┆ duration[ │\n", | |
| "│ f32 ┆ ┆ ┆ μs] ┆ ┆ ┆ ┆ ┆ μs] │\n", | |
| "╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═════════╪═══════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ 72 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:56 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 6.704555 ┆ 41.370846 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 1 ┆ 1s │\n", | |
| "│ ┆ ┆ 11 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:57 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 4.160126 ┆ 41.370808 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 2 ┆ 2s │\n", | |
| "│ ┆ ┆ 18 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:58 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 2.62628 ┆ 41.370785 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 3 ┆ 3s │\n", | |
| "│ ┆ ┆ 26 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:59 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 4 ┆ 4s │\n", | |
| "│ ┆ ┆ 33 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:55:00 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4275 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 15s │\n", | |
| "│ ┆ ┆ ┆ 16:01:42 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 0.238017 ┆ 40.879284 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4276 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 16s │\n", | |
| "│ ┆ ┆ ┆ 16:01:43 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.05693 ┆ 40.879292 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4278 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 18s │\n", | |
| "│ ┆ ┆ ┆ 16:01:45 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.259495 ┆ 40.879299 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4281 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 7 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 21s │\n", | |
| "│ ┆ ┆ ┆ 16:01:48 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.023777 ┆ 40.879311 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4282 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 77 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 22s │\n", | |
| "│ ┆ ┆ ┆ 16:01:49 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "└────────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴─────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th></tr><tr><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs]</td><td>f32</td><td>f32</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>i32</td><td>duration[μs]</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td></tr><tr><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 16:54:57</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>1s</td></tr><tr><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 16:54:58</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>2s</td></tr><tr><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 16:54:59</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>3s</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 16:55:00</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>4s</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 16:01:42</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>1h 11m 15s</td></tr><tr><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 16:01:43</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>1h 11m 16s</td></tr><tr><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 16:01:45</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>1h 11m 18s</td></tr><tr><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 16:01:48</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>1h 11m 21s</td></tr><tr><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 16:01:49</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>1h 11m 22s</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 76 | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "tweak_strava(raw_lazy).collect()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "%%time\n", | |
| "tweak_strava(raw_lazy).collect(engine='gpu')" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 671 | |
| }, | |
| "id": "C9CKVEjMdq5i", | |
| "outputId": "b16aaad4-067e-4471-8be5-06bb637cf161" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 4.61 s, sys: 961 ms, total: 5.57 s\n", | |
| "Wall time: 1.16 s\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬─────────┬───────────┐\n", | |
| "│ distance_2 ┆ latitude ┆ longitude ┆ time ┆ … ┆ filename ┆ id ┆ elapsed ┆ period │\n", | |
| "│ d ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ --- ┆ f32 ┆ f32 ┆ datetime[ ┆ ┆ str ┆ i64 ┆ i32 ┆ duration[ │\n", | |
| "│ f32 ┆ ┆ ┆ μs] ┆ ┆ ┆ ┆ ┆ μs] │\n", | |
| "╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═════════╪═══════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 0 ┆ 0µs │\n", | |
| "│ ┆ ┆ 72 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:56 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 6.704555 ┆ 41.370846 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 1 ┆ 1s │\n", | |
| "│ ┆ ┆ 11 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:57 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 4.160126 ┆ 41.370808 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 2 ┆ 2s │\n", | |
| "│ ┆ ┆ 18 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:58 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 2.62628 ┆ 41.370785 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 3 ┆ 3s │\n", | |
| "│ ┆ ┆ 26 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:54:59 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 4 ┆ 4s │\n", | |
| "│ ┆ ┆ 33 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ 16:55:00 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4275 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 15s │\n", | |
| "│ ┆ ┆ ┆ 16:01:42 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 0.238017 ┆ 40.879284 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4276 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 16s │\n", | |
| "│ ┆ ┆ ┆ 16:01:43 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.05693 ┆ 40.879292 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4278 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 18s │\n", | |
| "│ ┆ ┆ ┆ 16:01:45 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.259495 ┆ 40.879299 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4281 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 7 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 21s │\n", | |
| "│ ┆ ┆ ┆ 16:01:48 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.023777 ┆ 40.879311 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4282 ┆ 1h 11m │\n", | |
| "│ ┆ ┆ 77 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 22s │\n", | |
| "│ ┆ ┆ ┆ 16:01:49 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "└────────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴─────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th></tr><tr><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs]</td><td>f32</td><td>f32</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>i32</td><td>duration[μs]</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 16:54:56</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td></tr><tr><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 16:54:57</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>1s</td></tr><tr><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 16:54:58</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>2s</td></tr><tr><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 16:54:59</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>3s</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 16:55:00</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>4s</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 16:01:42</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>1h 11m 15s</td></tr><tr><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 16:01:43</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>1h 11m 16s</td></tr><tr><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 16:01:45</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>1h 11m 18s</td></tr><tr><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 16:01:48</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>1h 11m 21s</td></tr><tr><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 16:01:49</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>1h 11m 22s</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 77 | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 419 | |
| }, | |
| "id": "wYY1mG_Sb0Qb", | |
| "outputId": "d9aac199-c717-4b37-850a-fd7db9683ddd" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "error", | |
| "ename": "ComputeError", | |
| "evalue": "'cuda' conversion failed: NotImplementedError: ('Query execution with GPU not possible: unsupported operations.\\nThe errors were:\\n- NotImplementedError: Grouped rolling window not implemented\\n- NotImplementedError: Grouped rolling window not implemented\\n- NotImplementedError: Temporal function TemporalFunction.TotalSeconds\\n- NotImplementedError: list expr', [NotImplementedError('Grouped rolling window not implemented'), NotImplementedError('Grouped rolling window not implemented'), NotImplementedError('Temporal function TemporalFunction.TotalSeconds'), NotImplementedError('list expr')])", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mComputeError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<timed eval>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n", | |
| "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/polars/lazyframe/frame.py\u001b[0m in \u001b[0;36mcollect\u001b[0;34m(self, type_coercion, predicate_pushdown, projection_pushdown, simplify_expression, slice_pushdown, comm_subplan_elim, comm_subexpr_elim, cluster_with_columns, collapse_joins, no_optimization, streaming, engine, background, _eager, **_kwargs)\u001b[0m\n\u001b[1;32m 2027\u001b[0m \u001b[0;31m# Only for testing purposes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2028\u001b[0m \u001b[0mcallback\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"post_opt_callback\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2029\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mwrap_df\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mldf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2030\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2031\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0moverload\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mComputeError\u001b[0m: 'cuda' conversion failed: NotImplementedError: ('Query execution with GPU not possible: unsupported operations.\\nThe errors were:\\n- NotImplementedError: Grouped rolling window not implemented\\n- NotImplementedError: Grouped rolling window not implemented\\n- NotImplementedError: Temporal function TemporalFunction.TotalSeconds\\n- NotImplementedError: list expr', [NotImplementedError('Grouped rolling window not implemented'), NotImplementedError('Grouped rolling window not implemented'), NotImplementedError('Temporal function TemporalFunction.TotalSeconds'), NotImplementedError('list expr')])" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .collect(engine=pl.GPUEngine(device=0, raise_on_fail=True))\n", | |
| ")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [], | |
| "metadata": { | |
| "id": "FN5XGCKkfKq8" | |
| }, | |
| "execution_count": null, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 402 | |
| }, | |
| "outputId": "7f60475d-e04a-403f-c4b9-063e8d94ecef", | |
| "id": "XI0oMCC1fLTX" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "error", | |
| "ename": "ComputeError", | |
| "evalue": "'cuda' conversion failed: NotImplementedError: ('Query execution with GPU not possible: unsupported operations.\\nThe errors were:\\n- NotImplementedError: Time zone support', [NotImplementedError('Time zone support')])", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mComputeError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-47-47852a1be1d0>\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 39\u001b[0m (tweak_strava3(raw_lazy)\n\u001b[0;32m---> 40\u001b[0;31m \u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGPUEngine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mraise_on_fail\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 41\u001b[0m )\n", | |
| "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/polars/lazyframe/frame.py\u001b[0m in \u001b[0;36mcollect\u001b[0;34m(self, type_coercion, predicate_pushdown, projection_pushdown, simplify_expression, slice_pushdown, comm_subplan_elim, comm_subexpr_elim, cluster_with_columns, collapse_joins, no_optimization, streaming, engine, background, _eager, **_kwargs)\u001b[0m\n\u001b[1;32m 2027\u001b[0m \u001b[0;31m# Only for testing purposes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2028\u001b[0m \u001b[0mcallback\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"post_opt_callback\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2029\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mwrap_df\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mldf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2030\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2031\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0moverload\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mComputeError\u001b[0m: 'cuda' conversion failed: NotImplementedError: ('Query execution with GPU not possible: unsupported operations.\\nThe errors were:\\n- NotImplementedError: Time zone support', [NotImplementedError('Time zone support')])" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import polars as pl\n", | |
| "import polars.selectors as cs\n", | |
| "\n", | |
| "calc_id = (pl.col('filename')\n", | |
| " .str.split('/')\n", | |
| " .list.get(-1)\n", | |
| " .str.replace('.gpx', '')\n", | |
| " .cast(pl.Int64)\n", | |
| " )\n", | |
| "calc_elapsed = (\n", | |
| " (pl.col(\"time\") - pl.col(\"time\").min())\n", | |
| " .dt.total_seconds()\n", | |
| " .over(pl.col('id'))\n", | |
| ")\n", | |
| "\n", | |
| "float_cols = ['distance_2d', 'latitude', 'longitude', 'elevation', 'speed_between']\n", | |
| "cat_cols = ['name', 'type', 'filename']\n", | |
| "cols = ['course', 'distance_2d', 'latitude', 'longitude', 'time', 'elevation',\n", | |
| " 'speed_between', 'name', 'type', 'filename']\n", | |
| "# drop course because it is all null\n", | |
| "final_cols = ['distance_2d', 'latitude', 'longitude', 'time', 'elevation', 'speed_between',\n", | |
| " 'name', 'type', 'filename', #'id', #'elapsed', #'period'\n", | |
| " ]\n", | |
| "\n", | |
| "def tweak_strava3(df):\n", | |
| " return (df\n", | |
| " .select(cols) # checking input\n", | |
| " #.with_columns(id=calc_id)\n", | |
| " .with_columns(\n", | |
| " pl.col(float_cols).cast(pl.Float32),\n", | |
| " #pl.col(cat_cols).cast(pl.Categorical),\n", | |
| " #elapsed=calc_elapsed.cast(pl.Int32),\n", | |
| " #time=pl.col('time').dt.convert_time_zone('America/Denver')\n", | |
| " )\n", | |
| " #.with_columns(period=(pl.col('time')-pl.col('time').first()).over(pl.col('id')))\n", | |
| " .select(final_cols) # checking output\n", | |
| " )\n", | |
| "\n", | |
| "(tweak_strava3(raw_lazy)\n", | |
| " .collect(engine=pl.GPUEngine(device=0, raise_on_fail=True))\n", | |
| ")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "(tweak_strava(raw)\n", | |
| "# make time naive - no tz\n", | |
| " .with_columns(time=pl.col('time').dt.replace_time_zone(None))\n", | |
| " .write_parquet('activities_naive.parquet')\n", | |
| ")\n" | |
| ], | |
| "metadata": { | |
| "id": "FjLumpqtgzsc" | |
| }, | |
| "execution_count": null, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "%%time\n", | |
| "(tweak_strava3(raw_lazy)\n", | |
| " .collect(engine=pl.GPUEngine(device=0, raise_on_fail=True))\n", | |
| ")\n" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 332 | |
| }, | |
| "id": "x_KpzlBYfS-D", | |
| "outputId": "f4f17f24-1528-4802-88e2-a998ca6fdc20" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "error", | |
| "ename": "ComputeError", | |
| "evalue": "'cuda' conversion failed: NotImplementedError: ('Query execution with GPU not possible: unsupported operations.\\nThe errors were:\\n- NotImplementedError: Time zone support', [NotImplementedError('Time zone support')])", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mComputeError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<timed eval>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n", | |
| "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/polars/lazyframe/frame.py\u001b[0m in \u001b[0;36mcollect\u001b[0;34m(self, type_coercion, predicate_pushdown, projection_pushdown, simplify_expression, slice_pushdown, comm_subplan_elim, comm_subexpr_elim, cluster_with_columns, collapse_joins, no_optimization, streaming, engine, background, _eager, **_kwargs)\u001b[0m\n\u001b[1;32m 2027\u001b[0m \u001b[0;31m# Only for testing purposes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2028\u001b[0m \u001b[0mcallback\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"post_opt_callback\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2029\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mwrap_df\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mldf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2030\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2031\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0moverload\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mComputeError\u001b[0m: 'cuda' conversion failed: NotImplementedError: ('Query execution with GPU not possible: unsupported operations.\\nThe errors were:\\n- NotImplementedError: Time zone support', [NotImplementedError('Time zone support')])" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "dx9YR_sjb0Qb" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "S21b2NS5b0Qc" | |
| }, | |
| "source": [ | |
| "## Stay in the Sandbox" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "-4z47KoJb0Qc", | |
| "outputId": "059b6069-77f7-4622-eaca-fcc9ee645b00" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "/var/folders/qn/r8_0pgj1645dn1w69vqls6cw0000gn/T/ipykernel_48473/370299276.py:6: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| " .with_columns(elevation_ft=pl.col('elevation').map_elements(meters_to_feet))\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 12)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>elevation_ft</th></tr><tr><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, America/Denver]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td><td>f64</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 10:54:56 MDT</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>5620.07892</td></tr><tr><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 10:54:57 MDT</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>5619.750916</td></tr><tr><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 10:54:58 MDT</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>5619.422912</td></tr><tr><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 10:54:59 MDT</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>5619.422912</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 10:55:00 MDT</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>5619.094508</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 10:01:42 MDT</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>4852.36236</td></tr><tr><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 10:01:43 MDT</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>4852.36236</td></tr><tr><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 10:01:45 MDT</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>4852.36236</td></tr><tr><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 10:01:48 MDT</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>4852.690364</td></tr><tr><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 10:01:49 MDT</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>4852.690364</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (5_050_370, 12)\n", | |
| "┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬─────────┬───────────┐\n", | |
| "│ distance_2 ┆ latitude ┆ longitude ┆ time ┆ … ┆ filename ┆ id ┆ elapsed ┆ elevation │\n", | |
| "│ d ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ _ft │\n", | |
| "│ --- ┆ f32 ┆ f32 ┆ datetime[ ┆ ┆ cat ┆ i64 ┆ i32 ┆ --- │\n", | |
| "│ f32 ┆ ┆ ┆ μs, Ameri ┆ ┆ ┆ ┆ ┆ f64 │\n", | |
| "│ ┆ ┆ ┆ ca/Denver ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═════════╪═══════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 0 ┆ 5620.0789 │\n", | |
| "│ ┆ ┆ 72 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ 2 │\n", | |
| "│ ┆ ┆ ┆ 10:54:56 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 6.704555 ┆ 41.370846 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 1 ┆ 5619.7509 │\n", | |
| "│ ┆ ┆ 11 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ 16 │\n", | |
| "│ ┆ ┆ ┆ 10:54:57 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 4.160126 ┆ 41.370808 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 2 ┆ 5619.4229 │\n", | |
| "│ ┆ ┆ 18 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ 12 │\n", | |
| "│ ┆ ┆ ┆ 10:54:58 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 2.62628 ┆ 41.370785 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 3 ┆ 5619.4229 │\n", | |
| "│ ┆ ┆ 26 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ 12 │\n", | |
| "│ ┆ ┆ ┆ 10:54:59 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ data/acti ┆ 117698380 ┆ 4 ┆ 5619.0945 │\n", | |
| "│ ┆ ┆ 33 ┆ 9 ┆ ┆ vities/11 ┆ 26 ┆ ┆ 08 │\n", | |
| "│ ┆ ┆ ┆ 10:55:00 ┆ ┆ 769838026 ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ .gp… ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4275 ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 6 │\n", | |
| "│ ┆ ┆ ┆ 10:01:42 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 0.238017 ┆ 40.879284 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4276 ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 6 │\n", | |
| "│ ┆ ┆ ┆ 10:01:43 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.05693 ┆ 40.879292 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4278 ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 6 │\n", | |
| "│ ┆ ┆ ┆ 10:01:45 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.259495 ┆ 40.879299 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4281 ┆ 4852.6903 │\n", | |
| "│ ┆ ┆ 7 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 64 │\n", | |
| "│ ┆ ┆ ┆ 10:01:48 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "│ 1.023777 ┆ 40.879311 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ data/acti ┆ 593262822 ┆ 4282 ┆ 4852.6903 │\n", | |
| "│ ┆ ┆ 77 ┆ 9 ┆ ┆ vities/59 ┆ 8 ┆ ┆ 64 │\n", | |
| "│ ┆ ┆ ┆ 10:01:49 ┆ ┆ 32628228. ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ gpx ┆ ┆ ┆ │\n", | |
| "└────────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴─────────┴───────────┘" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# convert elevation from meters to feet\n", | |
| "def meters_to_feet(m):\n", | |
| " return m * 3.28084\n", | |
| "\n", | |
| "(tweak_strava(raw)\n", | |
| " .with_columns(elevation_ft=pl.col('elevation').map_elements(meters_to_feet))\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 654 | |
| }, | |
| "id": "xDi823Hfb0Qc", | |
| "outputId": "f2c23607-c90a-47c2-bb53-28ef3f316b6d" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (5_050_370, 13)\n", | |
| "┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬─────────┬───────────┬───────────┐\n", | |
| "│ distance_2 ┆ latitude ┆ longitude ┆ time ┆ … ┆ id ┆ elapsed ┆ period ┆ elevation │\n", | |
| "│ d ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ _ft │\n", | |
| "│ --- ┆ f32 ┆ f32 ┆ datetime[ ┆ ┆ i64 ┆ i32 ┆ duration[ ┆ --- │\n", | |
| "│ f32 ┆ ┆ ┆ μs, Ameri ┆ ┆ ┆ ┆ μs] ┆ f32 │\n", | |
| "│ ┆ ┆ ┆ ca/Denver ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═════════╪═══════════╪═══════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 0 ┆ 0µs ┆ 5620.0786 │\n", | |
| "│ ┆ ┆ 72 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 13 │\n", | |
| "│ ┆ ┆ ┆ 10:54:56 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 6.704555 ┆ 41.370846 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 1 ┆ 1s ┆ 5619.7509 │\n", | |
| "│ ┆ ┆ 11 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 77 │\n", | |
| "│ ┆ ┆ ┆ 10:54:57 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 4.160126 ┆ 41.370808 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 2 ┆ 2s ┆ 5619.4228 │\n", | |
| "│ ┆ ┆ 18 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 52 │\n", | |
| "│ ┆ ┆ ┆ 10:54:58 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 2.62628 ┆ 41.370785 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 3 ┆ 3s ┆ 5619.4228 │\n", | |
| "│ ┆ ┆ 26 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 52 │\n", | |
| "│ ┆ ┆ ┆ 10:54:59 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 4 ┆ 4s ┆ 5619.0942 │\n", | |
| "│ ┆ ┆ 33 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 38 │\n", | |
| "│ ┆ ┆ ┆ 10:55:00 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4275 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 15s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:42 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 0.238017 ┆ 40.879284 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4276 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 16s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:43 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.05693 ┆ 40.879292 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4278 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 18s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:45 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.259495 ┆ 40.879299 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4281 ┆ 1h 11m ┆ 4852.6904 │\n", | |
| "│ ┆ ┆ 7 ┆ 9 ┆ ┆ 8 ┆ ┆ 21s ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 10:01:48 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.023777 ┆ 40.879311 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4282 ┆ 1h 11m ┆ 4852.6904 │\n", | |
| "│ ┆ ┆ 77 ┆ 9 ┆ ┆ 8 ┆ ┆ 22s ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 10:01:49 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "└────────────┴───────────┴───────────┴───────────┴───┴───────────┴─────────┴───────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 13)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th><th>elevation_ft</th></tr><tr><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, America/Denver]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td><td>duration[μs]</td><td>f32</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 10:54:56 MDT</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td><td>5620.078613</td></tr><tr><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 10:54:57 MDT</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>1s</td><td>5619.750977</td></tr><tr><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 10:54:58 MDT</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>2s</td><td>5619.422852</td></tr><tr><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 10:54:59 MDT</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>3s</td><td>5619.422852</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 10:55:00 MDT</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>4s</td><td>5619.094238</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 10:01:42 MDT</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>1h 11m 15s</td><td>4852.362305</td></tr><tr><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 10:01:43 MDT</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>1h 11m 16s</td><td>4852.362305</td></tr><tr><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 10:01:45 MDT</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>1h 11m 18s</td><td>4852.362305</td></tr><tr><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 10:01:48 MDT</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>1h 11m 21s</td><td>4852.69043</td></tr><tr><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 10:01:49 MDT</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>1h 11m 22s</td><td>4852.69043</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 17 | |
| } | |
| ], | |
| "source": [ | |
| "# convert elevation from meters to feet\n", | |
| "def meters_to_feet(m):\n", | |
| " return m * 3.28084\n", | |
| "\n", | |
| "(tweak_strava(raw)\n", | |
| " .with_columns(elevation_ft=meters_to_feet(pl.col('elevation')))\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "RfIKcwH8b0Qc", | |
| "outputId": "c58508c7-52b2-4de1-e846-670921dab728" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n", | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n", | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n", | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n", | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n", | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n", | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n", | |
| "<magic-timeit>:2: PolarsInefficientMapWarning: \n", | |
| "Expr.map_elements is significantly slower than the native expressions API.\n", | |
| "Only use if you absolutely CANNOT implement your logic otherwise.\n", | |
| "Replace this expression...\n", | |
| " - pl.col(\"elevation\").map_elements(meters_to_feet)\n", | |
| "with this one instead:\n", | |
| " + pl.col(\"elevation\") * 3.28084\n", | |
| "\n", | |
| "sys:1: MapWithoutReturnDtypeWarning: Calling `map_elements` without specifying `return_dtype` can lead to unpredictable results. Specify `return_dtype` to silence this warning.\n" | |
| ] | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "745 ms ± 28.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%%timeit\n", | |
| "(tweak_strava(raw)\n", | |
| " .with_columns(elevation_ft=pl.col('elevation').map_elements(meters_to_feet))\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Pw3cbcP2b0Qc", | |
| "outputId": "7d20d480-2749-4bad-eea1-cc04aced69ac" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "448 ms ± 29.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%%timeit\n", | |
| "(tweak_strava(raw)\n", | |
| " .with_columns(elevation_ft=meters_to_feet(pl.col('elevation')))\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Xfps7GwJb0Qc", | |
| "outputId": "5ad48e36-7694-48fa-b9fe-ab8ec4e21941" | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "442 ms ± 27.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%%timeit\n", | |
| "(tweak_strava(raw)\n", | |
| " .with_columns(elevation_ft=pl.col('elevation') * 3.28084)\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Q6aUVm5Ab0Qc" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 688 | |
| }, | |
| "id": "x3goNxelb0Qc", | |
| "outputId": "6f149390-04ff-48dc-a036-e29b18d887af" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 3.66 s, sys: 1.16 s, total: 4.82 s\n", | |
| "Wall time: 2.84 s\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (5_050_370, 13)\n", | |
| "┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬─────────┬───────────┬───────────┐\n", | |
| "│ distance_2 ┆ latitude ┆ longitude ┆ time ┆ … ┆ id ┆ elapsed ┆ period ┆ elevation │\n", | |
| "│ d ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ _ft │\n", | |
| "│ --- ┆ f32 ┆ f32 ┆ datetime[ ┆ ┆ i64 ┆ i32 ┆ duration[ ┆ --- │\n", | |
| "│ f32 ┆ ┆ ┆ μs, Ameri ┆ ┆ ┆ ┆ μs] ┆ f32 │\n", | |
| "│ ┆ ┆ ┆ ca/Denver ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═════════╪═══════════╪═══════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 0 ┆ 0µs ┆ 5620.0786 │\n", | |
| "│ ┆ ┆ 72 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 13 │\n", | |
| "│ ┆ ┆ ┆ 10:54:56 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 6.704555 ┆ 41.370846 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 1 ┆ 1s ┆ 5619.7509 │\n", | |
| "│ ┆ ┆ 11 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 77 │\n", | |
| "│ ┆ ┆ ┆ 10:54:57 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 4.160126 ┆ 41.370808 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 2 ┆ 2s ┆ 5619.4228 │\n", | |
| "│ ┆ ┆ 18 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 52 │\n", | |
| "│ ┆ ┆ ┆ 10:54:58 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 2.62628 ┆ 41.370785 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 3 ┆ 3s ┆ 5619.4228 │\n", | |
| "│ ┆ ┆ 26 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 52 │\n", | |
| "│ ┆ ┆ ┆ 10:54:59 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 4 ┆ 4s ┆ 5619.0942 │\n", | |
| "│ ┆ ┆ 33 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 38 │\n", | |
| "│ ┆ ┆ ┆ 10:55:00 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4275 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 15s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:42 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 0.238017 ┆ 40.879284 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4276 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 16s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:43 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.05693 ┆ 40.879292 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4278 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 18s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:45 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.259495 ┆ 40.879299 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4281 ┆ 1h 11m ┆ 4852.6904 │\n", | |
| "│ ┆ ┆ 7 ┆ 9 ┆ ┆ 8 ┆ ┆ 21s ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 10:01:48 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.023777 ┆ 40.879311 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4282 ┆ 1h 11m ┆ 4852.6904 │\n", | |
| "│ ┆ ┆ 77 ┆ 9 ┆ ┆ 8 ┆ ┆ 22s ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 10:01:49 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "└────────────┴───────────┴───────────┴───────────┴───┴───────────┴─────────┴───────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 13)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th><th>elevation_ft</th></tr><tr><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, America/Denver]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td><td>duration[μs]</td><td>f32</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 10:54:56 MDT</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td><td>5620.078613</td></tr><tr><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 10:54:57 MDT</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>1s</td><td>5619.750977</td></tr><tr><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 10:54:58 MDT</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>2s</td><td>5619.422852</td></tr><tr><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 10:54:59 MDT</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>3s</td><td>5619.422852</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 10:55:00 MDT</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>4s</td><td>5619.094238</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 10:01:42 MDT</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>1h 11m 15s</td><td>4852.362305</td></tr><tr><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 10:01:43 MDT</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>1h 11m 16s</td><td>4852.362305</td></tr><tr><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 10:01:45 MDT</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>1h 11m 18s</td><td>4852.362305</td></tr><tr><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 10:01:48 MDT</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>1h 11m 21s</td><td>4852.69043</td></tr><tr><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 10:01:49 MDT</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>1h 11m 22s</td><td>4852.69043</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 18 | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .with_columns(elevation_ft=meters_to_feet(pl.col('elevation')))\n", | |
| " .collect()\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "%%time\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .with_columns(elevation_ft=meters_to_feet(pl.col('elevation')))\n", | |
| " .collect(engine='gpu')\n", | |
| " )" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 688 | |
| }, | |
| "id": "xgTppSHaeBEw", | |
| "outputId": "05f3c138-d011-4045-a83e-c9ebd51b1955" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 3.71 s, sys: 1.08 s, total: 4.79 s\n", | |
| "Wall time: 2.83 s\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (5_050_370, 13)\n", | |
| "┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬─────────┬───────────┬───────────┐\n", | |
| "│ distance_2 ┆ latitude ┆ longitude ┆ time ┆ … ┆ id ┆ elapsed ┆ period ┆ elevation │\n", | |
| "│ d ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ _ft │\n", | |
| "│ --- ┆ f32 ┆ f32 ┆ datetime[ ┆ ┆ i64 ┆ i32 ┆ duration[ ┆ --- │\n", | |
| "│ f32 ┆ ┆ ┆ μs, Ameri ┆ ┆ ┆ ┆ μs] ┆ f32 │\n", | |
| "│ ┆ ┆ ┆ ca/Denver ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ │\n", | |
| "╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═════════╪═══════════╪═══════════╡\n", | |
| "│ 0.0 ┆ 41.370804 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 0 ┆ 0µs ┆ 5620.0786 │\n", | |
| "│ ┆ ┆ 72 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 13 │\n", | |
| "│ ┆ ┆ ┆ 10:54:56 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 6.704555 ┆ 41.370846 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 1 ┆ 1s ┆ 5619.7509 │\n", | |
| "│ ┆ ┆ 11 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 77 │\n", | |
| "│ ┆ ┆ ┆ 10:54:57 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 4.160126 ┆ 41.370808 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 2 ┆ 2s ┆ 5619.4228 │\n", | |
| "│ ┆ ┆ 18 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 52 │\n", | |
| "│ ┆ ┆ ┆ 10:54:58 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 2.62628 ┆ 41.370785 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 3 ┆ 3s ┆ 5619.4228 │\n", | |
| "│ ┆ ┆ 26 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 52 │\n", | |
| "│ ┆ ┆ ┆ 10:54:59 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.26929 ┆ 41.370773 ┆ -111.9017 ┆ 2024-06-2 ┆ … ┆ 117698380 ┆ 4 ┆ 4s ┆ 5619.0942 │\n", | |
| "│ ┆ ┆ 33 ┆ 9 ┆ ┆ 26 ┆ ┆ ┆ 38 │\n", | |
| "│ ┆ ┆ ┆ 10:55:00 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 0.344402 ┆ 40.87928 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4275 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 15s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:42 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 0.238017 ┆ 40.879284 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4276 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 16s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:43 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.05693 ┆ 40.879292 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4278 ┆ 1h 11m ┆ 4852.3623 │\n", | |
| "│ ┆ ┆ 62 ┆ 9 ┆ ┆ 8 ┆ ┆ 18s ┆ 05 │\n", | |
| "│ ┆ ┆ ┆ 10:01:45 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.259495 ┆ 40.879299 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4281 ┆ 1h 11m ┆ 4852.6904 │\n", | |
| "│ ┆ ┆ 7 ┆ 9 ┆ ┆ 8 ┆ ┆ 21s ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 10:01:48 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 1.023777 ┆ 40.879311 ┆ -111.8553 ┆ 2021-09-0 ┆ … ┆ 593262822 ┆ 4282 ┆ 1h 11m ┆ 4852.6904 │\n", | |
| "│ ┆ ┆ 77 ┆ 9 ┆ ┆ 8 ┆ ┆ 22s ┆ 3 │\n", | |
| "│ ┆ ┆ ┆ 10:01:49 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ ┆ ┆ MDT ┆ ┆ ┆ ┆ ┆ │\n", | |
| "└────────────┴───────────┴───────────┴───────────┴───┴───────────┴─────────┴───────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (5_050_370, 13)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>distance_2d</th><th>latitude</th><th>longitude</th><th>time</th><th>elevation</th><th>speed_between</th><th>name</th><th>type</th><th>filename</th><th>id</th><th>elapsed</th><th>period</th><th>elevation_ft</th></tr><tr><td>f32</td><td>f32</td><td>f32</td><td>datetime[μs, America/Denver]</td><td>f32</td><td>f32</td><td>cat</td><td>cat</td><td>cat</td><td>i64</td><td>i32</td><td>duration[μs]</td><td>f32</td></tr></thead><tbody><tr><td>0.0</td><td>41.370804</td><td>-111.901772</td><td>2024-06-29 10:54:56 MDT</td><td>1713.0</td><td>null</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>0</td><td>0µs</td><td>5620.078613</td></tr><tr><td>6.704555</td><td>41.370846</td><td>-111.901711</td><td>2024-06-29 10:54:57 MDT</td><td>1712.900024</td><td>6.705301</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>1</td><td>1s</td><td>5619.750977</td></tr><tr><td>4.160126</td><td>41.370808</td><td>-111.901718</td><td>2024-06-29 10:54:58 MDT</td><td>1712.800049</td><td>4.161328</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>2</td><td>2s</td><td>5619.422852</td></tr><tr><td>2.62628</td><td>41.370785</td><td>-111.901726</td><td>2024-06-29 10:54:59 MDT</td><td>1712.800049</td><td>2.62628</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>3</td><td>3s</td><td>5619.422852</td></tr><tr><td>1.26929</td><td>41.370773</td><td>-111.901733</td><td>2024-06-29 10:55:00 MDT</td><td>1712.699951</td><td>1.273223</td><td>"365 and spork"</td><td>"ebikeride"</td><td>"data/activities/11769838026.gp…</td><td>11769838026</td><td>4</td><td>4s</td><td>5619.094238</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>0.344402</td><td>40.87928</td><td>-111.855362</td><td>2021-09-09 10:01:42 MDT</td><td>1479.0</td><td>0.172201</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4275</td><td>1h 11m 15s</td><td>4852.362305</td></tr><tr><td>0.238017</td><td>40.879284</td><td>-111.855362</td><td>2021-09-09 10:01:43 MDT</td><td>1479.0</td><td>0.238017</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4276</td><td>1h 11m 16s</td><td>4852.362305</td></tr><tr><td>1.05693</td><td>40.879292</td><td>-111.855362</td><td>2021-09-09 10:01:45 MDT</td><td>1479.0</td><td>0.528465</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4278</td><td>1h 11m 18s</td><td>4852.362305</td></tr><tr><td>1.259495</td><td>40.879299</td><td>-111.85537</td><td>2021-09-09 10:01:48 MDT</td><td>1479.099976</td><td>0.421153</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4281</td><td>1h 11m 21s</td><td>4852.69043</td></tr><tr><td>1.023777</td><td>40.879311</td><td>-111.855377</td><td>2021-09-09 10:01:49 MDT</td><td>1479.099976</td><td>1.023777</td><td>"Morning walk"</td><td>"walking"</td><td>"data/activities/5932628228.gpx"</td><td>5932628228</td><td>4282</td><td>1h 11m 22s</td><td>4852.69043</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 19 | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "m3wb1yIQb0Qc" | |
| }, | |
| "source": [ | |
| "## Master Aggregation" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "q8Lct9Ipb0Qc", | |
| "outputId": "c5732576-e861-4ca2-e5a5-c3bba5f18e79" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (974, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>id</th><th>activity</th><th>distance</th><th>elevation</th><th>elapsed</th><th>period</th><th>speed</th></tr><tr><td>i64</td><td>cat</td><td>f32</td><td>f32</td><td>i32</td><td>duration[μs]</td><td>f64</td></tr></thead><tbody><tr><td>10861882731</td><td>"Morning Run"</td><td>41.345592</td><td>327619.0</td><td>134</td><td>2m 14s</td><td>0.308549</td></tr><tr><td>10074773869</td><td>"Green canyon Ride (top loop is…</td><td>55.791634</td><td>7886.899902</td><td>3</td><td>3s</td><td>18.597211</td></tr><tr><td>4861795818</td><td>"16 inches and forgot to record"</td><td>110.950768</td><td>16022.299805</td><td>10</td><td>10s</td><td>11.095077</td></tr><tr><td>11265245273</td><td>"Popperton"</td><td>354.114624</td><td>316551.0625</td><td>211</td><td>3m 31s</td><td>1.678268</td></tr><tr><td>7475182669</td><td>"X start of silver falls"</td><td>494.293243</td><td>420216.46875</td><td>709</td><td>11m 49s</td><td>0.69717</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>3128639607</td><td>"Quick solo"</td><td>97783.789062</td><td>4856241.5</td><td>4625</td><td>1h 17m 5s</td><td>21.142441</td></tr><tr><td>10563801690</td><td>"11 basin"</td><td>102408.046875</td><td>2.68658752e8</td><td>165520</td><td>1d 21h 58m 40s</td><td>0.618705</td></tr><tr><td>3043338976</td><td>"Ski with kids"</td><td>164875.328125</td><td>2.387173e7</td><td>19000</td><td>5h 16m 40s</td><td>8.677649</td></tr><tr><td>12496788619</td><td>"No stop"</td><td>222882.515625</td><td>1.3668e6</td><td>82899</td><td>23h 1m 39s</td><td>2.688603</td></tr><tr><td>12379351421</td><td>"Forgot to stop"</td><td>449697.5625</td><td>6.0286624e7</td><td>197243</td><td>2d 6h 47m 23s</td><td>2.279916</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (974, 7)\n", | |
| "┌─────────────┬───────────────┬───────────────┬──────────────┬─────────┬───────────────┬───────────┐\n", | |
| "│ id ┆ activity ┆ distance ┆ elevation ┆ elapsed ┆ period ┆ speed │\n", | |
| "│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ i64 ┆ cat ┆ f32 ┆ f32 ┆ i32 ┆ duration[μs] ┆ f64 │\n", | |
| "╞═════════════╪═══════════════╪═══════════════╪══════════════╪═════════╪═══════════════╪═══════════╡\n", | |
| "│ 10861882731 ┆ Morning Run ┆ 41.345592 ┆ 327619.0 ┆ 134 ┆ 2m 14s ┆ 0.308549 │\n", | |
| "│ 10074773869 ┆ Green canyon ┆ 55.791634 ┆ 7886.899902 ┆ 3 ┆ 3s ┆ 18.597211 │\n", | |
| "│ ┆ Ride (top ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ loop is… ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 4861795818 ┆ 16 inches and ┆ 110.950768 ┆ 16022.299805 ┆ 10 ┆ 10s ┆ 11.095077 │\n", | |
| "│ ┆ forgot to ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ record ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 11265245273 ┆ Popperton ┆ 354.114624 ┆ 316551.0625 ┆ 211 ┆ 3m 31s ┆ 1.678268 │\n", | |
| "│ 7475182669 ┆ X start of ┆ 494.293243 ┆ 420216.46875 ┆ 709 ┆ 11m 49s ┆ 0.69717 │\n", | |
| "│ ┆ silver falls ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 3128639607 ┆ Quick solo ┆ 97783.789062 ┆ 4856241.5 ┆ 4625 ┆ 1h 17m 5s ┆ 21.142441 │\n", | |
| "│ 10563801690 ┆ 11 basin ┆ 102408.046875 ┆ 2.68658752e8 ┆ 165520 ┆ 1d 21h 58m ┆ 0.618705 │\n", | |
| "│ ┆ ┆ ┆ ┆ ┆ 40s ┆ │\n", | |
| "│ 3043338976 ┆ Ski with kids ┆ 164875.328125 ┆ 2.387173e7 ┆ 19000 ┆ 5h 16m 40s ┆ 8.677649 │\n", | |
| "│ 12496788619 ┆ No stop ┆ 222882.515625 ┆ 1.3668e6 ┆ 82899 ┆ 23h 1m 39s ┆ 2.688603 │\n", | |
| "│ 12379351421 ┆ Forgot to ┆ 449697.5625 ┆ 6.0286624e7 ┆ 197243 ┆ 2d 6h 47m 23s ┆ 2.279916 │\n", | |
| "│ ┆ stop ┆ ┆ ┆ ┆ ┆ │\n", | |
| "└─────────────┴───────────────┴───────────────┴──────────────┴─────────┴───────────────┴───────────┘" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# distance per activity\n", | |
| "\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .group_by('id')\n", | |
| " .agg(\n", | |
| " activity=pl.col('name').first(),\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " elevation=pl.col('elevation').sum(),\n", | |
| " elapsed=pl.col('elapsed').last(),\n", | |
| " period=pl.col('period').last(),\n", | |
| " )\n", | |
| " .with_columns(speed=pl.col('distance') / pl.col('elapsed'))\n", | |
| " .sort('distance')\n", | |
| " .collect()\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "8w72LwAdb0Qc", | |
| "outputId": "d0587895-c2a9-446b-ea52-cdf586492abf" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (974, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>id</th><th>activity</th><th>distance</th><th>elevation</th><th>elapsed</th><th>period</th><th>speed</th></tr><tr><td>i64</td><td>cat</td><td>f32</td><td>f32</td><td>i32</td><td>duration[μs]</td><td>f64</td></tr></thead><tbody><tr><td>10074773869</td><td>"Green canyon Ride (top loop is…</td><td>55.791634</td><td>7886.899902</td><td>3</td><td>3s</td><td>18.597211</td></tr><tr><td>4861795818</td><td>"16 inches and forgot to record"</td><td>110.950768</td><td>16022.299805</td><td>10</td><td>10s</td><td>11.095077</td></tr><tr><td>10861882731</td><td>"Morning Run"</td><td>41.345592</td><td>327619.0</td><td>134</td><td>2m 14s</td><td>0.308549</td></tr><tr><td>2260572607</td><td>"Cruise ship level 4"</td><td>1971.770386</td><td>0.0</td><td>191</td><td>3m 11s</td><td>10.323405</td></tr><tr><td>11265245273</td><td>"Popperton"</td><td>354.114624</td><td>316551.0625</td><td>211</td><td>3m 31s</td><td>1.678268</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>12496788619</td><td>"No stop"</td><td>222882.515625</td><td>1.3668e6</td><td>82899</td><td>23h 1m 39s</td><td>2.688603</td></tr><tr><td>9182951923</td><td>"Two walks and one day"</td><td>22229.818359</td><td>1.33492336e8</td><td>91989</td><td>1d 1h 33m 9s</td><td>0.241657</td></tr><tr><td>10563801690</td><td>"11 basin"</td><td>102408.046875</td><td>2.68658752e8</td><td>165520</td><td>1d 21h 58m 40s</td><td>0.618705</td></tr><tr><td>12379351421</td><td>"Forgot to stop"</td><td>449697.5625</td><td>6.0286624e7</td><td>197243</td><td>2d 6h 47m 23s</td><td>2.279916</td></tr><tr><td>3463601371</td><td>"Grandeur peak"</td><td>11213.65332</td><td>2.1661466e7</td><td>1238644328</td><td>14336d 3h 52m 8s</td><td>0.000009</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (974, 7)\n", | |
| "┌─────────────┬──────────────┬──────────────┬──────────────┬────────────┬──────────────┬───────────┐\n", | |
| "│ id ┆ activity ┆ distance ┆ elevation ┆ elapsed ┆ period ┆ speed │\n", | |
| "│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ i64 ┆ cat ┆ f32 ┆ f32 ┆ i32 ┆ duration[μs] ┆ f64 │\n", | |
| "╞═════════════╪══════════════╪══════════════╪══════════════╪════════════╪══════════════╪═══════════╡\n", | |
| "│ 10074773869 ┆ Green canyon ┆ 55.791634 ┆ 7886.899902 ┆ 3 ┆ 3s ┆ 18.597211 │\n", | |
| "│ ┆ Ride (top ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ loop is… ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 4861795818 ┆ 16 inches ┆ 110.950768 ┆ 16022.299805 ┆ 10 ┆ 10s ┆ 11.095077 │\n", | |
| "│ ┆ and forgot ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ to record ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 10861882731 ┆ Morning Run ┆ 41.345592 ┆ 327619.0 ┆ 134 ┆ 2m 14s ┆ 0.308549 │\n", | |
| "│ 2260572607 ┆ Cruise ship ┆ 1971.770386 ┆ 0.0 ┆ 191 ┆ 3m 11s ┆ 10.323405 │\n", | |
| "│ ┆ level 4 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 11265245273 ┆ Popperton ┆ 354.114624 ┆ 316551.0625 ┆ 211 ┆ 3m 31s ┆ 1.678268 │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 12496788619 ┆ No stop ┆ 222882.51562 ┆ 1.3668e6 ┆ 82899 ┆ 23h 1m 39s ┆ 2.688603 │\n", | |
| "│ ┆ ┆ 5 ┆ ┆ ┆ ┆ │\n", | |
| "│ 9182951923 ┆ Two walks ┆ 22229.818359 ┆ 1.33492336e8 ┆ 91989 ┆ 1d 1h 33m 9s ┆ 0.241657 │\n", | |
| "│ ┆ and one day ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 10563801690 ┆ 11 basin ┆ 102408.04687 ┆ 2.68658752e8 ┆ 165520 ┆ 1d 21h 58m ┆ 0.618705 │\n", | |
| "│ ┆ ┆ 5 ┆ ┆ ┆ 40s ┆ │\n", | |
| "│ 12379351421 ┆ Forgot to ┆ 449697.5625 ┆ 6.0286624e7 ┆ 197243 ┆ 2d 6h 47m ┆ 2.279916 │\n", | |
| "│ ┆ stop ┆ ┆ ┆ ┆ 23s ┆ │\n", | |
| "│ 3463601371 ┆ Grandeur ┆ 11213.65332 ┆ 2.1661466e7 ┆ 1238644328 ┆ 14336d 3h ┆ 0.000009 │\n", | |
| "│ ┆ peak ┆ ┆ ┆ ┆ 52m 8s ┆ │\n", | |
| "└─────────────┴──────────────┴──────────────┴──────────────┴────────────┴──────────────┴───────────┘" | |
| ] | |
| }, | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# filter > 23 hours\n", | |
| "\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .group_by('id')\n", | |
| " .agg(\n", | |
| " activity=pl.col('name').first(),\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " elevation=pl.col('elevation').sum(),\n", | |
| " elapsed=pl.col('elapsed').last(),\n", | |
| " period=pl.col('period').last(),\n", | |
| " )\n", | |
| " .with_columns(speed=pl.col('distance') / pl.col('elapsed'))\n", | |
| " .sort('elapsed')\n", | |
| " .collect()\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 497 | |
| }, | |
| "id": "K6RK046wb0Qc", | |
| "outputId": "fb3beebe-8f3e-4ffc-d76a-b8dc0e64265a" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 4.73 s, sys: 988 ms, total: 5.72 s\n", | |
| "Wall time: 1.38 s\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (969, 7)\n", | |
| "┌─────────────┬─────────────────┬──────────────┬──────────────┬─────────┬──────────────┬───────────┐\n", | |
| "│ id ┆ activity ┆ distance ┆ elevation ┆ elapsed ┆ period ┆ speed │\n", | |
| "│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ i64 ┆ str ┆ f32 ┆ f32 ┆ i32 ┆ duration[μs] ┆ f64 │\n", | |
| "╞═════════════╪═════════════════╪══════════════╪══════════════╪═════════╪══════════════╪═══════════╡\n", | |
| "│ 10074773869 ┆ Green canyon ┆ 55.791634 ┆ 7886.899902 ┆ 3 ┆ 3s ┆ 18.597211 │\n", | |
| "│ ┆ Ride (top loop ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ is… ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 4861795818 ┆ 16 inches and ┆ 110.950768 ┆ 16022.299805 ┆ 10 ┆ 10s ┆ 11.095077 │\n", | |
| "│ ┆ forgot to ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ record ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 10861882731 ┆ Morning Run ┆ 41.345592 ┆ 327619.0 ┆ 134 ┆ 2m 14s ┆ 0.308549 │\n", | |
| "│ 2260572607 ┆ Cruise ship ┆ 1971.770386 ┆ 0.0 ┆ 191 ┆ 3m 11s ┆ 10.323405 │\n", | |
| "│ ┆ level 4 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 11265245273 ┆ Popperton ┆ 354.114624 ┆ 316551.0625 ┆ 211 ┆ 3m 31s ┆ 1.678268 │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 723048762 ┆ Bear 100 ┆ 31935.894531 ┆ 1.6944826e7 ┆ 27494 ┆ 7h 38m 14s ┆ 1.161559 │\n", | |
| "│ ┆ Evening Run ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 494446374 ┆ Park city with ┆ 52456.523438 ┆ 2.6608832e7 ┆ 27931 ┆ 7h 45m 31s ┆ 1.878075 │\n", | |
| "│ ┆ kids ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 13480080256 ┆ Brighton 15 ┆ 72800.445312 ┆ 8.4389008e7 ┆ 31277 ┆ 8h 41m 17s ┆ 2.327603 │\n", | |
| "│ 8535457570 ┆ All day walk ┆ 17385.654297 ┆ 5.4682672e7 ┆ 40329 ┆ 11h 12m 9s ┆ 0.431096 │\n", | |
| "│ 1020744327 ┆ Squaw peak ┆ 91396.789062 ┆ 4.3310584e7 ┆ 55955 ┆ 15h 32m 35s ┆ 1.633398 │\n", | |
| "└─────────────┴─────────────────┴──────────────┴──────────────┴─────────┴──────────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (969, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>id</th><th>activity</th><th>distance</th><th>elevation</th><th>elapsed</th><th>period</th><th>speed</th></tr><tr><td>i64</td><td>str</td><td>f32</td><td>f32</td><td>i32</td><td>duration[μs]</td><td>f64</td></tr></thead><tbody><tr><td>10074773869</td><td>"Green canyon Ride (top loop is…</td><td>55.791634</td><td>7886.899902</td><td>3</td><td>3s</td><td>18.597211</td></tr><tr><td>4861795818</td><td>"16 inches and forgot to record"</td><td>110.950768</td><td>16022.299805</td><td>10</td><td>10s</td><td>11.095077</td></tr><tr><td>10861882731</td><td>"Morning Run"</td><td>41.345592</td><td>327619.0</td><td>134</td><td>2m 14s</td><td>0.308549</td></tr><tr><td>2260572607</td><td>"Cruise ship level 4"</td><td>1971.770386</td><td>0.0</td><td>191</td><td>3m 11s</td><td>10.323405</td></tr><tr><td>11265245273</td><td>"Popperton"</td><td>354.114624</td><td>316551.0625</td><td>211</td><td>3m 31s</td><td>1.678268</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>723048762</td><td>"Bear 100 Evening Run"</td><td>31935.894531</td><td>1.6944826e7</td><td>27494</td><td>7h 38m 14s</td><td>1.161559</td></tr><tr><td>494446374</td><td>"Park city with kids"</td><td>52456.523438</td><td>2.6608832e7</td><td>27931</td><td>7h 45m 31s</td><td>1.878075</td></tr><tr><td>13480080256</td><td>"Brighton 15"</td><td>72800.445312</td><td>8.4389008e7</td><td>31277</td><td>8h 41m 17s</td><td>2.327603</td></tr><tr><td>8535457570</td><td>"All day walk"</td><td>17385.654297</td><td>5.4682672e7</td><td>40329</td><td>11h 12m 9s</td><td>0.431096</td></tr><tr><td>1020744327</td><td>"Squaw peak"</td><td>91396.789062</td><td>4.3310584e7</td><td>55955</td><td>15h 32m 35s</td><td>1.633398</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 79 | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "# filter > 23 hours\n", | |
| "\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .group_by('id')\n", | |
| " .agg(\n", | |
| " activity=pl.col('name').first(),\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " elevation=pl.col('elevation').sum(),\n", | |
| " elapsed=pl.col('elapsed').last(),\n", | |
| " period=pl.col('period').last(),\n", | |
| " )\n", | |
| " .with_columns(speed=pl.col('distance') / pl.col('elapsed'))\n", | |
| " .sort('elapsed')\n", | |
| " .filter(pl.col('elapsed') < 23 * 60 * 60)\n", | |
| " .collect()\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "%%time\n", | |
| "# filter > 23 hours\n", | |
| "\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .group_by('id')\n", | |
| " .agg(\n", | |
| " activity=pl.col('name').first(),\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " elevation=pl.col('elevation').sum(),\n", | |
| " elapsed=pl.col('elapsed').last(),\n", | |
| " period=pl.col('period').last(),\n", | |
| " )\n", | |
| " .with_columns(speed=pl.col('distance') / pl.col('elapsed'))\n", | |
| " .sort('elapsed')\n", | |
| " .filter(pl.col('elapsed') < 23 * 60 * 60)\n", | |
| " .collect(engine='gpu')\n", | |
| " )" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 497 | |
| }, | |
| "id": "Yroq7KF-eLo7", | |
| "outputId": "b94388af-36f0-4466-aeaa-640d6bd3c02a" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 4.38 s, sys: 837 ms, total: 5.22 s\n", | |
| "Wall time: 1.22 s\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (969, 7)\n", | |
| "┌─────────────┬─────────────────┬──────────────┬──────────────┬─────────┬──────────────┬───────────┐\n", | |
| "│ id ┆ activity ┆ distance ┆ elevation ┆ elapsed ┆ period ┆ speed │\n", | |
| "│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n", | |
| "│ i64 ┆ str ┆ f32 ┆ f32 ┆ i32 ┆ duration[μs] ┆ f64 │\n", | |
| "╞═════════════╪═════════════════╪══════════════╪══════════════╪═════════╪══════════════╪═══════════╡\n", | |
| "│ 10074773869 ┆ Green canyon ┆ 55.791634 ┆ 7886.899902 ┆ 3 ┆ 3s ┆ 18.597211 │\n", | |
| "│ ┆ Ride (top loop ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ is… ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 4861795818 ┆ 16 inches and ┆ 110.950768 ┆ 16022.299805 ┆ 10 ┆ 10s ┆ 11.095077 │\n", | |
| "│ ┆ forgot to ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ ┆ record ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 10861882731 ┆ Morning Run ┆ 41.345592 ┆ 327619.0 ┆ 134 ┆ 2m 14s ┆ 0.308549 │\n", | |
| "│ 2260572607 ┆ Cruise ship ┆ 1971.770386 ┆ 0.0 ┆ 191 ┆ 3m 11s ┆ 10.323405 │\n", | |
| "│ ┆ level 4 ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 11265245273 ┆ Popperton ┆ 354.114624 ┆ 316551.0625 ┆ 211 ┆ 3m 31s ┆ 1.678268 │\n", | |
| "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", | |
| "│ 723048762 ┆ Bear 100 ┆ 31935.894531 ┆ 1.6944826e7 ┆ 27494 ┆ 7h 38m 14s ┆ 1.161559 │\n", | |
| "│ ┆ Evening Run ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 494446374 ┆ Park city with ┆ 52456.523438 ┆ 2.6608832e7 ┆ 27931 ┆ 7h 45m 31s ┆ 1.878075 │\n", | |
| "│ ┆ kids ┆ ┆ ┆ ┆ ┆ │\n", | |
| "│ 13480080256 ┆ Brighton 15 ┆ 72800.445312 ┆ 8.4389008e7 ┆ 31277 ┆ 8h 41m 17s ┆ 2.327603 │\n", | |
| "│ 8535457570 ┆ All day walk ┆ 17385.654297 ┆ 5.4682672e7 ┆ 40329 ┆ 11h 12m 9s ┆ 0.431096 │\n", | |
| "│ 1020744327 ┆ Squaw peak ┆ 91396.789062 ┆ 4.3310584e7 ┆ 55955 ┆ 15h 32m 35s ┆ 1.633398 │\n", | |
| "└─────────────┴─────────────────┴──────────────┴──────────────┴─────────┴──────────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (969, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>id</th><th>activity</th><th>distance</th><th>elevation</th><th>elapsed</th><th>period</th><th>speed</th></tr><tr><td>i64</td><td>str</td><td>f32</td><td>f32</td><td>i32</td><td>duration[μs]</td><td>f64</td></tr></thead><tbody><tr><td>10074773869</td><td>"Green canyon Ride (top loop is…</td><td>55.791634</td><td>7886.899902</td><td>3</td><td>3s</td><td>18.597211</td></tr><tr><td>4861795818</td><td>"16 inches and forgot to record"</td><td>110.950768</td><td>16022.299805</td><td>10</td><td>10s</td><td>11.095077</td></tr><tr><td>10861882731</td><td>"Morning Run"</td><td>41.345592</td><td>327619.0</td><td>134</td><td>2m 14s</td><td>0.308549</td></tr><tr><td>2260572607</td><td>"Cruise ship level 4"</td><td>1971.770386</td><td>0.0</td><td>191</td><td>3m 11s</td><td>10.323405</td></tr><tr><td>11265245273</td><td>"Popperton"</td><td>354.114624</td><td>316551.0625</td><td>211</td><td>3m 31s</td><td>1.678268</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>723048762</td><td>"Bear 100 Evening Run"</td><td>31935.894531</td><td>1.6944826e7</td><td>27494</td><td>7h 38m 14s</td><td>1.161559</td></tr><tr><td>494446374</td><td>"Park city with kids"</td><td>52456.523438</td><td>2.6608832e7</td><td>27931</td><td>7h 45m 31s</td><td>1.878075</td></tr><tr><td>13480080256</td><td>"Brighton 15"</td><td>72800.445312</td><td>8.4389008e7</td><td>31277</td><td>8h 41m 17s</td><td>2.327603</td></tr><tr><td>8535457570</td><td>"All day walk"</td><td>17385.654297</td><td>5.4682672e7</td><td>40329</td><td>11h 12m 9s</td><td>0.431096</td></tr><tr><td>1020744327</td><td>"Squaw peak"</td><td>91396.789062</td><td>4.3310584e7</td><td>55955</td><td>15h 32m 35s</td><td>1.633398</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 80 | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "fmwcGYfib0Qc" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "c2OC6vHVb0Qc", | |
| "outputId": "60b677c0-22cc-4ebd-aca3-6c55c26468aa" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "\n", | |
| "<style>\n", | |
| " #altair-viz-5c4ee0ea006340f4acb0c56d0ea7c06a.vega-embed {\n", | |
| " width: 100%;\n", | |
| " display: flex;\n", | |
| " }\n", | |
| "\n", | |
| " #altair-viz-5c4ee0ea006340f4acb0c56d0ea7c06a.vega-embed details,\n", | |
| " #altair-viz-5c4ee0ea006340f4acb0c56d0ea7c06a.vega-embed details summary {\n", | |
| " position: relative;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<div id=\"altair-viz-5c4ee0ea006340f4acb0c56d0ea7c06a\"></div>\n", | |
| "<script type=\"text/javascript\">\n", | |
| " var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n", | |
| " (function(spec, embedOpt){\n", | |
| " let outputDiv = document.currentScript.previousElementSibling;\n", | |
| " if (outputDiv.id !== \"altair-viz-5c4ee0ea006340f4acb0c56d0ea7c06a\") {\n", | |
| " outputDiv = document.getElementById(\"altair-viz-5c4ee0ea006340f4acb0c56d0ea7c06a\");\n", | |
| " }\n", | |
| " const paths = {\n", | |
| " \"vega\": \"https://cdn.jsdelivr.net/npm/vega@5?noext\",\n", | |
| " \"vega-lib\": \"https://cdn.jsdelivr.net/npm/vega-lib?noext\",\n", | |
| " \"vega-lite\": \"https://cdn.jsdelivr.net/npm/vega-lite@5.20.1?noext\",\n", | |
| " \"vega-embed\": \"https://cdn.jsdelivr.net/npm/vega-embed@6?noext\",\n", | |
| " };\n", | |
| "\n", | |
| " function maybeLoadScript(lib, version) {\n", | |
| " var key = `${lib.replace(\"-\", \"\")}_version`;\n", | |
| " return (VEGA_DEBUG[key] == version) ?\n", | |
| " Promise.resolve(paths[lib]) :\n", | |
| " new Promise(function(resolve, reject) {\n", | |
| " var s = document.createElement('script');\n", | |
| " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", | |
| " s.async = true;\n", | |
| " s.onload = () => {\n", | |
| " VEGA_DEBUG[key] = version;\n", | |
| " return resolve(paths[lib]);\n", | |
| " };\n", | |
| " s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n", | |
| " s.src = paths[lib];\n", | |
| " });\n", | |
| " }\n", | |
| "\n", | |
| " function showError(err) {\n", | |
| " outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n", | |
| " throw err;\n", | |
| " }\n", | |
| "\n", | |
| " function displayChart(vegaEmbed) {\n", | |
| " vegaEmbed(outputDiv, spec, embedOpt)\n", | |
| " .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n", | |
| " }\n", | |
| "\n", | |
| " if(typeof define === \"function\" && define.amd) {\n", | |
| " requirejs.config({paths});\n", | |
| " require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n", | |
| " } else {\n", | |
| " maybeLoadScript(\"vega\", \"5\")\n", | |
| " .then(() => maybeLoadScript(\"vega-lite\", \"5.20.1\"))\n", | |
| " .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n", | |
| " .catch(showError)\n", | |
| " .then(() => displayChart(vegaEmbed));\n", | |
| " }\n", | |
| " })({\"config\": {\"view\": {\"continuousWidth\": 300, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-58e608f08a6c1059b46d2eb45b101e6b\"}, \"mark\": {\"type\": \"bar\", \"tooltip\": true}, \"encoding\": {\"x\": {\"field\": \"distance\", \"type\": \"quantitative\"}, \"y\": {\"field\": \"activity\", \"type\": \"nominal\"}}, \"params\": [{\"name\": \"param_8\", \"select\": {\"type\": \"interval\", \"encodings\": [\"x\", \"y\"]}, \"bind\": \"scales\"}], \"$schema\": \"https://vega.github.io/schema/vega-lite/v5.20.1.json\", \"datasets\": {\"data-58e608f08a6c1059b46d2eb45b101e6b\": [{\"activity\": \"Solitude 22\", \"distance\": 54896.69140625}, {\"activity\": \"Solo powder\", \"distance\": 55164.13671875}, {\"activity\": \"4 Basin\", \"distance\": 56134.09765625}, {\"activity\": \"Deer valley 2\", \"distance\": 57012.9453125}, {\"activity\": \"Day 2\", \"distance\": 57643.4140625}, {\"activity\": \"Ski with kids\", \"distance\": 59545.52734375}, {\"activity\": \"20 basin\", \"distance\": 59694.13671875}, {\"activity\": \"Birthday with Olivia\", \"distance\": 59722.36328125}, {\"activity\": \"Snowbasin\", \"distance\": 60681.828125}, {\"activity\": \"Olivia birthday ski Park City\", \"distance\": 63158.02734375}, {\"activity\": \"Snowbasin James and Norah\", \"distance\": 67403.859375}, {\"activity\": \"Msnowbasin\", \"distance\": 68454.0078125}, {\"activity\": \"Brighton 15\", \"distance\": 72800.4453125}, {\"activity\": \"Family ski day\", \"distance\": 75762.828125}, {\"activity\": \"Family day\", \"distance\": 77317.8359375}, {\"activity\": \"28 Brighton\", \"distance\": 78870.984375}, {\"activity\": \"Alta with Andrea\", \"distance\": 84568.515625}, {\"activity\": \"Squaw peak\", \"distance\": 91396.7890625}, {\"activity\": \"Quick solo\", \"distance\": 97783.7890625}, {\"activity\": \"Ski with kids\", \"distance\": 164875.328125}]}}, {\"mode\": \"vega-lite\"});\n", | |
| "</script>" | |
| ], | |
| "text/plain": [ | |
| "alt.Chart(...)" | |
| ] | |
| }, | |
| "execution_count": 41, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# plot\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .group_by('id')\n", | |
| " .agg(\n", | |
| " activity=pl.col('name').first(),\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " elevation=pl.col('elevation').sum(),\n", | |
| " elapsed=pl.col('elapsed').last(),\n", | |
| " period=pl.col('period').last(),\n", | |
| " )\n", | |
| " .with_columns(speed=pl.col('distance') / pl.col('elapsed'))\n", | |
| " .filter(pl.col('elapsed') < 23 * 60 * 60)\n", | |
| " .sort('distance')\n", | |
| "\n", | |
| " .tail(20)\n", | |
| " .collect()\n", | |
| " .select([pl.col('activity').cast(pl.Utf8), 'distance', ])\n", | |
| " .plot.bar(y='activity', x='distance')\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "mQApUHK8b0Qc", | |
| "outputId": "c6ae21c0-eb4e-4ac9-d417-a52d036c8fb0" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": {}, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.holoviews_exec.v0+json": "", | |
| "text/html": [ | |
| "<div id='p1014'>\n", | |
| " <div id=\"b3a40334-8c3f-4a42-aa7f-ae1426964088\" data-root-id=\"p1014\" style=\"display: contents;\"></div>\n", | |
| "</div>\n", | |
| "<script type=\"application/javascript\">(function(root) {\n", | |
| " var docs_json = {\"6897a98a-f233-4798-b2b9-9d68ea15f0d5\":{\"version\":\"3.3.4\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Row\",\"id\":\"p1014\",\"attributes\":{\"name\":\"Row01179\",\"tags\":[\"embedded\"],\"stylesheets\":[\"\\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n}\",{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1017\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/css/loading.css\"}},{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1073\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/css/listpanel.css\"}},{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1015\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/bundled/theme/default.css\"}},{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1016\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/bundled/theme/native.css\"}}],\"min_width\":700,\"margin\":0,\"sizing_mode\":\"stretch_width\",\"align\":\"start\",\"children\":[{\"type\":\"object\",\"name\":\"Spacer\",\"id\":\"p1018\",\"attributes\":{\"name\":\"HSpacer01186\",\"stylesheets\":[\"\\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n}\",{\"id\":\"p1017\"},{\"id\":\"p1015\"},{\"id\":\"p1016\"}],\"margin\":0,\"sizing_mode\":\"stretch_width\",\"align\":\"start\"}},{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1026\",\"attributes\":{\"width\":700,\"height\":300,\"margin\":[5,10],\"sizing_mode\":\"fixed\",\"align\":\"start\",\"x_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1019\",\"attributes\":{\"tags\":[[[\"distance\",\"distance\",null]],[]],\"end\":175873.191796875,\"reset_start\":0.0,\"reset_end\":175873.191796875}},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p1020\",\"attributes\":{\"tags\":[[[\"activity\",\"activity\",null]],{\"type\":\"map\",\"entries\":[[\"invert_yaxis\",false],[\"autorange\",false]]}],\"factors\":[\"Solitude 22\",\"Solo powder\",\"4 Basin\",\"Deer valley 2\",\"Day 2\",\"Ski with kids\",\"20 basin\",\"Birthday with Olivia\",\"Snowbasin\",\"Olivia birthday ski Park City\",\"Snowbasin James and Norah\",\"Msnowbasin\",\"Brighton 15\",\"Family ski day\",\"Family day\",\"28 Brighton\",\"Alta with Andrea\",\"Squaw peak\",\"Quick solo\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1036\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p1037\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1029\",\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1066\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1057\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1058\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1059\"},\"data\":{\"type\":\"map\",\"entries\":[[\"activity\",[\"Solitude 22\",\"Solo powder\",\"4 Basin\",\"Deer valley 2\",\"Day 2\",\"Ski with kids\",\"20 basin\",\"Birthday with Olivia\",\"Snowbasin\",\"Olivia birthday ski Park City\",\"Snowbasin James and Norah\",\"Msnowbasin\",\"Brighton 15\",\"Family ski day\",\"Family day\",\"28 Brighton\",\"Alta with Andrea\",\"Squaw peak\",\"Quick solo\",\"Ski with kids\"]],[\"distance\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"sXBWRyN8V0cZRltH8rReR2orYUeHmWhHIy5pR11KaUfUCW1HB7Z2R+6lg0cBs4VHOTCOR2r5k0frApdHfguaR0IspUdlgrJH5fu+R9UCIUg=\"},\"shape\":[20],\"dtype\":\"float32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1067\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1068\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p1063\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"y\":{\"type\":\"field\",\"field\":\"activity\"},\"height\":{\"type\":\"value\",\"value\":0.8},\"right\":{\"type\":\"field\",\"field\":\"distance\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#30a2da\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#30a2da\"}}},\"selection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p1069\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"y\":{\"type\":\"field\",\"field\":\"activity\"},\"height\":{\"type\":\"value\",\"value\":0.8},\"left\":{\"type\":\"value\",\"value\":0},\"right\":{\"type\":\"field\",\"field\":\"distance\"},\"line_color\":{\"type\":\"value\",\"value\":\"black\"},\"line_alpha\":{\"type\":\"value\",\"value\":1.0},\"line_width\":{\"type\":\"value\",\"value\":1},\"line_join\":{\"type\":\"value\",\"value\":\"bevel\"},\"line_cap\":{\"type\":\"value\",\"value\":\"butt\"},\"line_dash\":{\"type\":\"value\",\"value\":[]},\"line_dash_offset\":{\"type\":\"value\",\"value\":0},\"fill_color\":{\"type\":\"value\",\"value\":\"#30a2da\"},\"fill_alpha\":{\"type\":\"value\",\"value\":1.0},\"hatch_color\":{\"type\":\"value\",\"value\":\"#30a2da\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":1.0},\"hatch_scale\":{\"type\":\"value\",\"value\":12.0},\"hatch_pattern\":{\"type\":\"value\",\"value\":null},\"hatch_weight\":{\"type\":\"value\",\"value\":1.0}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p1064\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"y\":{\"type\":\"field\",\"field\":\"activity\"},\"height\":{\"type\":\"value\",\"value\":0.8},\"right\":{\"type\":\"field\",\"field\":\"distance\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#30a2da\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#30a2da\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p1065\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"y\":{\"type\":\"field\",\"field\":\"activity\"},\"height\":{\"type\":\"value\",\"value\":0.8},\"right\":{\"type\":\"field\",\"field\":\"distance\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#30a2da\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#30a2da\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1035\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1024\",\"attributes\":{\"tags\":[\"hv_created\"],\"renderers\":\"auto\",\"zoom_together\":\"none\"}},{\"type\":\"object\",\"name\":\"HoverTool\",\"id\":\"p1025\",\"attributes\":{\"tags\":[\"hv_created\"],\"renderers\":[{\"id\":\"p1066\"}],\"tooltips\":[[\"activity\",\"@{activity}\"],[\"distance\",\"@{distance}\"]]}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1048\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1049\"},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1050\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1051\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1056\"}],\"active_drag\":{\"id\":\"p1049\"},\"active_scroll\":{\"id\":\"p1024\"}}},\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p1043\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p1044\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p1045\"},\"axis_label\":\"activity\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1046\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1038\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1039\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1040\"},\"axis_label\":\"distance\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1041\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1042\",\"attributes\":{\"axis\":{\"id\":\"p1038\"},\"grid_line_color\":null}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1047\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1043\"},\"grid_line_color\":null}}],\"min_border_top\":10,\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"output_backend\":\"webgl\"}},{\"type\":\"object\",\"name\":\"Spacer\",\"id\":\"p1071\",\"attributes\":{\"name\":\"HSpacer01187\",\"stylesheets\":[\"\\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n}\",{\"id\":\"p1017\"},{\"id\":\"p1015\"},{\"id\":\"p1016\"}],\"margin\":0,\"sizing_mode\":\"stretch_width\",\"align\":\"start\"}}]}}],\"defs\":[{\"type\":\"model\",\"name\":\"ReactiveHTML1\"},{\"type\":\"model\",\"name\":\"FlexBox1\",\"properties\":[{\"name\":\"align_content\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"align_items\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"flex_direction\",\"kind\":\"Any\",\"default\":\"row\"},{\"name\":\"flex_wrap\",\"kind\":\"Any\",\"default\":\"wrap\"},{\"name\":\"justify_content\",\"kind\":\"Any\",\"default\":\"flex-start\"}]},{\"type\":\"model\",\"name\":\"FloatPanel1\",\"properties\":[{\"name\":\"config\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"contained\",\"kind\":\"Any\",\"default\":true},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"right-top\"},{\"name\":\"offsetx\",\"kind\":\"Any\",\"default\":null},{\"name\":\"offsety\",\"kind\":\"Any\",\"default\":null},{\"name\":\"theme\",\"kind\":\"Any\",\"default\":\"primary\"},{\"name\":\"status\",\"kind\":\"Any\",\"default\":\"normalized\"}]},{\"type\":\"model\",\"name\":\"GridStack1\",\"properties\":[{\"name\":\"mode\",\"kind\":\"Any\",\"default\":\"warn\"},{\"name\":\"ncols\",\"kind\":\"Any\",\"default\":null},{\"name\":\"nrows\",\"kind\":\"Any\",\"default\":null},{\"name\":\"allow_resize\",\"kind\":\"Any\",\"default\":true},{\"name\":\"allow_drag\",\"kind\":\"Any\",\"default\":true},{\"name\":\"state\",\"kind\":\"Any\",\"default\":[]}]},{\"type\":\"model\",\"name\":\"drag1\",\"properties\":[{\"name\":\"slider_width\",\"kind\":\"Any\",\"default\":5},{\"name\":\"slider_color\",\"kind\":\"Any\",\"default\":\"black\"},{\"name\":\"value\",\"kind\":\"Any\",\"default\":50}]},{\"type\":\"model\",\"name\":\"click1\",\"properties\":[{\"name\":\"terminal_output\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"debug_name\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"clears\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"copy_to_clipboard1\",\"properties\":[{\"name\":\"fill\",\"kind\":\"Any\",\"default\":\"none\"},{\"name\":\"value\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"FastWrapper1\",\"properties\":[{\"name\":\"object\",\"kind\":\"Any\",\"default\":null},{\"name\":\"style\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"NotificationAreaBase1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"NotificationArea1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"notifications\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0},{\"name\":\"types\",\"kind\":\"Any\",\"default\":[{\"type\":\"map\",\"entries\":[[\"type\",\"warning\"],[\"background\",\"#ffc107\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-exclamation-triangle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]},{\"type\":\"map\",\"entries\":[[\"type\",\"info\"],[\"background\",\"#007bff\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-info-circle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]}]}]},{\"type\":\"model\",\"name\":\"Notification\",\"properties\":[{\"name\":\"background\",\"kind\":\"Any\",\"default\":null},{\"name\":\"duration\",\"kind\":\"Any\",\"default\":3000},{\"name\":\"icon\",\"kind\":\"Any\",\"default\":null},{\"name\":\"message\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"notification_type\",\"kind\":\"Any\",\"default\":null},{\"name\":\"_destroyed\",\"kind\":\"Any\",\"default\":false}]},{\"type\":\"model\",\"name\":\"TemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"BootstrapTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"MaterialTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]}]}};\n", | |
| " var render_items = [{\"docid\":\"6897a98a-f233-4798-b2b9-9d68ea15f0d5\",\"roots\":{\"p1014\":\"b3a40334-8c3f-4a42-aa7f-ae1426964088\"},\"root_ids\":[\"p1014\"]}];\n", | |
| " var docs = Object.values(docs_json)\n", | |
| " if (!docs) {\n", | |
| " return\n", | |
| " }\n", | |
| " const py_version = docs[0].version.replace('rc', '-rc.').replace('.dev', '-dev.')\n", | |
| " function embed_document(root) {\n", | |
| " var Bokeh = get_bokeh(root)\n", | |
| " Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", | |
| " for (const render_item of render_items) {\n", | |
| " for (const root_id of render_item.root_ids) {\n", | |
| "\tconst id_el = document.getElementById(root_id)\n", | |
| "\tif (id_el.children.length && (id_el.children[0].className === 'bk-root')) {\n", | |
| "\t const root_el = id_el.children[0]\n", | |
| "\t root_el.id = root_el.id + '-rendered'\n", | |
| "\t}\n", | |
| " }\n", | |
| " }\n", | |
| " }\n", | |
| " function get_bokeh(root) {\n", | |
| " if (root.Bokeh === undefined) {\n", | |
| " return null\n", | |
| " } else if (root.Bokeh.version !== py_version) {\n", | |
| " if (root.Bokeh.versions === undefined || !root.Bokeh.versions.has(py_version)) {\n", | |
| "\treturn null\n", | |
| " }\n", | |
| " return root.Bokeh.versions.get(py_version);\n", | |
| " } else if (root.Bokeh.version === py_version) {\n", | |
| " return root.Bokeh\n", | |
| " }\n", | |
| " return null\n", | |
| " }\n", | |
| " function is_loaded(root) {\n", | |
| " var Bokeh = get_bokeh(root)\n", | |
| " return (Bokeh != null && Bokeh.Panel !== undefined)\n", | |
| " }\n", | |
| " if (is_loaded(root)) {\n", | |
| " embed_document(root);\n", | |
| " } else {\n", | |
| " var attempts = 0;\n", | |
| " var timer = setInterval(function(root) {\n", | |
| " if (is_loaded(root)) {\n", | |
| " clearInterval(timer);\n", | |
| " embed_document(root);\n", | |
| " } else if (document.readyState == \"complete\") {\n", | |
| " attempts++;\n", | |
| " if (attempts > 200) {\n", | |
| " clearInterval(timer);\n", | |
| "\t var Bokeh = get_bokeh(root)\n", | |
| "\t if (Bokeh == null || Bokeh.Panel == null) {\n", | |
| " console.warn(\"Panel: ERROR: Unable to run Panel code because Bokeh or Panel library is missing\");\n", | |
| "\t } else {\n", | |
| "\t console.warn(\"Panel: WARNING: Attempting to render but not all required libraries could be resolved.\")\n", | |
| "\t embed_document(root)\n", | |
| "\t }\n", | |
| " }\n", | |
| " }\n", | |
| " }, 25, root)\n", | |
| " }\n", | |
| "})(window);</script>" | |
| ], | |
| "text/plain": [ | |
| ":Bars [activity] (distance)" | |
| ] | |
| }, | |
| "execution_count": 71, | |
| "metadata": { | |
| "application/vnd.holoviews_exec.v0+json": { | |
| "id": "p1014" | |
| } | |
| }, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import hvplot.polars\n", | |
| "# plot\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .group_by('id')\n", | |
| " .agg(\n", | |
| " activity=pl.col('name').first(),\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " elevation=pl.col('elevation').sum(),\n", | |
| " elapsed=pl.col('elapsed').last(),\n", | |
| " period=pl.col('period').last(),\n", | |
| " )\n", | |
| " .with_columns(speed=pl.col('distance') / pl.col('elapsed'))\n", | |
| " .filter(pl.col('elapsed') < 23 * 60 * 60)\n", | |
| " .sort('distance')\n", | |
| "\n", | |
| " .tail(20)\n", | |
| " .collect()\n", | |
| " .select([pl.col('activity').cast(pl.Utf8), 'distance', ])\n", | |
| " .hvplot.barh(x='activity', y='distance')\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "jXRuXwh-b0Qc", | |
| "outputId": "57854a8d-e70c-44e8-e9e9-4aa00324f43d" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (11, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>type</th></tr><tr><td>struct[2]</td></tr></thead><tbody><tr><td>{"ebikeride",433738}</td></tr><tr><td>{"cycling",784828}</td></tr><tr><td>{"Snowshoe",9938}</td></tr><tr><td>{"AlpineSki",2227436}</td></tr><tr><td>{"running",738214}</td></tr><tr><td>{"hiking",255803}</td></tr><tr><td>{"walking",524654}</td></tr><tr><td>{"BackcountrySki",35337}</td></tr><tr><td>{"StandUpPaddling",33020}</td></tr><tr><td>{"Kayaking",3580}</td></tr><tr><td>{"NordicSki",3822}</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (11, 1)\n", | |
| "┌───────────────────────────┐\n", | |
| "│ type │\n", | |
| "│ --- │\n", | |
| "│ struct[2] │\n", | |
| "╞═══════════════════════════╡\n", | |
| "│ {\"ebikeride\",433738} │\n", | |
| "│ {\"cycling\",784828} │\n", | |
| "│ {\"Snowshoe\",9938} │\n", | |
| "│ {\"AlpineSki\",2227436} │\n", | |
| "│ {\"running\",738214} │\n", | |
| "│ {\"hiking\",255803} │\n", | |
| "│ {\"walking\",524654} │\n", | |
| "│ {\"BackcountrySki\",35337} │\n", | |
| "│ {\"StandUpPaddling\",33020} │\n", | |
| "│ {\"Kayaking\",3580} │\n", | |
| "│ {\"NordicSki\",3822} │\n", | |
| "└───────────────────────────┘" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "with pl.Config(set_tbl_rows=20):\n", | |
| " display(tweak_strava(raw_lazy)\n", | |
| " .select(pl.col('type').value_counts())\n", | |
| " .collect()\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "wDGS9dStb0Qc", | |
| "outputId": "72f0a391-3a24-4d41-c501-a6595858abdf" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (11, 3)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>year</th><th>type</th><th>distance</th></tr><tr><td>i32</td><td>cat</td><td>f32</td></tr></thead><tbody><tr><td>2022</td><td>"cycling"</td><td>479097.40625</td></tr><tr><td>2018</td><td>"cycling"</td><td>5883.088379</td></tr><tr><td>2016</td><td>"cycling"</td><td>26981.732422</td></tr><tr><td>2021</td><td>"cycling"</td><td>413450.9375</td></tr><tr><td>2019</td><td>"cycling"</td><td>14222.912109</td></tr><tr><td>…</td><td>…</td><td>…</td></tr><tr><td>2023</td><td>"cycling"</td><td>443997.875</td></tr><tr><td>2023</td><td>"ebikeride"</td><td>78663.265625</td></tr><tr><td>2017</td><td>"cycling"</td><td>5572.508301</td></tr><tr><td>2020</td><td>"cycling"</td><td>668791.9375</td></tr><tr><td>2024</td><td>"ebikeride"</td><td>1.3035e6</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (11, 3)\n", | |
| "┌──────┬───────────┬──────────────┐\n", | |
| "│ year ┆ type ┆ distance │\n", | |
| "│ --- ┆ --- ┆ --- │\n", | |
| "│ i32 ┆ cat ┆ f32 │\n", | |
| "╞══════╪═══════════╪══════════════╡\n", | |
| "│ 2022 ┆ cycling ┆ 479097.40625 │\n", | |
| "│ 2018 ┆ cycling ┆ 5883.088379 │\n", | |
| "│ 2016 ┆ cycling ┆ 26981.732422 │\n", | |
| "│ 2021 ┆ cycling ┆ 413450.9375 │\n", | |
| "│ 2019 ┆ cycling ┆ 14222.912109 │\n", | |
| "│ … ┆ … ┆ … │\n", | |
| "│ 2023 ┆ cycling ┆ 443997.875 │\n", | |
| "│ 2023 ┆ ebikeride ┆ 78663.265625 │\n", | |
| "│ 2017 ┆ cycling ┆ 5572.508301 │\n", | |
| "│ 2020 ┆ cycling ┆ 668791.9375 │\n", | |
| "│ 2024 ┆ ebikeride ┆ 1.3035e6 │\n", | |
| "└──────┴───────────┴──────────────┘" | |
| ] | |
| }, | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# how far have I biked each year?\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .filter(pl.col('type').is_in(['ebikeride', 'cycling']))\n", | |
| " .group_by([pl.col('time').dt.year().alias('year'), 'type'])\n", | |
| " .agg(\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " )\n", | |
| " .collect()\n", | |
| " )\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "i73EK07Fb0Qc", | |
| "outputId": "481579bf-ffe4-45bf-f7f5-af0d67ac7377" | |
| }, | |
| "outputs": [ | |
| { | |
| "ename": "AttributeError", | |
| "evalue": "'LazyFrame' object has no attribute 'pivot'", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", | |
| "Cell \u001b[0;32mIn[61], line 8\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# pivot type\u001b[39;00m\n\u001b[1;32m 2\u001b[0m (\u001b[43mtweak_strava\u001b[49m\u001b[43m(\u001b[49m\u001b[43mraw_lazy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfilter\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcol\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtype\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mis_in\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mebikeride\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mcycling\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroup_by\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mpl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcol\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtime\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43myear\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43malias\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43myear\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtype\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43magg\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43mdistance\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcol\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mdistance_2d\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msum\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m----> 8\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpivot\u001b[49m(index\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124myear\u001b[39m\u001b[38;5;124m'\u001b[39m, on\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtype\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 9\u001b[0m \u001b[38;5;241m.\u001b[39mcollect()\n\u001b[1;32m 10\u001b[0m )\n", | |
| "\u001b[0;31mAttributeError\u001b[0m: 'LazyFrame' object has no attribute 'pivot'" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# pivot type\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .filter(pl.col('type').is_in(['ebikeride', 'cycling']))\n", | |
| " .group_by([pl.col('time').dt.year().alias('year'), 'type'])\n", | |
| " .agg(\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " )\n", | |
| " .pivot(index='year', on='type')\n", | |
| " .collect()\n", | |
| " )\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "SdB_aKWib0Qc", | |
| "outputId": "617ac546-92dc-473c-ac6f-b8c0cca1b9ae" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (9, 3)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>year</th><th>cycling</th><th>ebikeride</th></tr><tr><td>i32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2021</td><td>413450.9375</td><td>null</td></tr><tr><td>2016</td><td>26981.732422</td><td>null</td></tr><tr><td>2023</td><td>443997.875</td><td>78663.265625</td></tr><tr><td>2019</td><td>14222.912109</td><td>null</td></tr><tr><td>2024</td><td>117095.242188</td><td>1.3035e6</td></tr><tr><td>2017</td><td>5572.508301</td><td>null</td></tr><tr><td>2022</td><td>479097.40625</td><td>null</td></tr><tr><td>2018</td><td>5883.088379</td><td>null</td></tr><tr><td>2020</td><td>668791.9375</td><td>null</td></tr></tbody></table></div>" | |
| ], | |
| "text/plain": [ | |
| "shape: (9, 3)\n", | |
| "┌──────┬───────────────┬──────────────┐\n", | |
| "│ year ┆ cycling ┆ ebikeride │\n", | |
| "│ --- ┆ --- ┆ --- │\n", | |
| "│ i32 ┆ f32 ┆ f32 │\n", | |
| "╞══════╪═══════════════╪══════════════╡\n", | |
| "│ 2021 ┆ 413450.9375 ┆ null │\n", | |
| "│ 2016 ┆ 26981.732422 ┆ null │\n", | |
| "│ 2023 ┆ 443997.875 ┆ 78663.265625 │\n", | |
| "│ 2019 ┆ 14222.912109 ┆ null │\n", | |
| "│ 2024 ┆ 117095.242188 ┆ 1.3035e6 │\n", | |
| "│ 2017 ┆ 5572.508301 ┆ null │\n", | |
| "│ 2022 ┆ 479097.40625 ┆ null │\n", | |
| "│ 2018 ┆ 5883.088379 ┆ null │\n", | |
| "│ 2020 ┆ 668791.9375 ┆ null │\n", | |
| "└──────┴───────────────┴──────────────┘" | |
| ] | |
| }, | |
| "execution_count": 63, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# pivot type\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .filter(pl.col('type').is_in(['ebikeride', 'cycling']))\n", | |
| " .group_by([pl.col('time').dt.year().alias('year'), 'type'])\n", | |
| " .agg(\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " )\n", | |
| " .collect()\n", | |
| " .pivot(index='year', on='type')\n", | |
| " )\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 415 | |
| }, | |
| "id": "2C8CFXYvb0Qc", | |
| "outputId": "d18c89ee-9fea-447c-e9ff-fa1406bfa449" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 572 ms, sys: 69.9 ms, total: 641 ms\n", | |
| "Wall time: 122 ms\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (9, 3)\n", | |
| "┌──────┬──────────────┬───────────────┐\n", | |
| "│ year ┆ ebikeride ┆ cycling │\n", | |
| "│ --- ┆ --- ┆ --- │\n", | |
| "│ i32 ┆ f32 ┆ f32 │\n", | |
| "╞══════╪══════════════╪═══════════════╡\n", | |
| "│ 2016 ┆ null ┆ 26981.732422 │\n", | |
| "│ 2017 ┆ null ┆ 5572.508301 │\n", | |
| "│ 2018 ┆ null ┆ 5883.088379 │\n", | |
| "│ 2019 ┆ null ┆ 14222.912109 │\n", | |
| "│ 2020 ┆ null ┆ 668791.9375 │\n", | |
| "│ 2021 ┆ null ┆ 413450.9375 │\n", | |
| "│ 2022 ┆ null ┆ 479097.40625 │\n", | |
| "│ 2023 ┆ 78663.265625 ┆ 443997.875 │\n", | |
| "│ 2024 ┆ 1.3035e6 ┆ 117095.242188 │\n", | |
| "└──────┴──────────────┴───────────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (9, 3)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>year</th><th>ebikeride</th><th>cycling</th></tr><tr><td>i32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2016</td><td>null</td><td>26981.732422</td></tr><tr><td>2017</td><td>null</td><td>5572.508301</td></tr><tr><td>2018</td><td>null</td><td>5883.088379</td></tr><tr><td>2019</td><td>null</td><td>14222.912109</td></tr><tr><td>2020</td><td>null</td><td>668791.9375</td></tr><tr><td>2021</td><td>null</td><td>413450.9375</td></tr><tr><td>2022</td><td>null</td><td>479097.40625</td></tr><tr><td>2023</td><td>78663.265625</td><td>443997.875</td></tr><tr><td>2024</td><td>1.3035e6</td><td>117095.242188</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 81 | |
| } | |
| ], | |
| "source": [ | |
| "%%time\n", | |
| "# pivot type\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .filter(pl.col('type').is_in(['ebikeride', 'cycling']))\n", | |
| " .group_by([pl.col('time').dt.year().alias('year'), 'type'])\n", | |
| " .agg(\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " )\n", | |
| " .collect()\n", | |
| " .pivot(index='year', on='type')\n", | |
| " .sort('year')\n", | |
| " )\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "%%time\n", | |
| "# pivot type\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .filter(pl.col('type').is_in(['ebikeride', 'cycling']))\n", | |
| " .group_by([pl.col('time').dt.year().alias('year'), 'type'])\n", | |
| " .agg(\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " )\n", | |
| " .collect(engine='gpu')\n", | |
| " # .collect(engine=pl.GPUEngine(device=0, raise_on_fail=True))\n", | |
| " .pivot(index='year', on='type')\n", | |
| " .sort('year')\n", | |
| " )\n" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 415 | |
| }, | |
| "id": "wWAHGiLBecXo", | |
| "outputId": "d62ff9c1-7e26-4890-8bc7-f471b25dca82" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "CPU times: user 117 ms, sys: 262 ms, total: 379 ms\n", | |
| "Wall time: 804 ms\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "shape: (9, 3)\n", | |
| "┌──────┬──────────────┬───────────┐\n", | |
| "│ year ┆ cycling ┆ ebikeride │\n", | |
| "│ --- ┆ --- ┆ --- │\n", | |
| "│ i32 ┆ f32 ┆ f32 │\n", | |
| "╞══════╪══════════════╪═══════════╡\n", | |
| "│ 2016 ┆ 26981.78125 ┆ null │\n", | |
| "│ 2017 ┆ 5572.506348 ┆ null │\n", | |
| "│ 2018 ┆ 5883.085449 ┆ null │\n", | |
| "│ 2019 ┆ 14222.916016 ┆ null │\n", | |
| "│ 2020 ┆ 668772.0625 ┆ null │\n", | |
| "│ 2021 ┆ 413416.125 ┆ null │\n", | |
| "│ 2022 ┆ 479068.78125 ┆ null │\n", | |
| "│ 2023 ┆ 443981.0625 ┆ 78663.5 │\n", | |
| "│ 2024 ┆ 117093.625 ┆ 1.3035e6 │\n", | |
| "└──────┴──────────────┴───────────┘" | |
| ], | |
| "text/html": [ | |
| "<div><style>\n", | |
| ".dataframe > thead > tr,\n", | |
| ".dataframe > tbody > tr {\n", | |
| " text-align: right;\n", | |
| " white-space: pre-wrap;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<small>shape: (9, 3)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>year</th><th>cycling</th><th>ebikeride</th></tr><tr><td>i32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2016</td><td>26981.78125</td><td>null</td></tr><tr><td>2017</td><td>5572.506348</td><td>null</td></tr><tr><td>2018</td><td>5883.085449</td><td>null</td></tr><tr><td>2019</td><td>14222.916016</td><td>null</td></tr><tr><td>2020</td><td>668772.0625</td><td>null</td></tr><tr><td>2021</td><td>413416.125</td><td>null</td></tr><tr><td>2022</td><td>479068.78125</td><td>null</td></tr><tr><td>2023</td><td>443981.0625</td><td>78663.5</td></tr><tr><td>2024</td><td>117093.625</td><td>1.3035e6</td></tr></tbody></table></div>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 82 | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "RMkLifAmb0Qd", | |
| "outputId": "91989f6d-71e1-4a61-a616-2a47869579ff" | |
| }, | |
| "outputs": [ | |
| { | |
| "data": {}, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.holoviews_exec.v0+json": "", | |
| "text/html": [ | |
| "<div id='p1076'>\n", | |
| " <div id=\"d6200bb1-f43c-4079-8514-00a43fd0d25a\" data-root-id=\"p1076\" style=\"display: contents;\"></div>\n", | |
| "</div>\n", | |
| "<script type=\"application/javascript\">(function(root) {\n", | |
| " var docs_json = {\"5bcac29e-70af-404a-ad77-f81d15a9ca95\":{\"version\":\"3.3.4\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Row\",\"id\":\"p1076\",\"attributes\":{\"name\":\"Row01321\",\"tags\":[\"embedded\"],\"stylesheets\":[\"\\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n}\",{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1079\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/css/loading.css\"}},{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1154\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/css/listpanel.css\"}},{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1077\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/bundled/theme/default.css\"}},{\"type\":\"object\",\"name\":\"ImportedStyleSheet\",\"id\":\"p1078\",\"attributes\":{\"url\":\"https://cdn.holoviz.org/panel/1.3.8/dist/bundled/theme/native.css\"}}],\"min_width\":700,\"margin\":0,\"sizing_mode\":\"stretch_width\",\"align\":\"start\",\"children\":[{\"type\":\"object\",\"name\":\"Spacer\",\"id\":\"p1080\",\"attributes\":{\"name\":\"HSpacer01328\",\"stylesheets\":[\"\\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n}\",{\"id\":\"p1079\"},{\"id\":\"p1077\"},{\"id\":\"p1078\"}],\"margin\":0,\"sizing_mode\":\"stretch_width\",\"align\":\"start\"}},{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1091\",\"attributes\":{\"width\":700,\"height\":300,\"margin\":[5,10],\"sizing_mode\":\"fixed\",\"align\":\"start\",\"x_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1081\",\"attributes\":{\"tags\":[[[\"year\",\"year\",null]],[]],\"start\":2016.0,\"end\":2024.0,\"reset_start\":2016.0,\"reset_end\":2024.0}},\"y_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1082\",\"attributes\":{\"tags\":[[[\"value\",\"value\",null]],{\"type\":\"map\",\"entries\":[[\"invert_yaxis\",false],[\"autorange\",false]]}],\"start\":-124224.37836914063,\"end\":1433338.261669922,\"reset_start\":-124224.37836914063,\"reset_end\":1433338.261669922}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1101\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1102\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1094\",\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1131\",\"attributes\":{\"name\":\"cycling\",\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1122\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1123\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1124\"},\"data\":{\"type\":\"map\",\"entries\":[[\"year\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"4AcAAOEHAADiBwAA4wcAAOQHAADlBwAA5gcAAOcHAADoBwAA\"},\"shape\":[9],\"dtype\":\"int32\",\"order\":\"little\"}],[\"value\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"d8vSRhEkrkW12LdFpjteRn9HI0le4clILe/pSLzL2Eifs+RH\"},\"shape\":[9],\"dtype\":\"float32\",\"order\":\"little\"}],[\"Variable\",[\"cycling\",\"cycling\",\"cycling\",\"cycling\",\"cycling\",\"cycling\",\"cycling\",\"cycling\",\"cycling\"]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1132\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1133\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1128\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#30a2da\",\"line_width\":2}},\"selection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1136\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#30a2da\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1129\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#30a2da\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1130\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#30a2da\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1146\",\"attributes\":{\"name\":\"ebikeride\",\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1137\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1138\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1139\"},\"data\":{\"type\":\"map\",\"entries\":[[\"year\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"4AcAAOEHAADiBwAA4wcAAOQHAADlBwAA5gcAAOcHAADoBwAA\"},\"shape\":[9],\"dtype\":\"int32\",\"order\":\"little\"}],[\"value\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AADAfwAAwH8AAMB/AADAfwAAwH8AAMB/AADAf6KjmUerH59J\"},\"shape\":[9],\"dtype\":\"float32\",\"order\":\"little\"}],[\"Variable\",[\"ebikeride\",\"ebikeride\",\"ebikeride\",\"ebikeride\",\"ebikeride\",\"ebikeride\",\"ebikeride\",\"ebikeride\",\"ebikeride\"]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1147\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1148\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1143\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#fc4f30\",\"line_width\":2}},\"selection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1150\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#fc4f30\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1144\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#fc4f30\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1145\",\"attributes\":{\"tags\":[\"apply_ranges\"],\"x\":{\"type\":\"field\",\"field\":\"year\"},\"y\":{\"type\":\"field\",\"field\":\"value\"},\"line_color\":\"#fc4f30\",\"line_alpha\":0.2,\"line_width\":2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1100\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1086\",\"attributes\":{\"tags\":[\"hv_created\"],\"renderers\":\"auto\",\"zoom_together\":\"none\"}},{\"type\":\"object\",\"name\":\"HoverTool\",\"id\":\"p1087\",\"attributes\":{\"tags\":[\"hv_created\"],\"renderers\":[{\"id\":\"p1131\"},{\"id\":\"p1146\"}],\"tooltips\":[[\"Variable\",\"@{Variable}\"],[\"year\",\"@{year}\"],[\"value\",\"@{value}\"]]}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1113\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1114\"},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1115\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1116\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1121\"}],\"active_drag\":{\"id\":\"p1114\"},\"active_scroll\":{\"id\":\"p1086\"}}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1108\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1109\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1110\"},\"axis_label\":\"\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1111\"}}}],\"right\":[{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1134\",\"attributes\":{\"location\":[0,0],\"title\":\"Variable\",\"click_policy\":\"mute\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1135\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"cycling\"},\"renderers\":[{\"id\":\"p1131\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1149\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"ebikeride\"},\"renderers\":[{\"id\":\"p1146\"}]}}]}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1103\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1104\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1105\"},\"axis_label\":\"year\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1106\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1107\",\"attributes\":{\"axis\":{\"id\":\"p1103\"},\"grid_line_color\":null}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1112\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1108\"},\"grid_line_color\":null}}],\"min_border_top\":10,\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"output_backend\":\"webgl\"}},{\"type\":\"object\",\"name\":\"Spacer\",\"id\":\"p1152\",\"attributes\":{\"name\":\"HSpacer01329\",\"stylesheets\":[\"\\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n}\",{\"id\":\"p1079\"},{\"id\":\"p1077\"},{\"id\":\"p1078\"}],\"margin\":0,\"sizing_mode\":\"stretch_width\",\"align\":\"start\"}}]}}],\"defs\":[{\"type\":\"model\",\"name\":\"ReactiveHTML1\"},{\"type\":\"model\",\"name\":\"FlexBox1\",\"properties\":[{\"name\":\"align_content\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"align_items\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"flex_direction\",\"kind\":\"Any\",\"default\":\"row\"},{\"name\":\"flex_wrap\",\"kind\":\"Any\",\"default\":\"wrap\"},{\"name\":\"justify_content\",\"kind\":\"Any\",\"default\":\"flex-start\"}]},{\"type\":\"model\",\"name\":\"FloatPanel1\",\"properties\":[{\"name\":\"config\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"contained\",\"kind\":\"Any\",\"default\":true},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"right-top\"},{\"name\":\"offsetx\",\"kind\":\"Any\",\"default\":null},{\"name\":\"offsety\",\"kind\":\"Any\",\"default\":null},{\"name\":\"theme\",\"kind\":\"Any\",\"default\":\"primary\"},{\"name\":\"status\",\"kind\":\"Any\",\"default\":\"normalized\"}]},{\"type\":\"model\",\"name\":\"GridStack1\",\"properties\":[{\"name\":\"mode\",\"kind\":\"Any\",\"default\":\"warn\"},{\"name\":\"ncols\",\"kind\":\"Any\",\"default\":null},{\"name\":\"nrows\",\"kind\":\"Any\",\"default\":null},{\"name\":\"allow_resize\",\"kind\":\"Any\",\"default\":true},{\"name\":\"allow_drag\",\"kind\":\"Any\",\"default\":true},{\"name\":\"state\",\"kind\":\"Any\",\"default\":[]}]},{\"type\":\"model\",\"name\":\"drag1\",\"properties\":[{\"name\":\"slider_width\",\"kind\":\"Any\",\"default\":5},{\"name\":\"slider_color\",\"kind\":\"Any\",\"default\":\"black\"},{\"name\":\"value\",\"kind\":\"Any\",\"default\":50}]},{\"type\":\"model\",\"name\":\"click1\",\"properties\":[{\"name\":\"terminal_output\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"debug_name\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"clears\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"copy_to_clipboard1\",\"properties\":[{\"name\":\"fill\",\"kind\":\"Any\",\"default\":\"none\"},{\"name\":\"value\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"FastWrapper1\",\"properties\":[{\"name\":\"object\",\"kind\":\"Any\",\"default\":null},{\"name\":\"style\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"NotificationAreaBase1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"NotificationArea1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"notifications\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0},{\"name\":\"types\",\"kind\":\"Any\",\"default\":[{\"type\":\"map\",\"entries\":[[\"type\",\"warning\"],[\"background\",\"#ffc107\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-exclamation-triangle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]},{\"type\":\"map\",\"entries\":[[\"type\",\"info\"],[\"background\",\"#007bff\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-info-circle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]}]}]},{\"type\":\"model\",\"name\":\"Notification\",\"properties\":[{\"name\":\"background\",\"kind\":\"Any\",\"default\":null},{\"name\":\"duration\",\"kind\":\"Any\",\"default\":3000},{\"name\":\"icon\",\"kind\":\"Any\",\"default\":null},{\"name\":\"message\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"notification_type\",\"kind\":\"Any\",\"default\":null},{\"name\":\"_destroyed\",\"kind\":\"Any\",\"default\":false}]},{\"type\":\"model\",\"name\":\"TemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"BootstrapTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"MaterialTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]}]}};\n", | |
| " var render_items = [{\"docid\":\"5bcac29e-70af-404a-ad77-f81d15a9ca95\",\"roots\":{\"p1076\":\"d6200bb1-f43c-4079-8514-00a43fd0d25a\"},\"root_ids\":[\"p1076\"]}];\n", | |
| " var docs = Object.values(docs_json)\n", | |
| " if (!docs) {\n", | |
| " return\n", | |
| " }\n", | |
| " const py_version = docs[0].version.replace('rc', '-rc.').replace('.dev', '-dev.')\n", | |
| " function embed_document(root) {\n", | |
| " var Bokeh = get_bokeh(root)\n", | |
| " Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", | |
| " for (const render_item of render_items) {\n", | |
| " for (const root_id of render_item.root_ids) {\n", | |
| "\tconst id_el = document.getElementById(root_id)\n", | |
| "\tif (id_el.children.length && (id_el.children[0].className === 'bk-root')) {\n", | |
| "\t const root_el = id_el.children[0]\n", | |
| "\t root_el.id = root_el.id + '-rendered'\n", | |
| "\t}\n", | |
| " }\n", | |
| " }\n", | |
| " }\n", | |
| " function get_bokeh(root) {\n", | |
| " if (root.Bokeh === undefined) {\n", | |
| " return null\n", | |
| " } else if (root.Bokeh.version !== py_version) {\n", | |
| " if (root.Bokeh.versions === undefined || !root.Bokeh.versions.has(py_version)) {\n", | |
| "\treturn null\n", | |
| " }\n", | |
| " return root.Bokeh.versions.get(py_version);\n", | |
| " } else if (root.Bokeh.version === py_version) {\n", | |
| " return root.Bokeh\n", | |
| " }\n", | |
| " return null\n", | |
| " }\n", | |
| " function is_loaded(root) {\n", | |
| " var Bokeh = get_bokeh(root)\n", | |
| " return (Bokeh != null && Bokeh.Panel !== undefined)\n", | |
| " }\n", | |
| " if (is_loaded(root)) {\n", | |
| " embed_document(root);\n", | |
| " } else {\n", | |
| " var attempts = 0;\n", | |
| " var timer = setInterval(function(root) {\n", | |
| " if (is_loaded(root)) {\n", | |
| " clearInterval(timer);\n", | |
| " embed_document(root);\n", | |
| " } else if (document.readyState == \"complete\") {\n", | |
| " attempts++;\n", | |
| " if (attempts > 200) {\n", | |
| " clearInterval(timer);\n", | |
| "\t var Bokeh = get_bokeh(root)\n", | |
| "\t if (Bokeh == null || Bokeh.Panel == null) {\n", | |
| " console.warn(\"Panel: ERROR: Unable to run Panel code because Bokeh or Panel library is missing\");\n", | |
| "\t } else {\n", | |
| "\t console.warn(\"Panel: WARNING: Attempting to render but not all required libraries could be resolved.\")\n", | |
| "\t embed_document(root)\n", | |
| "\t }\n", | |
| " }\n", | |
| " }\n", | |
| " }, 25, root)\n", | |
| " }\n", | |
| "})(window);</script>" | |
| ], | |
| "text/plain": [ | |
| ":NdOverlay [Variable]\n", | |
| " :Curve [year] (value)" | |
| ] | |
| }, | |
| "execution_count": 72, | |
| "metadata": { | |
| "application/vnd.holoviews_exec.v0+json": { | |
| "id": "p1076" | |
| } | |
| }, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# pivot type\n", | |
| "(tweak_strava(raw_lazy)\n", | |
| " .filter(pl.col('type').is_in(['ebikeride', 'cycling']))\n", | |
| " .group_by([pl.col('time').dt.year().alias('year'), 'type'])\n", | |
| " .agg(\n", | |
| " distance=pl.col('distance_2d').sum(),\n", | |
| " )\n", | |
| " .collect()\n", | |
| " .pivot(index='year', on='type')\n", | |
| " .sort('year')\n", | |
| " .hvplot.line(x='year', y=['cycling', 'ebikeride'])\n", | |
| " )\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "WnV2Gha4b0Qd" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "O6Z9Kh_jb0Qd" | |
| }, | |
| "source": [ | |
| "## Conclusion\n", | |
| "\n", | |
| "* Correct types save space and enable convenient math, string, and date functionality\n", | |
| "* Chaining operations will:\n", | |
| " * Make code readable\n", | |
| " * Remove bugs\n", | |
| " * Easier to debug\n", | |
| "* ``.map_elements`` is slow for math\n", | |
| "* Aggregations are powerful. Play with them until they make sense\n", | |
| "\n", | |
| "\n", | |
| "Let's connect! Reach out (email, LinkedIn) if your team needs help with the Python data stack.\n", | |
| "\n", | |
| "Book giveaway" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "Bxam8iwib0Qd" | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "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.10.16" | |
| }, | |
| "colab": { | |
| "provenance": [], | |
| "toc_visible": true, | |
| "machine_shape": "hm", | |
| "gpuType": "L4", | |
| "include_colab_link": true | |
| }, | |
| "accelerator": "GPU" | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment