Upload a spreadsheet, get the read on it: automatic column typing, ranked findings, chosen charts, Nigeria state/LGA maps, and a self-contained HTML report. Built for Kobo and DHIS2 exports.
# NHW Data Studio
Upload a spreadsheet, get the read on it, take a report away. No code, no setup
per dataset, no waiting for an analyst to be free.
```bash
pip install -r requirements.txt
streamlit run app/studio_app.py
```
Then drag any `.xlsx` / `.xlsm` / `.csv` / `.tsv` into the sidebar.
The Nigeria state and LGA maps work out of the box — boundaries are included
under CC BY 4.0, see The maps.
To see it work before pointing it at real data:
```bash
python samples/make_sample.py # a 10,180-row Kobo-style survey with planted defects
python tests/test_pipeline.py # read -> type -> analyse -> chart -> export, asserted
python tests/test_edges.py # every awkward upload we have met, + 100,000 rows
```
Both exit non-zero on failure, so `python tests/test_edges.py && echo ok` is the
check — not reading the output, which is how two red suites once got reported as
green.
On the sample that runs in about **six seconds** end to end — including drawing
both maps and building the downloadable report. The largest real workbooks in
the archive — 66,000 rows, or 576 columns across 21 sheets — take under ten.
## What it does
**Types every column** — dates, categories, numbers, binaries, identifiers, free
text, geography, empty, constant — and shows you its decisions on the Data
health page. Nothing about the analysis is hidden.
**Builds metrics, not a profile.** Columns are split into **measures** (things
you aggregate — visits, wait time, doses) and **dimensions** (things you slice by
— state, facility type, month). The top row carries those measures with
period-over-period change and a sparkline, not the record count and the
percentage of cells filled. Whether a column is totalled or averaged is a guess
from its name, it is printed on every figure, and you can change it on the page.
**Answers "what moved", not just "what is biggest".** Each measure gets three
views: the level over time, the split by dimension, and a diverging bar of the
*change* per di …