Bundesliga attack & defence: 2014/15
While I’m really happy that the scatter graphics I’ve been churning out for the past four years continue to be so well-received, I’ve long wished for them to look a bit prettier. During last season, @bootifulgame and I produced an experimental interactive version which looked much nicer and used striped “contours” to better distinguish which teams were performing better than others. It’s taken me a while to get around to it, but I’ve adapted the code to produce a static version that I’m pretty happy with. There are three graphics here and you can click any of them to bring up a full-sized version in a new tab.
As usual, I’ll start by looking at how the number of shots taken by each club compares with those they face in return. In this graphic, the average number of shots taken per match by each club is on the horizontal and the average number of shots faced is on the vertical, so bottom right (take plenty, allow few in return) is good while top left (take few, allow plenty) is bad: Before we look at the positions of the clubs, I just wanted to flag what’s changed. The biggest structural difference between this and the old version is that rather than only shading the outlying areas of the graphic, the entire thing is now coloured in using the standard “green = good, red = bad” approach. The diagonal lines are basically contours where, in this case, the ratio between shots taken and shots faced is the same. The axes are still centred on the average and one of the diagonal lines passes right through it – this is the line where shots taken = shots faced, so everything below it contains teams who take more shots than they face, with the stripes getting greener as they get more dominant, and everything above it contains teams who face more than they take. Some observations to give you the idea:
- Three clubs – Bayern, Dortmund and Leverkusen – were significantly more dominant than the rest, particularly when it came to restricting their opponents’ shots.
- Hertha took significantly fewer shots than anyone else – 2 fewer per match than the next most shot-shy side – but maintained a relatively tight defence.
Now let’s look at attacking alone. The horizontal axis stays the same as in the graphic above, but now the vertical shows the average number of shots needed to score each league goal. Therefore bottom right is good (taking lots of shots and needing fewer efforts to convert) and top left is bad: The contours now show sides who scored goals at the same rate, so clubs in a greener stripe have scored more goals per match and vice versa.
- Hamburg and Paderborn struggled to convert their chance this season, needing around twice as many chances as Bayern to score each goal on average, which at least partially explains their respective battles with relegation.
- Wolfsburg were the division’s most clinical side – narrowly more efficient in front of goal than the champions – and requiring almost five fewer attempts to convert than wasteful Dortmund, who will be hoping that this season was a one-off.
- They may not have taken very many shots, but Hertha were at least one of the division’s sharper sides at netting the ones they did carve out.
Finally let’s look at the defensive situation – basically take the above chart and replace the word “taken” for “faced” on both axes. Now top left is good – facing fewer shots and able to soak up more per goal conceded – and bottom right is bad:
The stripes now pick out clubs who have conceded at the same rate.
- The incredibly restrictive defences of Bayern, Dortmund and Leverkusen stretch this graphic out, allowing over three shots fewer than the next tightest defence.
- Borussia Mönchengladbach put in a truly exceptional – but very different – defensive performance of their own this season: allowing the third most shots at their goal but absorbing these literally twice as effectively as the average Bundesliga side.
A quick note on the stripes
I’m still experimenting with how wide to make each stripe and to tie them to something tangible. At the moment I’ve picked numbers that give a sensible number of stripes, but I’ll make this more explicit in future posts.