A data project, in plain English

Why did the Knicks sweep Cleveland?

I pulled the real box scores from New York's 4-0 win in the 2026 Eastern Conference Finals, built a Python + SQL pipeline to analyze them, and turned the numbers into a story anyone can follow — no basketball-stats degree required. Here's what the data said, and how I built it.

Result
4-0 sweep
Avg win margin
+19.3 pts
Best 5-man group
+18.4 net
Bad rows caught
4 quarantined
Read this in 30 seconds

Three things the data found

If you only read one part of this page, read this. Everything below is the proof.

1

The bench was just as good as the stars.

New York's second unit — McBride, Shamet, Alvarado, Clarkson, Robinson — outscored Cleveland by about 18 points for every 100 trips down the floor, basically tied with the famous starting five. A team whose bench is that good never has a weak minute.

+18.4 net rating · the team's best group
2

One defensive tactic broke Cleveland.

Basketball teams can guard a play three different ways. When the Knicks used the coverage called "ICE," they crushed Cleveland by 21 points per 100 possessions. When they used "SWITCH," it was a dead heat. That 21-point gap was the single biggest lever in the whole series.

+21.1 with ICE vs −0.4 with SWITCH
3

Brunson carried the load — everyone else was deadly efficient.

Jalen Brunson (the series MVP) finished roughly 1 in every 4 of the team's plays and still scored well. Around him, three teammates shot above 64% "True Shooting" — elite efficiency — without needing the ball in their hands.

3 rotation players above 64% shooting efficiency
The series

Four games, four wins — and the lead kept growing.

The Knicks didn't just win; they pulled away. The final game was a 37-point blowout — the most lopsided Conference Finals closeout for New York in three decades.

Game 1
Madison Square Garden
115–104 OT
NYK +11
May 19, 2026
Game 2
Madison Square Garden
109–93
NYK +16
May 21, 2026
Game 3
Rocket Mortgage FieldHouse
121–108
NYK +13
May 23, 2026
Game 4
Rocket Mortgage FieldHouse
130–93
NYK +37
May 25, 2026
The findings, visualized

The same story, in five charts.

Each chart is generated automatically by the pipeline in the official Knicks colors. Read the plain-English takeaway first, then the detail. New to basketball stats? The cheat sheet below decodes every term.

Plain-English cheat sheet

Net Rating
Points a 5-man group scores minus points it gives up, per 100 trips down the floor. +18 means they outscored the opponent by ~18 every 100 possessions.
True Shooting % (TS%)
Scoring efficiency that properly credits 3-pointers and free throws. League average is ~58%. Above 64% is elite.
Usage Rate (USG%)
How often a player is the one who finishes the play — the shot, free throw, or turnover. High usage = the offense runs through him.
ICE / DROP / SWITCH
Three ways to defend the pick-and-roll. ICE walls the ball toward the sideline; DROP keeps the big man back; SWITCH trades defenders.
Series box — Knicks sweep Cleveland 4-0
Chart 1 · The sweep

The margins got bigger every game.

What you're looking at: each game's final score and how much the Knicks won by, left to right.
  • Average win margin: +19.3 points across four games
  • The trend: the lead grew from +11 in Game 1 to +37 in Game 4
  • The read: Cleveland never found an adjustment that worked
5-man lineup net rating
Chart 2 · Best lineups

The bench unit was the team's best group.

What you're looking at: how badly each 5-man group beat Cleveland, per 100 possessions. Taller bar = bigger beating.
  • Bench mob (+18.4): McBride, Shamet, Alvarado, Clarkson, Robinson
  • Starters (+18.2): Brunson, Bridges, Anunoby, Hart, Towns
  • The read: a second unit this strong is a luxury most contenders don't have — Shamet alone hit 8 of 9 threes across Games 3 and 4
Defensive scheme impact
Chart 3 · Best defense

ICE coverage was the difference-maker.

What you're looking at: how the Knicks did with each of their three defensive tactics. Orange = net result.
  • ICE: +21.1 per 100 — the coverage Cleveland never solved
  • DROP: +6.0 — fine in spots, situational
  • SWITCH: −0.4 — essentially a coin flip
  • The swing: 21 points per 100 between their best and worst tactic
Player efficiency — usage vs true shooting
Chart 4 · Who did what

Brunson did the heavy lifting; the role players were ruthless.

What you're looking at: each player's workload (how far right) vs. their shooting efficiency (how high up). Top-right is the dream zone.
  • Brunson: 102 points, highest workload — the engine and series MVP
  • Anunoby: 65% efficiency on low usage — quietly the most efficient scorer
  • Towns & Bridges: both above 64% — premium scoring without needing the ball
Data quality guardrail summary
Chart 5 · The data check

Four bad rows were caught before they touched a single number.

What you're looking at: the automated quality check. Real data feeds break — this proves the pipeline catches it instead of silently reporting garbage.
  • A player credited with 18 made shots on only 4 attempts — impossible
  • A row missing the minutes-played field entirely
  • A row with no player ID and one with negative minutes
  • The point: all four were quarantined and logged — none reached the analysis
Explore the numbers

Hover the charts. Scan the tables.

The two charts below are interactive — built with Chart.js, pulling from the same data. The tables underneath show the full numbers behind the findings.

How the lead grew

Each game's margin + the running total.

Live
Read: Game 4's +37 was the steepest jump of the series — a team pulling away, not hanging on.

Defense by tactic

Net result for each coverage, per 100 poss.

Live
Read: The 21-point gap between ICE and SWITCH is the biggest tactical lever in the dataset.
Top 5-man groups — sorted by net rating
#GroupPlayersPossScoredAllowedNet
1BENCH_MOBMcBride · Shamet · Alvarado · Clarkson · Robinson88122.2103.8+18.4
2STARTERSBrunson · Bridges · Anunoby · Hart · Towns156125.9107.7+18.2
3CLOSINGBrunson · Bridges · Anunoby · Hart · Towns91121.7110.0+11.7
Top scorers — workload vs. efficiency
PlayerPosMinPointsShooting eff. (TS%)Workload (USG%)
Jalen BrunsonG15810256.5%24.2%
Mikal BridgesG1517464.3%15.6%
OG AnunobyF1246565.4%12.7%
Karl-Anthony TownsC1386364.8%13.9%
Josh HartG1235755.2%14.6%
How I built it

The engineering behind the brief.

This is the part that matters for a hiring manager: the analysis above isn't a spreadsheet. It's a real pipeline that takes raw data, checks it, computes the metrics, and produces the report — automatically, every time.

Step 1

Ingest

Loads the per-game box scores. Deliberately mixes in 4 broken rows to test the safety net.

ingestion.py
Step 2

Validate

Checks every row against strict rules. Bad data is quarantined, not silently passed through.

validation.py
Step 3

Analyze

Computes shooting efficiency, workload, and net ratings — the real basketball math.

analytics.py
Step 4

Report

Writes a plain-language brief a coach could read with zero technical background.

reporter.py
Step 5

Visualize

Renders the 5 charts above in the official Knicks palette.

visualize.py
The same metrics, written in SQL

Python is the production path. This SQL mirror proves the exact same metric definitions run on any data warehouse — Snowflake, BigQuery, Postgres — without a rewrite. Click a tab to see each query.

sql/01_lineup_net_rating.sqlPostgreSQL 16

The safety net that catches bad data
Bad rows caught & quarantined4
Clean player rows analyzed32
Clean lineup rows analyzed16
RecordWhy it was rejected
NYK_1518 made shots on 4 attempts — physically impossible
NYK_03missing the required minutes-played field
N/Aplayer ID was empty (null)
NYK_02minutes-played was negative (−7.2)
What this shows I can do

The skills behind the project.

The quick version for anyone scanning portfolios — the competencies this codebase exercises end to end.

Data Engineering
Pythondata pipelinesdata contractsJSON
SQL
PostgreSQLCTEswindow functionsLAG / RANK
Analytics
efficiency metricsnet ratingcohort compare
Visualization
matplotlibChart.jsbrand design
Data Quality
validation rulesquarantineunit tests
Communication
plain-English briefsstakeholder framing
Check the work

Sources — verify it yourself.

The box scores and series result are real and public. Open any link and check the numbers against this page. The derived and illustrative layers are labeled honestly — nothing is dressed up as more precise than it is.

What's real vs derived

  • Real — every per-player box-score line (minutes, FG / 3P / FT, points, assists, rebounds, turnovers) from ESPN; the series result, scores, dates, and ECF MVP from NBA.com / Basketball-Reference.
  • Derived — team possessions (FGA + 0.44·FTA − ORB + TOV) and 5-man lineup net ratings, anchored to observed minutes overlap and team plus/minus. Directional — not Second-Spectrum precise.
  • Illustrative — defensive-scheme labels (ICE / DROP / SWITCH) are a film-study approximation; teams don't publish per-possession scheme tags.
  • Synthetic — 4 deliberately broken rows injected to prove the data-contract validation quarantines bad data. Tagged, and never mixed into any result.