Granular Penguins

Everyone who has looked at hockey statistics is familiar with how they’re typically presented: as averages and totals.

From stats.hockeyanalysis.com

From War-On-Ice

These metrics are aggregate values- taking all of the available data and combining them into one value.  They are useful when doing direct comparisons between players.

I wanted to see how individual player statistics looked when disaggregated.  Unfortunately, disaggregated data presented in a spreadsheet isn’t very appealing or easy to digest.

The two visualizations I made for this post revolve around Corsi For and Against.  I also need to introduce some new statistics I included to give some context to how the players performed.

  • CorT%: How a player’s on-ice teammates performed, expressed in Corsi For %*
  • CorC%: How a player’s on-ice opponents performed, expressed in Corsi For %*
  • TmCF60: The quality of a player’s on-ice teammates, measured in Corsi For*+
  • TmCA60: The quality of a player’s on-ice teammates, measured in Corsi Against*+
  • CF60 RelTM: The difference between a player’s CF60 and his teammate’s (TmCF60)+
  • CA60 RelTM: The difference between a player’s CA60 and his teammate’s (TmCA60)+
  • OppCF60: The quality of a players’ opponents, measured in CF60+
  • OppCA60: The quality of a players’ opponents, measured in CA60+
  • Ozfo%: % of faceoffs a player took in the offensive zone
  • Dzfo%: % of faceoffs a player took in the defensive zone

*weighted by the amount of time spent on-ice with the player

+standardized per 60 minutes of ice time


First we’ll look at how well players did generating shot attempts.

Corsi For Dashboard

The top graph shows how well a player generated shots in the context of the quality of his teammates or opponents.  You can switch the X axis between quality of teammate (CorT%)  and quality of competition (CorC%), and filter the players by position or name using the drop-down menus on the right.

The bottom graph breaks down the context of a player’s performance into finer detail using the other metrics mentioned above.


To illustrate, I will rehash the Goc-Sutter fanboy wars of 2013-15.

Brandon “Famous Last Name” Sutter has a reputation as a defensive player. “200 foot game”, “hard on the puck”, “always on the right side of the puck”… you pick the zero-calorie expression, it’s been said about him. Sutter also has a habit of scoring pretty goals from the right circle on the rush.

Marcel Goc, on the other hand, has flown under the radar during his career, playing bottom 6 minutes for Nashville and Florida before coming to Pittsburgh (subsequently traded).  He’s known as a defensive player that doesn’t really offer much offensively.

Using the statistics discussed above, we can compare the two.

Sutter outperforms Goc in pure CF60, but let’s dig in a bit further.  Sutter plays with better teammates (as indicated by TmCF60), and more offensive zone starts (as indicated by Ozfo%).  Both players under perform compared to their teammates,  but Sutter more so than Goc. This indicates that both players are not gifted offensively, and that the difference in CF60 RelTM might be wholly explained by the difference in quality of teammate.

We can also use the disaggregated player data to show where each of the player’s games appear on a scatter plot.

The eye test tells us that there is only a small difference in how Goc and Sutter’s games are distributed.

Given this information, Goc and Sutter appear to be approximate equals when it comes to generating shot attempts.


Now for Corsi Against.  Given Sutter’s reputation as a player that excels defensively, we should expect him to outperform Goc in suppressing shots against.

The first thing to realize here is that high up on the bar chart is a bad place to be.  It’s pretty clear that Goc suppresses shots against much better than does Sutter.  There is a full 10 CA/60 difference between the two, despite Sutter’s superior linemates (indicated by TmCA60). Goc also outperforms his teammates defensively, while Sutter under performs his.  The two remaining variables, quality of competition and zone starts, are equal. Sutter is also 228th out of 296 forwards in Corsi Against (minimum 400 minutes 5v5)

Clearly, Sutter is not the defensive stalwart he’s made out to be.

The scatter plot of the players’ disaggregated game data reinforces that conclusion.  It is clear that more of Goc’s games are on the lower portion of the plot, indicating lower shots against.


Linked below are the visualization dashboards. Feel free to make your own comparisons and draw your own conclusions.

(Note: if you filter by player name or position, you have to filter on the top and bottom charts separately)

References: War-On-Ice , Stats.HockeyAnalysis