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.
If you only read one part of this page, read this. Everything below is the proof.
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 groupBasketball 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 SWITCHJalen 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 efficiencyThe 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.
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.
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.
Each game's margin + the running total.
Net result for each coverage, per 100 poss.
| # | Group | Players | Poss | Scored | Allowed | Net |
|---|---|---|---|---|---|---|
| 1 | BENCH_MOB | McBride · Shamet · Alvarado · Clarkson · Robinson | 88 | 122.2 | 103.8 | +18.4 |
| 2 | STARTERS | Brunson · Bridges · Anunoby · Hart · Towns | 156 | 125.9 | 107.7 | +18.2 |
| 3 | CLOSING | Brunson · Bridges · Anunoby · Hart · Towns | 91 | 121.7 | 110.0 | +11.7 |
| Player | Pos | Min | Points | Shooting eff. (TS%) | Workload (USG%) |
|---|---|---|---|---|---|
| Jalen Brunson | G | 158 | 102 | 56.5% | 24.2% |
| Mikal Bridges | G | 151 | 74 | 64.3% | 15.6% |
| OG Anunoby | F | 124 | 65 | 65.4% | 12.7% |
| Karl-Anthony Towns | C | 138 | 63 | 64.8% | 13.9% |
| Josh Hart | G | 123 | 57 | 55.2% | 14.6% |
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.
Loads the per-game box scores. Deliberately mixes in 4 broken rows to test the safety net.
ingestion.pyChecks every row against strict rules. Bad data is quarantined, not silently passed through.
validation.pyComputes shooting efficiency, workload, and net ratings — the real basketball math.
analytics.pyWrites a plain-language brief a coach could read with zero technical background.
reporter.pyRenders the 5 charts above in the official Knicks palette.
visualize.pyPython 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.
| Record | Why it was rejected |
|---|---|
| NYK_15 | 18 made shots on 4 attempts — physically impossible |
| NYK_03 | missing the required minutes-played field |
| N/A | player ID was empty (null) |
| NYK_02 | minutes-played was negative (−7.2) |
The quick version for anyone scanning portfolios — the competencies this codebase exercises end to end.
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.