About NBAAnalytic
I started NBAAnalytic because I was tired of basketball arguments that died at "it just feels like." If a claim can be checked against data, it should be — so on this site, it is.
I'm an independent basketball analyst. I don't work for a team, a network, or the league. I write here in my spare time because the public data has never been richer and the tooling has never been more accessible — and turning that data into clear, honest analysis is genuinely fun. [Replace this with your name and background.]
What this site is
NBAAnalytic is a writing project about NBA statistics, analytics, and data science. It lives in six lanes: plain-English stat explainers, hands-on tutorials for pulling and charting data yourself, data deep-dives, basketball history re-examined with modern numbers, player & team analysis, and methodology & projections.
The unifying rule is simple: no invented numbers. If you read a specific stat here, I pulled it from a public source, and the script that produced it is published alongside the article so you can re-run it yourself.
Methodology and data sources
Everything quantitative on this site comes from one of a small number of public, well-documented sources:
- The NBA Stats API, accessed in Python through the open-source nba_api package. This is the backbone — team and player box scores, advanced metrics (True Shooting, usage, offensive/defensive rating, the Four Factors), shot-location data, clutch splits, and game logs.
- Basketball-Reference for historical seasons, Win Shares, Box Plus/Minus, and anything that predates or sits outside the modern tracking era.
- NBA.com/stats for cross-checking and for definitions of official stats.
My standard workflow looks like this:
- Pull. A small, self-contained Python script fetches exactly the data an article needs, with proper request headers, timeouts, and retry/backoff so it behaves politely with the API.
- Cache. Raw responses are saved locally so re-runs don't hammer the source and results are reproducible.
- Compute and chart. I derive the metrics in code and render any figures with matplotlib, so the chart and the table always agree.
- Cite. Every table and chart carries its source and the date the data was retrieved. Stats are snapshots in time; the as-of date tells you which snapshot.
Where a number reflects a current or recent season, it came from a live pull on the date noted. Where I state a historical fact, a formula, or a rule change, I state it directly — those don't change between page loads. If a particular source is ever unreachable, I would rather leave a visible "to-do" than guess, and you'll never find a fabricated figure standing in for a real one.
Corrections
Data work is humbling; mistakes happen. If you spot an error — a miscalculation, a mislabeled axis, a stat that doesn't reconcile — please tell me at contact@nbaanalytic.com and I'll fix it and note the correction. Getting it right matters more than being first.
Independence and disclosures
NBAAnalytic is not affiliated with, endorsed by, or sponsored by the National Basketball Association or any of its teams. The site is supported by display advertising and uses analytics to understand what's worth writing more of; details are in the Privacy Policy. Nothing here is betting or financial advice — see the Disclaimer.