Harlem Election Rematch: Money and Demographics in the 13th

03:00 PM - 03:30 PM on August 16, 2014, Room 704

Haronil Estevez

Audience level:


Changing demographics in New York State's 13th Congressional District led to a close election that was decided by fewer than 1,100 votes two years ago. The contest between the long standing incumbent Representative Charles B. Rangel and State Senator Adriano D. Espaillat will be replayed this June. In this talk I will use Python Numpy and pandas to analyze campaign contribution data provided for each candidate provided by the US Federal Election Commission and the United State Census Bureau.

The talk will explain how to group campaign contributors by categories such as State and Occupation, and will show how to plot aggregated statistics as a bar plot and on map. It will also explore whether one candidate received many small contributions or a small number of big contributions. The talk will explore whether these donation distributions had a bigger impact on the election results versus endorsements from well known politicians. Finally, it will explore the effect of an increase in the Latino population and gentrification.


American political contests are often dominated by incumbents. Such is the case in New York State's 13th Congressional District. The incumbent, Charles B. Rangel, was first elected to lead the district in 1970. Nicknamed The Lion Of Harlem, Rangel won his seat from another long winning incumbent, Adam Clayton Powell, Jr. aka King of the Cats.

Fast forward to the 21st century and a Latino seeking to unseat Mr. Rangel in 2012, State Senator Adriano D. Espaillat. came within a hair's breadth (1,100 votes). That election was replayed this June, 2014. With power of Python we can analyze campaign contribution data provided by the Federal Election Commission and the United State Census Bureau to find any patterns that might have given the eventual winner the upper hand.

Specifically Python Numpy and pandas give us the power to categorize the raw FEC data and apply various functions (eg. aggregation) to answer questions such as "If grouped by Occupation, which group donated the most to the winning candidate?" and "Did the more generous zip codes have higher voter turnout?"

We can also analyze the demographics of the electorate to figure out if there was a big difference in voter turnout by different racial groups.

In addition, we can plot and visualize our summarized data sets using the matplotlib and basemap toolkits.