144 lines
3.5 KiB
Markdown
144 lines
3.5 KiB
Markdown
# 🏃♂️ Jogging Dashboard
|
||
|
||
Interactive Python Dash app to visualize, analyze, and explore your jogging or running sessions recorded as GPX/FIT files.
|
||
|
||
<p align="left">
|
||
<img src="DashboardApp_WebVersion.png" alt="Description" width="800">
|
||
</p>
|
||
|
||
SVG-Export:
|
||
<p align="left">
|
||
<img src="2025-09-15_HH_Run_10.90Km_overlay.png" alt="Description" width="600">
|
||
</p>
|
||
This SVG can then be overlaid on another image (Strava‑inspired).
|
||
|
||
---
|
||
|
||
## Features
|
||
|
||
- **Select file** choose a data file to analyse your run
|
||
- **export SVG** creates a transparent SVG image of your Course and the Info Banner statistics (Strava‑inspired)
|
||
- **Info Banner** with total distance, duration, and average pace
|
||
- **Interactive Map View** with route trace and start/stop markers
|
||
- **Elevation Profile** with relative height and gradient fill
|
||
- **Speed Over Time** plot with smoothing and average line
|
||
- **Heart Rate Over Time** plot with smoothing and average line (if .fit file)
|
||
- **Deviation from Mean Speed** to see pacing consistency
|
||
- **Pace Bar Chart** showing per-kilometer pace breakdown
|
||
|
||
---
|
||
|
||
## Project Structure
|
||
|
||
```
|
||
jogging_dashboard_browser_app.py # Main Dash application (Web-Version)
|
||
jogging_dashboard_gui_app.py # Main Dash application (loading Web-Version in a Gui)
|
||
gpx_files/ # Folder for storing GPX files
|
||
fit_files/ # Folder for storing FIT files
|
||
requirements.txt # Required Python packages
|
||
README.md # Project description file
|
||
```
|
||
|
||
---
|
||
|
||
## Getting Started
|
||
|
||
### 1. Clone the repository
|
||
|
||
```bash
|
||
git clone https://github.com/yourusername/jogging-dashboard.git
|
||
cd jogging-dashboard
|
||
```
|
||
|
||
### 2. Install dependencies
|
||
|
||
It is recommend using a virtual environment:
|
||
|
||
```bash
|
||
python -m venv venv
|
||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
**Content of the requirements.txt file**:
|
||
|
||
[Dash & Web Components]
|
||
- dash
|
||
- dash-bootstrap-components
|
||
- plotly
|
||
- pandas
|
||
- numpy
|
||
- scipy
|
||
- gpxpy
|
||
- fitparse
|
||
|
||
[GUI Version (PyQt6)]
|
||
- PyQt6
|
||
- PyQt6-WebEngine
|
||
|
||
[Additional Dependencies (usually automatically installed)]
|
||
- requests
|
||
|
||
|
||
### 3. Run the app
|
||
|
||
```bash
|
||
python jogging_dashboard_browser_app.py
|
||
```
|
||
|
||
Then open your browser and go to:
|
||
[http://127.0.0.1:8051](http://127.0.0.1:8051)
|
||
|
||
Or as Gui-Version
|
||
|
||
```bash
|
||
python jogging_dashboard_gui_app.py
|
||
```
|
||
|
||
---
|
||
|
||
## Uploading Your GPX File
|
||
|
||
1. Export your activity (e.g., from Strava, Garmin, etc.) as a `.gpx` or `.fit` file
|
||
2. Place the file into the `gpx_files/` or `fit_files/` directory
|
||
3. Select it via the dropdown in the dashboard
|
||
|
||
---
|
||
|
||
## Tech Stack
|
||
|
||
- **Dash** (by Plotly) for building the UI and graphs
|
||
- **Pandas** for data wrangling
|
||
- **Plotly Graph Objects & Express** for advanced visuals
|
||
- **Scipy** for smoothing the data lines
|
||
- **GPXPy** for parsing `.gpx` files
|
||
- **Numpy** for vectorized math and smoothing
|
||
- **FitParse** for parsing `.fit` files
|
||
|
||
---
|
||
|
||
## Example GPX File
|
||
|
||
You can test the dashboard by either placing any valid `.gpx` file in the `gpx_files/` or any valid `.fit` file in the `fit_files/` directory. Make sure it contains track points with elevation and time data.
|
||
|
||
---
|
||
|
||
## To Do / Ideas
|
||
|
||
- [X] Plotting heart rate data - **if** FIT file choosen.
|
||
- [ ] Export as PDF report
|
||
- [ ] Multi-run comparison
|
||
|
||
---
|
||
|
||
## License
|
||
|
||
This project is open source under the [MIT License](LICENSE).
|
||
|
||
---
|
||
|
||
## Feedback / Contributions
|
||
|
||
Feel free to open issues or pull requests!
|
||
If you enjoy this project, a ⭐️ star is always appreciated.
|