cassionData Analysis

Back to the lessonLesson 3 of 8What Sphere asks that a ladder does not

Fifteen litres, thirty minutes, five hundred metres

The same deck as the downloads, rendered as a page. Start the slideshow to present it full screen — arrow keys or a click advance one slide, Escape leaves.

Slides · PDFSlides · PowerPoint

  1. Slide 1 / 19

    What this lesson covers

    • What Sphere adds to the ladder
    • Two unit errors, and only one of them is visible
    • Queueing is inside the round trip, and that is a problem
    • Distance is not in the file at all
    • Report the distribution against the threshold
    • What comes next
    Speaker notes
    13.4% of these households fall below the Sphere minimum for quantity. Two of the columns that produce that number carry unit errors, and one of them moves a household up a ladder rung rather than off the end of a chart.
  2. Slide 2 / 19

    What Sphere adds to the ladder

    StandardThresholdIn this file
    QuantityAt least 15 litres per person per daylitres_per_person_day
    Queueing timeNo more than 30 minutesInside round_trip_minutes
    DistanceNo more than 500 m to the nearest pointNot recorded; time is the proxy
    Speaker notes
    The JMP ladders classify a service. The Sphere minimum standards put numbers on it, and the three that a water programme is judged on are:
  3. Slide 3 / 19

    What Sphere adds to the ladder — In Python

    import pandas as pd
    
    households = pd.read_csv("wash-household-survey-2024.v1.csv")
    litres = households["litres_per_person_day"]
    
    print(f"median {litres.median():.1f} L/p/d")
    print(f"below Sphere minimum: {(litres < 15).mean():.1%}")
    print(litres.describe().round(1))
    Speaker notes
    The thresholds are minimums for survival with dignity, not targets. A programme at 15.2 litres has met the standard and is not doing well, and a report that prints only the share above the threshold hides where the distribution actually sits.
  4. Slide 4 / 19

    What Sphere adds to the ladder — In R

    library(dplyr)
    
    households |> summarise(
      median = median(litres_per_person_day),
      below_15 = mean(litres_per_person_day < 15),
      n = n()
    )
  5. Slide 5 / 19

    What Sphere adds to the ladder

    • 13.4% below 15 litres — with a median of 23.7
    Speaker notes
    13.4% below 15 litres, with a median of 23.7. Both numbers belong in the report: the first is the standard, the second says the median household has about half again what it needs and the problem is distribution rather than total supply.
  6. Slide 6 / 19

    Two unit errors, and only one of them is visible — In Python

    print(litres.nlargest(8).round(1).tolist())
  7. Slide 7 / 19

    Two unit errors, and only one of them is visible — In R

    households |> slice_max(litres_per_person_day, n = 8) |>
      select(household_id, household_size, litres_per_person_day)
  8. Slide 8 / 19

    Two unit errors, and only one of them is visible — In Python

    suspect = households[litres > 80]
    recovered = suspect["litres_per_person_day"] / suspect["household_size"]
    print(recovered.round(1).describe())
    Speaker notes
    Eleven households are above 80 litres per person per day, up to 277.6. That is implausible in this setting and it is not a keying error — it is the household's total consumption entered in a per-person column. Divide by household size and every one of them lands in a normal range.
  9. Slide 9 / 19

    Two unit errors, and only one of them is visible — In R

    households |>
      filter(litres_per_person_day > 80) |>
      mutate(recovered = litres_per_person_day / household_size) |>
      summarise(min = min(recovered), max = max(recovered))
  10. Slide 10 / 19

    Two unit errors, and only one of them is visible

    • The second error is the dangerous one — because it makes a value smaller rather than larger
    Speaker notes
    The second error is the dangerous one, because it makes a value smaller rather than larger. Eleven households have collection time entered in hours, so a 90-minute round trip is recorded as 2. There is no outlier to catch: 2 minutes is a perfectly ordinary value, and 85 households legitimately report under 8 minutes.
  11. Slide 11 / 19

    Two unit errors, and only one of them is visible — In Python

    short = households[households["round_trip_minutes"].between(1, 8)]
    print(f"{len(short)} households report a round trip of 1 to 8 minutes")
    print(short["water_source"].value_counts())
  12. Slide 12 / 19

    Two unit errors, and only one of them is visible — In R

    households |> filter(between(round_trip_minutes, 1, 8)) |> count(water_source)
  13. Slide 13 / 19

    Two unit errors, and only one of them is visible

    • An error that moves a value into the normal range cannot be found by looking for outliers — It has to be found by a…
    Speaker notes
    An error that moves a value into the normal range cannot be found by looking for outliers. It has to be found by a rule that ties two fields together — a round trip under ten minutes to a source that is not on premises and not a public tap in the same community deserves a query — or it has to be prevented at entry with a unit label on the form. Its consequence here is not a wrong mean. It is a wrong rung: each of those households is classified as basic service when it is limited.
  14. Slide 14 / 19

    Queueing is inside the round trip, and that is a problem — In Python

    print("round_trip_minutes includes walking, queueing and return.")
    print(f"over 30 minutes: {(households['round_trip_minutes'] > 30).mean():.1%}")
    print("Queue time alone: not collected. Recommend adding it to the next round.")
    Speaker notes
    Sphere sets queueing separately from collection time because they have different causes and different fixes. A long walk needs a new water point; a long queue needs more taps at the point that exists, or a longer opening time. This survey records only the round trip, which contains both. So the honest report says what it can and cannot separate:
  15. Slide 15 / 19

    Queueing is inside the round trip, and that is a problem — In R

    # One line in the limitations section beats a queue statistic that is a walk.
    Speaker notes
    39.3% exceed thirty minutes, and none of that number can be attributed to queueing or to distance without the split. Say which of the two you cannot see, because the corrective action differs and a programme that guesses will build the wrong thing.
  16. Slide 16 / 19

    Distance is not in the file at all

    • Where a standard names a unit you do not have, report the proxy under the proxy's own name — Reporting round-trip time…
    Speaker notes
    The 500-metre standard needs a coordinate or a measured distance, and this survey has neither. Time is a proxy for it and a poor one: thirty minutes is a kilometre on a road and three hundred metres up a ravine. Where a standard names a unit you do not have, report the proxy under the proxy's own name. Reporting round-trip time as though it were the distance standard is how an assessment concludes that a community is within 500 metres of water when it is nowhere near it.
  17. Slide 17 / 19

    Report the distribution against the threshold — Example

    Water quantity, 2,403 households
    
      Median                       23.7 L/person/day
      Below Sphere minimum (15 L)  13.4%    323 households
      Below 7.5 L                   2.2%     54 households
    
      Collection time
      Over 30 minutes              39.3%    944 households
      Queue time not separated from walking time in this round.
      Distance not recorded; time is the proxy and is not equivalent.
    
      11 records held household total litres in the per-person column and were
      corrected; 11 held collection time in hours and were corrected.
    Speaker notes
    The threshold, the distribution, and the corrections stated with counts. A cleaning log is not a confession — it is what lets a reader see that 13.4% is after two known errors were fixed rather than before.
  18. Slide 18 / 19

    What comes next

    • Quantity and time say whether water arrived and how hard it was to get.
    Speaker notes
    Quantity and time say whether water arrived and how hard it was to get. They say nothing about whether it was safe to drink, and the next lesson is the one where the denominator changes under you.
  19. Slide 19 / 19

    Where this goes next

    Read the full lesson, with runnable code Back to the lesson