Dataset
Cholera outbreak line list and district population — 2024
975 cases recorded one at a time across sixteen weeks and three districts, shipped with the population they came from, so attack rates and case fatality have denominators and age standardisation is possible.
- Rows
- 987
- Variables
- 10
- Period
- 2024-05-06 to 2024-08-26
- Licence
- CC BY 4.0
- Completeness
- 97%
Standards and methodologies
Files
Files are versioned by filename. A corrected release ships as .v2.csv rather than replacing the file in place, so an analysis pinned to v1 keeps reproducing.
Data dictionary
| Variable | Type | Description | Allowed values |
|---|---|---|---|
case_id | string | Pseudonymous case identifier, one per case. | — |
district | categorical | District where the case was recorded. The key that joins the line list to the population file. | Nord, Centre, Sud |
age_yearsyears | integer | Age in completed years. A handful of infant records hold months instead. | — |
age_band | categorical | Age band, matching the bands the population file is published in. | 0-4, 5-14, 15-44, 45+ |
sex | categorical | Sex of the case as recorded. | f, m |
onset_date | date | Date symptoms began. The field an epidemic curve is built on, and the one most often missing. | — |
admitted | boolean | Whether the case was admitted to a treatment centre. | true, false |
admission_date | date | Date of admission. Blank where the case was not admitted. | — |
outcome | categorical | Outcome at the reporting cut-off. Blank where the case was still admitted. | recovered, died |
population | integer | People in the district and age band, from the most recent projection. The denominator for every rate in this dataset. | — |
Provenance
Data quality
- Every record is generated. No real person is described and these figures must never be cited as a real outbreak.
- The population file is what makes the line list analysable. 975 cases in a population of 145,000 is an overall attack rate of 6.7 per 1,000; without the denominator the same line list supports a curve and nothing else.
- Age standardisation is the point of the three districts. Crude attack rates are 7.94, 6.47 and 5.51 per 1,000 for Nord, Centre and Sud. Standardised to the combined population they are 7.25, 6.60 and 5.95 — so Nord falls, the other two rise, and the Nord to Sud gap narrows from 2.43 to 1.30 per 1,000. About half the apparent difference between the worst and best district is age structure, not risk.
- The age structures differ sharply and that is deliberate. Nord is camp-like with 22% of its population under five; Sud is older at 11%. Cholera attack rates are highest in the youngest, so the district with more children looks worse before any adjustment.
- Case fatality is 3.90% overall, well above the 1% that Sphere and WHO treat as the target for a well-managed outbreak, and it is 6.30% in Nord against 2.00% in Centre. Onset-to-admission delay is the strongest predictor in this data, and Nord's cases arrive latest.
- Cases are episodes, not people. A person who fell ill twice would appear twice, and the line list carries no identifier that would let you tell.
Known issues
- Forty-seven cases (4.8%) have no onset date. An epidemic curve built without them is missing a week of cases in the wrong places, and imputing from the admission date shifts the curve later.
- In one district, onset and admission fall on the same day for most admitted cases, because the register is back-filled from the admission book. That district's onset-to-admission delay reads as zero and its epidemic curve is really an admission curve.
- Eleven infant records hold age in months rather than years, which puts a two-year-old in the 15-44 band if age_years is used without a range check.
- One case was still admitted at the reporting cut-off and has no outcome. It is neither a death nor a recovery, and case fatality must state its denominator.
- The population is a projection, not a census, and it is the same figure for the whole outbreak period. Displacement during an outbreak changes the denominator and this file cannot show it.
Worked examples
Python
The epidemic curve and what the missing dates do to it
Builds the curve by week of onset, shows what excluding and imputing the missing dates each do to the peak, and separates the district whose curve is really an admission curve.
Described here; the notebook is still being written.
Case fatality and delay to care
Computes case fatality against the Sphere target with its denominator stated, and relates it to onset-to-admission delay by district and age band.
Described here; the notebook is still being written.
R
Attack rates, crude and age-standardised
Joins the line list to the population, computes age-specific and crude attack rates by district, and standardises directly to the combined population.
Described here; the notebook is still being written.