About NBAAnalytic
I'm C. B. Zakarian, and I built this site because I got tired of basketball arguments that ended at "it just feels like." If a claim can be checked against data, I'd rather check it than win the argument by talking louder.
NBAAnalytic is mine — I run it on my own, with no team, network, or league signing the checks. It started as a folder of Python scripts I kept re-running to settle things with friends, and at some point I figured the scripts and charts were more interesting than the takes they were supposed to back up. So I started publishing the working, not just the conclusion.
What this site is
It's a writing project about NBA numbers — the ratings, the models, and the charts I build to understand the league. It runs in six lanes: plain-English stat explainers, hands-on tutorials for pulling and charting data yourself, longer data deep-dives, basketball history looked at again with modern numbers, player & team analysis, and methodology & projections.
One rule holds all of it together: I don't make up numbers. Every specific stat on this site came out of a public source, and the script that produced it is published next to the article so you can run it yourself and tell me if I got it wrong.
How I work
Everything quantitative here traces back to a short list of public, well-documented sources:
- The NBA Stats API, which I hit in Python through the open-source nba_api package. This is the backbone — box scores, advanced metrics (True Shooting, usage, offensive/defensive rating, the Four Factors), shot locations, clutch splits, game logs.
- Basketball-Reference for historical seasons, Win Shares, Box Plus/Minus, and anything that predates the modern tracking era.
- NBA.com/stats for cross-checking and for the official definition of a stat when I want to be sure I'm measuring the thing I think I'm measuring.
The routine is boring on purpose: a small script pulls exactly the data a piece needs, I cache the raw response so re-runs don't hammer the source, I compute the metrics in code, and I render any figures with matplotlib so the chart and the table can't quietly disagree. Every table and chart carries its source and the date I pulled it, because a stat is a snapshot — the as-of date tells you which one. The bundled datasets behind the exhibits are served openly at /data/data_layer/ (start with SOURCE.txt, which documents each file's provenance), so you can re-run any piece's numbers against the same files I used.
When a number reflects a current or recent season, it came from a live pull on the date noted. When I state a formula, a rule change, or a piece of history, I just state it; those don't change between page loads. If a source is ever down, I'll leave a visible note rather than guess. You will not find a made-up figure standing in for a real one anywhere on this site.
What I'm skeptical of
A lot of what passes for analysis is a single number wearing a confident face. I don't trust raw plus-minus over a handful of games, I don't trust one player's clutch line as proof of a "clutch gene," and I'm wary of any all-in-one metric quoted to two decimal places as if it settled the matter. Small samples lie, defense barely shows up in the box score, and "the eye test" and "the analytics" usually aren't enemies — they're two instruments that should be reconciled, not picked between. When I'm not sure, I'll say so and show you the spread instead of pretending the uncertainty isn't there.
Corrections
Data work is humbling and I get things wrong. If you spot a miscalculation, a mislabeled axis, or a stat that doesn't reconcile, email me at contact@nbaanalytic.com and I'll fix it and note the correction. Getting it right matters more to me than getting there first.
Independence and disclosures
NBAAnalytic isn't affiliated with, endorsed by, or sponsored by the NBA or any of its teams. The site is supported by display advertising and uses analytics so I know what's worth writing more of; the details are in the Privacy Policy. Nothing here is betting or financial advice — see the Disclaimer.
One author, several sites
I'm C. B. Zakarian. I write a family of data sites — sports analytics on one side, Roblox's trading economies on the other — all built the same way: public data, open methods, real charts, no invented numbers. The range isn't as odd as it looks; a Pythagorean win expectation and a virtual pet's trade value are the same problem in different clothes — noisy public numbers that reward careful measurement. Every site carries my name because I'd rather stand behind the work than hide behind a brand.