Category: Data Analytics

Rebuilding the Football Injury Dashboard: Adding Transfermarkt Data for the 2026/27 Season

The 2026/27 season is a few matchdays old, which is exactly the point in the calendar when injury counts start climbing. It seemed a good moment to go back to the European football injury dashboard I put together earlier in the year and deal with something that had been bothering me about it.

The original version had a structural weakness. Its month-by-month figures were not measurements. The Howden Group Men’s European Football Injury Index — the best free source covering the top five leagues — publishes one total per season, not one per month. To draw a monthly curve I had been distributing those annual totals across the year using the seasonal distribution reported in the UEFA Elite Club Injury Study. That gives a defensible shape, but every individual month was an artefact of the model rather than a count of anything. If you had asked the chart whether September 2023 was worse than September 2024, the answer would have been decided by the annual total, not by what happened in September.

So I added a second dataset alongside it, and let the reader choose which one they are looking at.

Two datasets, two different questions

The dashboard is here: footballinjuries.tiiny.site. A toggle at the top switches between the two sources. They answer genuinely different questions, and I have tried to make the distinction obvious rather than burying it in a footnote.

  • Season pattern — estimated monthly counts across seven leagues and five seasons, showing when in the year injuries cluster. Good for shape, approximate for magnitude.
  • Injured right now — a real count of every player listed as injured on a given date, from Transfermarkt. Good for who is actually missing, useless as a season total.
Line chart showing estimated monthly injury counts across seven European football leagues for the 2026/27 season, peaking in September
The seasonal view. The September peak is the most consistent feature in the whole dataset — players return from the summer break, fixtures arrive quickly, and bodies that have not been at match intensity for weeks are asked to perform. A second, smaller rise comes in April as accumulated load tells.

The Transfermarkt layer

The new view collects every player listed as injured on Transfermarkt‘s injury pages for the Premier League, Bundesliga, La Liga, Serie A, Ligue 1, Eredivisie and Liga Portugal. On 28 August 2026 that came to 257 players. These are individual records — a named player, his club, and what is reported to be wrong with him — not a figure derived from anything.

Stacked bar chart showing players currently injured across seven European leagues on 28 August 2026, coloured by injury type
Players injured across the seven leagues on 28 August 2026. You can click into any league to see it club by club.

The Bundesliga stands out with 66 players out, against 15 in Ligue 1 — though before reading anything into that, note that squad sizes, fixture load and how much press attention a league receives all feed into these numbers. That last factor matters more than it might appear, and it leads directly to the caveats.

Where this data is weak, and why I have said so on the page

Transfermarkt injury records are compiled from press reports, not club medical records, and that has consequences worth stating plainly.

A snapshot over-represents severe injuries. A cruciate ligament rupture stays visible on the page for months; a grade one hamstring strain disappears within a fortnight. The injury mix in the chart is therefore more severe than the mix of injuries a league actually sustains. This is straightforward survivorship bias and it cannot be corrected without incidence data.

Roughly a third of records name only a body part. “Knee injury”, “ankle problems”, or simply “unknown injury”. I could have forced these into a category and produced a tidier chart, but that would be inventing precision that is not in the source. They appear as Not specified instead. In the Eredivisie this accounts for 32 of 56 records — a striking difference in reporting practice rather than in injury patterns, and one that is itself interesting.

These are counts, not rates. There is no exposure denominator — no adjustment for minutes played — so none of this is comparable with the injuries-per-1000-hours figures the epidemiological literature reports. For that you need the UEFA Elite Club Injury Study or club data, and this dashboard is not a substitute for either.

The Eredivisie and Liga Portugal are also absent from the Howden report entirely, so their seasonal estimates lean on published injury-rate research for comparable leagues and should be treated as softer than the other five.

Other changes

Two smaller things. The dashboard is now written for a general reader rather than for me — plain-language injury categories, an explainer at the top, and a summary underneath the chart that rewrites itself as you change the selection. It also now states honestly how solid each season is: 2022/23 to 2024/25 are confirmed by Howden, 2025/26 has finished but is awaiting the December 2026 report, and 2026/27 has barely started and is labelled as a projection rather than a record.

The other change is invisible but was the reason several people saw a blank page: the chart previously loaded its plotting library from a CDN, and if that request failed — restricted network, content blocker, poor connection — the result was an empty rectangle with no explanation. It now draws its own SVG with no external dependencies at all. Nothing is loaded from anywhere. It works offline.

What next

The obvious next step is real month-by-month history rather than estimates. Transfermarkt does hold this — every individual injury record carries a start date — but assembling it means collecting player-level histories across seven leagues and several seasons, which is an overnight job rather than a page fetch. I have the pipeline written using the worldfootballR package; it is a matter of running it and validating what comes back. If it holds up, the estimated monthly figures get replaced with counted ones and the weakness I described at the top of this post disappears.

As with the triathlon dashboard, this is a living project and I would rather it be scrutinised than taken on trust. Have a look at the dashboard and tell me what is wrong with it, or what you would want to see next.

Seasonal estimates derived from the Howden Group Men’s European Football Injury Index (2024/25 edition, published December 2025) and the UEFA Elite Club Injury Study. Current-injury figures collected from Transfermarkt on 28 August 2026 and filtered to clubs competing in each league. Injury classification from free-text labels is approximate. These are counts without an exposure denominator and should not be read as incidence rates.

A New Dashboard for Long-Distance Triathlon: Tracking the 2026 Ironman, 70.3 and T100 Season

Long-distance triathlon has never generated more data. Between the Ironman Pro Series, the Ironman 70.3 circuit and the PTO’s T100 Triathlon World Tour, the professional field now races across dozens of events a year, each producing split times, finishing margins and — if you go looking for it — a rich picture of the environmental conditions athletes faced on the day. The problem is that this information sits scattered across result pages, weather databases and is rarely analysed as a whole. So I built something to fix that.

I’ve developed an interactive Long-Distance Triathlons Dashboard, together with an open data repository, to bring professional results from Ironman (full distance), Ironman 70.3 and T100 into one place and let anyone explore how performances — and the conditions behind them — are trending. This post walks through what the tool does and offers a snapshot of how the 2026 elite season has played out so far.

The dashboard

The dashboard is live and free to use here: ironmandt100analysis.netlify.app. It uses professional-only results — no age-group data — sourced from PTO Stats (the Professional Triathletes Organisation), combined with race-day environmental data from Open-Meteo. It’s organised into three views.

  • Trends & Conditions — split-time trends across seasons and how race-day conditions line up with performance.
  • Athletes — individual athlete profiles and split histories.
  • Rankings & Predictions — current standings and model-based projections for future races this season.

The core of the analysis lives in the Trends & Conditions view. Rather than tracking a single winner’s time — which is noisy, since one exceptional or off day skews the picture — the trend charts plot the average of each race’s top three finishers for every split (swim, bike, run and overall), with a shaded band showing ±1 standard deviation across that podium. A tight band means the top three were closely matched; a wide band means the race blew apart. You can filter by race brand to compare like-for-like distances, and by category to separate the men’s and women’s fields.

Where I think it gets genuinely useful — and where it connects to my longer-standing interest in environmental physiology — is the conditions layer. For every race the dashboard pulls temperature, humidity, wind and the WBGT (Wet Bulb Globe Temperature) heat-stress index, and sets them against performance. There’s a race-level view (winning splits against the day’s conditions) and a finisher-level view, where every individual result is plotted against the condition recorded for that race and a Pearson correlation is computed on whatever subset you’ve filtered to. Water temperature is matched to swim splits; WBGT is used for the bike and run, because those are where combined heat stress bites hardest. A sortable race-by-race table underneath ties it all together — date, event, winner, every split, and the conditions on the day.

A couple of honest caveats are built into the tool. Splits aren’t comparable across brands, because the distances differ (a full Ironman, a 70.3 and a 100 km T100 are three different animals), so the “fastest recorded splits” are grouped by brand. And the wind figure is each day’s maximum hourly reading, which can overstate what athletes actually felt during an early-morning start. Transparency about these limitations matters more to me than a tidier-looking chart.

The open data repository

The 2026 season so far

So what does the season look like through the middle of 2026? Below are some of the headline professional results across the three series. These are selected highlights — the full race-by-race picture, with every split, lives in the dashboard.

T100 Triathlon World Tour

The big structural change for 2026 is that the T100 now runs separate men’s and women’s events through the regular season — four standalone races for each field — before both converge at the Qatar World Championship Final in December. On the men’s side, reigning champion Hayden Wilde opened in devastating form, taking Singapore by more than six minutes (3:21:58). Rico Bogen then successfully defended his San Francisco title over Lasse Nygaard Priester, with Wilde third. In the women’s races, Taylor Knibb edged a tight season opener on the Gold Coast, and Georgia Taylor-Brown ran down Julie Derron in Spain to claim her first career T100 title.

T100 race (2026)FieldWinner
Gold CoastWomenTaylor Knibb
SingaporeMenHayden Wilde
Spain (Pamplona)WomenGeorgia Taylor-Brown
San FranciscoMenRico Bogen

Ironman (full distance)

The full-distance season delivered one of the standout performances of the year: at Ironman Texas (the North American Championship, 18 April), Kristian Blummenfelt stopped the clock at a barely believable 7:21:24 — reported as the fastest full-distance time on record — outrunning Marten Van Riel late on. The women’s race the same day went to Solveig Løvseth in 8:11:09, ahead of Taylor Knibb (8:14:48) and Marta Sánchez (8:31:06). Løvseth then completed a full-distance double at the Ironman European Championship in Hamburg, holding off Laura Philipp to win in 8:11:11, just over a minute clear — a remarkable run of form from the reigning Ironman world champion. And earlier in the year at Ironman New Zealand, Trevor Foley and Kat Matthews took the men’s and women’s titles.

Ironman 70.3

The 70.3 circuit has been relentless. Marten Van Riel has been close to untouchable over the middle distance, and Kat Matthews has strung together a run of results that mark her as one of the athletes of the season so far. Kristian Blummenfelt showed his range with a narrow win in a Geelong thriller. A snapshot of the middle-distance winners:

Ironman 70.3 race (2026)MenWomen
GeelongKristian BlummenfeltKat Matthews
Aix-en-ProvenceMichele BortolamediMarjolaine Pierré
ElsinoreMarten Van RielKat Matthews
SwanseaHarry PalmerLizzie Rayner

Why look at it this way

Naming winners is the easy part. What interests me is the layer underneath: how tightly bunched the podiums are becoming, where the time is genuinely being won and lost across the three splits, and how much of the day-to-day variation in performance tracks with heat, humidity and wind rather than fitness alone. A 7:21 at Texas and an 8:11 at a hot, humid European Championship are not the same test, and treating conditions as a first-class variable — not an afterthought — is exactly what the dashboard is designed to make possible.

This is very much a living project. I’ll keep adding races as the 2026 season continues toward the T100 final in Qatar where I will also compete again and the Ironman World Championships, and I’ll keep refining the models behind the rankings and predictions. Have a look at the dashboard, dig into the repository, and tell me what you’d like to see next.

Data sourced from PTO Stats (Professional Triathletes Organisation) and Open-Meteo. Results summarised here are selected highlights compiled from public race reporting as of July 2026; see the dashboard for the complete, up-to-date dataset.

From Splits to Heat Strain: A Ten-Year Triathlon Study Built End-to-End with AI

Regular readers will know I have spent the last couple of months playing with AI agents to scrape and visualise publicly available sport data — first football muscle injuries, then a live dashboard for the Giro d’Italia. Those were fun, low-stakes experiments to learn what the tools could do. This post is the point where the experiment turned into something more serious: a full research study, now posted as a preprint, built almost entirely with the same family of AI tools.

I planned, conducted and executed this study — and developed the accompanying digital twin — using Claude Sonnet 5 and Claude Opus, together with Claude Cowork, Claude Code and Claude Design. Cowork orchestrated the data gathering and organisation across ten years of race results and weather records, Code built the statistical models and the digital twin engine, and Design shaped how the outputs are presented. I stayed firmly in the loop throughout as the domain expert: setting the research questions, checking the physiology and the methodology at every step, validating the data, and deciding what the numbers actually meant. I also modified some of the coding as things progressed to develop various analytics steps.

Why triathlon, why heat

Triathlon is an Olympic sport, and elite Olympic-distance racing is shaped by the interplay of swim-bike-run pacing, transition efficiency, the quality of the field, and — increasingly — the heat athletes race in. Major championships are more and more often held in hot conditions, which matters enormously for how athletes and support staff plan training, pacing, cooling and acclimatization. Despite there being a decade of publicly available race results and weather records out there, nobody had linked the two together at scale. That gap was the starting point.

The study had four aims: characterise the performance signature of a podium finish; reconstruct the thermal environment of championship venues over ten years; identify which athletes seem resilient to heat; and, building on all of that, prototype a digital twin that could support race planning.

Ten years of racing, in numbers

A few things stood out. Bike and run splits each contribute roughly equal unique variance to total race time, but the run leg is the real discriminator between the podium and the rest — it was the single most important feature in the podium-prediction models, at 45.5% importance for men and 48.9% for women. Somewhat counter-intuitively, the slope linking heat to performance did not reach statistical significance for either sex (men p=0.065, women p=0.104), which is a useful reminder not to over-interpret heat effects from headline temperature alone. DNF rates, on the other hand, told a clearer story, ranging from 12.7–16.3% for men and 11.7–18.8% for women across World Triathlon’s Green and Blue flag heat-risk categories.

Building the digital twin

The last aim — and the part I am most excited about — was turning ten years of descriptive analysis into something forward-looking. The digital twin prototype couples a performance model with a thermo-physiological heat-strain model, so it can be used to explore pacing, cooling and acclimatization decisions ahead of a race rather than just explaining results after the fact. On a temporal hold-out (training on earlier years, testing on later ones — the fairest test for something meant to inform future decisions), it achieved a mean absolute error of 0.490 z-units for men and 0.468 for women (r=0.383 and 0.295 respectively). Those are honest, prototype-grade numbers, not a finished predictive tool, and I say so explicitly in the paper.

The usual health warning

This is a preprint. It has not been peer reviewed, and I want to be upfront about that rather than let the AI-workflow angle overshadow it. The underlying data are scraped from publicly available sources, so they carry all the usual caveats about completeness and accuracy that come with that. What I can say is that the statistical approach, the modelling choices and the interpretation were all reviewed and directed by me at every stage — the AI tools accelerated the mechanics of gathering, structuring, analysing and building, but the scientific judgement was, and had to be, human. Critical thinking stays firmly the job of the person in the loop, whatever is doing the typing.

Why this matters to me

I hope this prototype is the beginning of something bigger rather than a one-off curiosity. There is an enormous amount of publicly available data across sport that nobody has the time to properly interrogate and organise — results archives, weather records, GPS feeds, injury registries. What changed for me this year is that a single person, using these AI tools well, can now plan, run and analyse a study of this scale in weeks rather than requiring a full research team and many months. I want to keep using that capability to ask more questions like this one across sports science and sports medicine, and to be transparent about the process as I develop more tools and research questions.

If you want to dig into the full methods, results and figures, the preprint is here: From Splits to Heat Strain: A Ten-Year Analysis of Performance Determinants and a Digital Twin Prototype for Olympic-Distance Triathlon Developed Using a Generative AI Workflow (DOI: 10.21203/rs.3.rs-10216961/v1). As always, comments and critique are very welcome — that is rather the point of putting it out as a preprint while it goes through formal peer review.