About ten hours a week. Each week ends with something on GitHub.
| Week | Focus | Do this | Done when |
|---|---|---|---|
| 1 | Setup + NumPy | Reuse the uv project, shortlist your dataset, learn NumPy basics, start Essence of Linear Algebra | arr.shape and broadcasting exercises work |
| 2 | pandas | McKinney ch 4–8, 10 or pandas Getting Started. Write 3 cleaning functions with tests | Functions in src/ and tests in tests/ pass |
| 3 | SQL | SQLBolt basics, selected ThoughtSpot window and join lessons, then DuckDB on your CSV | Top-N-per-group query and join-cardinality check run |
| 4 | Your dataset | Confirm data you sourced. Write a schema/source manifest and cleaning decision log | Eight+ meaningful checks pass. Log has 3+ decisions |
| 5 | Publish | README with question, answer and limitation. Charts that answer questions. A locked fresh-process run | A stranger can clone and reproduce it |
New words in this chapter, such as array, broadcasting, dataframe and point-in-time, are explained where they first appear below and collected in Terms in plain English.
Work in the Chapter 1 project. Add the SQL, plotting and test dependencies, then commit the changed project files:
uv add duckdb matplotlib
uv add --dev pytestAfter writing the Week 2 tests in tests/test_*.py, run uv run --locked pytest from the project
root. Use pytest's getting-started guide
for discovery and assertions. Start the linear-algebra videos with chapters 1–4, ending with
"Matrix multiplication as composition". Later lessons are optional, inside the same 50-hour budget.