Web scraping and Data Analysis for Investment Opportunities
The skills I demoed here can be learned through taking Data Science with Machine Learning bootcamp with NYC Data Science Academy.
Github
Background
I had been reading The Intelligent Investor by Benjamin Graham and wanted to perform some value investing/fundamental analysis research, so this motivation fit perfectly with a project that required web scraping and pandas data manipulation and analysis.
Objective
Given the limited amount of time for this project, the primary goal was to use the principles of value investing to generate a shortlist of stocks that could then warrant deeper research for potential long-term investment.
The Scrape
I chose to scrape Yahoo Finance because it is a rich source of useful information ranging from trading data, financials, analyst estimates, sustainability information, and corporate governance. All the data for a given company/ticker is organized into different sections of the website: Summary, Statistics, Profile, Financials, Analysis, etc.
Tools
I primarily used Scrapy, a fast and powerful scraping and web-crawling framework, to gather most of the desired data. I also used Selenium, an automated browser-based scraper, because some data was presented in javascript tables and could not be retrieved using scrapy (image below).
The Data
Note: all data is as of 2/11/21
With value and defensive investing as the theme, I chose to restrict the analysis to the S&P 500, the largest 500 companies in the United States, due to the reliability of the financial data, the stability of the companies, and the depth of the analyst coverage. The data that I primarily used for my analysis fell into three broad categories:
- Stock price-related information: PE ratio, dividends, beta, etc.
- Financials: ROE, ROA, profit margin, current ratio, etc.
- Governance Scores and Sustainability scores (from Institutional Shareholder Services and Sustainalytics)
Methodology
After a good amount of data wrangling, cleaning and aggregation, I had a feature-rich pandas dataframe in hand and was ready to perform the research. I approached the stock search from two perspectives: bottom-up and top-down:
Bottom-up: the goal of this type of search was to find top contenders along the following categories and then find the companies that showed up in the top quantiles of multiple groups through cross referencing. The categories were as follows:
- Operating figures: current ratio, operating margin, profit margin, ROA, ROE, etc.
- Reasonable market valuations: PE, PEG, Price-to-sales, Price-to-revenues, EV-to-Rev, EV-to-EBITDA, etc.
- Governance scores (ESG and ISS)
- Good dividends
- Consensus 1-year Analyst Estimates for 2021
Top-down: this first step in the approach was to determine which sectors were most attractive and then apply the above-mentioned bottom-up categories to screen for specific stocks.
Bottom-up Data Findings
Companies with good ‘Operating Figures.’ The stocks that look most attractive are boxed in red:
Selected companies based on ‘reasonable market valuations’
Governance Scores
While not part of the investment theme, the data was there, so I also decided to explore companies that looked like they could be good to short. This category was based on ‘short’ market data and bearish 1yr analyst estimates.
Top-Down Data Findings:
Using different metrics to evaluate the various sectors in the S&P 500, the sector that looked to best option was the Utilities sector
A screen of the Utilites sector using the bottom-up approach yielded the following companies:
Final Thoughts
I was a little surprised to find that Utilites was the sector that stuck out when reviewing the data. While typically passed over because of limited growth potential, they might be a good addition to one's portfolio at this point in time (writing as of Feb 2021) especially if you believe that the market is overvalued and due for a correction.
Takeaways
Overall this project was a tremendous learning experience for me. I came away with much deeper experience in web scraping and data wrangling and analysis in pandas. Also, I came away from this project with a list of stocks that I ordinarily would not have considered. I look forward to the next step which is to perform much deeper research and financial statement analysis to see if any of them are undervalued companies/worthy investments. First step completed! The search continues...