· Recap · 6 min read
My Sports Year 2025
A data-driven deep dive into a high-volume sports year 2025 of 704 training hours, balancing semiprofessional basketball with cycling using a Python script and the Garmin API

2025 Year in Review: Basketball, Cycling & Data
The year 2025 had two main focuses for me in terms of sports: playing basketball in the 1. Regionalliga and having some summer-fun on my new roadbike & going for longer distances on the bike overall.
As a software engineer, just looking at the standard Garmin app was not enough for me. I wanted the raw data. To generate the charts below, I wrote a custom Python script that downloads my data from the Garmin Connect API. It uses pandas to clean and aggregate the metrics, and matplotlib and seaborn to render the visualizations. This allows me to build my own personalized view of my training data by executing the script for a specific year.
Here is what 2025 looked like.
📊 The Raw Numbers
To put the numbers into perspective: 704 hours of training means almost two hours of physical activity every single day of the year in average.
| Total Time | Activities | Total Distance | Elevation Gain | Active Calories Burned |
|---|---|---|---|---|
| 704.0 h | 864 | 6,056 km | 44,117 m | 425,187 kcal |
Consistency & Recovery
- Longest Active Streak: 47 consecutive days
- Full Rest Days: 38 days
While 38 complete rest days might seem low for a year of basketball and cycling, Garmin also tracks every daily bike commute, which boosts the activity count. There was no strict master plan to take exactly 38 days off for recovery—it’s just how the year organically played out when I needed a break.
🏆 Season Highlights
Not every workout is the same. Here are the extreme outliers of my year:
- 🏀 Basketball Consistency Averaging ~8 hours/week of Basketball in season
- ⏱️ Longest Workout: 9.8 hours on June 17th (Cycling).
- 📏 Max Distance: 276.0 km on June 17th (Cycling).
- 🔥 Highest Burn: 5,180 kcal in a single session on July 13th.
- 🚀 Fastest Ride (>50km): 33.4 km/h average over 50.6 km on July 19th.
📈 Calories & Nutrition & Fueling
Active calories only tell half the story. The chart below stacks my training calories on top of my estimated resting metabolic rate (~2,450 kcal).
For me, the biggest challenge is nutrition. I weigh myself every day, but it’s still hard to decide whether I should eat more or less. On long cycling days, the caloric deficit is massive and almost impossible to refill immediately. With basketball, I usually have to force myself to eat a large meal late at night after practice.
On average, I burned about 3,615 calories every single day in 2025. To put that into perspective: that is the equivalent of eating about 4.5 frozen pizzas (Salami) every day just to maintain my weight. It shows that at this level of activity, eating enough becomes just as much of a task as the training itself.

⏰ Training Times & Rhythm
It is also interesting to see when I train. The heatmap shows a very clear pattern of my daily routine.
Team practices in the gym always take up the late evening hours during the week.

📉 Time Allocation & Seasonal Shifts
My training time is primarily split between basketball and cycling. As mentioned, everyday bike commuting is tracked separately in a category to keep the actual training metrics clean.
Looking at the monthly charts, you can clearly see the seasonal shifts. During the summer months, there is a visible dip in basketball, which I replaced with a significant increase in road cycling. This was the period where I focused on longer distances and endurance and tested my new road bike.
In August, things changed: I joined a new basketball team in the 1. Regionalliga going up one league. You can see the basketball volume increasing sharply from that point on as the pre-season and then the regular season started.
Strength training also follows a specific pattern. July shows the highest volume in the gym, which was the most intensive part of the basketball pre-season gym workouts with actual jump improvements, strength and power building. During the actual season, the focus in the gym shifted from building mass to injury prevention and maintenance. Most sessions then became shorter “activation” workouts right before team practice, rather than long heavy lifting sessions.

Conclusion: The Balance Between Team and Solo Sports
Looking at the final distribution, 2025 was a year of constant adaptation. Basketball and cycling are my two main pillars, but they serve completely different purposes for me. Basketball is my primary sport and simply a lot of fun. I love being in a competitive environment with a group of guys who are all highly motivated and putting in extra work.
However, since basketball and the gym are always indoors, cycling has become the perfect counterweight. I originally started because it’s the best way to get outside and clear my head. On the bike, I’m not dependent on a team or a schedule; I can push myself solo or just go for a low-effort ride if I need a break. It’s that mix of being outdoors and having time for myself that makes it so interesting.
The gym remains strictly a tool for me. I could never do bodybuilding or fitness as my “main” sport. Every hour I spend lifting is purely to become a better athlete on the court and stronger on the bike, focusing on injury prevention and functional power rather than aesthetics.
One thing the data doesn’t show is how much my body has to adapt between these two worlds. Even though cycling builds a massive aerobic base, the physical setup for basketball is completely different. Every year after the cycling-heavy summer season, I feel the transition.
My legs are used to the steady, linear motion of pedaling, so the vertical explosiveness and the lateral movements on the court take a hit at first. It usually takes a few weeks of specific training to get my “jumping legs” back and for my joints to get used to the hard impacts of the hardwood floor again. Balancing these two is a process of recalibrating the body.
Looking ahead to 2026, the goals are straightforward. I want to finish my first semi-professional season in the 1. Regionalliga strong and push my cycling limits even further. I’m planning to experiment more with ultra-cycling distances and want to increase my total yearly mileage. Since I’ve added an indoor trainer to my setup recently, I’m particularly curious to see how the time distribution will shift in the next year’s review.

Data extraction, aggregation, and visualization built with Python (Garmin API, Pandas, Seaborn).



