# khuenlm/nuclear-reactor-siting architecture

> Architecture diagram of the GitHub repository khuenlm/nuclear-reactor-siting, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/khuenlm/nuclear-reactor-siting
- Repository: https://github.com/khuenlm/nuclear-reactor-siting

## Overview

This repository is a geospatial decision-support project for ranking U.S. counties as potential nuclear-reactor sites. The documented workflow combines public datasets into county-level features, screens unsafe counties, scores the remaining candidates with MCDA, and presents ranked-site maps as a policy recommendation. A parallel modeling branch uses classification, validation, and multi-objective optimization to assess candidate rankings. Relationships among the documented stages come from the README; the sampled source also confirms the optimization script’s candidate-data input. Notebook internals beyond the excerpts were not inspected.

Main entry points: [`processed_data/candidates.csv`](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/candidates.csv) (Candidate counties), [`processed_data/candidates_ranked.csv`](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/candidates_ranked.csv) (Ranked candidates), [`processed_data/final_dataset.csv`](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/final_dataset.csv) (County dataset), [`notebooks/cleaning`](https://github.com/khuenlm/nuclear-reactor-siting/tree/main/notebooks/cleaning) (Data cleaning)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_cleaning["Data cleaning"]
  node_county_features["County features<br/>[merge.ipynb]"]
  node_final_data[("County dataset<br/>[final_dataset.csv]")]
end

subgraph group_analysis["Screening and scoring"]
  node_masking["Safety screening<br/>[mask.ipynb]"]
  node_candidates[("Candidate counties<br/>[candidates.csv]")]
  node_mcda["MCDA scoring<br/>[scoring.ipynb]"]
  node_ranked_data[("Ranked candidates")]
end

subgraph group_modeling["Model evaluation"]
  node_logistic["Logistic regression"]
  node_validation["Model validation<br/>[validation.ipynb]"]
  node_random_forest["Random forest"]
  node_moo["Multi-objective optimization<br/>[step4_moo.py]"]
  node_moo_notebook["MOO exploration<br/>[moo.ipynb]"]
end

subgraph group_outputs["Maps and analysis"]
  node_eda["Exploratory analysis<br/>[eda.ipynb]"]
  node_importance["Feature importance chart"]
  node_exclusion_map["Exclusion map"]
  node_ranked_map["Ranked-site map"]
  node_pareto_map["Pareto visualizations"]
end

node_analyst(("Project analyst"))
node_public_data[("Public datasets")]

node_analyst -->|"prepares inputs"| node_cleaning
node_public_data -->|"provides datasets"| node_cleaning
node_cleaning -->|"cleans and joins"| node_county_features
node_county_features -->|"merges counties"| node_final_data
node_final_data -->|"screens counties"| node_masking
node_masking -->|"writes candidates"| node_candidates
node_candidates -->|"scores candidates"| node_mcda
node_mcda -->|"ranks candidates"| node_ranked_data
node_analyst -->|"explores data"| node_eda
node_ranked_data -.->|"summarizes weights"| node_importance
node_candidates -->|"maps exclusions"| node_exclusion_map
node_ranked_data -->|"maps rankings"| node_ranked_map
node_candidates -->|"optimizes candidates"| node_moo
node_ranked_data -->|"compares objectives"| node_moo_notebook
node_final_data -.->|"models candidates"| node_logistic
node_logistic -->|"evaluates model"| node_validation
node_validation -->|"continues evaluation"| node_random_forest
node_moo_notebook -.->|"visualizes Pareto tiers"| node_pareto_map

click node_public_data "https://github.com/khuenlm/nuclear-reactor-siting/tree/main/raw_data"
click node_cleaning "https://github.com/khuenlm/nuclear-reactor-siting/tree/main/notebooks/cleaning"
click node_county_features "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/cleaning/merge.ipynb"
click node_final_data "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/final_dataset.csv"
click node_masking "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/mask.ipynb"
click node_candidates "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/candidates.csv"
click node_mcda "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/scoring.ipynb"
click node_ranked_data "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/candidates_ranked.csv"
click node_logistic "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/logistic_regression.ipynb"
click node_validation "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/validation.ipynb"
click node_random_forest "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/random_forest.ipynb"
click node_moo "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/step4_moo.py"
click node_moo_notebook "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/moo.ipynb"
click node_eda "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/eda/eda.ipynb"
click node_importance "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/mcda_importance_chart.py"
click node_exclusion_map "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/county_exclusion_map.py"
click node_ranked_map "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/ranked_sites_map.py"
click node_pareto_map "https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/moo_pairwise_colored.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cleaning,node_county_features,node_final_data toneBlue
class node_masking,node_candidates,node_mcda,node_ranked_data,node_public_data toneAmber
class node_logistic,node_validation,node_random_forest,node_moo,node_moo_notebook toneMint
class node_eda,node_importance,node_exclusion_map,node_ranked_map,node_pareto_map toneRose
class node_analyst toneIndigo
```

## Components

### Data preparation

- [Data cleaning](https://github.com/khuenlm/nuclear-reactor-siting/tree/main/notebooks/cleaning): `notebooks/cleaning`
- [County features](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/cleaning/merge.ipynb): `notebooks/cleaning/merge.ipynb`
- [County dataset](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/final_dataset.csv): `processed_data/final_dataset.csv`

### Screening and scoring

- [Safety screening](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/mask.ipynb): `notebooks/modeling/mask.ipynb`
- [Candidate counties](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/candidates.csv): `processed_data/candidates.csv`
- [MCDA scoring](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/scoring.ipynb): `notebooks/modeling/scoring.ipynb`
- [Ranked candidates](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/processed_data/candidates_ranked.csv): `processed_data/candidates_ranked.csv`

### Model evaluation

- [Logistic regression](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/logistic_regression.ipynb): `notebooks/modeling/logistic_regression.ipynb`
- [Model validation](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/validation.ipynb): `notebooks/modeling/validation.ipynb`
- [Random forest](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/random_forest.ipynb): `notebooks/modeling/random_forest.ipynb`
- [Multi-objective optimization](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/step4_moo.py): `step4_moo.py`
- [MOO exploration](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/moo.ipynb): `notebooks/modeling/moo.ipynb`

### Maps and analysis

- [Exploratory analysis](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/eda/eda.ipynb): `notebooks/eda/eda.ipynb`
- [Feature importance chart](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/mcda_importance_chart.py): `notebooks/mcda_importance_chart.py`
- [Exclusion map](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/county_exclusion_map.py): `notebooks/county_exclusion_map.py`
- [Ranked-site map](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/ranked_sites_map.py): `notebooks/ranked_sites_map.py`
- [Pareto visualizations](https://github.com/khuenlm/nuclear-reactor-siting/blob/main/notebooks/modeling/moo_pairwise_colored.py): `notebooks/modeling/moo_pairwise_colored.py`

### Other components

- **Project analyst**
- [Public datasets](https://github.com/khuenlm/nuclear-reactor-siting/tree/main/raw_data): `raw_data`

## Connections

- Project analyst → Data cleaning: prepares inputs (evidence: `README.md`)
- Public datasets → Data cleaning: provides datasets (evidence: `README.md`)
- Data cleaning → County features: cleans and joins (evidence: `README.md`)
- County features → County dataset: merges counties (evidence: `README.md`)
- County dataset → Safety screening: screens counties (evidence: `README.md`)
- Safety screening → Candidate counties: writes candidates (evidence: `README.md`)
- Candidate counties → MCDA scoring: scores candidates (evidence: `README.md`)
- MCDA scoring → Ranked candidates: ranks candidates (evidence: `README.md`)
- Project analyst → Exploratory analysis: explores data (evidence: `README.md`)
- Ranked candidates → Feature importance chart: summarizes weights
- Candidate counties → Exclusion map: maps exclusions (evidence: `notebooks/county_exclusion_map.py`)
- Ranked candidates → Ranked-site map: maps rankings (evidence: `notebooks/ranked_sites_map.py`)
- Candidate counties → Multi-objective optimization: optimizes candidates (evidence: `step4_moo.py`)
- Ranked candidates → MOO exploration: compares objectives (evidence: `README.md`)
- County dataset → Logistic regression: models candidates
- Logistic regression → Model validation: evaluates model (evidence: `README.md`)
- Model validation → Random forest: continues evaluation (evidence: `README.md`)
- MOO exploration → Pareto visualizations: visualizes Pareto tiers
