Web Scraping Historical U.S. Presidents' Data
On our 6th week with the NYC Data Science Academy Bootcamp, we went into full swing with our third individual project which is web scraping and data analysis.
I decided to target the site http://www.presidentsusa.net/presvplist.html which contains the complete list of all the US presidents and vice presidents. The site also contained the years they were in office and the parties they belonged to.
The analysis focused on searching for patterns if any in the cycle of the two parties winning the election given the historical data in the site.
The Process And Tools Used
Primary tools used to scrape the web were Python combined with Requests, Beautiful Soup and Regex. Requests downloaded the website in html format, Beautiful Soup then parsed the html code to retrieve the relevant "info" and Python with Regex did the data transformation to make it suitable for statistical analysis. In my view, the ideal case is to be able to parse as much in BS so that Python can be used more to restructure the data rather than to parse data.
The Python output was then loaded into R for the exploratory data analysis and logistic regression modelling.
Using Requests to download the webpage was quite easy. Beautiful Soup(BS) took sometime to get used to for someone like me who was using it for the first time. Below is a snippet of code using Python with BS to parse data.
The complete data goes all the way back to George Washington, the first President of the United States of America. However, since the analysis only covers Democrats and Republicans, the data was truncated to start 132 years ago (or 33 terms) because that was the start of the era when only these two parties have occupied the White House.
A quick look at the data (figure above left) shows that number of 4 year terms that the Democrats and Republicans have sat in the White House is quite even - 16 versus 17, respectively.
An interesting observation is that Republicans seem to win more when the prior incumbent is a Republican as well (figure above right). Democrats, however, show no difference in winning whether the prior occupant of the White House is a Democrat or Republican.
I also looked at the number of Republican administrations in the last 4 terms and tried to see if there is any pattern that would show up visually. It seems Republicans win more than the usual when a Republican has been in the White House in any two of the last 4 administrations which are shown both in the bar plot and the mosaic plot below.
Since this is a classification exercise, the logistic regression model was used to see if a good predictive model can be constructed to predict whether an an incoming administration will be a Democrat or a Republican. Three predictive variables are used: the party of the incumbent administration, the number of Republican terms in the last four administrations, and whether the incumbent was reelected or not.
The glm model in R was used for the analysis. The resulting model had a low Mc Faddens Pseudo R-squared result of 0.048 which indicates it is not a good predictive model. A snippet of the R code that runs this section is contained in the site of the link : https://gist.github.com/gldomingo/b3f72d1fe10bb06d0840210d682df9ac
Nevertheless, for practice I just proceeded with the logistic regression process of checking for outliers by running the influence plot. The results are shown on the right. I checked #17 and it is a valid entry so I decided to keep it.
The variables were reduced from three to two by taking out the reelection variable. The chi-squared test comparing the three variable model and the two variable model did not show any significant difference so the two variable model was was used to make a predictive model.
Of course, the last step is to predict based on the two predictor variables by inputting the values as of today. The value for the incumbent is Democrat and the Republicans have held 2 of the last four terms.
And so the winner is . . .
It will have to wait until I am able to develop a better model.
Even though no significant findings came out of the analysis, this project was an eye opener in another way. It showed me the abundance of publicly available data that is waiting to be analysed. The fact that anyone can download, collect and analyse data from any website is truly awesome and I can't wait to try another web scraping project after this bootcamp is done. Data science is here to stay for a long time.