Dataset
WASH household survey — 2024
2,403 synthetic household interviews across three districts covering water source, collection time, quantity, water quality testing, sanitation and handwashing — enough to place every household on the JMP service ladders.
- Rows
- 2,403
- Variables
- 15
- Period
- 2024-04 to 2024-06
- Licence
- CC BY 4.0
- Completeness
- 99%
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 |
|---|---|---|---|
household_id | string | Pseudonymous household identifier, unique except where a household was surveyed twice. | — |
district | categorical | District the household was surveyed in. Recorded inconsistently by one enumerator team. | — |
community | string | Community code within the district, in the form XX-01. | — |
survey_date | date | Date of the household interview. | — |
household_size | integer | Number of people usually eating and sleeping in the household. The denominator for litres per person per day. | — |
water_source | categorical | Main source of drinking water. Improved and unimproved sources are mixed here on purpose; classifying them is the exercise. | piped-into-dwelling, piped-into-yard, public-tap, borehole, protected-well, protected-spring, unprotected-well, unprotected-spring, tanker-truck, surface-water |
round_trip_minutesminutes | integer | Round-trip time to collect water including queueing. Zero for water on premises. The JMP basic/limited split is 30 minutes. | — |
litres_per_person_daylitres | float | Estimated household water use divided by household size. The Sphere minimum standard is 15 litres per person per day. | — |
water_treated_at_home | boolean | Whether the household reports treating its drinking water. | true, false |
free_residual_chlorine_mglmg/L | float | Free residual chlorine measured at the point of collection. The operational target range is 0.2 to 0.5 mg/L. Blank where not tested. | — |
ecoli_cfu_100mlCFU/100mL | integer | E. coli count per 100 mL. Blank where not tested. JMP risk classes are <1 safe, 1-10 low, 11-100 moderate, >100 high. | — |
sanitation_facility | categorical | Type of sanitation facility the household uses. | flush-to-sewer, flush-to-septic, vip-latrine, pit-latrine-with-slab, pit-latrine-no-slab, hanging-latrine, open-defecation |
shared_sanitation | boolean | Whether the facility is shared with other households. A shared improved facility is limited service, not basic. | true, false |
handwashing_facility | categorical | Handwashing facility observed by the enumerator, not reported by the household. | fixed-facility, mobile-facility, no-facility |
soap_observed | boolean | Whether soap or a cleansing agent was present at the facility. Basic hygiene service requires both a facility and soap. | true, false |
Provenance
Data quality
- Fully generated. No real household is described and no community code refers to a real place.
- The JMP drinking-water ladder is not a property of the source alone. An improved source more than 30 minutes round trip is limited service, not basic — about a quarter of these households sit on limited service for that reason alone, and an analysis that classifies on source type only will miss every one of them.
- Water quality is tested on roughly a third of households, so quality indicators have a smaller denominator than access indicators. Reporting both against the full sample overstates coverage of testing.
- Reference figures for a correct analysis: about 13% of households fall below the Sphere minimum of 15 litres per person per day, about 39% exceed a 30-minute round trip, open defecation is about 13%, and basic hygiene service is about 34%.
Known issues
- One enumerator team wrote the Nord-Ouest district name four different ways, including lowercase and unhyphenated variants. Grouping by district without normalising produces six districts instead of three and quietly splits the worst-performing one.
- About 530 households report treating their water but have no chlorine measurement recorded. This is a cross-field inconsistency, not a missing-at-random value, and dropping those rows removes households that treat their water more often than average.
- Eleven records hold collection time in hours rather than minutes, and fourteen hold litres for the whole household rather than per person. Both look plausible in isolation and only stand out against household size.
- Nine households were surveyed twice on different days under different identifiers.
Worked examples
Python
JMP service ladder classification
Places every household on the drinking water, sanitation and hygiene ladders, then reports coverage by district with the disaggregation the SDG indicators require.
Described here; the notebook is still being written.
Water quality against chlorination
Tests whether free residual chlorine above 0.2 mg/L predicts E. coli risk class, and quantifies how much of the sample can actually answer the question.
Described here; the notebook is still being written.
R
JMP service ladder classification
The same three ladder classifications built with dplyr case_when, producing an equivalent coverage table.
Described here; the notebook is still being written.