There was a recent bill introduced in the North Carolina General
Assembly to reorganise the city counsel by two Republican state members
of the General Assembly. The status quo is that there are a total of
eight wards, each with a seat on the city counsel. The mayor votes only
when there is a tie. As things are, the current city counsel is composed
of four Black individuals and four white men, with a white man as mayor.
The proposal from the General Assembly is to collapse several of the
ward seats into five wards and then create three permanent at-large city
counsel positions. Additionally, the mayor would have a vote on all
matters, not just in ties.
There is a lot going on here that this post cannot unpack. The biggest
issue is truely the political landscape in North Carolina where the
Supreme Court of the United States of America is actively hearing a case
on gerrymandering where a member of the general assembly admitted to
voter packing. Additionally, Winston-Salem has an interesting
relationship with racial and political sorting. All of these elements
are at play with this new proposed structure. Additionaly, the members
whose wards would be collapsed would be the three Black women who are
currently on the city counsel. This paired with reducing terms to two
hears makes it logistically harder to run campaigns (shorter term
lengths mean more campaigning, at-large positions favor people with cash
to campaign all over the city, etc). Just a lot happening that can’t be
completely unpacked. See
here
for more details.
Analysis
I am going to take some historical voting records and see given the new
ward proposal how the seats would have fallen. Again, this is a quick
analysis and more work could defitely be done on this.
And now because the records of each primary are made public, I will
download them and read them in. Excuse the messiness; I imagine there is
an easier way to do this, but the NC Board of Elections elected to
change their output format between the years, so it is quicker just to
read the files in one at a time as there aren’t too many of them. All of
the data are available here if
you would like to play along.
This data frame includes all precinct level reporting for each
election. For the sake of this analysis I want to reduce my scope down
to just Forsyth County, the home county of Winston-Salem.
Upon inspection of the data it is interesting to note that straight
party tickets were once allowed. This practice was outlawed by the North
Carolina General Assembly in 2013 (Lynch
n.d.).
Further, if I just wanted to look look a city counsel elections, the
subject of this analysis I could do the following actions.
Just as a reminder the last city counsel elections occured in 2016.
Previous legislation moved the city counsel elections to presidential
election years. Additionaly, citizens have the option of writing in
candidates, so that can explain some of the votes for “others.”
Looking at the overall 2016 city counsel elections we can see the
following:
We can see pretty easily from this analysis that Winston-Salem is pretty
solidly democratic, with the exception of the West ward where not a
single vote was cast of a democratic candidate. The only truly
competitive districts were the South and Northwest wards which still
strongly favoured democratic candidates. However, one of the major
take-aways here is that there is evidence of strong population sorting
occuring with solidly democratic neighborhoods and solidly republican
neighborhoods.
New Proposal
So let’s see how this all plays out under the new proposed wards. If
take the 2016 election and group by Wards we see that there still will
only be one strong Republican ward, Ward 5. One thing that occludes a
stronger take on this is that absentee ballots are not assigned to a
precinct.
city_consel_elections %>%mutate(choice_party=ifelse(is.na(choice_party)|choice_party=="","Other", choice_party))%>%group_by(election, new_ward, choice_party)%>%summarise(total_vote=sum(total_votes))%>%spread(choice_party, total_vote)%>%ungroup()%>%mutate(DEM_vote_share= scales::percent(DEM /(DEM + REP + Other)))%>%
knitr::kable(caption="Vote Share By Ward, 2016 City Counsel Elections")
And we can see that while many absentee votes are democratic the margins
could say some of the above districts to be more competitive. Because of
this it is probably worth looking and historical voting.
city_consel_elections %>%mutate(choice_party=ifelse(is.na(choice_party)|choice_party=="","Other", choice_party))%>%group_by(contest_name, choice_party)%>%summarise(total_ab=sum(absentee_by_mail))%>%mutate(percent= scales::percent(total_ab/sum(total_ab)))%>%mutate(metric=paste0(percent," n= ", total_ab))%>%select(-total_ab,-percent)%>%spread(choice_party, metric)%>%
knitr::kable(caption="Breakdown of Absentee Ballots, 2016 City Counsel Elections")
NC Voter History
nc_voter_vistory <-read_tsv("data/ncvhis34.txt")
Additionally, let’s use the 2016 presidential election using the voter
history files from the NC Board of Elections
here.
nc_voter_vistory %>%left_join(proposed_wards)%>%filter(!is.na(new_ward))%>%filter(election_desc =="11/08/2016 GENERAL")%>%filter(!is.na(voted_party_desc))%>%mutate(voted_party_desc=ifelse(voted_party_desc=="LIBERTARIAN","REPUBLICAN", voted_party_desc))%>%group_by(new_ward, voted_party_desc)%>%summarise(n=n())%>%mutate(vote_share=round(n/sum(n)*100,0))%>%
knitr::kable(caption="Vote Share By New Ward, 2016 Voters Party Affiliations")
Again, what is interesting here is that all but one of the Wards start
with a clearly identified Democratic plurality.
Voter Efficiency
While not the best metric we can look at the efficiency
gap. So looking at the
current situation we see that there is a:
Lynch, Harry. n.d. “Elimination of Straight-Ticket Voting Could Leave
More Ballots Incomplete.” *Newsobserver*. Accessed April 8, 2019.
.
[^1]: Reall what I should be doing here is writing a function that
inspects what kind of delimiter is being used in the file and then
import accordingly. However, I’m a bit lazy at the moment and not
going to do that. The plus sides for doing that method is most
importantly it is more reprocible and scalable should I go back and
look at previous data. Additionally, I could do a `map` function to
read and apply the newly written function rather than writing
piecemeal as I am now.
Citation
BibTex citation:
@online{dewitt2019 author = {Michael E. DeWitt}, title = {Re-districting in Winston-Salem}, date = 2019-04-08, url = {https://michaeldewittjr.com/articles/2019-04-08-re-districting-in-winston-salem}, langid = {en} }