Research Hub · For quantitative researchers
Download everything behind the Research Hub, see exactly what each number means, and cite it. Every measure comes from a published, open dataset; this page says which.
Downloads
Files open in Excel, Google Sheets, R, Stata, SPSS, Python or any GIS. Facility IDs match across files, so the yearly heat file joins to the facility file on id.
| File | What's in it | Type | Size |
|---|---|---|---|
| echobridge-research-data.zip | Everything below in one file | Start here | 1.4 MB |
| facilities-all.csv | 4,247 facilities (1,865 prisons, 2,240 jails, 142 ICE), 45 columns | CSV | 842 KB |
| facilities-colorado.csv | 65 Colorado facilities, same columns | CSV | 15 KB |
| heat-days-by-year.csv | Hot days per year, 1982–2020, for 4,078 facilities (long format: one row per facility-year) | CSV | 3.1 MB |
| facilities.geojson | Map points for GIS (QGIS, ArcGIS, R sf, Python geopandas) | GeoJSON | 3.7 MB |
| data-dictionary.csv | Every column: meaning, unit, source, years | CSV | 4 KB |
| facilities-all-noheader.csv | Same as facilities-all.csv without the three comment lines at the top | CSV | 842 KB |
Cite
Cite the original datasets. They did the measuring; this site combines them.
Mothes & Hunt (2023). Mapping environmental injustices within the U.S. prison system (v2023-1) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.8306856
Tuholske, C., et al. (2024). Nature Sustainability. https://doi.org/10.1038/s41893-024-01293-y
EchoBridge Initiative (2026). EchoBridge Research Hub: environmental hazards and heat at U.S. carceral facilities [Data compilation]. Accessed [date].
Data dictionary
Also in data-dictionary.csv. Hazard measures cover the 1,865 prisons only; heat measures cover all facilities.
| Column | Meaning | Unit | Source | Years |
|---|---|---|---|---|
| id | Facility ID. HIFLD facility ID for prisons and jails; UCLA ID with a prefix for ICE. | HIFLD / UCLA COVID Behind Bars | ||
| name | Facility name as listed in the source. | HIFLD / UCLA | ||
| kind | prison (state or federal), jail (local), or ice (immigration detention). | This site | ||
| city | City. | HIFLD / UCLA | ||
| state | Two-letter state code. | HIFLD / UCLA | ||
| county | County. | HIFLD | ||
| type | Operator type in the source (State, Federal, Local, County, etc.). | HIFLD / UCLA | ||
| security | Security level in the source (prisons only). | HIFLD via Mothes & Hunt | ||
| population | Population reported in the source. Not current; check the state's own counts. | people | HIFLD | 2020–2022 |
| capacity | Capacity reported in the source. | beds | HIFLD | 2020–2022 |
| lon | Longitude (WGS84). | degrees | HIFLD / Tuholske / UCLA | |
| lat | Latitude (WGS84). | degrees | HIFLD / Tuholske / UCLA | |
| location_exact | 1 = exact point from the source; 0 = recovered from a projected grid, typically about 5 km off, up to 10 km (some jails). | This site | ||
| lst_avg | Average daytime land surface temperature, June–August. | °C | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); NASA MODIS | 2013–2023 |
| flood_risk | Share of the facility and a 1 km buffer in a FEMA high-risk flood zone. | % | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); FEMA NFHL | 2021 |
| wildfire_risk | Average Wildfire Hazard Potential in the facility and a 1 km buffer. | index | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); USDA Forest Service | 2020 |
| percent_tree_cover | Average tree canopy in the facility and a 1 km buffer. | % | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); USGS NLCD | 2016 |
| avg_pm25 | Average yearly fine particulate matter. | µg/m³ | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); NASA SEDAC | 2015–2016 |
| mean_ozone | Average yearly ozone. | ppb | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); NASA SEDAC | 2015–2016 |
| pesticides | Pesticide applied nearby. | kg/ha/yr | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); NASA SEDAC | 2015 |
| trafficProx | Traffic proximity: vehicle counts on major roads within 500 m divided by distance. | score | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); FHWA | 2018 |
| npl_prox | Superfund proximity: sites within 5 km divided by distance (km), summed. 0.2 or more = at least one site within 5 km. | score | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); EPA | 2022 |
| rmp_prox | Chemical accident risk (RMP) facility proximity, same method. | score | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); EPA | 2023 |
| haz_prox | Hazardous waste facility proximity, same method. | score | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license); EPA FRS | 2023 |
| climate_score / exposure_score / effects_score | Group averages of the percentiles above. | 0–100 | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license) | |
| risk_p | Overall risk percentile (average of the three groups, ranked). | percentile | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license) | |
| *_p | Percentile of the measure among the 1,865 prisons (risk-oriented: higher = worse). | percentile | Mothes & Hunt 2023, doi:10.5281/zenodo.8306856 (MIT license) | |
| h28 | Average days per year when the daily maximum wet-bulb globe temperature reached 28°C (about 82°F). | days/yr | Tuholske et al. 2024, Nature Sustainability, doi:10.1038/s41893-024-01293-y | 2016–2020 |
| d28 | Change in those days per year, from a straight-line trend. | days | Tuholske et al. 2024, Nature Sustainability, doi:10.1038/s41893-024-01293-y | 1982–2020 |
| d26 | Same as d28, at 26°C. | days | Tuholske et al. 2024, Nature Sustainability, doi:10.1038/s41893-024-01293-y | 1982–2020 |
| h28_p, d28_p, d26_p | Percentile of the heat measure among all 4,247 facilities on this site. | percentile | This site, from Tuholske et al. 2024, Nature Sustainability, doi:10.1038/s41893-024-01293-y |
Start in code
The CSVs start with three comment lines that name the sources; both snippets skip them.
R
library(readr)
f <- read_csv("facilities-all.csv", comment = "#")
co <- subset(f, state == "CO" & kind == "prison")
summary(co$lst_avg) # summer ground temperature, °C
heat <- read_csv("heat-days-by-year.csv")
# join yearly heat to facilities
library(dplyr)
co_heat <- heat %>% inner_join(co, by = "id")Python
import pandas as pd
f = pd.read_csv("facilities-all.csv", comment="#", dtype={"id": str})
co = f[(f.state == "CO") & (f.kind == "prison")]
print(co.lst_avg.describe()) # summer ground temperature, °C
heat = pd.read_csv("heat-days-by-year.csv", dtype={"id": str})
co_heat = heat.merge(co, on="id")Before you analyze
Every heat and air measure describes the place around the building, not the air inside a cell. No public dataset of indoor prison temperatures exists for Colorado.
Population and capacity come from 2020–2022 federal files. For current counts use the state's own reports; Colorado's are monthly.
For jails where location_exact is 0, the point was recovered from a map grid: typically about 5 km off, sometimes up to 10 km. Don't use those for distance-to-hazard work without checking.
A 90th percentile means worse than 90% of facilities in the file, not a health threshold. Report the raw value with it.
The yearly heat series runs 1982–2020. For recent summers, pull daily records for nearby weather stations (Colorado station IDs are in the Research Hub's climate topic).
A few facilities in these files have closed since the source year (in Colorado: Cheyenne Mountain in 2020, Colorado Correctional Center in 2022). Check before counting.
Ideas