Philadelphia City Council · a simulation

What if City Council actually looked like Philly?

Today, 10 districts each pick one winner and the 7 at-large seats are split by a fixed rule: 5 for the biggest party, 2 for the runner-up. Below, compare that with proportional representation. The version shown here is the single transferable vote (STV): voters just rank candidates in order of preference, it is a form of ranked-choice voting, and Philadelphia's voting machines already support it.

This is a simulation, not a prediction. To keep it simple, every voter in a group is assumed to vote only for candidates from that group (a Black voter always ranks Black candidates, a renter always ranks renters, and so on). Real people are not that predictable; the point is to see how each system responds when the electorate changes.

1 Who votes?

Pick how to group voters, then drag the sliders. Starting values are real data for each council district.

Adjust individual districts

Each district's sliders move that district only. The city-wide sliders above move every district by the same proportion.

2 Who wins?

Four ways to elect the council. The score is how closely the council mirrors the voters (100 = a perfect match).

3 Under the hood

Everything a skeptic should want to check: how each seat was awarded, every STV count round, the assumptions, and the data.

Assumptions and known limits
  • Bloc voting. Every voter ranks only candidates from their own group, and every group runs enough candidates to fill every seat. This exaggerates how “tribal” voting is. Real STV elections transfer votes across groups, which usually helps small groups a little more than shown here.
  • Party is measured by the 2023 at-large council vote. Voters could mark up to 5 names, so a Democrat and a Working Families candidate can share one ballot, and the parties fielded 5, 2 and 2 candidates. Dividing each party’s votes by its number of candidates is the fairest simple reading; the raw totals (77% Democratic) would flatter the largest party and the top-candidate reading gives the same shares within a point. Switch to “Party (2024 presidential)” to see the lopsided general-election picture instead.
  • People, not ballots. Census categories count residents (adults, households or workers, as labelled), not registered voters or turnout. Party uses actual votes cast. Non-citizens are included in census counts.
  • Today's at-large rule. Philadelphia's charter lets each voter choose 5 of the 7 at-large seats and each party nominate only 5. Under bloc voting that hands the largest group 5 seats and the second-largest 2, whatever their size. That is exactly how it has played out for parties (5 Democrats + 2 others every cycle); for other groupings it is a simplification.
  • Districts. Single-member districts are decided by plurality: the biggest group in the district wins. The five combined districts simply pair today's districts with their neighbours (1+2, 3+4, 5+7, 8+9, 6+10); no lines were redrawn.
  • STV count. Droop quota, weighted inclusive Gregory surplus transfers, lowest candidate eliminated when nobody reaches quota. Ties are broken in favour of the group listed first, which never changed a result in the default data.
  • One dimension at a time. A voter is only a party, or only a race, or only a renter. Real coalitions cut across all of these.
  • Groups of five or fewer. Small “Other” buckets are kept so the totals add to 100%, but a 4% group cannot expect a seat under any system with fewer than about 25 seats.