An automated end-to-end data pipeline and interactive dashboard for visualizing WorldPop demographic data across Kenya and Uganda.
# RTOS Population Dashboard: WorldPop 2025 (Kenya & Uganda)
A small, reproducible **data pipeline + interactive dashboard** that turns
WorldPop 2025 age- and sex-structured population rasters
for **Kenya** and **Uganda** into district-level insights you can filter by
**country, age group and sex**.
> **Approach (short version).** A config-driven pipeline streams the WorldPop
> 1 km GeoTIFFs and GADM Level-2 district boundaries straight from their public
> URLs (cached locally), then aggregates every age/sex raster to districts with
> a single rasterized zonal reduction: the polygons are burned to the WorldPop
> grid **once** per country and every file is reduced with one vectorised
> `np.bincount`, so cost is O(pixels) no matter how many districts or files.
> The result is a tidy parquet table that a Streamlit dashboard reads instantly
> to drive a choropleth map, population pyramid and public-health indicators.
---
## Results at a glance
Produced by a full end-to-end run (WorldPop 2025, 1 km, both countries):
| Country | Population (2025) | Children 0-14 | Working age 15-64 | Elderly 65+ | Age-dependency ratio | Median age | Districts (GADM L2) |
|---------|------------------:|--------------:|------------------:|------------:|---------------------:|-----------:|--------------------:|
| Kenya | 56,889,831 | 36.5% | 60.5% | 3.0% | 65 | 21.0 | 300 |
| Uganda | 50,611,017 | 43.3% | 54.5% | 2.2% | 84 | 17.9 | 166 |
Uganda's markedly younger structure (median age ~18, 43% children) concentrates
demand on maternal/child health, immunisation and schooling, and implies rapid
future labour-force growth. That is exactly the kind of signal this dashboard
surfaces per district. *(Totals align with published WorldPop 2025 magnitudes.)*
---
## Quick start
```bash
# 0. Prerequisite: uv (
docs.astral.sh). Or use plain python3 + venv.
# 1. One command: set up env, build data, launch dashboard
./run.sh
# ...or step by step:
make setup # create .venv (P …