Want to share your content on R bloggers? click here if you have a blog, or here if you don’t.
In this post, I’ll use R to summarize my 2025 running data. Previous overviews are here (2021, 2022, 2023I’m not sure why I haven’t posted one before 2024…).
I had a goal to run a total distance of 3650 km by 2025. In reality, after running 3500 km in 2024, I decided to aim for less (3000 km), but around spring I realized that I had been at a similar total to the same point in 2024 and decided to increase the goal. This analysis mainly looks at distances, so we can use the summary data from Garmin Connect for this. It is available as CSV, which can be easily downloaded and imported into R (see previous after for details). The existing code is retrieved and then executed as follows:
# function ----
summarise_my_running <- function(from, to, annual){
# readAndCalc equivalent
process_data(activityStr = "running", fromStr = from, toStr = to, km = annual)
# TSS score
find_form(from = from, to = to)
# distance map
distanceTreemap(from = from, to = to)
# calendar view
calendarView(from = from, to = to)
}
# script ----
source("Script/garminFunctions.R")
# summarise_my_running(from = "2021-01-01", to = "2021-12-31", annual = 2021)
# summarise_my_running(from = "2022-01-01", to = "2022-12-31", annual = 2500)
# summarise_my_running(from = "2023-01-01", to = "2023-12-31", annual = 3000)
# summarise_my_running(from = "2024-01-01", to = "2024-12-31", annual = 3500)
summarise_my_running(from = "2025-01-01", to = "2025-12-31", annual = 3650)
I should make these features a package to make this easier…
Anyway, this generates several images…
Progress towards the annual total
On December 24, I passed the 3650 km target and then rested a bit, bringing my total to 3672 km. Let’s take a look at my progress compared to that linear goal.

I was ahead of schedule for most of the year. In July and August I fell a bit behind. Then the peaks in spring and fall (through marathon training) kept me in the black.
The weekly overview shows a similar picture.

I have remained injury free for most of this year. If you’re a runner, you know that injury-free is a relative term. What I mean is that I didn’t have an injury that stopped me from running, but there were periods where I was almost out of action and I had to take it easy.
Perform a breakdown
How did I arrive at this total? As in previous years, this was helped by consistent commutes and long Sunday drives. The calendar has many green days (two commuting running days) and far fewer non-running days. Maximum three consecutive days.

Let’s look at run distribution in a few other ways. The tree map, weighted histogram and raw histogram show that most of the distance was due to 4-5km runs (the run-commute). I ran fewer half-marathon distances this year, but more half-marathon distances, increasing the total significantly. I have also run three marathons (Stratford-upon-Avon, Worcester and Frankfurt) who contributed 126 km.



This is a different picture than in 2024, when I trained for and ran an ultramarathon.



Fitness all year round
Finally, how was my form during this period? We can look at this by calculating the acute and chonic training load and the training stress balance (source code here).

I had two main training blocks for the spring and fall marathon seasons, which can be seen in the blue (fitness) profile in the top diagram. I have run three marathons on 4/27, 5/18 and 10/26, which can be seen as peaks in the black trail into the fresh zone (due to the taper) and abrupt drops due to the stress of running the marathon itself. I don’t recommend running two marathons within three weeks of each other – an important lesson for me this year.
Summary
It was a good running year for me. My most kms to date, I achieved PBs at 5K, 10K, HM and Marathon distances. The marathon is one place where I think I can improve the most and this is my focus for 2026.
—
The title of the message is taken from “Running Around” by DRI
Related
#Running #dataviz #bloggers


