2025 Formative research ETL pipeline.
# Niger FEM Survey — Analysis Pipeline
This folder sits **outside** `niger_app/` and is the only place the raw PII dataset is touched.
The Streamlit app reads only the pre-aggregated CSVs written to `niger_app/data/`.
```
/
├── pipeline/ ← this folder
│ ├── config.py — paths + survey constants
│ ├── utils.py — shared weighted aggregation helpers
│ ├── agg_helpers.py — helpers for reading long-format CSVs in app pages
│ ├── run_pipeline.py — master runner
│ ├── etl_access.py — Health Access & Supply
│ ├── etl_statements.py — Statement Agreement
│ ├── etl_family_planning.py — Family Planning
│ ├── etl_personality.py — Personality & Influencers
│ └── etl_personas.py — Personas (k-modes clustering)
| |__ validate_pipeline.py - Validates raw data and outputs
│
└── niger_app/
├── app.py
├── data/ ← pre-aggregated CSVs written here (safe to publish)
│ ├── drivers_barriers.csv (already present)
│ ├── radio_summary.csv (already present)
│ ├── statement_labels.csv (already present)
│ ├── access_stockouts.csv ← generated by pipeline
│ ├── access_stockout_responses.csv ← generated by pipeline
│ ├── access_travel.csv ← generated by pipeline
│ ├── access_affordability.csv ← generated by pipeline
│ ├── access_composite.csv ← generated by pipeline
│ ├── statements_heatmap.csv ← generated by pipeline
│ ├── fp_funnel.csv ← generated by pipeline
│ ├── fp_timing.csv ← generated by pipeline
│ ├── fp_methods.csv ← generated by pipeline
│ ├── fp_reason_use.csv ← generated by pipeline
│ ├── fp_intent.csv ← generated by pipeline
│ ├── fp_nonuse_reasons.csv ← generated by pipeline
│ ├── personality_life_goals.csv ← generated by pipeline
│ ├── personality_ro …