Web Scraping Historical U.S. Presidents' Data

Gregory Domingo
Posted on Aug 20, 2016

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.


Data Analysis

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.USPresPrior


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.


MosaicPlotSince 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 procInfluencePlotess 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.

About Author

Gregory Domingo

Gregory Domingo

Built his career in the financial services industry (fixed income research and fixed income portfolio management) in New York. and moved back to the Philippines in 1995. Has been involved since then in senior management positions in both...
View all posts by Gregory Domingo >

Leave a Comment

Knockoff van cleef and arpels necklace yellow gold June 24, 2017
Mercola is not a credible source. The same website continues to claim a link between vaccines and autism. This article, however, is very comprehensive and weighs the pros and cons very well. Great read! Knockoff van cleef and arpels necklace yellow gold http://www.accessoireslamode.in/en/vca-vintage-alhambra-yellow-gold-long-necklace-turquoise-p44/

View Posts by Categories

Our Recent Popular Posts

View Posts by Tags

#python #trainwithnycdsa 2019 airbnb Alex Baransky alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus API Application artist aws beautiful soup Best Bootcamp Best Data Science 2019 Best Data Science Bootcamp Best Data Science Bootcamp 2020 Best Ranked Big Data Book Launch Book-Signing bootcamp Bootcamp Alumni Bootcamp Prep Bundles California Cancer Research capstone Career Career Day citibike clustering Coding Course Demo Course Report D3.js data Data Analyst data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization Deep Learning Demo Day Discount dplyr employer networking feature engineering Finance Financial Data Science Flask gbm Get Hired ggplot2 googleVis Hadoop higgs boson Hiring hiring partner events Hiring Partners Industry Experts Instructor Blog Instructor Interview Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter lasso regression Lead Data Scienctist Lead Data Scientist leaflet linear regression Logistic Regression machine learning Maps matplotlib Medical Research Meet the team meetup Networking neural network Neural networks New Courses nlp NYC NYC Data Science nyc data science academy NYC Open Data NYCDSA NYCDSA Alumni Online Online Bootcamp Open Data painter pandas Part-time Portfolio Development prediction Prework Programming PwC python python machine learning python scrapy python web scraping python webscraping Python Workshop R R language R Programming R Shiny r studio R Visualization R Workshop R-bloggers random forest Ranking recommendation recommendation system regression Remote remote data science bootcamp Scrapy scrapy visualization seaborn Selenium sentiment analysis Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau team TensorFlow Testimonial tf-idf Top Data Science Bootcamp twitter visualization web scraping Weekend Course What to expect word cloud word2vec XGBoost yelp