cassionData Analysis

Course · Intermediate · Communication and Delivery

Reproducible Analysis Workflows

Make the analysis rerunnable by the person who replaces you — version control, pinned environments, parameterised reports and a project layout that survives a handover.

PythonR18 h8 lessons

What you will be able to do

  • Lay out a project so raw data is read-only, derived data is disposable and code is the only thing edited
  • Use git on analysis work, and keep beneficiary data out of a repository permanently
  • Pin an environment so a colleague's laptop produces your numbers
  • Find and remove the things that make a rerun differ — the clock, the seed, the locale, the file order
  • Produce twelve district reports from one parameterised template
  • Write a handover a successor can act on, and a check that fails loudly when the upstream export breaks

Standards and methodologies

OECD DAC evaluation criteriaCore Humanitarian Standard (CHS)UNICEF indicator definitions

An analysis that only you can rerun is a draft. The test is not whether it works — it is whether it still works in eleven months, on someone else’s laptop, after you have left, when the source file has changed and nobody remembers which sheet the numbers came from.

This course is unusual in having a worked example that is not a dataset. The platform you are reading is the case study, and every claim in the last lesson can be checked against this repository.

Three of those claims shape the whole course.

Twenty dataset files, seventeen generator scripts, and regenerating all of them changes nothing. pnpm datasets:generate rewrites every CSV from a seeded script, and git status afterwards reports zero modified files. That is what “reproducible” means operationally: rerunning is a verification step, not just a production step.

Twenty test files and 4,212 assertions, run before every build. They check things a schema cannot — that a declared row count matches the file on disk, that a French lesson references the French figure, that every published course ships both PDF editions. The rule they encode: any field naming a shipped file needs a test beside it, because a path in frontmatter is a string and nothing in a build can tell whether it points at anything.

A schema that refuses non-synthetic data. dataQuality.synthetic must be true or the build fails, which makes “no record traces to a real person” a property of the repository rather than a promise in a note — the same move as generating the data instead of collecting it.

Both Python and R throughout, with uv and renv as the environment tools and Quarto for parameterised reports. You need Data Cleaning and Validation first: this course is about making a pipeline rerunnable, and the pipeline it assumes you have is the one that course builds.

Start the course — Three kinds of file, and only one of them is editable

Practice

Reading the lessons is not the same as having done the work. Each of these applies the course to a dataset it did not teach on.

Progress

Enrolling is free and only records your progress — the whole course is readable without it.

Take it offline

The whole course as a typeset PDF — every lesson, every code example, the data dictionary and the indicator definitions. Generated from the same source as this page.

The LaTeX source ships alongside each PDF, so an organisation can rebrand the handout or fold a lesson into its own training pack.