Maxwell Grody

Pearl Islands voting coalitions

SQL · data validation · interactive analytics

Explore the votes ↗ (opens in a new tab)

Interactive voting charts; no model wait. Full-season spoilers.

Who votes together, and when does that change? This analysis follows Pearl Islands, the seventh season of the CBS TV show Survivor. It uses voting records from Gamebot, my warehouse of Survivor statistics, to explore that question through three linked views. A council timeline shows individual targets, a matrix compares every pair of players, and a pair history shows how agreement accumulates over the season.

In a businessAnalysts often look for recurring relationships in event records, like accounts that transact together. This project defines what counts as a fair comparison and traces every percentage back to its ballots, so a stakeholder can check a pattern before acting on it.

Technical skills: SQL · Python · Data validation · Metric definition · Interactive visualization

My contribution
I chose the Pearl Islands case study and its three views and built them on the Gamebot tables.
Result and limit
Sandra and Christa match on 8 of 9 shared ballots. The analysis excludes quit and non-voting records from the denominator.
On this page

What the records show

Sandra and Christa choose the same target on eight of their nine shared ballots. Their exception is the council where Rupert leaves. At that council, eight players divide their votes among three targets. The dashboard lets you inspect those ballots and compare other pairs, including returning players Burton and Lillian.

These are descriptions of voting behavior. They cannot establish who planned a move, who trusted whom, or whether a disagreement was a coordinated split vote.

Getting the denominator right

The source contains 104 player-event records across 16 councils. Only 96 records are included as ballots. Osten’s quit accounts for five excluded records, including four source entries naming him as the target. Three other records describe players who do not vote. The timeline preserves these exceptions instead of silently dropping them.

A pair’s denominator increases only when both players cast eligible ballots at the same council and round. Different tribes attending council in the same episode do not get compared. Returning players keep their identities, and absence does not count as disagreement. Lillian’s sole ballot at the final-three council creates no pairwise observation.

The matrix shows matching ballots and shared opportunities beneath each percentage. Its filters apply a council cutoff and a pre- or post-merge selection. The pair-history view always shows the full season and makes that scope explicit.

Data and validation

The data comes from Daniel Oehm and contributors’ survivoR dataset, through the Gamebot repository. The local snapshot was ingested on November 9, 2025. This extract excludes the Outcasts’ return vote and the final jury vote.

A SQL query selects the season. A Python build checks player-round uniqueness, consistent council metadata, eligible ballot counts, and unfamiliar voting rounds. Regression tests cover the two councils in episode seven, non-voters, returning players, a known pair, and pairs with no shared votes. The browser calculates each view from the same exported records.

The dashboard includes CSV and JSON downloads, the SQL query, and the Python build source. It runs as a static page with no database or model service behind it.

My role

I chose the Pearl Islands case study and the three views and built them. The underlying Gamebot warehouse is an earlier project.

Where this could be useful

The same analytical work comes up when event logs mix actions, absences, and special cases. Defining who had an opportunity to act is essential before comparing rates. This project makes those definitions inspectable through the original records, the calculations, and the interface.

If you are hiring, the experience page says which business problem this project shares its mechanics with.