Analytics Advantage: A Visual Dive Into Historical Goal-Scoring and Point-Producing Rates
Stas Pupkov
2025-07-24
Alright, so this one's another dive into a new dataset I've been messing around with.
I pulled game-by-game data from MoneyPuck going back to the 2008–09 NHL season, cleaned it up as best I could, and threw it into Tableau to see what kind of visualizations I could build. This is very much a work in progress; not everything's perfect and I already know some of the point totals are off or incomplete. There's more cleaning and tweaking to be done, but I still wanted to share what I've got so far and give you a feel for the direction I'm going.
Here's what's in the dashboard right now:
• Expected Goals Against (xGA) vs Expected Goals For (xGF) by Team and Season: This first chart lets you pick a single team and track their expected goals for and against across seasons. I added league average reference lines that adjust year by year so you can actually compare properly over time.
• xGA vs xGF (League View): Same chart but showing every team at once. Great for spotting outliers or league-wide trends.
• Goals vs xGF (Team and Player View): This chart breaks down who was actually finishing chances on each team. It's per game, not cumulative, so you get a clearer sense of which players were the biggest contributors each season.
• Goals Against vs xGA: Same idea but focused on the defensive side.
• Team Leading Scorers: A bar chart showing top scorers for each team by season. It's not 100% accurate right now (some points aren't adding up correctly), but it still gives you a good snapshot of who led the way each year.
• League-wide Scorers: This is the same bar chart but zoomed out to cover the entire NHL. Fair warning: this one's a little messy visually, but it still gives you a sense of which seasons were loaded and who stood out.
Everything's interactive. You can filter by team, season, or just bounce around and explore what jumps out. Some of it is clunky or needs polish, but I think the core idea comes through, and there's a ton you can pull out of it if you're willing to dig.
Check it out, let me know what works, and I'll keep building from here.
Chart 1: Expected Goals For vs. Expected Goals Against (On-Ice)
This chart shows each player's on-ice expected goals for (xGF) versus expected goals against (xGA). It's a team-influenced stat, meaning players on bad teams usually look worse, and players on strong teams often get dragged up, but clear outliers still stand out.
Let's take the 2008–09 Anaheim Ducks as an example. You'll see names like Chris Pronger, Scott Niedermayer, Corey Perry, Ryan Getzlaf, and Teemu Selanne showing strong numbers, and all as key players logging major minutes. It's a good snapshot of who drove play for that team and how the roster stacked up overall. As you flip through seasons, you'll notice shifts like Lubomir Visnovsky emerging in later years, and you can get a feel for team transitions over time.
You can filter by team and season to isolate any lineup you want. The chart adjusts automatically, and the league-average lines help keep the comparisons fair.
Chart 2: League-Wide xGF vs xGA View
This is the same chart as before with on-ice expected goals for vs. against but now zoomed out to cover the entire league for a given season.
It's best used by highlighting a team or a player. Just use the highlighter tool in the top corner to filter visually.
As an example, if you look at the 2015–16 Chicago Blackhawks, you'll see guys like Duncan Keith, Brent Seabrook, and Niklas Hjalmarsson leading the way on the blue line, along with Patrick Kane, Jonathan Toews, Artemi Panarin, and Andrew Ladd up front – all big-minute, high-trust players.
This view won't tell you everything – it's not a complete player eval tool – but it gives a quick sense of how a team's top guys stack up in terms of usage and expected results. It's just a fun way to see which players were driving things during any given season.
Chart 3: Goals vs. Expected Goals For by Season and Team
This chart shows each player's goals scored vs. expected goals, broken down by team and season. Bigger logos = more goals , so you can quickly spot the main contributors.
Let's go back to the 2008–09 Ducks. Their top five scorers were Perry, Selanne, Bobby Ryan, Getzlaf, and Chris Kunitz. All five pop on the chart both visually and statistically. Flip to the next season, and you'll see Joffrey Lupul join the mix and Perry, Selanne, and Ryan start to really separate themselves from the pack.
It's a simple visual, but it's a great way to see who was actually finishing chances, who was underperforming xG, and who stood out on each roster.
Chart 4: League-Wide Goals vs. Expected Goals
Same concept as before (goals vs. expected goals) but now we're looking at the entire league for a selected season.
For example, if you look at the 2023–24 season, you'll see top finishers like Sam Reinhart, Zach Hyman, Auston Matthews, Kirill Kaprizov, and Nathan MacKinnon standing out at the top. These are the guys who were not just getting chances but burying them, too.
Use this chart to scan the league and spot elite finishers, overachievers, or anyone who turned their xG into real results.
Chart 5: Total Points by Season (Team View)
This bar chart shows total points per player by team and season. A quick heads-up: the numbers aren't 100% accurate. Not sure what's causing the mismatch just yet, but the totals are mostly correct and still useful for getting a general sense of team scoring.
You can filter by team and season to see who led the way, how scoring depth looked, and which years had more 30- to 40-point players across the lineup.
It's not perfect, but it's still a solid tool for spotting trends and comparing top producers year over year.
Chart 6: Total Points by Season (League-Wide View)
Same idea as the last chart (total points per player) but this time across the entire league for each season.
Again, a quick disclaimer: the point totals aren't fully accurate, but they're close enough to give you a general feel for league-wide scoring trends and standout seasons.
It's a bit busier visually, but still a fun way to scan which years were stacked and who really separated themselves from the pack.
Wrapping It Up
This isn't meant to be a finished product or some polished deep dive, rather it's just a collection of tools I built to explore NHL trends in a different way. The data's from MoneyPuck, the visuals are built in Tableau, and the goal here is simple: give you a way to dig around, spot patterns, and maybe notice things you wouldn't from just scrolling box scores.
Some of the numbers still need work (especially point totals), but the bones are there. Filter by team, pick a season, highlight players, mess around and see what jumps out.
I'll keep refining things as I go, but for now, hope you enjoy playing with it. As always, let me know what works, what doesn't, or if there's anything specific you want to see added next.
Thanks for checking it out.