Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Data Center-Driven Energy Burden and Inequality

Data Centers → Energy Burden → Inequality

Replication code and data for quantifying how data-center load growth affects wholesale electricity prices, transmission cost allocation, and downstream energy burden and distributional outcomes across the United States.


Zones and Data Center Locations

Study zones and data center locations


Transmission Cost Allocation (Interactive Sankey Diagrams)

Static previews are shown below. Click any diagram to open the interactive version, which includes a year selector for 2020–2025.

If the hosted links are unavailable, the same files can be downloaded from figures/ in this repository and opened directly in a browser — they are self-contained HTML and require no server.

PJM 2025 Sankey MISO 2025 Sankey

ERCOT 2025 Sankey CAISO 2025 Sankey


1. System Requirements

Software Dependencies

Package Version Purpose
Python 3.11.x Runtime (matplotlib 3.4.x is incompatible with Python 3.12+)
numpy 1.26.4 Numerical computation
pandas 2.3.1 Data manipulation
matplotlib 3.4.3 Static plotting
proplot 0.9.7 Publication-quality figures
plotly 6.2.0 Interactive Sankey diagrams
scipy 1.15.2 Statistical functions
statsmodels 0.14.5 Econometric models
linearmodels 6.1 Panel data / IV regression
openpyxl 3.1.5 Excel I/O
kaleido 1.1.0 Plotly static image export
csdid 0.2.9 Callaway-Sant'Anna staggered DiD
drdid 1.1.6 Doubly-robust DiD
adjustText 1.3.0 Label placement
xlsxwriter 3.2.9 Excel output
requests 2.32.3 LEHD QWI bulk download (employment step 01 only)

Full pinned versions are in requirements.txt.

Tested On

OS Version
macOS Sequoia 15.5 (Apple Silicon)
Ubuntu 24.04 LTS (x86_64, AWS EC2 t2.xlarge)

Hardware

  • No GPU or non-standard hardware required.
  • Recommended: 16 GB RAM for the full energy burden pipeline (Pipeline 3 processes ~790 MB of DOE LEAD data across 51 states).
  • A standard laptop or desktop is sufficient.

2. Installation Guide

Instructions

# 1. Create a conda environment with Python 3.11
conda create -n dc_replication python=3.11 -y
conda activate dc_replication

# 2. Clone this repository
git clone https://github.com/PEESEgroup/Data-Center-Equality.git
cd Data-Center-Equality

# 3. Install all dependencies
pip install -r requirements.txt

Typical Install Time

Under 5 minutes on a normal desktop computer with a broadband internet connection.


3. Demo

A quick demo can be run using the pre-computed results included in results/. The figure scripts (Pipeline 5) read these pre-computed outputs and generate publication figures without needing to run the upstream regression and simulation pipelines.

Instructions

cd Data-Center-Equality

# Generate all figures from pre-computed results
for fig in figure_scripts/f*.py; do
    python "$fig"
done

# Figure 5 (five panels plus the composite)
cd figure_scripts/fig5_panels
for p in p5?_*.py; do python "$p"; done
python compose.py
cd ../..

# Figure 6 (Sankey diagrams)
python r03_sankey.py

Expected Output

Figures are saved to figures/ in subdirectories organized by paper section:

Subdirectory Contents
01-2/ Price impact scatter plots (Fig 3), cross-sectional analysis (Fig 4)
03/ Sankey diagrams regenerated by r03_sankey.py (Fig 6); the four interactive HTML files linked above live at the top level of figures/
04/ Energy burden bubble charts, income scatter, rural scatter (Fig 8)
05/ Figure 5 panels and the composed figure, written by figure_scripts/fig5_panels/
06/ Sensitivity analysis and waterfall diagrams (Figs 10-12)

Expected Run Time

Under 2 minutes on a normal desktop computer.


4. Instructions for Use

Full Reproduction

All scripts should be run from the repository root as the working directory. The five pipelines must be run in order, as later pipelines depend on outputs from earlier ones.

Pipeline 1: Bartik IV Regression (Sections 3-4)

Estimates the causal effect of data center capacity on wholesale electricity prices using a Bartik shift-share instrumental variable strategy.

# Step 1: Share exogeneity tests
python r02_share_exogeneity_test.py

# Step 2: Core IV regressions (ISO zones + non-ISO cities)
python r02_bartik_iv_workflow.py --iso ALL
python r02_city_bartik_iv_workflow.py

# Step 3: Summary tables
python r02_summary.py

# Step 4: Cross-sectional heterogeneity analysis
python r02_cross_sectional.py

Outputs: results/r2_share_exogeneity/, results/r3_summary/, results/r3_cross_sectional/

results/r3_summary/table5_zone_projected_2030.csv extends the 2025 zone impacts to 2030 using published capacity projections; it ships with the repository and is read by figure_scripts/f10_theta_sensitivity.py and f11_waterfall.py. The projection step itself is not scripted, so this one table is provided rather than regenerated.

Pipeline 2: Transmission Cost Allocation (Section 4)

Decomposes transmission costs into load-growth attribution and existing-load allocation for residential, data center, and other customers.

python r03_sankey.py

Outputs: results/sankey/{ISO}_attribution.csv, results/sankey/{ISO}_allocation.csv

Pipeline 3: Energy Burden Analysis (Section 5)

Counterfactual simulation of how DC-induced price increases propagate to household energy burdens across U.S. counties. Scripts must be run in the order shown below.

# Step 1: ISO-level retail cost breakdown
python r04_ISO_breakdown.py

# Step 2: Baseline and DC-scenario energy burdens (can run in parallel)
python r04_bench_burden.py
python r04_dc_burden.py

# Step 3-6: Downstream analyses (must run sequentially after Steps 1-2)
python r04_income_ami.py
python r04_compare_poverty.py
python r04_rural_merge.py
python r04_state_merge.py

Outputs: rider/bench/, rider/dc/, rider/compare/, rider/income/, rider/rural/

Pipeline 4: Employment Analysis (Section 6)

State-level analysis of data center employment effects using Census QWI data: a Bartik shift-share instrumental variable design, descriptive panel fixed effects regressions, a comparison of identification strategies, and the data-processing/telecommunications employment trajectories. The analysis universe is the 48 contiguous states plus the District of Columbia (49 units); the scripts live in employment/, numbered in run order.

cd employment
python 03_build_pre_volatility.py
python 04_build_panel.py
python 05_bartik_iv.py --tag _union
for s in 06_*.py 07_*.py 09_*.py 1[0-4]_*.py; do python "$s"; done
python 15_did_continuous.py --tag cgs49
python 16_pwc_extract.py
python 21_robustness_by_sector.py
python 22_labor_income_cumulative.py

Steps 05 and 15 take a required --tag, so they are run separately from the loop. Steps 01 and 02 re-download the LEHD QWI extracts and are optional; qwi_all_naics_annual.csv ships with the repository.

Outputs: employment/*.xlsx, results/r6_bartik/, results/r6_share_test/, results/r6_employment/

result file backs
results/r6_bartik/panel_state_year.csv the estimation panel; input to every regression and to Fig. 5
results/r6_bartik/results_main__union.csv the primary Bartik IV estimates
results/r6_bartik/results_robustness__union.csv the alternative specifications
results/r6_bartik/results_diagnostics__union.csv first stage, effective F, Anderson-Rubin sets
results/r6_share_test/pretrend_results.csv, balance_results.csv the share exogeneity tests
results/r6_employment/labor_income_cumulative.csv cumulative labor income against incentive outlay
results/r6_employment/robustness_by_sector.csv the by-sector robustness range
results/r6_employment/did_estimator_comparison__cgs49.csv the four designs on a common scale

Pipeline 5: Figures

Generate all publication figures. Run after Pipelines 1-4 are complete.

for fig in figure_scripts/f*.py; do
    python "$fig"
done

cd figure_scripts/fig5_panels
for p in p5?_*.py; do python "$p"; done
python compose.py

The f*.py scripts are run from the repository root. The five Figure 5 panels live in figure_scripts/fig5_panels/ and are run from that directory; compose.py assembles them.

Outputs: figures/

Expected Run Time (Full Reproduction)

Approximately 25 minutes on a standard desktop computer. The energy burden pipeline (Pipeline 3, Steps 3a/3b) is the most time-intensive component (~10 minutes), as it processes household-level energy expenditure data for all 51 states. The employment pipeline (Pipeline 4) adds about 3 minutes, three quarters of which is the bootstrap in employment/15_did_continuous.py.


Directory Structure

.
├── r02_share_exogeneity_test.py      # Bartik IV share exogeneity tests
├── r02_bartik_iv_workflow.py         # Bartik IV 2SLS (ISO zones)
├── r02_city_bartik_iv_workflow.py    # Bartik IV 2SLS (non-ISO cities)
├── r02_summary.py                   # Summary tables from IV results
├── r02_cross_sectional.py           # Cross-sectional heterogeneity analysis
├── r03_sankey.py                    # Transmission cost Sankey attribution/allocation
├── r04_ISO_breakdown.py             # ISO-level cost breakdown
├── r04_bench_burden.py              # Baseline energy burden simulation
├── r04_dc_burden.py                 # DC-scenario energy burden simulation
├── r04_income_ami.py                # Income and AMI stratification
├── r04_compare_poverty.py           # Energy poverty comparison
├── r04_rural_merge.py               # Rural-urban heterogeneity merge
├── r04_state_merge.py               # State-level data merge
│
├── employment/                      # Employment analysis, Pipeline 4
│   ├── analysis_universe.py         # The single owner of the 49-unit analysis universe
│   ├── panel_aggregates.py          # Balanced-panel national aggregates
│   ├── 01-16, 21, 22 *.py           # The pipeline, numbered in run order
│   └── *.csv, *.xlsx                # Inputs and the workbook outputs
│
├── figure_scripts/                  # Figure generation scripts (Pipeline 5)
│   └── fig5_panels/                 # The five Figure 5 panels and their composer
├── tables/                          # ISO-zone panel data (prices, demand, capacity, fuel)
├── tables_city/                     # City-level panel data
├── load_and_costs/                  # ISO load forecasts and transmission project data
├── allocation/                      # Utility tariff filings and cost allocation source data
├── econ_and_ai/                     # Economic indicators, AI adoption, DOE LEAD data
├── rider/                           # Energy burden data, EIA forecasts, county mappings
├── LTRS/                            # NERC reliability assessments (LTRA, SRA)
├── results/                         # Pre-computed outputs (allows figure-only demo)
├── figures/                         # Sankey interactive HTML + static SVG for README
└── requirements.txt                 # Pinned Python dependencies

Data Sources

tables/ — ISO-Zone Panel Data

Primary inputs for Pipeline 1 (Bartik IV regressions). Compiled from EIA and ISO public reports.

File Description Source
yearly_price.xlsx Wholesale electricity prices by zone-year ($/MWh) ISO market reports (CAISO OASIS, PJM Data Miner, ERCOT MIS, MISO Market Reports)
demand_raw.xlsx Electricity demand by zone-year (GWh) EIA-861, ISO load data
dc_cumulative_by_iso.xlsx Cumulative data center capacity by ISO-zone-year (GW) Aggregated from facility-level data
capacity_by_iso.xlsx Generation capacity by ISO (GW) EIA-860
fuel_price.xlsx Natural gas prices by region-year EIA Natural Gas Navigator
fuel_mix.xlsx Generation fuel mix shares by ISO-year EIA-923
fuel_marginal.xlsx Marginal fuel data by ISO ISO market reports
price.xlsx Retail electricity prices by state EIA-861
temperature_filled.xlsx HDD/CDD temperature data by zone-year (gap-filled) NOAA NCEI
datacenter_sum.xlsx Data center facility summary statistics Aggregated from facility-level data

tables_city/ — City-Level Panel Data

Same structure as tables/, adapted for non-ISO cities (Atlanta, Charlotte, Hillsboro, Mesa, Phoenix, Seattle, etc.).

load_and_costs/ — ISO Load Forecasts and Transmission Projects

Raw data on load forecasts, load factors, and transmission project costs for each ISO (CAISO, ERCOT, MISO, PJM). Each ISO subdirectory contains:

File Description Source
00_{ISO}_share.xlsx Data center load share by pricing zone Compiled from ISO filings and utility reports
01_load_factor.xlsx Peak-to-load ratios by zone and customer class ISO planning documents
02_load_by_zone_and_class.xlsx Annual load by zone and customer class (residential, commercial, industrial, GWh) ISO load forecasts (e.g., PJM Load Forecast Report, ERCOT CDR)
03_projects.xlsx Transmission project costs ($M), zone-level responsibility shares, and allocation shares ISO transmission planning (PJM RTEP, ERCOT RTP, MISO MTEP, CAISO TPP)
LTLP/ or LTLF/ Long-term load planning/forecast source documents ISO planning departments
Projects/ Transmission project planning source documents and raw data ISO transmission planning filings

See load_and_costs/{ISO}/README.md for ISO-specific documentation.

allocation/ — Utility Tariff and Cost Allocation Data

Utility-level rate case filings and tariff documents used to determine how transmission costs are allocated across customer classes (residential, commercial, industrial/DC).

Item Description Source
utilities.xlsx Master utility list: maps utilities to ISOs, zones, and states Compiled from EIA-861 and utility filings
{ISO}/00_{ISO}_share.xlsx DC load share by zone (compiled summary) Utility rate case filings
{ISO}/{zone}/ Zone-level annual tariff PDFs and rate case filings State PUC dockets, FERC filings
ERCOT/COSS/ Cost of Service Studies by T&D utility (AEP, CenterPoint, ONCOR) PUCT filings
city/ Non-ISO city utility tariff filings Municipal utility commissions

econ_and_ai/ — Economic and AI Adoption Data

Item Description Source
LEAD/ 51 state-level CSVs (~790 MB) of household energy expenditure, income, and housing characteristics DOE Low-Income Energy Affordability Data (LEAD)
state_accept/state_ai.xlsx State-level AI tool adoption rates U.S. Census Bureau Business Trends and Outlook Survey
state_accept/state_bb.xlsx State-level broadband coverage FCC Broadband Data Collection
state_accept/state_dc_capacity.xlsx State-level data center capacity Aggregated from facility-level data
state_accept/state_gdp.xlsx State-level GDP BEA Regional Economic Accounts
macroeconomic.xlsx State-level macroeconomic indicators BEA, BLS
fuel/ State-level fuel prices EIA State Energy Data System

rider/ — Energy Burden and Rate Rider Data

Item Description Source
EIA/EIA_AEO2023_prices_by_service.xlsx Retail electricity price projections by service territory EIA Annual Energy Outlook 2023
EIA/EIA_AEO2025_prices_by_service.xlsx Retail electricity price projections by service territory EIA Annual Energy Outlook 2025
EIA/{ISO}_zone_prices.xlsx Zone-level retail price decomposition (generation, transmission, distribution) EIA, ISO tariff data
burden/county_to_iso_or_city.csv Pre-computed county-to-ISO/city spatial mapping Census TIGER/Line shapefiles (2024)
rural/Ruralurban.xlsx Rural-Urban Continuum Codes (RUCC 2023) USDA Economic Research Service

employment/ — Employment Data

The run order and the mapping from each result file to the Supplementary Table it backs are given under Pipeline 4 above.

File Description Source
qwi_all_naics_annual.csv Quarterly Workforce Indicators, annual aggregation by state and NAICS code, 2016-2024 U.S. Census Bureau QWI
results/r6_share_test/qwi_extended_annual.csv The same cell definition for 2005-2015, which the pre-trend and balance tests prepend to the 2016-2024 file above; not used in estimation LEHD QWI R2026Q1 public-use tabulations
dc_facilities_by_state_year.csv Data center count and capacity by state-year, in MW Aggregated from facility-level data; the facility-level source is proprietary and is not redistributed
pwc_multipliers.csv Economic multipliers for data center employment PwC analysis
pwc_state_data.csv State-level data center economic impact PwC analysis
tax/state_subsidy_by_year_million_wide.xlsx State fiscal incentives for data centers ($M by year) State legislature records, DSIRE

LTRS/ — NERC Reliability Assessments

File Description Source
LTRA.xlsx Compiled EEU, LOLH, and reserve margins by assessment area NERC Long-Term Reliability Assessments (2019-2025)
SRA.xlsx Compiled seasonal reliability metrics NERC Seasonal Reliability Assessments (2019-2025)
long-term/nerc_ltra_{year}.pdf Source LTRA reports NERC
summer/nerc_sra_{year}.pdf Source SRA reports NERC

License

Code in this repository is released under the MIT License. Data are compiled from public datasets, ISO/RTO market data, and regulatory filings; users are responsible for complying with any upstream licensing requirements.


Contact

For questions about the data or code, please open a GitHub issue or contact: chengfeng@cornell.edu

About

This repository contains the data, code, and derived results used to quantify how data-center load growth affects wholesale electricity prices, transmission cost allocation, and downstream burden and distributional outcomes across the United States.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages