TrainingPeaks Rewind: Visualizing 3.5 Years of My Triathlon Data
This year marked the first time in my life that I travelled internationally to compete in a triathlon. Every training session built towards this race - the World Triathlon Championship Finals in Torremolinos, Spain. Yet, this race also marked the first time I didn't show up to the starting line for a race I had signed up for.
Having gone down in a training ride a couple days before the race (leaving me with serious road rash and a sprained hand), there was no way for me to test my fitness at another race before the end of the season. Being unable to race left a big question mark for where my end-of-season fitness was at - was I really in the peak shape of my life as I had hoped? So, being a data scientist, I decided to let my training data answer this question.
Inspired by the popularity of Spotify Wrapped, Reddit Recap, and Strava's Year-in-Sport, this is my TrainingPeaks Rewind, a walk down 3.5 years of my foray into triathlon.
1. Foundation
I chose TrainingPeaks over Strava, the de facto leader in sports activity tracking, as the data source for these visuals. Here's why: uploading swimming and strength workouts to Strava is so underwhelming, that I barely use it. Since Strava only has my cycling and running workouts, pulling from TrainingPeaks gives me a much more complete picture of my triathlon training. I'll share another deep-down reason - I think I can do a bit better than Strava's Year-in-Sport 🙂
Through high school and into college, I lived deadline to deadline. A lot of the time, I found myself waking up the morning of an assignment to start the assignment. Perhaps unfortunately, this got me pretty far, so rinse and repeat and we were onto the next one. Training for a triathlon was a way to teach myself that consistency day-by-day is what makes someone accomplish something great. I knew I wasn't going to get very far from just last-minute training.
However, consistency didn't come naturally. In June 2021, simply getting out the door felt like a major hurdle. But I built momentum going into 2022, completing my first full year of triathlon training, culminating in racing a 70.3 at the end of the year. Keeping with that momentum, I've gradually increased the number of training sessions (17% each year) in both 2023 and 2024. Building a strong foundation has transformed racing from just trying to survive into a more rewarding experience.
2. Race
Fun fact: I find 70.3 races easier than Olympic distance. At a 70.3, I pace myself for a long day; whereas in an Olympic triathlon, it feels like a full-throttle sprint from start to finish. This is strongly related to my training, which I'll get into later.
An Olympic Triathlon covers roughly 45% of the distance of a Half Ironman, yet I've managed to cut 64% as much time in the Olympic as I have in the Half Ironman. When it came to racing, I progressed from shorter to longer races: first Sprints, then Olympics, before jumping into a 70.3. When I first started, I could make a dramatic difference in my progression between the beginning and end of a racing season. This was evident in my performance at the Three Lakes Triathlon compared to the 70.3 Washington later in the season, where both my preparation and equipment were much more refined. When it came to achieving my latest fastest times at the Finger Lakes Triathlon and 70.3 Western Massachusetts, my equipment was on a level playing field and the performance gains much more marginal.
Since I’ve always been a strong swimmer, I have not devoted as much time as you’d think to the pool. When I do swim in the pool, it’s often with the local masters group, which provides structure and the chance to train alongside even more skilled swimmers. However, I would chalk up most of my improvement to being a more seasoned open-water swimmer. I’ve learned to sight efficiently, swim straight (as much as I can), and draft off stronger swimmers when I have the opportunity.
To tackle my weakness, I've spent most of my time on the bike. Age group triathlon is more of a bike race than a swim or run race; you spend more than half of the race pedaling. Fast time trialing requires a significant financial investment, and upgrading from my entry-level gravel bike (that I bought to get into the sport) into a higher-end TT bike makes riding at high speeds comparatively effortless. Both the increased time spent training on the bike and refining my aerodynamics have been crucial factors in my race improvements.
Lastly, when it comes to running, I've become all too familiar with the feeling of running on tired legs as it's always the final part of the race. This is when nutrition really comes into play. When I haven't dialed my nutrition, I've bonked and the run has been a grueling fight to get the finish line. Improving my race results has been the culmination of hard work, and that hard work comes from consistent training volume.
3. Volume
Increasing my training volume is a key goal I set at the start of each year. This year-over-year progression has been the backbone to improving my overall fitness.
When it comes to building volume, I've found that prioritizing the frequency of training sessions is often more effective, and practical, than trying to increase the duration of individual workouts. For example, scheduling a three-hour workout during a busy weekday can be nearly impossible with full-time work commitments. Breaking it into a one-hour session in the morning followed by another two-hour session in the evening becomes much more manageable.
A simple baseline to follow when starting out the sport is to run, bike, and swim twice a week. From there, I progressively added workouts based on where I would get the most benefit. For me this meant, adding another bike, another run, and then strength workouts. Quickly, it becomes necessary to be able to "double up" by completing two workouts in a single day. In concept this seems straightforward, but in practice this entailed meticulous time management, a decent amount of discipline, and an intimate understanding of my energy levels throughout the day.
With all that I've learned over the years, I've progressed to averaging 10-11 hours a week, with peak weeks at around 13 hours this year. My goal now is to consistently hit 12 hours a week, with peak weeks pushing up to 15 hours. This would not only make me competitive for age group podiums at 70.3s but build the fitness to take on major endurance challenges, all without necessitating drastic sacrifices in other components of my life.
4. Heart
My time spent in different heart rate zones underscores my training over the years. You could argue that I've gone from doing too much intensity (zones 3 and 4) to spending too much time at social pace (zones 1 and 2). To discuss this progression, I've broken it down into three different time periods - the second half of 2021 and 2022, 2023, and 2024.
When I started out, I found that my workouts were frequently in high heart rate zones; however, I'd argue that being able to get in any workout was a good workout. At that point, it was much more important to get into a habit of completing a session than to be able to accomplish it at a specific heart rate zone. As with most people getting into training, I can give a couple good reasons for why my heart rate was so high, ranging from "easy" paces are unbearably slow to feeling that I needed to push myself. However, the fact of the matter is that I was not as fit as I was now. A flat 20-mile bike was a hard bike and a 1-hour run was a hard run.
Last year, to survive the large jump in training volume while not being tired all the time, I learned to "sandbag" workouts - a strategy where you deliberately hold back the effort. Most of my additional training time was spent in zones 1 and 2, with a significant reduction in time spent in zones 4 and 5. Oftentimes, I was fatigued going into a workout, so I naturally wouldn't push myself as hard. This approach allowed me to build a strong aerobic base, enabling me to sustain effort for extended periods. Even with a lack of high intensity work, I'd surprise myself with strong performances on race days.
This year, it's not enough to just do a session; I've focused on doing sessions "correctly." This involves ensuring that easy sessions remain truly easy to allow for proper recovery and that hard sessions are executed at a high intensity when on my training schedule. I still struggle a bit with the latter. A key part of working with a coach is being intentional with adding intensity at specific periods throughout the year to achieve a peak. We plan out the entire year's training plan - keeping intensity low during base-building periods and then adding race-specific high intensity to tune up before a marquee race.
Now to wrap back to my fun fact: because I've spent so much time training in zones 1 and 2, I believe that's why the longer pacing in 70.3 races suit my aerobic strength better than the threshold demands of Olympic distance races.
Going through the process of visualizing my triathlon data has been my way to relive the journey - from difficult first steps, to the setbacks of various injuries, to the joys of finish lines. I'm grateful to be healthy again and excited to be training for 2025!
If you're interested in visualizing your own TrainingPeaks data, check out the Github trainingpeaks-rewind. These visuals are inspired by the examples showcased on the Python Graph Gallery.
If you want to follow my training, you can find me at Daniel Zhu. Have a comment or question? Email me at dzhu319@gmail.com.