Giro delle Dolomiti
Between 22nd and 28th of July I participated in the Giro delle Dolomiti, in which I cycled 600+km with 12000+ meters of climbing, through iconic climbs like the Seiser Alm, Passa di Gardeno and the Stelvio. The Giro is a ‘sportive’, which means that there is some competitive element to it. Each of the six stages had one segment or climb that was timed.
So after the race I did what any data scientist in their right mind would do, collect all the data and start analyzing it… This post will present some results in two parts: firstly on the classification part, secondly on the individual stage part. It was my first time racing and cycling in mountains, so I expected to see some changes over time as I gained experience.
Classification
Every stage had timekeeping on one stretch, which was mostly the biggest climb of the stage. The timekeeping was done by winningtime.it, who supply all data on their website. The website is not the cleanest, but I found the AJAX calls that request the paginated results. I used R with the httr package and the readHTMLTable() function of the XML package to create a data.table of all the individual stage results.
Looking at the results for the general classification, we take a number of steps. First of all, we need to figure out how many riders there are in total. Not every rider finished each stage (some riders possibly finish no stage at all). We did a quick check on how Sander Kommeren (my cycling buddy) and myself compared to others. Sander was always faster than me, so we’re basically looking at 6 groups. The riders faster than Sander, Sander, the people faster than me, but slower than Sander, me, the people slower than me and the people that dropped out. Riders that did not finish a stage would be taken out of the general classification. They would still be able to finish individual stages, but they wouldn’t be included in the GC anymore. I used R’s plotly to build a sankey diagram of these groups to see how people transitioned over this. As you can see, Sander performed quite consistently. He made some big jumps after the second stage and the third stage, but actually lost a couple of places in the 5 stage. I started off really poorly, but made nice progress throughout the stages. Especially in the second stage and the 4 stage my ranking improved greatly, allowing me to finish in the top 50%, which I’m quite content with.
Individual Stages
So for the individual stages I downloaded the data from Strava. Sadly, I have only limited data from Stage 1, because the battery in my heart rate monitor was dead from the beginning, and my Garmin ran out of energy after about 30 kilometers. But for Stages 2–5 there is plenty of interesting data.
Fatigue
In some previous posts I looked at the relationship between heart rate and speed. I figured I’d do that again, but this time specifically look at how the relationship between heart rate, speed, and (impossible to ignore in the dolomites) the slope/grade of the terrain.
After efforts on consecutive days, it becomes harder to get your heart rate up. Your cardiovascular system (heart, veins, arteries and lungs) can still keep up, but your muscles are just too fatigued to push hard enough to make it work hard enough. Let’s have a look at the data if we can identify this effect as well.
Let’s first look at the heartrates itself. What can we learn from the basic descriptives? What we can learn from the heart rate (pictured in the left pane in the graph below) over time is that Stage 4 (the Stelvio) was by far the longest climb. In terms of pacing we can see in the heart rate distributions (right pane in the graph below) how my pacing changed. During the first stage I blew myself up (not pictured, since I had no heart rate monitor). This lead to me pacing very conservatively in Stage 2, where I slowly ramped up my power during the effort (as you can also see from the raising line in the left graph). But I spend quite some time in very low heartrates (150- bpm). In Stage 3 I paced better, all centered around the 160 bpm. Stage 4 was long, and I actually had a different pacing strategy. The first half I tried to keep in Zone 3, below 160 bpm. Immediately after the midway point came a steep section, where I went all in until I ran out of energy. Then I took it down a notch to under my threshold (165ish bpm), only to ramp up my efforts to around threshold for the last 3 km. That approach worked well and gave me the confidence to pace around threshold for Stage 5.
So in that sense, we cannot see the effects of fatigue as we’d expect. Both the maximum heartrate and the average heartrate get higher and higher. So this sadly makes it impossible to investigate the effects of fatigue over time. I guess we’ll keep that for next year…
Pacing the Stelvio
Now the Stelvio was the most interesting stage from a pacing point of view. It was long, and the profile of the climb kind of made me think about how to pace beforehand.
Let’s see what we can get from the data there. There are three distinct moments where I changed my approach. I planned to increase my effort after the midway point. And I increased my efforts in two unforseen occassions: somewhere in the first quarter when an e-bike overtook me which I couldn’t accept and somewhere in the last quarter when I saw a photographer that ‘forced’ me to accelerate for the picture on the left.
These things we can see back in the data as well. I plotted a number of metrics against time, being: altitude (in meters), heartrate (in bpm), cadence (or how fast I rotate the pedals, in rpm), temperate (in degrees centigrade), grade of terrain(in percents) and velocity (in m/s). The data shows that my heart rate goes up by quite a bit when I’m about 52 minutes in (the 52:30 mark). Where it’s oscillating around 155 before that time, after that it seems to be oscilating more around the 165. Immediately after that moment there are two short periods where my heartrate stays around 170, which was the planned increase in effort when the steep part begins. Around 1:39:00 you can see me posing for the picture, with a spike in heartrate, some weird things with regards to my cadence (need to be in a heavy gear for the picture!) and a spike in my velocity. Now one of the spikes in the first half (either the one around 25:00 or 40:00) was me chasing after that e-bike. The other one, I’m not sure… And more interestingly, you can see me grinding away on a way too heavy gear for about 4 minutes from 1:07:30. This was a stupid mistake, that I did remember, but in retrospect it lasted way longer than I remembered.
This was just a quick writeup of the data I have at my disposal. I’m sure there is more to look into, and I might revisit all of this when I’m looking at my previous heart rate/velocity modeling attempts. But for now I’m just enjoying the nice time I spent in the mountains.