Your learning path
You don't need a stats degree or a finance job - just curiosity and an hour here and there. Here's the order I'd learn things in, with honest time estimates.
Prefer a structured syllabus over a path? The same material is organised into 11 free courses - each with an ordered syllabus, a downloadable code-and-data bundle, and progress you can tick off. This page and the courses agree with each other; they're two doors into one curriculum. For the full route map - including the honest timeline and what this site won't teach you - read the cornerstone learning guide.
The foundations, in order
Do these five first, in this order. They're sport-agnostic and everything else builds on them.
Install your tools
Set up Python, a code editor, and the core libraries. About 30 minutes, once.
Beginner · ~8 min
Learn the 12 pandas moves
The handful of operations that show up in every project. An afternoon.
Beginner · ~8 min
Make your first chart
Turn a table into a clean, labeled figure with matplotlib. An hour.
Beginner · ~6 min
Read an API's docs
Learn to pull live data by example, using the public NHL API. An hour.
Beginner · ~8 min
Clean a messy file
The unglamorous skill that makes everything else possible. An hour or two.
Intermediate · ~8 min
Then pick a sport
Once the foundations feel comfortable, choose whichever sport you actually care about - you'll learn faster on data you enjoy. Each sport's hub lists its tutorials from beginner to advanced.
- Baseball – start with Pull Your First MLB Data with pybaseball
- Basketball – start with Pull Your First NBA Data with nba_api
- Soccer – start with Pull Your First Match Data with StatsBomb Open Data
- Football – start with Pull Your First NFL Data with nfl_data_py
- Hockey – start with Pull Your First NHL Data from the Public NHL API
Then go deeper: statistics, then models from scratch
This is the part of the curriculum most tutorial sites don't have, and it's deliberately ordered. First you learn to describe data honestly, then to ask whether an effect is real, and only then to build predictive models - implemented in plain numpy so you see every moving part, not called from a black-box library. Each step uses real sports data as its running example.
Describe data honestly
Summary statistics, distributions, and what the mean hides.
Beginner · ~5 min
Ask what predicts winning
Correlation and regression, with their classic traps.
Advanced · ~8 min
Measure luck itself
Monte Carlo simulation: how far pure chance moves a season.
Intermediate · ~5 min
Put error bars on a claim
Bootstrap a confidence interval for home-court advantage.
Intermediate · ~9 min
Test whether an effect is real
A permutation test, built by hand.
Intermediate · ~5 min
Watch a model learn
Gradient descent from scratch in pure numpy.
Advanced · ~5 min
Predict a win, not a number
Logistic regression from scratch.
Advanced · ~7 min
Grade your model honestly
Train/test splits, cross-validation, ROC curves and AUC.
Advanced · ~6 min
After the modeling arc, the applied statistics tutorials - Elo ratings, Bayesian updating, exponentially weighted form, outlier detection, the chi-square test - each take one classic technique and put it to work on a real sports question. By then you'll recognise every ingredient.
Finish with the capstone
When you've done a few sports, tackle the capstone, Same Question, Five Sports: Quantifying Home Advantage Across Leagues. It reuses everything - APIs, cleaning, aggregation, plotting - to answer one question across five leagues.
What you'll need installed
- Python 3.10 or newer – the language everything is written in.
- A code editor – VS Code is free and excellent.
- Spreadsheet software (optional) – handy for eyeballing CSVs; Excel, Numbers, or free LibreOffice all work.
The very first tutorial walks you through all of it. See you there.