# Codebook — joined dataset v0.2

Built 2026-07-17. County-level linked dataset connecting data-center community
actions with local zoning-law text features. Join key: 5-digit county FIPS.
License: CC BY 4.0. Upstream attribution:

- datacentertracker.org (UC Berkeley) — community actions, CC BY 4.0, snapshot 2026-07-17
- LOCUS-v1 (LocalLaws/LOCUS-v1, arXiv:2606.19334) — local-law text scores,
  CC BY 4.0, static snapshot 2026-07-17. Scores are model-derived (as-of date
  applies; treat as baseline features, not time-varying).
- Census 2024 county gazetteer; 2020 place-by-county and county-subdivision
  crosswalks (public domain), snapshot 2026-07-17

## events.csv — one row per community action (local + statewide)

| column | description |
| --- | --- |
| `event_id` | DCT record id (stable upstream key) |
| `date` | action date as reported upstream (validated ≈ event date, ±2 weeks noise) |
| `state` | state postal code as reported (DC rows may carry 'US') |
| `county_fips` | resolved 5-digit FIPS; '\|'-separated when the jurisdiction spans counties; empty = statewide or unresolved |
| `geo_method` | how geography was resolved: county:<resolver method> \| jurisdiction:county \| jurisdiction:place \| statewide \| unresolved (review queue) |
| `action_type` | DCT action types (list; 'moratorium' is the DV-relevant value) |
| `status_raw` | verbatim upstream status (19+ values, messy) |
| `status_bin` | normalized: enacted / proposed / failed / other (see pipeline/join/build.py:_STATUS_BINS) |
| `scope` | local \| statewide (statewide actions are not county events) |
| `jurisdiction` | verbatim jurisdiction string |
| `company` | company named in the action, if any |
| `issue_category` | '\|'-separated issue tags |
| `summary` | upstream narrative summary (evidence text) |
| `sources` | '\|'-separated source URLs (provenance) |
| `data_source` | upstream collection channel |
| `dct_last_updated` | upstream last-verified date |
| `snapshot_date` | our raw snapshot the row derives from |

## counties.csv — one row per county (incl. PR municipios)

| column | description |
| --- | --- |
| `county_fips` | 5-digit county FIPS (join key) |
| `county_name` | official gazetteer name |
| `state` | state postal code |
| `lat / lng` | county internal-point centroid (gazetteer) |
| `n_actions` | count of local actions resolved to this county |
| `n_moratorium_enacted` | moratorium actions with status_bin=enacted |
| `n_moratorium_proposed` | moratorium actions with status_bin=proposed |
| `n_moratorium_failed` | moratorium actions with status_bin=failed |
| `first_moratorium_enacted` | earliest enacted-moratorium date (DV onset) |
| `last_moratorium_enacted` | latest enacted-moratorium date |
| `zoning_n_chunks` | substantive LOCUS Zoning chunks attributed to the county (county gov + municipalities; multi-county cities count in each county) |
| `zoning_n_jurisdictions` | distinct jurisdictions contributing those chunks |
| `zoning_opacity` | mean LOCUS opacity score over those chunks |
| `zoning_enforcement_discretion` | mean enforcement-discretion score |
| `zoning_paternalism` | mean paternalism score |
| `zoning_salience` | mean problem-salience score |
| `aland_sqmi` | land area, sq mi (gazetteer) |
| `population` | total population (ACS 2023 5-year B01003) |
| `median_hh_income` | median household income, USD (ACS B19013) |
| `pct_bachelors_plus` | share of age-25+ with bachelor's or higher (ACS B15003) |
| `pop_density` | population / aland_sqmi |
| `rep_margin_2024` | 2024 presidential GOP share minus DEM share (tonmcg county results) |
| `total_votes_2024` | 2024 presidential total votes cast |
| `industrial_price_c_kwh` | state-level industrial electricity price, cents/kWh (EIA EPM 5.6.B latest YTD; state-level by construction) |

## Known caveats

- Left truncation: DCT coverage before 2025 is thin; risk-period start for
  event-history analysis should be ≈2025-01 with sensitivity checks.
- CT rows resolved via legacy county FIPS (geo_method county:ct_legacy);
  flag CT in sensitivity analyses (Census now uses planning regions).
- LOCUS zoning scores cover 2244 counties; zero-chunk counties
  are missing data, not zeros.
- 62 events are geographically unresolved (review queue).
- ACS via 2023 5-year table-based summary file (keyless API retired);
  suppression sentinels converted to NaN. Election results via tonmcg
  aggregation; AK reports by election district, so AK county margins are
  missing. Industrial price is state-level and year-to-date (EPM 5.6.B) —
  not a county-varying regressor.

