Scrape StreetEasy.com to analyze housing price in NYC
Contributed by Wendy Yu. She is currently in the NYC Data Science Academy 12 week full time Data Science Bootcamp program taking place between January 11th to April 1st, 2016. This post is based on her third project - Web scraping.(due on 2th week)
Scrape StreetEasy.com to analyze housing price in NYC
My goal is to collect housing prices for both rental and sale in New York city. I looked at three major real estate website including Trulia, Zillow, and StreetEasy. Comparing to the other two websites, StreetEasy gives the most information on the searching results page and the format of each listing is very consistent, which is great for the purpose of web-scraping.
Web scraping is done using the beautifulsoup package in Python. I created two functions that can loop through all the pages of searching results, and also empty strings to store results. Below are the steps I took to scrape StreetEasy:
- Analyzing the HTML page: HTML code of a web page can be viewed by right click and selecting 'Inspect'. This helps us identifying the HTML tags of the information to be scraped
- Making the soup!: It is important to select the correct parser for your data type. I used HTML parser.
- Navigating the parse tree and iterate through tags: once the soup is made, we have the HTML code in Python. We can then find our desired information by searching through HTML tags.
For some listings the information on number of bedroom, number of bathroom, and apartment size is incomplete or mixed up. I performed data manipulation to fix the mistaken values and cleaned up the extra symbols such as comma and dollar sign.
Finally, I have two data sets containing the housing information of apartments for rent and apartments for sale. The for sale data set has 8,456 rows and 8 columns, and the for rent data set has 20,988 rows and 7 columns
Data analysis to identify the most / least investable neighborhoods in NYC
My goal is to identify the most and least profitable neighborhoods in New York City
The ideal neighborhood for investing apartments would have
- high rental price
- low sale price
So the rent would be higher than the monthly mortgage payment to make a profit.
To achieve my goal, I need a way to compare the rental prices and sale prices. For each neighborhood, I calculated two things:
- unit price per square foot for rental prices, and unit price per square foot for sale prices
- averaged monthly mortgage under the assumption of 20% down payment, 3.5% annual interest rate, and 30 years mortgage period
Before we begin to compare rental price and sale price, it is important to have a first glance at the dataset. I noticed that some neighborhoods have very few number of listings. The low number of listings could introduce instability and lead to false results. Therefore, I removed neighborhoods with equal or less than 5 listings to ensure the quality of the data. The figure below shows the number of listings (count) and its frequency.
The table below is some examples of the neighborhoods with more than 5 listings. For instance, one square foot in Astoria costs $2.95 to rent and $792 to buy, and one square foot in Battery Park City costs $6.15 to rent and $2010.6 to buy.
We can expect a linear relationship between the rent unit price and sale unit price; if it costs more to buy, it should cost more to rent. I am interested in the outliers of this linear regression. There are two types of outliers:
- Outlier that are located above the regression line with abnormally high sale price (Nolita, Little Italy, Midtown)
- Outliers that are located below the regression line with abnormally low sale price (Beekman, Kips Bay)
Type 2 outliers are more likely to be profitable and type 1 outlier are less likely to be profitable.
Looking at the plot above, any points above the regression line have higher sale unit price than the fitted values, indicating they are less likely to be profitable. On the other hand, any points below the regression line have higher unit rental price than the fitted values, suggesting the higher likelihood of being profitable. Outliers are the extreme cases in these two circumstances. Outlier has the unusual, either very large or very small, y value given its x value. In other words, comparing to all the apartments with rental unit price of $5, Kips Bay is has the lowest sale unit price, and therefore is the most profitable given rental price equals to $5. However, it is not clear that Kips Bay is the most profitable neighborhood comparing to the rest of neighborhoods located below the regression line. For example, neighborhood X with $500 sale unit price and $2.9 rent unit price is more profitable than Kips Bay with $1000 sale unit price and $5 rent unit price, but neighborhood B is not an outlier.
To assess the profitability more accurately, I calculated the ratio of rent unit price over sale unit price and plotted the distribution of the ratios. Neighborhoods with higher ratio are more profitable.
From this analysis, the top 5 least profitable neighborhoods are listed below and showed in a map. This results matches the linear regression analysis.
Now, the top 5 most profitable neighborhoods are listed below and also showed in a map.
This analysis is based solely on the active listings on StreetEasy.com on 2/18/2016, not considering property tax, HOA fees, utilities, and other fees.
The full Python code for this analysis can be viewed at https://github.com/wendyu/Web_Scraping_StreetEasty