Africa Solar Energy Suitability Tool — 8-factor scoring model with interactive Streamlit map
# Solar Energy Suitability Tool
Interactive web application that evaluates ~5 000 global locations for utility-scale solar farm suitability using an 8-factor scoring model.
## Features
- **8-factor scoring** -- Solar Irradiance, Terrain, Grid Proximity, Land Suitability, Temperature Penalty, Atmospheric Clarity, Water Availability, Country Risk
- **Hard-constraint exclusion layer** -- automatically eliminates sites with steep slopes (>15 deg), extreme altitude (>3 000 m), permafrost, wetlands, water bodies, and dense urban zones
- **Non-linear scoring curves** -- domain-informed piecewise/logarithmic functions instead of naive min-max normalization
- **Multiplicative penalty system** -- catastrophically bad critical factors tank the overall score (not just reduce it linearly)
- **Tier classification** -- Prime / Strong / Moderate / Marginal / Unsuitable
- **Data confidence indicator** -- per-point quality score shown as marker opacity
- **Interactive Folium map** -- click any point for detailed breakdown
- **Radar chart + waterfall chart** -- visualize factor contributions on click
- **Top 25 table** -- sortable, downloadable CSV export
## Quick Start
```bash
cd solar-suitability-tool
pip install -r requirements.txt
streamlit run app.py
```
The app starts instantly with realistic synthetic data. No API keys required.
## Fetching Real Data
Click **"Fetch Real NASA Data"** in the sidebar to pull actual 30-year climatology averages from the NASA POWER API and elevation from Open-Elevation. This takes approximately 30 minutes for ~5 000 grid points and caches the results to `data/raw_data.parquet`.
## Architecture
```
app.py Streamlit UI (map, sidebar, detail panel, top-N table)
scoring.py 8 score_*() functions + composite scoring + penalties + tiers
exclusions.py apply_exclusions(df) -- 7 hard constraints with reason codes
data_pipeline.py Grid generation, API fetching, demo-data synthesis, caching
land_classifier.py Land- …