Explainable Cycling Intelligence Dashboard
Project description
🚴♂️ PACE-VIEW: Explainable Cycling Intelligence Dashboard
PACE-VIEW turns raw TCX rides into decision-ready insights for athletes and coaches.
It combines physics-informed modeling, digital-twin prediction, and explainable AI in one interactive dashboard.
💪 Why PACE-VIEW?
- Dashboard-first workflow: inspect workload, HR zone mix, efficiency trends, and per-session explanations in one place.
- Explainability by design: use counterfactual analysis, rationale generation, and pattern mining to understand why a session felt hard or easy.
- Physics + ML pipeline: quantify wind/terrain/environmental load and compare expected vs observed physiology.
- Modular architecture: run the full web app or use components independently in scripts.
📦 Installation
Install PACE-VIEW with pip:
pip install pace_view
In case you want to install directly from the source code, use:
git clone https://github.com/firefly-cpp/pace_view.git
cd pace_view
poetry build
↗️ Quick start
Run the full dashboard:
python examples/full_dashboard.py
Then open an activity to view detailed explanations and decision-support outputs.
- Free software: MIT license
- Python versions: 3.8.x, 3.9.x, 3.10.x, 3.11.x, 3.12.x
- Documentation: https://pace-view.readthedocs.io/en/latest/
- Tested OS: Windows, Ubuntu, Fedora, Alpine, Arch, macOS. However, that does not mean it does not work on others
✨ Implemented Components
Component 1: Data Ingestion & Preprocessing
This component loads raw activity and weather signals, aligns timestamps, and builds clean dataframes for downstream modeling.
Classes/modules: DataParser (pace_view/data_parsing.py), DataCleaner (pace_view/data_cleaning.py).
Component 2: Environmental Quantification
This component quantifies external/mechanical load and learns expected physiological behavior from historical rides.
Classes/modules: PhysicsEngine (pace_view/physics.py), DigitalTwinModel (pace_view/digital_twin.py).
Component 3: XAI
This component explains deviations with counterfactual reasoning, generates human-readable rationales, and mines global patterns.
Classes/modules: CounterfactualAnalyzer (pace_view/counterfactual.py), RationaleGenerator (pace_view/rationale.py), PatternMiner (pace_view/mining.py).
Component 4: Interactive Dashboard & Decision Support
This component exposes session-level explanation and inter-session analysis through the web UI and example views.
Classes/modules: ContextTrainer (pace_view/core.py) plus the Flask/Dash app in examples/full_dashboard.py.
📓 Examples
Run these from the repository root:
-
python examples/full_dashboard.py
Runs the full interactive dashboard with all cards and activity detail routing. It is the end-to-end example that combines visualization and contextual explanations. -
python examples/activity_detail_page_example.py
Serves only the activity detail page for a single example TCX activity. It demonstrates the detail view with ContextTrainer output but without the full dashboard. -
python examples/context_trainer_text_example.py
Runs ContextTrainer without Flask or Dash and prints text-only results to the terminal. It demonstrates model fitting, pattern mining, and single-activity explanation in CLI form. -
python examples/hr_zone_mix_example.py
Shows only the HR Zone Mix card with period controls. It demonstrates the zone-distribution visualization in isolation. -
python examples/efficiency_over_time_example.py
Shows only the Efficiency Over Time card with rolling-window controls. It demonstrates how trend window changes affect the efficiency plot. -
python examples/hr_vs_speed_duration_example.py
Shows only the HR vs Speed x Duration heatmap card. It demonstrates the binned relationship between duration, speed, and heart rate.
Repository Structure
pace_view/core pipeline modulesdata/sample TCX files for local testingtests/pytest unit testsscripts/local helpers and experimentsassets/images and supporting artifacts
Core Components
pace_view/data_parsing.pyloads TCX files and optional weather contextpace_view/data_cleaning.pybuilds aligned dataframespace_view/physics.pycomputes headwind, gradient, and virtual powerpace_view/digital_twin.pypredicts expected HR and driftpace_view/counterfactual.pyandpace_view/rationale.pybuild explanationspace_view/mining.pymines interpretable rules using NiaARM
Data Flow (high level)
- Parse TCX -> activity arrays + weather
- Clean + align -> dataframe
- Physics features -> headwind, gradient, virtual power
- Digital twin -> predicted HR and drift
- Counterfactual + rationale -> explanation output
- Pattern mining -> global rules across rides
Testing
Run from repo root:
python -m pytest -q
If you use a specific interpreter:
<path/to/your/python/>python.exe -m pytest -q
Configuration (Weather API)
If you want weather enrichment, provide an API key via environment variables:
WEATHER_API_KEY=<your_key_here>
Examples using ContextTrainer now resolve the key centrally via pace_view.config.get_weather_api_key().
It checks the process environment first and also loads a project-root .env file if present.
Optional manual loading with python-dotenv:
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("WEATHER_API_KEY")
🖼️ Dashboard Preview
These screenshots show the main views provided by the example dashboard and activity detail page.
Overview dashboard
The main dashboard combines session-level summary cards, dataset metadata, an activity list, and quick access to detailed explanations for individual rides.
HR Zone Mix
This view summarizes how training time is distributed across heart-rate zones over a selectable time window.
Efficiency Over Time
This chart tracks speed-per-heartbeat efficiency across sessions and overlays a rolling trend to make longer-term changes easier to spot.
HR vs Speed x Duration
This heatmap highlights how average heart rate changes across combinations of ride duration and average speed.
Single-activity explanation page
The activity detail page brings together the digital twin conclusion, session metrics, and rationale cards that explain why a ride felt the way it did.
🔑 License
This package is distributed under the MIT License. This license can be found online at http://www.opensource.org/licenses/MIT.
Disclaimer
This framework is provided as-is, and there are no guarantees that it fits your purposes or that it is bug-free. Use it at your own risk!
📖 Further read
[1] Awesome Computational Intelligence in Sports
🔗 Related packages/frameworks
[2] ast-tdl: Training Description Language for Artificial Sport Trainer
📝 References
Fister Jr, I., Fister, I., Iglesias, A., Galvez, A., Deb, S., & Fister, D. (2021). On deploying the Artificial Sport Trainer into practice. arXiv preprint arXiv:2109.13334.
Fister Jr, I., Salcedo-Sanz, S., Iglesias, A., Fister, D., Gálvez, A., & Fister, I. (2021). New Perspectives in the Development of the Artificial Sport Trainer. Applied Sciences, 11(23), 11452. DOI: 10.3390/app112311452
🫂 Contributors
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pace_view-0.1.0.tar.gz.
File metadata
- Download URL: pace_view-0.1.0.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.14.3 Linux/6.18.13-200.fc43.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb32c8974557434199ec91c16aebcca206b1b36076b442973d61d7fe4a0dc0d1
|
|
| MD5 |
58e2f8da0dd199902fd0e7aec5a7cd02
|
|
| BLAKE2b-256 |
345b7f8e31755bcce4b11f3d8e754d0f8f2a9412643be4258114624917be700e
|
File details
Details for the file pace_view-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pace_view-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.14.3 Linux/6.18.13-200.fc43.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48f19529ed480f0023120c67af669019ba249f71eeaa79eec0de596d2cb50ea5
|
|
| MD5 |
7160375efe33131323056d5b203fe1f9
|
|
| BLAKE2b-256 |
85446c5d32dcebf16bcf749cfea3ab99f58c9fab466721ac1f64a15f5f6e7777
|