diff --git a/obbba_district_impacts/Congressional-Hackathon-2025 b/obbba_district_impacts/Congressional-Hackathon-2025 new file mode 160000 index 0000000..3f6d05e --- /dev/null +++ b/obbba_district_impacts/Congressional-Hackathon-2025 @@ -0,0 +1 @@ +Subproject commit 3f6d05e76400c6e396a3a4eddd34a7b3f6919fc3 diff --git a/obbba_district_impacts/HexCDv31/HexCDv31.shp b/obbba_district_impacts/HexCDv31/HexCDv31.shp new file mode 100644 index 0000000..dadef36 Binary files /dev/null and b/obbba_district_impacts/HexCDv31/HexCDv31.shp differ diff --git a/obbba_district_impacts/ny_congressional_district_impacts.csv b/obbba_district_impacts/ny_congressional_district_impacts.csv new file mode 100644 index 0000000..be17b97 --- /dev/null +++ b/obbba_district_impacts/ny_congressional_district_impacts.csv @@ -0,0 +1,27 @@ +congressional_district_geoid,sample_size,avg_baseline_income,avg_reformed_income,avg_income_change,total_income_change +3601,1617.0,143845.171875,148153.40625,4308.232421875,6966412.0 +3602,1419.0,110839.6484375,113832.421875,2992.780029296875,4246755.0 +3603,1690.0,164515.90625,169924.96875,5409.06689453125,9141323.0 +3604,1496.0,126062.1640625,129620.109375,3557.951416015625,5322695.5 +3605,892.0,83690.3203125,85331.4296875,1641.10009765625,1463861.25 +3606,887.0,86829.453125,88802.6484375,1973.1939697265625,1750223.0 +3607,1186.0,127848.3203125,132043.09375,4194.7724609375,4975000.0 +3608,1067.0,100501.953125,103051.6953125,2549.745361328125,2720578.25 +3609,1264.0,138191.859375,142586.171875,4394.2998046875,5554395.0 +3610,1387.0,175475.984375,181719.875,6243.89599609375,8660284.0 +3611,1398.0,131290.796875,135457.265625,4166.443359375,5824687.5 +3612,1440.0,242408.21875,251282.484375,8874.2734375,12778954.0 +3613,869.0,88758.703125,90908.8203125,2150.123046875,1868456.875 +3614,1016.0,99821.90625,102682.8828125,2860.984130859375,2906760.0 +3615,874.0,99412.234375,101974.484375,2562.251953125,2239408.25 +3616,1602.0,155516.40625,160661.171875,5144.767578125,8241918.0 +3617,1470.0,138431.265625,142728.34375,4297.0703125,6316693.5 +3618,1438.0,113723.2578125,116897.4453125,3174.19189453125,4564488.0 +3619,1060.0,93198.765625,95462.4609375,2263.7001953125,2399522.25 +3620,1302.0,110184.2109375,113267.390625,3083.19189453125,4014315.75 +3621,1012.0,86811.2109375,88742.90625,1931.7066650390625,1954887.125 +3622,1048.0,88847.5390625,90992.5234375,2144.984619140625,2247944.0 +3623,1004.0,88731.453125,90741.1328125,2009.684814453125,2017723.5 +3624,1013.0,91033.5625,93158.6015625,2125.0400390625,2152665.5 +3625,1138.0,95898.09375,98287.6875,2389.596435546875,2719360.75 +3626,1040.0,86841.6640625,88932.6328125,2090.965576171875,2174604.25 diff --git a/obbba_district_impacts/ny_congressional_district_impacts.ipynb b/obbba_district_impacts/ny_congressional_district_impacts.ipynb new file mode 100644 index 0000000..5eeb45f --- /dev/null +++ b/obbba_district_impacts/ny_congressional_district_impacts.ipynb @@ -0,0 +1,1910 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 10, + "id": "1", + "metadata": {}, + "outputs": [], + "source": [ + "from policyengine_us import Microsimulation\n", + "from policyengine_core.reforms import Reform" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fqndbt28fta", + "metadata": {}, + "outputs": [], + "source": [ + "reform = Reform.from_dict({\n", + " \"gov.irs.credits.estate.base\": {\n", + " \"2026-01-01.2026-12-31\": 6790000,\n", + " \"2027-01-01.2027-12-31\": 6960000,\n", + " \"2028-01-01.2028-12-31\": 7100000,\n", + " \"2029-01-01.2029-12-31\": 7240000,\n", + " \"2030-01-01.2030-12-31\": 7390000,\n", + " \"2031-01-01.2031-12-31\": 7530000,\n", + " \"2032-01-01.2032-12-31\": 7680000,\n", + " \"2033-01-01.2033-12-31\": 7830000,\n", + " \"2034-01-01.2034-12-31\": 7990000,\n", + " \"2035-01-01.2100-12-31\": 8150000\n", + " },\n", + " \"gov.irs.income.bracket.rates.2\": {\n", + " \"2025-01-01.2100-12-31\": 0.15\n", + " },\n", + " \"gov.irs.income.bracket.rates.3\": {\n", + " \"2025-01-01.2100-12-31\": 0.25\n", + " },\n", + " \"gov.irs.income.bracket.rates.4\": {\n", + " \"2025-01-01.2100-12-31\": 0.28\n", + " },\n", + " \"gov.irs.income.bracket.rates.5\": {\n", + " \"2025-01-01.2100-12-31\": 0.33\n", + " },\n", + " \"gov.irs.income.bracket.rates.7\": {\n", + " \"2025-01-01.2100-12-31\": 0.396\n", + " },\n", + " \"gov.irs.deductions.qbi.max.rate\": {\n", + " \"2026-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.income.exemption.amount\": {\n", + " \"2026-01-01.2026-12-31\": 5300,\n", + " \"2027-01-01.2027-12-31\": 5400,\n", + " \"2028-01-01.2028-12-31\": 5500,\n", + " \"2029-01-01.2029-12-31\": 5650,\n", + " \"2030-01-01.2030-12-31\": 5750,\n", + " \"2031-01-01.2031-12-31\": 5850,\n", + " \"2032-01-01.2032-12-31\": 5950,\n", + " \"2033-01-01.2033-12-31\": 6100,\n", + " \"2034-01-01.2034-12-31\": 6200,\n", + " \"2035-01-01.2100-12-31\": 6350\n", + " },\n", + " \"gov.irs.deductions.tip_income.cap\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.credits.cdcc.phase_out.max\": {\n", + " \"2026-01-01.2100-12-31\": 0.35\n", + " },\n", + " \"gov.irs.credits.cdcc.phase_out.min\": {\n", + " \"2026-01-01.2100-12-31\": 0.2\n", + " },\n", + " \"gov.irs.deductions.qbi.max.w2_wages.rate\": {\n", + " \"2026-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.deductions.standard.amount.JOINT\": {\n", + " \"2025-01-01.2025-12-31\": 30000,\n", + " \"2026-01-01.2026-12-31\": 16600,\n", + " \"2027-01-01.2027-12-31\": 16900,\n", + " \"2028-01-01.2028-12-31\": 17300,\n", + " \"2029-01-01.2029-12-31\": 17600,\n", + " \"2030-01-01.2030-12-31\": 18000,\n", + " \"2031-01-01.2031-12-31\": 18300,\n", + " \"2032-01-01.2032-12-31\": 18700,\n", + " \"2033-01-01.2033-12-31\": 19000,\n", + " \"2034-01-01.2034-12-31\": 19400,\n", + " \"2035-01-01.2100-12-31\": 19800\n", + " },\n", + " \"gov.irs.credits.ctc.amount.base[0].amount\": {\n", + " \"2025-01-01.2025-12-31\": 2000,\n", + " \"2026-01-01.2100-12-31\": 1000\n", + " },\n", + " \"gov.irs.deductions.auto_loan_interest.cap\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.deductions.standard.amount.SINGLE\": {\n", + " \"2025-01-01.2025-12-31\": 15000,\n", + " \"2026-01-01.2026-12-31\": 8300,\n", + " \"2027-01-01.2027-12-31\": 8450,\n", + " \"2028-01-01.2028-12-31\": 8650,\n", + " \"2029-01-01.2029-12-31\": 8800,\n", + " \"2030-01-01.2030-12-31\": 9000,\n", + " \"2031-01-01.2031-12-31\": 9150,\n", + " \"2032-01-01.2032-12-31\": 9350,\n", + " \"2033-01-01.2033-12-31\": 9500,\n", + " \"2034-01-01.2034-12-31\": 9700,\n", + " \"2035-01-01.2100-12-31\": 9900\n", + " },\n", + " \"gov.irs.income.amt.exemption.amount.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 109800,\n", + " \"2027-01-01.2027-12-31\": 112100,\n", + " \"2028-01-01.2028-12-31\": 114400,\n", + " \"2029-01-01.2029-12-31\": 116700,\n", + " \"2030-01-01.2030-12-31\": 119000,\n", + " \"2031-01-01.2031-12-31\": 121300,\n", + " \"2032-01-01.2032-12-31\": 123700,\n", + " \"2033-01-01.2033-12-31\": 126200,\n", + " \"2034-01-01.2034-12-31\": 128700,\n", + " \"2035-01-01.2100-12-31\": 131200\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.1.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 24300,\n", + " \"2027-01-01.2027-12-31\": 24800,\n", + " \"2028-01-01.2028-12-31\": 25300,\n", + " \"2029-01-01.2029-12-31\": 25800,\n", + " \"2030-01-01.2030-12-31\": 26300,\n", + " \"2031-01-01.2031-12-31\": 26850,\n", + " \"2032-01-01.2032-12-31\": 27350,\n", + " \"2033-01-01.2033-12-31\": 27900,\n", + " \"2034-01-01.2034-12-31\": 28450,\n", + " \"2035-01-01.2100-12-31\": 29000\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.2.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 98600,\n", + " \"2027-01-01.2027-12-31\": 100700,\n", + " \"2028-01-01.2028-12-31\": 102800,\n", + " \"2029-01-01.2029-12-31\": 104800,\n", + " \"2030-01-01.2030-12-31\": 106900,\n", + " \"2031-01-01.2031-12-31\": 109000,\n", + " \"2032-01-01.2032-12-31\": 111100,\n", + " \"2033-01-01.2033-12-31\": 113300,\n", + " \"2034-01-01.2034-12-31\": 115600,\n", + " \"2035-01-01.2100-12-31\": 117900\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.3.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 199000,\n", + " \"2027-01-01.2027-12-31\": 203250,\n", + " \"2028-01-01.2028-12-31\": 207350,\n", + " \"2029-01-01.2029-12-31\": 211450,\n", + " \"2030-01-01.2030-12-31\": 215600,\n", + " \"2031-01-01.2031-12-31\": 219900,\n", + " \"2032-01-01.2032-12-31\": 224250,\n", + " \"2033-01-01.2033-12-31\": 228700,\n", + " \"2034-01-01.2034-12-31\": 233200,\n", + " \"2035-01-01.2100-12-31\": 237850\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.4.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 303250,\n", + " \"2027-01-01.2027-12-31\": 309700,\n", + " \"2028-01-01.2028-12-31\": 315950,\n", + " \"2029-01-01.2029-12-31\": 322200,\n", + " \"2030-01-01.2030-12-31\": 328550,\n", + " \"2031-01-01.2031-12-31\": 335050,\n", + " \"2032-01-01.2032-12-31\": 341700,\n", + " \"2033-01-01.2033-12-31\": 348450,\n", + " \"2034-01-01.2034-12-31\": 355400,\n", + " \"2035-01-01.2100-12-31\": 362450\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.5.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 541550,\n", + " \"2027-01-01.2027-12-31\": 553050,\n", + " \"2028-01-01.2028-12-31\": 564200,\n", + " \"2029-01-01.2029-12-31\": 575400,\n", + " \"2030-01-01.2030-12-31\": 586750,\n", + " \"2031-01-01.2031-12-31\": 598350,\n", + " \"2032-01-01.2032-12-31\": 610200,\n", + " \"2033-01-01.2033-12-31\": 622300,\n", + " \"2034-01-01.2034-12-31\": 634650,\n", + " \"2035-01-01.2100-12-31\": 647250\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.6.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 611750,\n", + " \"2027-01-01.2027-12-31\": 624700,\n", + " \"2028-01-01.2028-12-31\": 637350,\n", + " \"2029-01-01.2029-12-31\": 649950,\n", + " \"2030-01-01.2030-12-31\": 662800,\n", + " \"2031-01-01.2031-12-31\": 675900,\n", + " \"2032-01-01.2032-12-31\": 689250,\n", + " \"2033-01-01.2033-12-31\": 702950,\n", + " \"2034-01-01.2034-12-31\": 716900,\n", + " \"2035-01-01.2100-12-31\": 731150\n", + " },\n", + " \"gov.irs.credits.ctc.amount.adult_dependent\": {\n", + " \"2026-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.deductions.senior_deduction.amount\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.income.amt.exemption.amount.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 70600,\n", + " \"2027-01-01.2027-12-31\": 72100,\n", + " \"2028-01-01.2028-12-31\": 73500,\n", + " \"2029-01-01.2029-12-31\": 75000,\n", + " \"2030-01-01.2030-12-31\": 76400,\n", + " \"2031-01-01.2031-12-31\": 78000,\n", + " \"2032-01-01.2032-12-31\": 79500,\n", + " \"2033-01-01.2033-12-31\": 81100,\n", + " \"2034-01-01.2034-12-31\": 82700,\n", + " \"2035-01-01.2100-12-31\": 84300\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.1.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 12150,\n", + " \"2027-01-01.2027-12-31\": 12400,\n", + " \"2028-01-01.2028-12-31\": 12650,\n", + " \"2029-01-01.2029-12-31\": 12900,\n", + " \"2030-01-01.2030-12-31\": 13150,\n", + " \"2031-01-01.2031-12-31\": 13425,\n", + " \"2032-01-01.2032-12-31\": 13675,\n", + " \"2033-01-01.2033-12-31\": 13950,\n", + " \"2034-01-01.2034-12-31\": 14225,\n", + " \"2035-01-01.2100-12-31\": 14500\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.2.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 49300,\n", + " \"2027-01-01.2027-12-31\": 50350,\n", + " \"2028-01-01.2028-12-31\": 51400,\n", + " \"2029-01-01.2029-12-31\": 52400,\n", + " \"2030-01-01.2030-12-31\": 53450,\n", + " \"2031-01-01.2031-12-31\": 54500,\n", + " \"2032-01-01.2032-12-31\": 55550,\n", + " \"2033-01-01.2033-12-31\": 56650,\n", + " \"2034-01-01.2034-12-31\": 57800,\n", + " \"2035-01-01.2100-12-31\": 58950\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.3.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 119400,\n", + " \"2027-01-01.2027-12-31\": 121950,\n", + " \"2028-01-01.2028-12-31\": 124400,\n", + " \"2029-01-01.2029-12-31\": 126900,\n", + " \"2030-01-01.2030-12-31\": 129400,\n", + " \"2031-01-01.2031-12-31\": 131950,\n", + " \"2032-01-01.2032-12-31\": 134550,\n", + " \"2033-01-01.2033-12-31\": 137200,\n", + " \"2034-01-01.2034-12-31\": 139950,\n", + " \"2035-01-01.2100-12-31\": 142750\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.4.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 249100,\n", + " \"2027-01-01.2027-12-31\": 254400,\n", + " \"2028-01-01.2028-12-31\": 259550,\n", + " \"2029-01-01.2029-12-31\": 264650,\n", + " \"2030-01-01.2030-12-31\": 269900,\n", + " \"2031-01-01.2031-12-31\": 275250,\n", + " \"2032-01-01.2032-12-31\": 280700,\n", + " \"2033-01-01.2033-12-31\": 286250,\n", + " \"2034-01-01.2034-12-31\": 291900,\n", + " \"2035-01-01.2100-12-31\": 297750\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.5.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 541550,\n", + " \"2027-01-01.2027-12-31\": 553050,\n", + " \"2028-01-01.2028-12-31\": 564200,\n", + " \"2029-01-01.2029-12-31\": 575400,\n", + " \"2030-01-01.2030-12-31\": 586750,\n", + " \"2031-01-01.2031-12-31\": 598350,\n", + " \"2032-01-01.2032-12-31\": 610200,\n", + " \"2033-01-01.2033-12-31\": 622300,\n", + " \"2034-01-01.2034-12-31\": 634650,\n", + " \"2035-01-01.2100-12-31\": 647250\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.6.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 543800,\n", + " \"2027-01-01.2027-12-31\": 555300,\n", + " \"2028-01-01.2028-12-31\": 566500,\n", + " \"2029-01-01.2029-12-31\": 577700,\n", + " \"2030-01-01.2030-12-31\": 589150,\n", + " \"2031-01-01.2031-12-31\": 600800,\n", + " \"2032-01-01.2032-12-31\": 612700,\n", + " \"2033-01-01.2033-12-31\": 624850,\n", + " \"2034-01-01.2034-12-31\": 637250,\n", + " \"2035-01-01.2100-12-31\": 649900\n", + " },\n", + " \"gov.irs.deductions.itemized.casualty.active\": {\n", + " \"2026-01-01.2100-12-31\": True\n", + " },\n", + " \"gov.irs.deductions.standard.amount.SEPARATE\": {\n", + " \"2025-01-01.2025-12-31\": 15000,\n", + " \"2026-01-01.2026-12-31\": 8300,\n", + " \"2027-01-01.2027-12-31\": 8450,\n", + " \"2028-01-01.2028-12-31\": 8650,\n", + " \"2029-01-01.2029-12-31\": 8800,\n", + " \"2030-01-01.2030-12-31\": 9000,\n", + " \"2031-01-01.2031-12-31\": 9150,\n", + " \"2032-01-01.2032-12-31\": 9350,\n", + " \"2033-01-01.2033-12-31\": 9500,\n", + " \"2034-01-01.2034-12-31\": 9700,\n", + " \"2035-01-01.2100-12-31\": 9900\n", + " },\n", + " \"gov.irs.income.amt.exemption.phase_out.rate\": {\n", + " \"2026-01-01.2100-12-31\": 0.25\n", + " },\n", + " \"gov.irs.deductions.overtime_income.cap.JOINT\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.deductions.qbi.max.w2_wages.alt_rate\": {\n", + " \"2026-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.income.amt.exemption.amount.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 54900,\n", + " \"2027-01-01.2027-12-31\": 56050,\n", + " \"2028-01-01.2028-12-31\": 57200,\n", + " \"2029-01-01.2029-12-31\": 58350,\n", + " \"2030-01-01.2030-12-31\": 59500,\n", + " \"2031-01-01.2031-12-31\": 60650,\n", + " \"2032-01-01.2032-12-31\": 61850,\n", + " \"2033-01-01.2033-12-31\": 63100,\n", + " \"2034-01-01.2034-12-31\": 64350,\n", + " \"2035-01-01.2100-12-31\": 65600\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.1.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 12150,\n", + " \"2027-01-01.2027-12-31\": 12400,\n", + " \"2028-01-01.2028-12-31\": 12650,\n", + " \"2029-01-01.2029-12-31\": 12900,\n", + " \"2030-01-01.2030-12-31\": 13150,\n", + " \"2031-01-01.2031-12-31\": 13425,\n", + " \"2032-01-01.2032-12-31\": 13675,\n", + " \"2033-01-01.2033-12-31\": 13950,\n", + " \"2034-01-01.2034-12-31\": 14225,\n", + " \"2035-01-01.2100-12-31\": 14500\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.2.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 49300,\n", + " \"2027-01-01.2027-12-31\": 50350,\n", + " \"2028-01-01.2028-12-31\": 51400,\n", + " \"2029-01-01.2029-12-31\": 52400,\n", + " \"2030-01-01.2030-12-31\": 53450,\n", + " \"2031-01-01.2031-12-31\": 54500,\n", + " \"2032-01-01.2032-12-31\": 55550,\n", + " \"2033-01-01.2033-12-31\": 56650,\n", + " \"2034-01-01.2034-12-31\": 57800,\n", + " \"2035-01-01.2100-12-31\": 58950\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.3.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 99500,\n", + " \"2027-01-01.2027-12-31\": 101625,\n", + " \"2028-01-01.2028-12-31\": 103675,\n", + " \"2029-01-01.2029-12-31\": 105725,\n", + " \"2030-01-01.2030-12-31\": 107800,\n", + " \"2031-01-01.2031-12-31\": 109950,\n", + " \"2032-01-01.2032-12-31\": 112125,\n", + " \"2033-01-01.2033-12-31\": 114350,\n", + " \"2034-01-01.2034-12-31\": 116600,\n", + " \"2035-01-01.2100-12-31\": 118925\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.4.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 151625,\n", + " \"2027-01-01.2027-12-31\": 154850,\n", + " \"2028-01-01.2028-12-31\": 157975,\n", + " \"2029-01-01.2029-12-31\": 161100,\n", + " \"2030-01-01.2030-12-31\": 164275,\n", + " \"2031-01-01.2031-12-31\": 167525,\n", + " \"2032-01-01.2032-12-31\": 170850,\n", + " \"2033-01-01.2033-12-31\": 174225,\n", + " \"2034-01-01.2034-12-31\": 177700,\n", + " \"2035-01-01.2100-12-31\": 181225\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.5.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 270775,\n", + " \"2027-01-01.2027-12-31\": 276525,\n", + " \"2028-01-01.2028-12-31\": 282100,\n", + " \"2029-01-01.2029-12-31\": 287700,\n", + " \"2030-01-01.2030-12-31\": 293375,\n", + " \"2031-01-01.2031-12-31\": 299175,\n", + " \"2032-01-01.2032-12-31\": 305100,\n", + " \"2033-01-01.2033-12-31\": 311150,\n", + " \"2034-01-01.2034-12-31\": 317325,\n", + " \"2035-01-01.2100-12-31\": 323625\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.6.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 305875,\n", + " \"2027-01-01.2027-12-31\": 312350,\n", + " \"2028-01-01.2028-12-31\": 318675,\n", + " \"2029-01-01.2029-12-31\": 324975,\n", + " \"2030-01-01.2030-12-31\": 331400,\n", + " \"2031-01-01.2031-12-31\": 337950,\n", + " \"2032-01-01.2032-12-31\": 344625,\n", + " \"2033-01-01.2033-12-31\": 351475,\n", + " \"2034-01-01.2034-12-31\": 358450,\n", + " \"2035-01-01.2100-12-31\": 365575\n", + " },\n", + " \"gov.irs.credits.ctc.phase_out.threshold.JOINT\": {\n", + " \"2026-01-01.2100-12-31\": 110000\n", + " },\n", + " \"gov.irs.credits.ctc.refundable.individual_max\": {\n", + " \"2025-01-01.2025-12-31\": 1800,\n", + " \"2026-01-01.2100-12-31\": 1000\n", + " },\n", + " \"gov.irs.deductions.overtime_income.cap.SINGLE\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.credits.ctc.phase_out.threshold.SINGLE\": {\n", + " \"2026-01-01.2100-12-31\": 75000\n", + " },\n", + " \"gov.irs.deductions.itemized.charity.ceiling.all\": {\n", + " \"2026-01-01.2100-12-31\": 0.5\n", + " },\n", + " \"gov.irs.deductions.overtime_income.cap.SEPARATE\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.credits.ctc.phase_out.threshold.SEPARATE\": {\n", + " \"2026-01-01.2100-12-31\": 55000\n", + " },\n", + " \"gov.irs.credits.ctc.adult_ssn_requirement_applies\": {\n", + " \"2025-01-01.2100-12-31\": False\n", + " },\n", + " \"gov.irs.credits.ctc.refundable.phase_in.threshold\": {\n", + " \"2026-01-01.2100-12-31\": 3000\n", + " },\n", + " \"gov.irs.deductions.itemized.charity.floor.applies\": {\n", + " \"2026-01-01.2100-12-31\": False\n", + " },\n", + " \"gov.irs.deductions.qbi.max.business_property.rate\": {\n", + " \"2026-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.income.amt.exemption.phase_out.start.JOINT\": {\n", + " \"2026-01-01.2026-12-31\": 209200,\n", + " \"2027-01-01.2027-12-31\": 213600,\n", + " \"2028-01-01.2028-12-31\": 217900,\n", + " \"2029-01-01.2029-12-31\": 222200,\n", + " \"2030-01-01.2030-12-31\": 226600,\n", + " \"2031-01-01.2031-12-31\": 231100,\n", + " \"2032-01-01.2032-12-31\": 235700,\n", + " \"2033-01-01.2033-12-31\": 240300,\n", + " \"2034-01-01.2034-12-31\": 245100,\n", + " \"2035-01-01.2100-12-31\": 250000\n", + " },\n", + " \"gov.irs.deductions.standard.amount.SURVIVING_SPOUSE\": {\n", + " \"2025-01-01.2025-12-31\": 30000,\n", + " \"2026-01-01.2026-12-31\": 16600,\n", + " \"2027-01-01.2027-12-31\": 16900,\n", + " \"2028-01-01.2028-12-31\": 17300,\n", + " \"2029-01-01.2029-12-31\": 17600,\n", + " \"2030-01-01.2030-12-31\": 18000,\n", + " \"2031-01-01.2031-12-31\": 18300,\n", + " \"2032-01-01.2032-12-31\": 18700,\n", + " \"2033-01-01.2033-12-31\": 19000,\n", + " \"2034-01-01.2034-12-31\": 19400,\n", + " \"2035-01-01.2100-12-31\": 19800\n", + " },\n", + " \"gov.irs.income.amt.exemption.phase_out.start.SINGLE\": {\n", + " \"2026-01-01.2026-12-31\": 156900,\n", + " \"2027-01-01.2027-12-31\": 160200,\n", + " \"2028-01-01.2028-12-31\": 163400,\n", + " \"2029-01-01.2029-12-31\": 166700,\n", + " \"2030-01-01.2030-12-31\": 170000,\n", + " \"2031-01-01.2031-12-31\": 173300,\n", + " \"2032-01-01.2032-12-31\": 176800,\n", + " \"2033-01-01.2033-12-31\": 180300,\n", + " \"2034-01-01.2034-12-31\": 183800,\n", + " \"2035-01-01.2100-12-31\": 187500\n", + " },\n", + " \"gov.irs.deductions.standard.amount.HEAD_OF_HOUSEHOLD\": {\n", + " \"2025-01-01.2025-12-31\": 22500,\n", + " \"2026-01-01.2026-12-31\": 12150,\n", + " \"2027-01-01.2027-12-31\": 12400,\n", + " \"2028-01-01.2028-12-31\": 12650,\n", + " \"2029-01-01.2029-12-31\": 12900,\n", + " \"2030-01-01.2030-12-31\": 13200,\n", + " \"2031-01-01.2031-12-31\": 13450,\n", + " \"2032-01-01.2032-12-31\": 13700,\n", + " \"2033-01-01.2033-12-31\": 14000,\n", + " \"2034-01-01.2034-12-31\": 14250,\n", + " \"2035-01-01.2100-12-31\": 14550\n", + " },\n", + " \"gov.irs.income.amt.exemption.amount.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 109800,\n", + " \"2027-01-01.2027-12-31\": 112100,\n", + " \"2028-01-01.2028-12-31\": 114400,\n", + " \"2029-01-01.2029-12-31\": 116700,\n", + " \"2030-01-01.2030-12-31\": 119000,\n", + " \"2031-01-01.2031-12-31\": 121300,\n", + " \"2032-01-01.2032-12-31\": 123700,\n", + " \"2033-01-01.2033-12-31\": 126200,\n", + " \"2034-01-01.2034-12-31\": 128700,\n", + " \"2035-01-01.2100-12-31\": 131200\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.1.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 24300,\n", + " \"2027-01-01.2027-12-31\": 24800,\n", + " \"2028-01-01.2028-12-31\": 25300,\n", + " \"2029-01-01.2029-12-31\": 25800,\n", + " \"2030-01-01.2030-12-31\": 26300,\n", + " \"2031-01-01.2031-12-31\": 26850,\n", + " \"2032-01-01.2032-12-31\": 27350,\n", + " \"2033-01-01.2033-12-31\": 27900,\n", + " \"2034-01-01.2034-12-31\": 28450,\n", + " \"2035-01-01.2100-12-31\": 29000\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.2.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 98600,\n", + " \"2027-01-01.2027-12-31\": 100700,\n", + " \"2028-01-01.2028-12-31\": 102800,\n", + " \"2029-01-01.2029-12-31\": 104800,\n", + " \"2030-01-01.2030-12-31\": 106900,\n", + " \"2031-01-01.2031-12-31\": 109000,\n", + " \"2032-01-01.2032-12-31\": 111100,\n", + " \"2033-01-01.2033-12-31\": 113300,\n", + " \"2034-01-01.2034-12-31\": 115600,\n", + " \"2035-01-01.2100-12-31\": 117900\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.3.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 199000,\n", + " \"2027-01-01.2027-12-31\": 203250,\n", + " \"2028-01-01.2028-12-31\": 207350,\n", + " \"2029-01-01.2029-12-31\": 211450,\n", + " \"2030-01-01.2030-12-31\": 215600,\n", + " \"2031-01-01.2031-12-31\": 219900,\n", + " \"2032-01-01.2032-12-31\": 224250,\n", + " \"2033-01-01.2033-12-31\": 228700,\n", + " \"2034-01-01.2034-12-31\": 233200,\n", + " \"2035-01-01.2100-12-31\": 237850\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.4.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 303250,\n", + " \"2027-01-01.2027-12-31\": 309700,\n", + " \"2028-01-01.2028-12-31\": 315950,\n", + " \"2029-01-01.2029-12-31\": 322200,\n", + " \"2030-01-01.2030-12-31\": 328550,\n", + " \"2031-01-01.2031-12-31\": 335050,\n", + " \"2032-01-01.2032-12-31\": 341700,\n", + " \"2033-01-01.2033-12-31\": 348450,\n", + " \"2034-01-01.2034-12-31\": 355400,\n", + " \"2035-01-01.2100-12-31\": 362450\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.5.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 541550,\n", + " \"2027-01-01.2027-12-31\": 553050,\n", + " \"2028-01-01.2028-12-31\": 564200,\n", + " \"2029-01-01.2029-12-31\": 575400,\n", + " \"2030-01-01.2030-12-31\": 586750,\n", + " \"2031-01-01.2031-12-31\": 598350,\n", + " \"2032-01-01.2032-12-31\": 610200,\n", + " \"2033-01-01.2033-12-31\": 622300,\n", + " \"2034-01-01.2034-12-31\": 634650,\n", + " \"2035-01-01.2100-12-31\": 647250\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.6.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 611750,\n", + " \"2027-01-01.2027-12-31\": 624700,\n", + " \"2028-01-01.2028-12-31\": 637350,\n", + " \"2029-01-01.2029-12-31\": 649950,\n", + " \"2030-01-01.2030-12-31\": 662800,\n", + " \"2031-01-01.2031-12-31\": 675900,\n", + " \"2032-01-01.2032-12-31\": 689250,\n", + " \"2033-01-01.2033-12-31\": 702950,\n", + " \"2034-01-01.2034-12-31\": 716900,\n", + " \"2035-01-01.2100-12-31\": 731150\n", + " },\n", + " \"gov.irs.income.amt.exemption.amount.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 70600,\n", + " \"2027-01-01.2027-12-31\": 72100,\n", + " \"2028-01-01.2028-12-31\": 73500,\n", + " \"2029-01-01.2029-12-31\": 75000,\n", + " \"2030-01-01.2030-12-31\": 76400,\n", + " \"2031-01-01.2031-12-31\": 78000,\n", + " \"2032-01-01.2032-12-31\": 79500,\n", + " \"2033-01-01.2033-12-31\": 81100,\n", + " \"2034-01-01.2034-12-31\": 82700,\n", + " \"2035-01-01.2100-12-31\": 84300\n", + " },\n", + " \"gov.irs.income.amt.exemption.phase_out.start.SEPARATE\": {\n", + " \"2026-01-01.2026-12-31\": 104600,\n", + " \"2027-01-01.2027-12-31\": 106800,\n", + " \"2028-01-01.2028-12-31\": 108950,\n", + " \"2029-01-01.2029-12-31\": 111100,\n", + " \"2030-01-01.2030-12-31\": 113300,\n", + " \"2031-01-01.2031-12-31\": 115550,\n", + " \"2032-01-01.2032-12-31\": 117850,\n", + " \"2033-01-01.2033-12-31\": 120150,\n", + " \"2034-01-01.2034-12-31\": 122550,\n", + " \"2035-01-01.2100-12-31\": 125000\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.1.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 17350,\n", + " \"2027-01-01.2027-12-31\": 17700,\n", + " \"2028-01-01.2028-12-31\": 18050,\n", + " \"2029-01-01.2029-12-31\": 18400,\n", + " \"2030-01-01.2030-12-31\": 18800,\n", + " \"2031-01-01.2031-12-31\": 19150,\n", + " \"2032-01-01.2032-12-31\": 19550,\n", + " \"2033-01-01.2033-12-31\": 19900,\n", + " \"2034-01-01.2034-12-31\": 20300,\n", + " \"2035-01-01.2100-12-31\": 20700\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.2.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 66050,\n", + " \"2027-01-01.2027-12-31\": 67450,\n", + " \"2028-01-01.2028-12-31\": 68850,\n", + " \"2029-01-01.2029-12-31\": 70200,\n", + " \"2030-01-01.2030-12-31\": 71550,\n", + " \"2031-01-01.2031-12-31\": 73000,\n", + " \"2032-01-01.2032-12-31\": 74450,\n", + " \"2033-01-01.2033-12-31\": 75900,\n", + " \"2034-01-01.2034-12-31\": 77400,\n", + " \"2035-01-01.2100-12-31\": 78950\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.3.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 170550,\n", + " \"2027-01-01.2027-12-31\": 174150,\n", + " \"2028-01-01.2028-12-31\": 177700,\n", + " \"2029-01-01.2029-12-31\": 181200,\n", + " \"2030-01-01.2030-12-31\": 184800,\n", + " \"2031-01-01.2031-12-31\": 188450,\n", + " \"2032-01-01.2032-12-31\": 192150,\n", + " \"2033-01-01.2033-12-31\": 195950,\n", + " \"2034-01-01.2034-12-31\": 199850,\n", + " \"2035-01-01.2100-12-31\": 203850\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.4.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 276200,\n", + " \"2027-01-01.2027-12-31\": 282050,\n", + " \"2028-01-01.2028-12-31\": 287750,\n", + " \"2029-01-01.2029-12-31\": 293450,\n", + " \"2030-01-01.2030-12-31\": 299250,\n", + " \"2031-01-01.2031-12-31\": 305150,\n", + " \"2032-01-01.2032-12-31\": 311200,\n", + " \"2033-01-01.2033-12-31\": 317350,\n", + " \"2034-01-01.2034-12-31\": 323650,\n", + " \"2035-01-01.2100-12-31\": 330100\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.5.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 541550,\n", + " \"2027-01-01.2027-12-31\": 553050,\n", + " \"2028-01-01.2028-12-31\": 564200,\n", + " \"2029-01-01.2029-12-31\": 575400,\n", + " \"2030-01-01.2030-12-31\": 586750,\n", + " \"2031-01-01.2031-12-31\": 598350,\n", + " \"2032-01-01.2032-12-31\": 610200,\n", + " \"2033-01-01.2033-12-31\": 622300,\n", + " \"2034-01-01.2034-12-31\": 634650,\n", + " \"2035-01-01.2100-12-31\": 647250\n", + " },\n", + " \"gov.irs.income.bracket.thresholds.6.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 577750,\n", + " \"2027-01-01.2027-12-31\": 590000,\n", + " \"2028-01-01.2028-12-31\": 601950,\n", + " \"2029-01-01.2029-12-31\": 613850,\n", + " \"2030-01-01.2030-12-31\": 625950,\n", + " \"2031-01-01.2031-12-31\": 638350,\n", + " \"2032-01-01.2032-12-31\": 651000,\n", + " \"2033-01-01.2033-12-31\": 663900,\n", + " \"2034-01-01.2034-12-31\": 677050,\n", + " \"2035-01-01.2100-12-31\": 690500\n", + " },\n", + " \"gov.irs.deductions.itemized.interest.mortgage.cap.JOINT\": {\n", + " \"2026-01-01.2100-12-31\": 1000000\n", + " },\n", + " \"gov.irs.deductions.overtime_income.cap.SURVIVING_SPOUSE\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.deductions.qbi.deduction_floor.amount[1].amount\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.credits.cdcc.phase_out.amended_structure.applies\": {\n", + " \"2026-01-01.2100-12-31\": False\n", + " },\n", + " \"gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2100-12-31\": 75000\n", + " },\n", + " \"gov.irs.deductions.itemized.interest.mortgage.cap.SINGLE\": {\n", + " \"2026-01-01.2100-12-31\": 1000000\n", + " },\n", + " \"gov.irs.deductions.overtime_income.cap.HEAD_OF_HOUSEHOLD\": {\n", + " \"2025-01-01.2100-12-31\": 0\n", + " },\n", + " \"gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2100-12-31\": 75000\n", + " },\n", + " \"gov.irs.deductions.itemized.interest.mortgage.cap.SEPARATE\": {\n", + " \"2026-01-01.2100-12-31\": 500000\n", + " },\n", + " \"gov.irs.income.amt.exemption.phase_out.start.HEAD_OF_HOUSEHOLD\": {\n", + " \"2026-01-01.2026-12-31\": 156900,\n", + " \"2027-01-01.2027-12-31\": 160200,\n", + " \"2028-01-01.2028-12-31\": 163400,\n", + " \"2029-01-01.2029-12-31\": 166700,\n", + " \"2030-01-01.2030-12-31\": 170000,\n", + " \"2031-01-01.2031-12-31\": 173300,\n", + " \"2032-01-01.2032-12-31\": 176800,\n", + " \"2033-01-01.2033-12-31\": 180300,\n", + " \"2034-01-01.2034-12-31\": 183800,\n", + " \"2035-01-01.2100-12-31\": 187500\n", + " },\n", + " \"gov.irs.income.amt.exemption.phase_out.start.SURVIVING_SPOUSE\": {\n", + " \"2026-01-01.2026-12-31\": 209200,\n", + " \"2027-01-01.2027-12-31\": 213600,\n", + " \"2028-01-01.2028-12-31\": 217900,\n", + " \"2029-01-01.2029-12-31\": 222200,\n", + " \"2030-01-01.2030-12-31\": 226600,\n", + " \"2031-01-01.2031-12-31\": 231100,\n", + " \"2032-01-01.2032-12-31\": 235700,\n", + " \"2033-01-01.2033-12-31\": 240300,\n", + " \"2034-01-01.2034-12-31\": 245100,\n", + " \"2035-01-01.2100-12-31\": 250000\n", + " }\n", + "}, \"policyengine_us\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "# Create baseline and reformed simulations\n", + "# Baseline = with the reform, Reformed = current law (without reform)\n", + "baseline = Microsimulation(dataset=\"hf://policyengine/test/NY.h5\", reform=reform)\n", + "reformed = Microsimulation(dataset=\"hf://policyengine/test/NY.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "3", + "metadata": {}, + "outputs": [], + "source": [ + "# Calculate household net income for both simulations\n", + "baseline_income = baseline.calculate(\"household_net_income\", period=2026)\n", + "reformed_income = reformed.calculate(\"household_net_income\", period=2026)\n", + "difference_income = reformed_income - baseline_income" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "aeyeb2uolqi", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dataframe has 31629 rows\n" + ] + } + ], + "source": [ + "# Create dataframe with all relevant information\n", + "# map_to='household' automatically includes 'household_weight' in the dataframe\n", + "df = baseline.calculate_dataframe(\n", + " ['household_id', 'state_fips', 'congressional_district_geoid', 'household_weight'], \n", + " map_to='household'\n", + ")\n", + "\n", + "# Rename household_weight to weight for convenience (not creating a duplicate)\n", + "df = df.rename(columns={'household_weight': 'weight'})\n", + "\n", + "# Add income columns to dataframe (these are NOT weighted, just raw values)\n", + "df['baseline_income'] = baseline_income\n", + "df['reformed_income'] = reformed_income\n", + "df['income_change'] = difference_income\n", + "\n", + "# Verify we're not double counting\n", + "print(f\"Dataframe has {len(df)} rows\")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Columns in dataframe: ['household_id', 'state_fips', 'congressional_district_geoid', 'weight', 'baseline_income', 'reformed_income', 'income_change']\n", + "\n", + "Total rows: 31629\n", + "\n", + "First few rows:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
household_idstate_fipscongressional_district_geoidweightbaseline_incomereformed_incomeincome_change
0180000036360174.14440243778.38281243778.3828120.000000
11800001363601192.84709256949.12500056949.1250000.000000
2180000236360137.88412975.00000075.0000000.000000
3180000336360181.096626275199.937500295848.50000020648.562500
41800004363601196.057053180703.937500184628.2968753924.359375
5180000536360167.776245410960.343750410653.718750-306.625000
6180000636360185.61055872823.35156272823.3515620.000000
7180000736360120.029324127268.171875128712.8281251444.656250
81800008363601159.86349523696.17968823696.1796880.000000
91800009363601123.849129329378.031250334942.0937505564.062500
\n", + "
" + ], + "text/plain": [ + " household_id state_fips congressional_district_geoid weight \\\n", + "0 1800000 36 3601 74.144402 \n", + "1 1800001 36 3601 192.847092 \n", + "2 1800002 36 3601 37.884129 \n", + "3 1800003 36 3601 81.096626 \n", + "4 1800004 36 3601 196.057053 \n", + "5 1800005 36 3601 67.776245 \n", + "6 1800006 36 3601 85.610558 \n", + "7 1800007 36 3601 20.029324 \n", + "8 1800008 36 3601 159.863495 \n", + "9 1800009 36 3601 123.849129 \n", + "\n", + " baseline_income reformed_income income_change \n", + "0 43778.382812 43778.382812 0.000000 \n", + "1 56949.125000 56949.125000 0.000000 \n", + "2 75.000000 75.000000 0.000000 \n", + "3 275199.937500 295848.500000 20648.562500 \n", + "4 180703.937500 184628.296875 3924.359375 \n", + "5 410960.343750 410653.718750 -306.625000 \n", + "6 72823.351562 72823.351562 0.000000 \n", + "7 127268.171875 128712.828125 1444.656250 \n", + "8 23696.179688 23696.179688 0.000000 \n", + "9 329378.031250 334942.093750 5564.062500 " + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display the dataframe with columns and check for duplicates\n", + "print(\"Columns in dataframe:\", df.columns.tolist())\n", + "print(f\"\\nTotal rows: {len(df)}\")\n", + "print(f\"\\nFirst few rows:\")\n", + "df.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sample_sizeavg_baseline_incomeavg_reformed_incomeavg_income_changetotal_income_change
congressional_district_geoid
36011617.0143845.171875148153.4062504308.2324226.966412e+06
36021419.0110839.648438113832.4218752992.7800294.246755e+06
36031690.0164515.906250169924.9687505409.0668959.141323e+06
36041496.0126062.164062129620.1093753557.9514165.322696e+06
3605892.083690.32031285331.4296881641.1000981.463861e+06
3606887.086829.45312588802.6484381973.1939701.750223e+06
36071186.0127848.320312132043.0937504194.7724614.975000e+06
36081067.0100501.953125103051.6953122549.7453612.720578e+06
36091264.0138191.859375142586.1718754394.2998055.554395e+06
36101387.0175475.984375181719.8750006243.8959968.660284e+06
36111398.0131290.796875135457.2656254166.4433595.824688e+06
36121440.0242408.218750251282.4843758874.2734381.277895e+07
3613869.088758.70312590908.8203122150.1230471.868457e+06
36141016.099821.906250102682.8828122860.9841312.906760e+06
3615874.099412.234375101974.4843752562.2519532.239408e+06
36161602.0155516.406250160661.1718755144.7675788.241918e+06
36171470.0138431.265625142728.3437504297.0703126.316694e+06
36181438.0113723.257812116897.4453123174.1918954.564488e+06
36191060.093198.76562595462.4609382263.7001952.399522e+06
36201302.0110184.210938113267.3906253083.1918954.014316e+06
36211012.086811.21093888742.9062501931.7066651.954887e+06
36221048.088847.53906290992.5234382144.9846192.247944e+06
36231004.088731.45312590741.1328122009.6848142.017724e+06
36241013.091033.56250093158.6015622125.0400392.152666e+06
36251138.095898.09375098287.6875002389.5964362.719361e+06
36261040.086841.66406288932.6328122090.9655762.174604e+06
\n", + "
" + ], + "text/plain": [ + " sample_size avg_baseline_income \\\n", + "congressional_district_geoid \n", + "3601 1617.0 143845.171875 \n", + "3602 1419.0 110839.648438 \n", + "3603 1690.0 164515.906250 \n", + "3604 1496.0 126062.164062 \n", + "3605 892.0 83690.320312 \n", + "3606 887.0 86829.453125 \n", + "3607 1186.0 127848.320312 \n", + "3608 1067.0 100501.953125 \n", + "3609 1264.0 138191.859375 \n", + "3610 1387.0 175475.984375 \n", + "3611 1398.0 131290.796875 \n", + "3612 1440.0 242408.218750 \n", + "3613 869.0 88758.703125 \n", + "3614 1016.0 99821.906250 \n", + "3615 874.0 99412.234375 \n", + "3616 1602.0 155516.406250 \n", + "3617 1470.0 138431.265625 \n", + "3618 1438.0 113723.257812 \n", + "3619 1060.0 93198.765625 \n", + "3620 1302.0 110184.210938 \n", + "3621 1012.0 86811.210938 \n", + "3622 1048.0 88847.539062 \n", + "3623 1004.0 88731.453125 \n", + "3624 1013.0 91033.562500 \n", + "3625 1138.0 95898.093750 \n", + "3626 1040.0 86841.664062 \n", + "\n", + " avg_reformed_income avg_income_change \\\n", + "congressional_district_geoid \n", + "3601 148153.406250 4308.232422 \n", + "3602 113832.421875 2992.780029 \n", + "3603 169924.968750 5409.066895 \n", + "3604 129620.109375 3557.951416 \n", + "3605 85331.429688 1641.100098 \n", + "3606 88802.648438 1973.193970 \n", + "3607 132043.093750 4194.772461 \n", + "3608 103051.695312 2549.745361 \n", + "3609 142586.171875 4394.299805 \n", + "3610 181719.875000 6243.895996 \n", + "3611 135457.265625 4166.443359 \n", + "3612 251282.484375 8874.273438 \n", + "3613 90908.820312 2150.123047 \n", + "3614 102682.882812 2860.984131 \n", + "3615 101974.484375 2562.251953 \n", + "3616 160661.171875 5144.767578 \n", + "3617 142728.343750 4297.070312 \n", + "3618 116897.445312 3174.191895 \n", + "3619 95462.460938 2263.700195 \n", + "3620 113267.390625 3083.191895 \n", + "3621 88742.906250 1931.706665 \n", + "3622 90992.523438 2144.984619 \n", + "3623 90741.132812 2009.684814 \n", + "3624 93158.601562 2125.040039 \n", + "3625 98287.687500 2389.596436 \n", + "3626 88932.632812 2090.965576 \n", + "\n", + " total_income_change \n", + "congressional_district_geoid \n", + "3601 6.966412e+06 \n", + "3602 4.246755e+06 \n", + "3603 9.141323e+06 \n", + "3604 5.322696e+06 \n", + "3605 1.463861e+06 \n", + "3606 1.750223e+06 \n", + "3607 4.975000e+06 \n", + "3608 2.720578e+06 \n", + "3609 5.554395e+06 \n", + "3610 8.660284e+06 \n", + "3611 5.824688e+06 \n", + "3612 1.277895e+07 \n", + "3613 1.868457e+06 \n", + "3614 2.906760e+06 \n", + "3615 2.239408e+06 \n", + "3616 8.241918e+06 \n", + "3617 6.316694e+06 \n", + "3618 4.564488e+06 \n", + "3619 2.399522e+06 \n", + "3620 4.014316e+06 \n", + "3621 1.954887e+06 \n", + "3622 2.247944e+06 \n", + "3623 2.017724e+06 \n", + "3624 2.152666e+06 \n", + "3625 2.719361e+06 \n", + "3626 2.174604e+06 " + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Analyze impact by congressional district\n", + "import pandas as pd\n", + "\n", + "district_impacts = df.groupby('congressional_district_geoid').apply(\n", + " lambda x: pd.Series({\n", + " 'sample_size': len(x),\n", + " 'avg_baseline_income': x['baseline_income'].mean(),\n", + " 'avg_reformed_income': x['reformed_income'].mean(),\n", + " 'avg_income_change': x['income_change'].mean(),\n", + " 'total_income_change': x['income_change'].sum()\n", + " })\n", + ")\n", + "\n", + "district_impacts" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "xjb173w5h3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sample_sizeavg_baseline_incomeavg_reformed_incomeavg_income_changetotal_income_change
congressional_district_geoid
36121440.0242408.218750251282.4843758874.2734381.277895e+07
36101387.0175475.984375181719.8750006243.8959968.660284e+06
36031690.0164515.906250169924.9687505409.0668959.141323e+06
36161602.0155516.406250160661.1718755144.7675788.241918e+06
36091264.0138191.859375142586.1718754394.2998055.554395e+06
36011617.0143845.171875148153.4062504308.2324226.966412e+06
36171470.0138431.265625142728.3437504297.0703126.316694e+06
36071186.0127848.320312132043.0937504194.7724614.975000e+06
36111398.0131290.796875135457.2656254166.4433595.824688e+06
36041496.0126062.164062129620.1093753557.9514165.322696e+06
36181438.0113723.257812116897.4453123174.1918954.564488e+06
36201302.0110184.210938113267.3906253083.1918954.014316e+06
36021419.0110839.648438113832.4218752992.7800294.246755e+06
36141016.099821.906250102682.8828122860.9841312.906760e+06
3615874.099412.234375101974.4843752562.2519532.239408e+06
36081067.0100501.953125103051.6953122549.7453612.720578e+06
36251138.095898.09375098287.6875002389.5964362.719361e+06
36191060.093198.76562595462.4609382263.7001952.399522e+06
3613869.088758.70312590908.8203122150.1230471.868457e+06
36221048.088847.53906290992.5234382144.9846192.247944e+06
36241013.091033.56250093158.6015622125.0400392.152666e+06
36261040.086841.66406288932.6328122090.9655762.174604e+06
36231004.088731.45312590741.1328122009.6848142.017724e+06
3606887.086829.45312588802.6484381973.1939701.750223e+06
36211012.086811.21093888742.9062501931.7066651.954887e+06
3605892.083690.32031285331.4296881641.1000981.463861e+06
\n", + "
" + ], + "text/plain": [ + " sample_size avg_baseline_income \\\n", + "congressional_district_geoid \n", + "3612 1440.0 242408.218750 \n", + "3610 1387.0 175475.984375 \n", + "3603 1690.0 164515.906250 \n", + "3616 1602.0 155516.406250 \n", + "3609 1264.0 138191.859375 \n", + "3601 1617.0 143845.171875 \n", + "3617 1470.0 138431.265625 \n", + "3607 1186.0 127848.320312 \n", + "3611 1398.0 131290.796875 \n", + "3604 1496.0 126062.164062 \n", + "3618 1438.0 113723.257812 \n", + "3620 1302.0 110184.210938 \n", + "3602 1419.0 110839.648438 \n", + "3614 1016.0 99821.906250 \n", + "3615 874.0 99412.234375 \n", + "3608 1067.0 100501.953125 \n", + "3625 1138.0 95898.093750 \n", + "3619 1060.0 93198.765625 \n", + "3613 869.0 88758.703125 \n", + "3622 1048.0 88847.539062 \n", + "3624 1013.0 91033.562500 \n", + "3626 1040.0 86841.664062 \n", + "3623 1004.0 88731.453125 \n", + "3606 887.0 86829.453125 \n", + "3621 1012.0 86811.210938 \n", + "3605 892.0 83690.320312 \n", + "\n", + " avg_reformed_income avg_income_change \\\n", + "congressional_district_geoid \n", + "3612 251282.484375 8874.273438 \n", + "3610 181719.875000 6243.895996 \n", + "3603 169924.968750 5409.066895 \n", + "3616 160661.171875 5144.767578 \n", + "3609 142586.171875 4394.299805 \n", + "3601 148153.406250 4308.232422 \n", + "3617 142728.343750 4297.070312 \n", + "3607 132043.093750 4194.772461 \n", + "3611 135457.265625 4166.443359 \n", + "3604 129620.109375 3557.951416 \n", + "3618 116897.445312 3174.191895 \n", + "3620 113267.390625 3083.191895 \n", + "3602 113832.421875 2992.780029 \n", + "3614 102682.882812 2860.984131 \n", + "3615 101974.484375 2562.251953 \n", + "3608 103051.695312 2549.745361 \n", + "3625 98287.687500 2389.596436 \n", + "3619 95462.460938 2263.700195 \n", + "3613 90908.820312 2150.123047 \n", + "3622 90992.523438 2144.984619 \n", + "3624 93158.601562 2125.040039 \n", + "3626 88932.632812 2090.965576 \n", + "3623 90741.132812 2009.684814 \n", + "3606 88802.648438 1973.193970 \n", + "3621 88742.906250 1931.706665 \n", + "3605 85331.429688 1641.100098 \n", + "\n", + " total_income_change \n", + "congressional_district_geoid \n", + "3612 1.277895e+07 \n", + "3610 8.660284e+06 \n", + "3603 9.141323e+06 \n", + "3616 8.241918e+06 \n", + "3609 5.554395e+06 \n", + "3601 6.966412e+06 \n", + "3617 6.316694e+06 \n", + "3607 4.975000e+06 \n", + "3611 5.824688e+06 \n", + "3604 5.322696e+06 \n", + "3618 4.564488e+06 \n", + "3620 4.014316e+06 \n", + "3602 4.246755e+06 \n", + "3614 2.906760e+06 \n", + "3615 2.239408e+06 \n", + "3608 2.720578e+06 \n", + "3625 2.719361e+06 \n", + "3619 2.399522e+06 \n", + "3613 1.868457e+06 \n", + "3622 2.247944e+06 \n", + "3624 2.152666e+06 \n", + "3626 2.174604e+06 \n", + "3623 2.017724e+06 \n", + "3606 1.750223e+06 \n", + "3621 1.954887e+06 \n", + "3605 1.463861e+06 " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Sort districts by total income change to see which are most affected\n", + "district_impacts_sorted = district_impacts.sort_values('avg_income_change', ascending=False)\n", + "district_impacts_sorted" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "ivjjvnw38dh", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "To use this visualization, you need to download the HexCDv31 shapefile folder from:\n", + "https://github.com/PolicyEngine/Congressional-Hackathon-2025/tree/ben-hacks/PolicyEngine/HexCDv31\n", + "Extract it to the 'obbba_district_impacts' directory\n" + ] + } + ], + "source": [ + "# Download and prepare hexagon shapefiles for visualization\n", + "import urllib.request\n", + "import zipfile\n", + "import os\n", + "\n", + "# Create directory for shapefiles if it doesn't exist\n", + "os.makedirs('HexCDv31', exist_ok=True)\n", + "\n", + "# Download the hexagon shapefile\n", + "shapefile_url = 'https://github.com/PolicyEngine/Congressional-Hackathon-2025/raw/ben-hacks/PolicyEngine/HexCDv31.zip'\n", + "\n", + "# Note: You may need to manually download from the repo if this fails\n", + "# Download link: https://github.com/PolicyEngine/Congressional-Hackathon-2025/tree/ben-hacks/PolicyEngine/HexCDv31\n", + "\n", + "print(\"To use this visualization, you need to download the HexCDv31 shapefile folder from:\")\n", + "print(\"https://github.com/PolicyEngine/Congressional-Hackathon-2025/tree/ben-hacks/PolicyEngine/HexCDv31\")\n", + "print(\"Extract it to the 'obbba_district_impacts' directory\")" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "iwexbldeti", + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'geopandas'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[36], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# Create NY congressional district map visualization\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mgeopandas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mgpd\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpyplot\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mplt\u001b[39;00m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mnp\u001b[39;00m\n", + "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'geopandas'" + ] + } + ], + "source": [ + "# Create NY congressional district map visualization\n", + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Load the hexagon shapefile\n", + "hex_gdf = gpd.read_file('HexCDv31/HexCDv31.shp')\n", + "\n", + "# Convert GEOID to integer for merging\n", + "hex_gdf['cd_geoid'] = hex_gdf['GEOID'].astype(int)\n", + "\n", + "# Filter to only NY districts (state FIPS code 36)\n", + "ny_hex = hex_gdf[hex_gdf['GEOID'].str.startswith('36')].copy()\n", + "\n", + "print(f\"Found {len(ny_hex)} NY congressional districts in shapefile\")\n", + "\n", + "# Prepare district impacts for merging\n", + "district_impacts_merge = district_impacts.reset_index()\n", + "district_impacts_merge['cd_geoid'] = district_impacts_merge['congressional_district_geoid'].astype(int)\n", + "\n", + "# Merge the geographic data with impact data\n", + "ny_map = ny_hex.merge(\n", + " district_impacts_merge[['cd_geoid', 'avg_income_change', 'sample_size']], \n", + " on='cd_geoid', \n", + " how='left'\n", + ")\n", + "\n", + "print(f\"\\nMerged data: {len(ny_map)} districts\")\n", + "print(f\"Districts with impact data: {ny_map['avg_income_change'].notna().sum()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9xl9qp0qe3b", + "metadata": {}, + "outputs": [], + "source": [ + "# Plot NY congressional district income changes\n", + "fig, ax = plt.subplots(figsize=(12, 10))\n", + "\n", + "# Create the choropleth map\n", + "ny_map.plot(\n", + " column='avg_income_change',\n", + " cmap='RdYlGn', # Red for negative (income loss), Green for positive (income gain)\n", + " legend=True,\n", + " ax=ax,\n", + " edgecolor='black',\n", + " linewidth=0.5,\n", + " missing_kwds={'color': 'lightgray'}\n", + ")\n", + "\n", + "# Add district labels\n", + "for idx, row in ny_map.iterrows():\n", + " # Get the centroid of each district\n", + " centroid = row.geometry.centroid\n", + " # Extract district number from GEOID (last 2 digits)\n", + " district_num = str(row['GEOID'])[-2:]\n", + " ax.text(centroid.x, centroid.y, district_num, \n", + " fontsize=8, ha='center', va='center', weight='bold')\n", + "\n", + "ax.set_title('Average Change in Net Income by NY Congressional District\\n(Reform vs Current Law)', \n", + " fontsize=14, weight='bold')\n", + "ax.axis('off')\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig('ny_district_income_impact.png', dpi=300, bbox_inches='tight')\n", + "plt.show()\n", + "\n", + "print(f\"\\nMap saved as 'ny_district_income_impact.png'\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1kcfqwyrsfm", + "metadata": {}, + "outputs": [], + "source": [ + "# Summary statistics for the map\n", + "print(\"NY Congressional District Income Impact Summary:\")\n", + "print(\"=\"*60)\n", + "print(f\"\\nMost negatively impacted (largest income loss):\")\n", + "top_losers = district_impacts_sorted.head(3)\n", + "for idx, row in top_losers.iterrows():\n", + " district_num = str(idx)[-2:]\n", + " print(f\" District {district_num}: ${row['avg_income_change']:,.2f}\")\n", + "\n", + "print(f\"\\nLeast impacted or gaining income:\")\n", + "top_gainers = district_impacts_sorted.tail(3)\n", + "for idx, row in top_gainers.iterrows():\n", + " district_num = str(idx)[-2:]\n", + " print(f\" District {district_num}: ${row['avg_income_change']:,.2f}\")\n", + "\n", + "print(f\"\\nOverall statistics:\")\n", + "print(f\" Mean impact: ${district_impacts['avg_income_change'].mean():,.2f}\")\n", + "print(f\" Median impact: ${district_impacts['avg_income_change'].median():,.2f}\")\n", + "print(f\" Range: ${district_impacts['avg_income_change'].min():,.2f} to ${district_impacts['avg_income_change'].max():,.2f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "j8m8s0pephe", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exported district impacts to 'ny_congressional_district_impacts.csv'\n" + ] + } + ], + "source": [ + "# Export district impacts to CSV\n", + "district_impacts.to_csv('ny_congressional_district_impacts.csv')\n", + "print(\"Exported district impacts to 'ny_congressional_district_impacts.csv'\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "0s7cq08o1r6f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State-wide Impact Summary for NY:\n", + "Total sample size: 31629\n", + "\n", + "Average baseline income: $122,364.39\n", + "Average reformed income: $125,820.82\n", + "Average income change per household: $3,456.43\n", + "\n", + "Total state-wide income change (unweighted): $22,798,964,353\n" + ] + } + ], + "source": [ + "# State-wide summary statistics (unweighted)\n", + "print(\"State-wide Impact Summary for NY:\")\n", + "print(f\"Total sample size: {len(df)}\")\n", + "print(f\"\\nAverage baseline income: ${df['baseline_income'].mean():,.2f}\")\n", + "print(f\"Average reformed income: ${df['reformed_income'].mean():,.2f}\")\n", + "print(f\"Average income change per household: ${df['income_change'].mean():,.2f}\")\n", + "print(f\"\\nTotal state-wide income change (unweighted): ${df['income_change'].sum():,.0f}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pe", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}