Using Tabula, OCR or whatever method you can, parse precinct-level results for the following counties. Original sources are in individual county files in the sources-mi repository.
The goal is to create a single CSV file for each county, with the following headers:
county, precinct, office, district, party, candidate, votes
20241105__mi__general__{county}__precinct.csv, where county is the lower case version of the county name, with punctuation removed.
If the county file also provides a breakdown of votes by method, include that using the following headers, where applicable:
early_voting, election_day, provisional, mail
If there are other possible vote types, include them, using a lowercase version of the vote type with underscores instead of spaces for the column name.
Include the following offices:
Registered Voters (if available)
Ballots Cast (if available)
President
U.S. Senate
U.S. House
State Senate
State House
County offices (including Sheriff and Register of Deeds)
If a county provides precinct results for Write-in candidates, they should be grouped in a single row for each precinct and office with a candidate value of Write-ins.
If a county provides Under Votes or Over Votes, those should be recorded in the same way, with a single row per precinct and office with Over Votes and Under Votes as the candidate values.
Using Tabula, OCR or whatever method you can, parse precinct-level results for the following counties. Original sources are in individual county files in the sources-mi repository.
The goal is to create a single CSV file for each county, with the following headers:
county
,precinct
,office
,district
,party
,candidate
,votes
Here's an example of a finished CSV file. The files should go in the 2024/counties/ folder in this repository and should have the following filename structure:
20241105__mi__general__{county}__precinct.csv
, wherecounty
is the lower case version of the county name, with punctuation removed.If the county file also provides a breakdown of votes by method, include that using the following headers, where applicable:
early_voting
,election_day
,provisional
,mail
If there are other possible vote types, include them, using a lowercase version of the vote type with underscores instead of spaces for the column name.
Include the following offices:
If a county provides precinct results for Write-in candidates, they should be grouped in a single row for each precinct and office with a
candidate
value ofWrite-ins
.If a county provides Under Votes or Over Votes, those should be recorded in the same way, with a single row per precinct and office with
Over Votes
andUnder Votes
as thecandidate
values.