Scrape to analyze housing price in NYC

Wendy Yu
Posted on Mar 6, 2016

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

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:

  1. 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
  2. Screen Shot 2016-03-06 at 3.39.07 PM Making the soup!: It is important to select the correct parser for your data type. I used HTML parser.
  3. 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.

Screen Shot 2016-03-06 at 3.28.46 PM

Screen Shot 2016-03-06 at 3.29.50 PM

Data Manipulation

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

  1. high rental price
  2. 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:

  1. unit price per square foot for rental prices, and unit price per square foot for sale prices
  2. 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.

Screen Shot 2016-03-06 at 3.52.35 PM

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.

Screen Shot 2016-03-06 at 3.56.42 PM
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:

  1. Outlier that are located above the regression line with abnormally high sale price (Nolita, Little Italy, Midtown)
  2. 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.

Screen Shot 2016-03-06 at 3.58.13 PM

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.

Screen Shot 2016-03-06 at 4.01.25 PM

From this analysis, the top 5 least profitable neighborhoods are listed below and showed in a map. This results matches the linear regression analysis.

Screen Shot 2016-03-06 at 4.02.47 PM

Now, the top 5 most profitable neighborhoods are listed below and also showed in a map.

Screen Shot 2016-03-06 at 4.03.52 PM

This analysis is based solely on the active listings on 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

About Author

Wendy Yu

Wendy Yu

As a biologist, Wendy believes in evidence-base analysis, and is passionate about data. Wendy graduated from the University of Pennsylvania in 2013 with a Masters in Biotechnology. While pursuing a career as a biologist Wendy quickly realized that...
View all posts by Wendy Yu >

Related Articles

Leave a Comment

Google October 13, 2019
Google Here are some hyperlinks to web pages that we link to simply because we feel they may be really worth visiting.
Google September 15, 2019
Google We came across a cool internet site which you may well get pleasure from. Take a appear should you want.
hermes clic clac h bracelet pour homme fausse May 3, 2017
I have been absent for some time, but now I remember why I used to love this blog. Thank you, I¡¦ll try and check back more frequently. How frequently you update your website? hermes clic clac h bracelet pour homme fausse
James December 28, 2016
Hey wendy yu, i installed python and bsp4 and im have trouble with gettig the data. Can you help me out ? I have python 2.7.13 and beautifulshop4-.4.4.1 Are these the right one?
Wendy Yu October 11, 2016
Hi Emrah, Can you be more specific? Thanks, Wendy
emrah yalaz October 11, 2016
Hi Wendy, would you be interested in doing this analysis for me? best, emrah
Avatar May 9, 2016
This is a really good tip particularly to those new to the blogosphere. Brief but very precise info… Thank you for sharing this one. A must read post!

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 Online Training Open Data painter pandas Part-time Portfolio Development prediction Prework Programming PwC python Python Data Analysis 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