Overview
Every box score leads with points per game, but that single number treats a player who needs 25 shots to
score 30 points the same as one who needs 17. This project brings current-season NBA stats together with
shooting efficiency, so the fuller story — who's truly earning their numbers — comes through clearly.
Built as a hands-on Tableau project: source real data, clean it, build calculated fields, and design a
dashboard that tells a clear analytical story instead of just displaying a table of stats.
The question
A scoring average alone leaves a few real questions unanswered:
- Is a player's scoring volume backed by strong shot quality, or does it come at a lower value per shot?
- Which lower-usage players are quietly among the most efficient scorers in the league?
- Do the highest scorers also rank as strong playmakers and rebounders, or is their impact mainly scoring?
- Where does the league's "average" efficiency actually sit, so any player can be judged against a real baseline?
The goal wasn't just to visualize stats — it was to answer these specific questions in a way a single
glance at the dashboard could settle.
Approach
Data sourcing and cleaning. Pulled current 2025-26 per-game stats for the league's top
and most notable scorers from Basketball-Reference. The raw data came back as unstructured text rather
than a clean table, so it had to be parsed with a custom script — matching each stat token by shape
(integers, per-game decimals, shooting percentages) to correctly reconstruct every player's row,
including edge cases like missing percentages for players with zero attempts in a category.
Calculated fields. Points per game alone doesn't capture efficiency, so the dashboard
is built on True Shooting % — PTS / (2 × (FGA + 0.44 × FTA)) —
which accounts for twos, threes, and free throws in one number, plus a usage-proxy field to size each
player's footprint on offense.
Chart design, not just chart selection. Three views, each answering a different piece of
the question:
- Volume vs. Efficiency — a scatter plot, points per game against True Shooting %,
with dot size encoding usage and a league-average reference line. This is the centerpiece: it turns
"who's a good scorer" from an impression into something you can see directly in the data.
- Top Scorers — a ranked bar chart as the entry point, letting a viewer anchor on the
players they already recognize before exploring the efficiency story underneath.
- Playmaking vs. Scoring — a second scatter, assists against points with rebounds
encoded in dot size, surfacing the handful of players who contribute at a high level across multiple
categories at once, not just scoring.
Interactivity. A highlight action links the bar chart to both scatter plots — clicking
a player in Top Scorers highlights them across every view while keeping the rest of the field visible for
comparison, instead of filtering everyone else away.
Constraints
- No structured data source available. Without API access to live NBA stats, the
dataset was extracted from a rendered webpage as plain text and reconstructed programmatically into a
clean, structured table.
- A small, curated dataset over an exhaustive one. Chose ~47 of the league's most
notable players rather than all ~500 rostered players, keeping the scatter plot focused on the players
most relevant to the story rather than diluted by low-minute bench players.
Key findings
- The stars earning their volume: Luka Dončić, Nikola Jokić, and Shai
Gilgeous-Alexander sit in the rare top-right zone — high scoring volume and above-average
efficiency — clear evidence of genuine offensive dominance rather than volume alone.
- Efficiency without the spotlight: Rudy Gobert and Evan Mobley post some of the
league's highest True Shooting percentages at a fraction of the scoring volume of the names above — a
reminder that lower-usage bigs are often among the most efficient players on the floor, even when
they're rarely part of the scoring-title conversation.
- The two-way contributors: the Playmaking vs. Scoring view isolates the handful of
players putting up real numbers in both assists and rebounds alongside scoring — value that doesn't
show up in a single stat line.
- A real efficiency baseline, not a guess: the league-average reference line means any
player's dot can be judged against an actual number rather than an impression alone.
Results
Published live on Tableau Public as a fully interactive dashboard — hover for exact stats, click any
player to highlight them across all three views, and explore the data directly rather than reading a
static chart.
Dashboard not loading? Open it directly on Tableau Public ↗
Challenges & insights
- Parsing unstructured data is its own skill. The source stats text had no reliable
column structure — building a parser that correctly handled missing values (like a player with zero
3-point attempts having no 3P% to report) took as much care as the chart-building itself.
- Sort behavior isn't always automatic. Tableau's default row order doesn't
automatically follow the measure being charted — getting the "Top Scorers" bar chart to rank by points
required explicitly setting the sort field.
- Filter vs. highlight actions serve different goals. A filter action hides everything
but the selection; a highlight action keeps context while drawing attention to it. For a
comparison-driven dashboard like this one, highlight turned out to be the better fit, since it keeps
the full field visible for comparison.