Hotels vs Airbnb – Barcelona case study (proof of concept)

[This article was first published on R – NYC Data Science Academy Blog, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Click here to access the map

1 – Background and motivation

During the last few years, the sharing economy has become more and more ubiquitous, from taxi riding applications to DIY and so on. The Real Estate market is no exception and in the Hotels and Hospitality sector we have seen more of these examples. Among them is Airbnb, a company based in San Francisco that operates an online marketplace and hospitality service has had a bigger impact.

The main objective of this case study is to assess the impact of Airbnb and review the hotel prices compared with the accommodation offered by Airbnb. Although it would be a preference to have an in-depth analysis of this case study. But due to the complexity of data variables and various data outcomes, we present an initial analysis of the pricing competition between Airbnb and the Hotels within the city of Barcelona.

We have used two main datasets in this case study; hotels location and pricing data and Airbnb listings. he hotels’ datasets were obtained by data scraping from website, we will get more in detail soon, and the Airbnb datasets were downloaded from the site

2 – Scraping Tripadvisor Hotels dataset

Scraping has becoming more and more popular recently due to the amount of data present in the world wide web today. Scraping TripAdvisor has allowed us to extract a complete list of the hotels in Barcelona (518 in total) together with price information (for 418 of them). The price data shown are expressed in USD charged for a room for two people booking on the night of the 22nd of October of 2018. We decided to use this date mainly because it is a low season in Barcelona and it allows us to make a more direct comparison with Airbnb prices. For scraping, we used a Python environment and two main scraping libraries; Selenium, and Scrapy. The reason why Selenium was needed due to the number of choices allowed for users selections on the TripAdvisor website. This allows us to accurately filter the data to show hotels based on the chosen date, 22nd of October as previously mentioned.


One of the downsides of Selenium is processing speed. In order to speed up the scraping process, we have decided to eliminate any graphical contents. With Selenium, we were able to get a complete list of hotels in Barcelona with its prices and a link to the specific hotels TripAdvisor website. This link is the information that will allow our Scrapy crawler to get the remaining information we were looking for; the location and star rating of each of the hotels. Scrapy then was used to speed up the gathering of information of each hotel namely the hotel full address, reviews, ranking and star rating.

In the images below we can see both the hotels list exported as well as the hotels details

3 – Hotels data exploration

Using cartoframes (CARTOs Python environment for data scientists) we can easily see how the hotels are mainly concentrated in the centre of Barcelona, also with higher booking prices in this area.

A further analysis of how prices vary according to the star rating is presented in the following Boxplot, which shows a steady increase of prices depending on the star rating. Further analysis should be done to analyse how reviews and sociodemographic of the area actually relate with these prices, but this wasn’t subject to this study.


4 – Price comparison

Initially, we plotted the distribution of prices for both hotels and Airbnb listings to see the big picture on how they compare. This initial analysis already gives some initial conclusions and we see as hotels are in general more expensive that Airbnb locations.

For more in detail comparison, we used the simple yet effective Machine Learning algorithm of nearest neighbours. For this purpose, we used R software and the package nngeo which computes the K-nearest neighbour calculations considering the geographic attributes of the locations considered. We computed the K=20 nearest neighbours limiting our search to the locations within a radius of 500 m. Both the considered Airbnb locations as well as the lines connecting them to each hotel are represented on the map. For this purpose where only selected Airbnb listings with a ‘Real Bed’ and with accommodation for between 1 and 3 people, in order to compare like for like.

Finally, we computed the average price for all the 20 locations near to our target hotel and also the difference to the actual hotel price. This is the main dataset presented in this study and that is shown on the interactive map done with CARTO.

Some of the main conclusions that can be extracted from the analysis are:

  • Budget hotels (1 and 2 stars) are the less affected by Airbnb listings with just a difference of $14 dollars per night among them.
  • Hotels more centrally located show more fierce competitions with their Airbnb neighbours, with less central hotels less affected.
  • Luxury hotels are the ones that present biggest differences, but as mentioned previously we should further work on the Airbnb data to make like for like comparisons in this segment of the market.
  • Finally, there are a few hotels that show a cheaper price than their Airbnb neighbours, so look for those!

Click here to access the map

Finally as a conclusion just to highlight how this type of analysis shows how individual hotels are affected by Airbnb competition and can also be used in order to decide where to locate a new hotel.


To leave a comment for the author, please follow the link and comment on their blog: R – NYC Data Science Academy Blog. offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)