Source data for the mid-decade redistricting map

Source data for the mid-decade redistricting map

../data.csv is the table the map reads: one row per state, with the party that drew the map, its status, and the expected partisan seat shift (exp) and its range across elections (lo, hi). This folder holds the data those numbers come from, so the page and its evidence sit together.

<ST>_map_old.csv / <ST>_map_new.csv

One row per district, one column per statewide election. Each cell is the Democratic share of the two-party vote in that district under that plan: Dem / (Dem + Rep), computed from precinct results disaggregated to districts. _old is the plan in force before the mid-decade redraw, _new the plan that replaced it. The two files for a state always carry the same set of elections.

Precinct results are VEST’s; the plans and the disaggregation are Dave’s Redistricting App. Generated by compare-plans-dra/_DRA_elections.R in the createMaps repository, which writes these files here and into that repo’s mid-decade-redistricting/data/.

How exp, lo, and hi follow from them

For each election column, a district is a Democratic seat when its value exceeds 0.5. That gives a seat count per election under each plan.

Signs in data.csv are oriented toward the state’s drawing party, so a Democratic gerrymander (California, Virginia) is recorded as a positive number for the Democrats rather than a negative one for the Republicans.

Recomputing that way reproduces data.csv exactly:

State Districts Elections exp lo hi
CA 52 12 6.25 3 9
FL 28 13 2.23 1 4
LA 6 16 0.69 0 1
MO 8 19 0.89 0 1
NC 14 27 0.52 -1 1
OH 15 20 0.65 -1 2
SC 7 12 1.00 1 1
TN 9 8 1.00 1 1
TX 38 17 3.29 2 5
UT 4 16 0.94 0 1
VA 11 12 3.08 2 4

Two states here carry no numbers on the map, for different reasons.

South Carolina never passed a new map, so SC_map_new.csv scores a proposal, not a plan that ever existed in law. data.csv records the state as possible / blocked and leaves exp, lo, and hi empty: there is no enacted redraw to attribute a seat shift to. That is not the same as Virginia, which is partisan / blocked — a map did pass there and was then blocked, so its 3.08 / 2 / 4 is a real shift from a real plan, shown struck through. The mid_decade column is what separates the two cases; status alone does not.

PA_map_old.csv and PA_map_new.csv are a separate analysis of Pennsylvania’s 203 state house districts, not a congressional mid-decade redraw; they are kept for reference and are not part of the map.

Relation to ../elections.csv

../elections.csv is what the per-election detail table under the map reads: one row per election per state, giving the seat split under each plan. These files are the layer below it — the district-level shares those seat counts are collapsed from.

Texas and Florida came into elections.csv from democracys-data. The other eight states — California, Louisiana, Missouri, North Carolina, Ohio, Tennessee, Utah, and Virginia — were counted from the files here, applying the same rule (a district is a Democratic seat above 0.5). Every one reproduces the exp, lo, and hi already in data.csv, and Texas and Florida come out the same from either route, which is the check that the two pipelines agree.

elections.csv stores the change as rep_new - rep_old, so a Democratic gerrymander is a negative number there; data.csv orients the same quantity toward whichever party drew the map, so it is positive for California, Utah, and Virginia.

Two gaps are not fillable from this folder. Alabama has values on the map but no district-level files here, so it has no detail table. South Carolina has files but no map value, for the reason above.

Vote share, uniform swing, and the dummymander point

The “When does the new map backfire?” panel in the detail table is computed in the browser from these files; nothing is precomputed. It asks what each map does when every election is held at the same two-party split, so that a state can be read at, say, 45–55 rather than at whatever its particular candidates happened to win.

An election’s vote share is its average district: the mean of a column, taken under each plan and then averaged between the two. (The plans average slightly differently because turnout varies by district; taking the midpoint keeps a single shift for both, so they are always scored on the same votes.) To set an election to a Democratic share V, every district under both plans moves by V minus that election’s own share, and seats are recounted with the 0.5 rule. Doing that for every election and averaging, for V from 25 to 75 percent in tenths of a point, gives the chart’s two panels: the drawing party’s (the party in ../data.csv) average seats under each plan, and below them the gap, new plan’s seats minus old plan’s. Each plan’s seats can only move one way as V changes; the gap can rise and fall, because the plans tip their districts at different shares, and it returns toward zero at both ends, where either plan gives one party nearly every seat. Every election counts equally in the average. A gray band around the gap shows the lowest and highest single-election gap at each share, and under the table a small chart for each election draws its own two seat curves on the same scales, with its own backfire point measured from its own result, so the averages can be read against how much the elections disagree. Until a share is chosen, the table shows the unshifted counts, which are ../elections.csv row for row; once one is, every row is that election moved to the chosen split.

The map is a dummymander wherever the average gain falls below zero: with the same votes, the old plan would have won the drawing party more seats. The backfire point the page reports is the nearest such share to the average of the actual results, moving against the drawing party. Some maps also fall behind in the drawing party’s own wave, when the old lines would have converted the extra votes into more seats; the chart shades that zone too, but the page only spells it out in words for Utah, the one state with no backfire point the other way.

State Drawn by Avg. actual D share Backfires below (drawing party’s share) Points below its avg. Also behind above Gain at D 55% at 50% at 45%
CA D 61.4 55.1 6.3 — −0.42 −5.83 −3.83
FL R 46.1 47.7 6.2 61.3 −3.23 +1.62 +3.23
LA R 36.5 45.2 18.3 70.7 −0.31 +1.00 +1.00
MO R 42.0 49.1 8.9 — −2.47 +0.37 +1.00
NC R 49.6 47.0 3.4 — −0.70 +0.56 +0.19
OH R 44.6 45.9 9.5 55.8 −0.65 +0.95 +0.60
TN R 37.7 53.0 9.3 — −2.00 −3.00 +0.25
TX R 46.3 44.2 9.5 — +0.59 +2.00 +3.53
UT D 33.6 — — 48.4 −2.69 −1.06 +1.00
VA D 53.4 46.0 7.4 72.0 +3.33 +2.08 −1.83

Shares are percentages of the two-party vote, and “drawing party’s share” is the Democratic share for California, Utah, and Virginia and the Republican share for the rest. Gains are the drawing party’s average seat gain from the new map, so a negative number is a dummymander at that split. A dash means no crossing between 25 and 75 percent. South Carolina’s files would support the same calculation, but it has no rows in ../elections.csv, so the page shows no detail table or panel for it.

The usual limits of uniform swing apply. Every district moves by the same amount, so it says nothing about where a real swing would be concentrated; the average district is not the statewide vote, and can differ from it by a point or two; and averaging across elections smooths over candidate-specific geography: in North Carolina and Ohio a few of the actual elections already sit past the backfire point, which is why their lo in ../data.csv is −1.

The “Backfires below” column is also stored in ../data.csv as backfire, so the map’s value tiles can show it on first paint, before these files load. Unlike exp, lo, and hi, the page recomputes it from these files and logs a console warning for any state where the stored value differs by more than 0.05, so a change to the district files that isn’t carried into data.csv shows up in the browser console. Utah’s is left empty: its map has no backfire point as Democrats lose ground.

redistrict-map.csv

The state-level table the original mapshaper build styled its choropleth from: 2020 census population, whether the redraw was partisan, court-ordered, or possible, its status, and the drawing party, for all fifty states and D.C. (999 and NA mark states with no mid-decade activity.) ../data.csv supersedes it for the web map — it covers only the seventeen states the map labels, and adds the seat-shift columns and the label-offset columns dx/dy — but this is the file _createMaps.sh still joins to the state geometry.

Not copied here

states.json (8.2 MB) in createMaps is the unprojected source geometry. ../states.topojson is the projected, simplified build product the page actually loads, with each state’s guaranteed-inside label anchor baked in, so the source is left in createMaps rather than duplicated into the site.