01 / 20
SAE
SAE 4 · IUT of Reims · Data Track · 2025–2026
Our Runs,
Our Data

Running performance analysis built from our own Garmin sessions, enriched with real weather data, then explored through dashboards and reporting tools.

From field collection to data pipeline to interactive storytelling

Python PostgreSQL Streamlit Power BI Open-Meteo
Adrien Martin Nathan Duport Khalil Moughamir Arthur Bresson
Adrien
Runner profile
Adrien
64 kg · 3:27/km best
Nathan
Runner profile
Nathan
76 kg · 2:53/km best
Khalil
Runner profile
Khalil
80 kg · 2:47/km best
Arthur
Runner profile
Arthur
70 kg · 2:04/km best
4
Runners
4
Sessions
400m
Distance
1
Objective
Research Question

Do environmental conditions (weather) have a measurable impact on running performance, and does that impact vary across runners?

Weather impact

Temperature, wind, humidity, and rain: do these variables impact 400m time?

Inter-individual variability

Does each runner respond differently to the same weather conditions?

Progress vs weather

How can we separate real physical progress from weather effects across sessions?

FOCUS

All analyses focus on Lap 2 only: a maximal effort of about 400m, automatically extracted from second-by-second FIT files.

Agenda

Outline

01

Equipment & Field Setup

Sensors, data collection protocol, team, and running site

02

Pipeline architecture

FIT extraction, database, and automation

03

Analysis & Results

Streamlit & Power BI dashboards, weather data, key findings

04

Live demo

Interactive Streamlit + live Power BI

05

Critical discussion & conclusion

Limitations, bias, interpretation, outlook

01: Equipment

Two data sources

The collection setup combines a multi-sensor Garmin watch for movement data and a Polar optical sensor for cleaner heart-rate tracking.

Garmin Instinct 2
Garmin Instinct 2
GPS 1 Hz: position, distance, instant speed
Heart rate + cadence + estimated power
Second-by-second FIT export → Python
Why it matters

This watch provides the backbone of the project: route geometry, speed evolution, cadence and estimated power, all at second-level resolution.

Polar OH1+
Polar OH1+
Arm optical sensor: high-frequency heart rate
Cross-validation with Garmin
Reduced motion artifacts
Metrics
Speed (m/s)
HR (bpm)
Power (W)
Captured
Cadence (spm)
GPS distance (m)
Lat/Lon coordinates
Parc de Champagne
Field

Parc de Champagne

Reims · 49.2408°N 4.0543°E · 400m asphalt track

S1
March 12 · 5:30 PM
12.5°C · wind 23.6 km/h · dry
S2
March 19 · 3:00 PM
15.4°C · wind 15.1 km/h · dry
S3
March 25 · 6:30 PM
5.3°C · wind 23.6 km/h · rain 1.4mm
S4
March 30 · 9:30 AM
7.8°C · wind 16.7 km/h · humidity 87%
02: Architecture

Data pipeline

FITSensorsGarmin FIT
Polar OH1+
PYextract_tour2.py75% peak threshold
45–200s · ~400m
APIOpen-MeteoHistorical weather
Temp · Wind · Humidity
SQLPostgreSQL5 tables + view
FIT × Weather
VIZDashboardsStreamlit · Power BI
Live and interactive

Automatic Lap 2 detection

Adaptive threshold at 75% of peak speed: works across runner levels.

Exact weather matching

Conditions retrieved at each session’s exact timestamp and GPS coordinates.

Cron automation

New FIT dropped in → extraction → DB update → dashboard refreshed automatically.

02: Extracted data

Lap 2: full results

RunnerS.DurationDist.PaceBestAvg HRMax HRCadencePower
Adrien192s399m3:433:27167170175454W
Adrien296s393m3:583:42179182170445W
Adrien391s397m3:513:35169172179419W
Adrien479s333m3:533:38145158166446W
Arthur158s411m2:142:04178188196686W
Arthur252s ★362m2:181:59177181206647W
Arthur357s395m2:252:11150157208619W
Arthur460s395m2:222:15176183198624W
Khalil176s403m3:022:47190196178493W
Khalil286s398m3:323:23163169172462W
Khalil481s423m3:162:58186193178474W
Nathan189s409m3:383:24192196161479W
Nathan271s386m3:002:53115*165176537W
Nathan378s400m3:133:04158161174493W
Nathan489s393m3:493:07160165163452W

★ Best overall run · * Likely sensor artifact (Avg HR 115 bpm vs Max HR 165 bpm) · Khalil absent in S3 (illness)

03: Analysis · Streamlit

Interactive dashboard

The Streamlit dashboard includes 17 analysis sections built on Lap 2 data. It works with or without PostgreSQL (local CSV fallback).

KPI
KPI & Records

400m time, Max HR, power, cadence

Pacing
Speed profile

Second-by-second m/s curve

Weather
Weather × Performance

Dual-axis time/temperature, correlations

GPS
Animated GPS map

Real positions on the route

Splits
100m splits

Pacing strategy by segment

Recovery
Heart rate recovery

HR drop after Lap 2

Live demo

Live Demo

Interactive dashboard based on real data: 15 runs, 4 sessions, and 4 runners.

Streamlit

17 sections: animated GPS, 100m splits, and heart rate recovery.

10.31.32.17:8501
03: Analysis · Power BI

Power BI: data preparation

Before visualization, raw data extracted from PostgreSQL was standardized and modeled in Power Query to make the report understandable, robust, and presentation-ready.

Typing

Type normalization

Columns converted to correct types: durations as integers, pace as decimals, and dates as Date, to avoid DAX calculation errors.

Renaming

Readable columns

All technical fields were renamed (allure_moyenne_sAvg pace) so visuals remain understandable without technical context.

Joins

Query merging

Tables activites, coureurs, seances, and meteo were joined directly in Power Query in a star-schema model.

Measure table

Centralized DAX measures

Dedicated table containing all calculated measures: progress %, normalized 400m time, W/kg power corrected by real weight, and deviation from average.

Connection

Native PostgreSQL

Direct read from the performances_avec_meteo view: the FIT × weather × runners join was precomputed in the database and imported in one block.

03: Power BI · Report

Power BI report

Dashboard Power BI 1 Dashboard Power BI 2
03: Weather × Performance

Weather conditions by session

Source: Open-Meteo · Parc de Champagne · Real hourly data

SessionDateTemp.WindConditions
S1March 12 · 5:30 PM12.5°C23.6 km/hStrong wind
S2March 19 · 3:00 PM15.4°C15.1 km/hMild · dry
S3March 25 · 6:30 PM5.3°C23.6 km/hRain 1.4mm
S4March 30 · 9:30 AM7.8°C16.7 km/hHumid 87%

Cold weather → lower HR

Arthur in S3 (5.3°C): Avg HR 150 vs 178 bpm in S1 for a similar time, likely because thermal dissipation was easier.

n = 4 sessions

Four points are not enough for statistical conclusions: the trends are descriptive, not causal.

Bias: Adrien S4

Adrien ran S4 at 12:34 PM, about 3 hours after the others. Weather was slightly different.

03: Key findings

What the data reveals

Arthur: elite profile

Record at 52s (2:04/km) in S2. Very stable (52–60s). Max cadence: 208 spm. Peak power: 686W.

Adrien: best progression

92s → 79s across 4 sessions: −14%. Controlled HR. Slight S4 bias (different time).

Nathan: peak in S2

Best run in S2 (71s, 2:53/km). S2 HR anomaly (115 bpm avg): likely sensor artifact.

Khalil: highest Max HR

Max HR 196 bpm in S1. Absent in S3 (illness). Higher cardiovascular cost than the others.

Arthur 52s · 2:04/km Adrien −14% over 4 sessions Khalil Max HR 196 bpm Nathan 71s best in S2 → Streamlit for full visualization
04: Critical analysis · Data

Data quality limitations

GPS
GPS accuracy ±3–5m
On 400m, a 5m error = 1.25% uncertainty. Segment pace can be biased, especially on curves.
FC
Heart-rate response delay ~15s
HR reflects integrated past effort. In a 60s sprint, it never reaches its true peak.
W
Estimated power (black box)
The proprietary Garmin algorithm is undocumented: it is computed from speed and acceleration, not directly measured.
ID
Single profile: Arthur account (70 kg)
Calories, aerobic TE, and HR zones are computed from Arthur’s profile. Applied correction: W/kg and kcal/km.
MTO
Interpolated weather, not measured on site
Open-Meteo provides the closest model cell (~1–5 km). Park microclimate is not captured.
ALG
Lap 2 detection: false positives
A 75% peak threshold may select the wrong segment if a session contains several similar efforts.
04: Critical analysis · Bias

Potential biases in the analysis

Small sample size (n=4)

No generalization is possible. Each runner is their own control. Observed correlations have no statistical significance.

Confounding bias

Temperature, humidity, and wind are correlated. S3 and S4 are both cold and humid, so it is impossible to disentangle the effects.

Course-learning effect

S1→S2 improvement may come from familiarity with the route, not real physical progress.

Camera effect / motivation

Being measured can influence effort. Relative effort vs max capacity is not constant across sessions.

Unmeasured factors

Nutrition, sleep, accumulated fatigue, and stress: these variables may outweigh weather effects.

Heterogeneous performance levels

Arthur (57s) vs others (79–96s): comparing absolute HR or power is not meaningful. W/kg partially mitigates this bias.

04: Critical review · Interpretation

What we can and cannot conclude

What we can claim
Arthur

Arthur is the fastest runner over 400m.

Adrien

Adrien shows the strongest relative progression across sessions.

Khalil & Nathan

Khalil and Nathan reach very high maximum heart-rate values.

Weather signal

Heart rate tends to be lower in colder weather at similar effort.

What we cannot claim
That weather causes performance variation. That progression is purely physical (vs learning). That a 4-point correlation is statistically significant.

Improvement outlook

Increase number of sessions (target: at least 8–10)
Add a dedicated running power sensor (Stryd)
Pre-session form: sleep, nutrition, fatigue
Integrate air quality (AQI, PM2.5)
Compute wind angle vs running direction (GPS)

Real value of the project: despite statistical limits, it demonstrates the full feasibility of a real-world data pipeline, from field collection to interactive visualization.

05: Conclusion

What this project demonstrates

01

Robust pipeline

FIT → Python → PostgreSQL → Streamlit. Full VM automation. 15 runs analyzed. Scalable without manual intervention.

02

Valuable granularity

Second-by-second FIT data: acceleration profiles, 100m splits, and heart-rate recovery that remain invisible in summary CSV exports.

03

Critical approach

All biases were identified, documented, and integrated. The W/kg correction changes the rankings; without it, the analysis would be biased.

Final answer
A visible weather signal exists, but the sample is still too small for a causal claim.
Answer to the research question

A consistent trend is visible (lower HR in colder weather at similar effort), but with n=4 sessions, no causal weather/performance correlation can be established. More sessions are needed.

05: Technical summary

Skills acquired

Data
Parsing FIT second-by-second
Algorithmic Lap 2 extraction
Open-Meteo REST API
Database
PostgreSQL schema (5 tables)
Analytical join view
Automated ingestion
Visualization
Dashboard Streamlit 17 sections
Interactive Plotly + animated GPS
Power BI + DAX measures
Infrastructure
VM Linux + Cron scheduling
Orchestrated pipeline
GitLab IUT Reims
Technical stack
Python + PandasPipeline
PostgreSQLDB
Streamlit + PlotlyDashboard
Power BIReporting
Cron + VM LinuxAutomation
Sources & References

Bibliography

Data & APIs
WEB
Open-Meteo API
open-meteo.com: free historical weather, hourly resolution, GPS coordinates
FIT
Garmin FIT Protocol SDK
developer.garmin.com/fit: FIT format specification, second-by-second decoding
FC
Polar OH1+ Documentation
polar.com: OHR optical sensor technical specifications
Tools & Libraries
PY
Python: Pandas, NumPy, Streamlit, Plotly
FIT parsing, extraction pipeline, interactive web visualization
SQL
PostgreSQL
Structured Lap 2 storage, FIT × weather joins, analytical queries
PBI
Microsoft Power BI & GitLab IUT Reims
Decision-support dashboard + versioning iut-info.univ-reims.fr/gitlab/moug0045
SAE 4 · BUT Computer Science Year 2 · Data Track · IUT of Reims · 2025–2026  ·  Adrien Martin · Nathan Duport · Khalil Moughamir · Arthur Bresson