6. Tres ejercicios de periodismo de datos

6.2. Efecto Airbnb: análisis geoespacial

6.2.4. Preguntas a resolver

Las preguntas del ejercicio se han respondido para la ciudad de Madrid, pero el procedimiento es válido para cualquier otra ciudad. Te animamos a que apliques este ejercicio en tu ciudad.

6.2.4.1. ¿Cuál es el impacto de Airbnb en las diferentes zonas de la ciudad?

Vamos a considerar como zonas los distritos de Madrid.

a. Qué análisis o visualización responde a la pregunta

Dos análisis complementarios:

  • Un mapa en el que se vean los contornos de los barrios y los pisos de Airbnb representados por puntos. Las áreas pueden tener un código de color que indique la cantidad de pisos de Airbnb en esa zona o la proporción de alojamientos anunciados de Airbnb respecto del total de viviendas. Esta segunda opción, la proporcionalidad, es más indicada para un mapa de coropletas.
  • Un diagrama de barras de la cantidad de pisos Airbnb por distrito.

b. Qué datos necesito y dónde los encuentro

Para calcular el número de alojamientos de Airbnb por distrito, necesitarás el listado de alojamientos de Airbnb geolocalizados (con latitud y longitud) y los contornos de distritos. Para calcular la proporción de alojamientos de Airbnb respecto del total de viviendas necesito, además, el número de viviendas de cada barrio. Vamos a ver cómo conseguimos cada uno de estos datos:

Listado de alojamientos de Airbnb

Airbnb no tiene una API, así que no resulta sencillo interactuar o descargarse los datos de la plataforma. La manera de hacerlo es programar un scraper que recorra la web de Airbnb descargando los datos que nos interesan. Vamos a dejar esto fuera de este ejercicio, aunque sería muy interesante hacerlo.

La alternativa es ponerse en contacto con alguien que ya haya programado un scraper para la web de Airbnb y que nos facilite los datos. Aquí tienes varios sitios web que proporcionan datos de Airbnb, y os animamos a que busquéis vuestras propias fuentes:

  • Inside Airbnb. Inside Airbnb es una página alimentada por Murray Cox, quien ha programado su propio scraper para obtener datos de Airbnb. Dispone de datos de decenas de ciudades. Si la ciudad que buscas no está listada o si los datos no están actualizados, puedes contactar directamente con Murray.
  • Data Hippo. Data Hippo es una plataforma para alojar datos de plataformas de alquiler vacacional de ciudades de España y Portugal. Dispone de datos de Airbnb, Homeaway y Housetrip por regiones, provincias y ciudades. En las principales ciudades turísticas, dispone de datos por barrio o distrito. Puedes entrar en contacto con la gente detrás de Data Hippo en su cuenta de twitter.

La elección de la fuente de los datos es crucial: de esta elección va a depender la estructura de datos, que para cada fuente es diferente; depende de lo recientes y completos que sean los datos. Conviene consultar la fecha en la que han sido recolectados y los campos que contiene el conjunto de datos a descargar antes de decidir.

Contornos de los distritos

Los contornos de los distritos de Madrid los podemos obtener también de Data Hippo en formato geoJSON.

El archivo de Data Hippo contiene también el total de alojamientos Airbnb para cada distrito. Veremos en la siguiente sección que, estrictamente, para realizar el ejercicio con este archivo tenemos suficiente: no hace falta el anterior. Aun así, recogemos el procedimiento completo para el caso de no tener disponibles los datos en Data Hippo.

En Data Hippo hay dos archivos geoJSON para Madrid: geojson_region.json contiene el contorno del municipio; geojson_subregions.json contiene los contornos de los distritos. Puedes acceder a esos archivos cuando navegues a la sección municipio de Madrid.

Siempre es recomendable obtener los datos de la fuente institucional (la fuente primigenia), que en este caso es el Ayuntamiento de Madrid. Los contornos de los distritos están también disponibles en el portal web del Ayuntamiento de Madrid. Vienen en un shapefile (conjunto de ficheros descargable en formato comprimido .zip); tendrás que transformar su sistema de proyección ETRS89 al CRS EPSG:4326 – WGS 84. Antes Carto.com no aceptaba otros CRS distintos del estándar EPSG:4326 – WGS 84; ahora sí que lo acepta. Desde QGIS puedes abrir el archivo que te descargas como capa vectorial y salvar como nuevo archivo con el CRS que elijas (en este manual puedes ver una descripción más detallada).

Viviendas por distrito

El número total de viviendas por distrito y barrio lo podemos obtener del portal web de datos abiertos del Ayuntamiento de Madrid.

c. Qué herramientas uso para preparar los datos

Número de pisos Airbnb por distrito

Los datos de Airbnb que se pueden conseguir en Data Hippo ya están segmentados por distrito, así que ya tenemos en el dataset el dato que necesitamos.

Si no lo tuviéramos, el procedimiento para obtenerlo es el siguiente: podemos calcular el número de alojamientos por distrito contando cuántos puntos hay dentro del contorno de cada distrito. Esta es la operación que han hecho con los datos en Data Hippo.

La ubicación de los alojamientos en Airbnb es aproximada. Según la propia web: «Location information for listings are anonymized by Airbnb. In practice, this means the location for a listing on the map, or in the data will be from 0-450 feet (150 metres) of the actual address. Listings in the same building are anonymized by Airbnb individually, and therefore may appear “scattered” in the area surrounding the actual address».

Por tanto, si optamos por el método de contar puntos en contornos, debemos tener en cuenta que algunos alojamientos están ubicados fuera del distrito que les corresponde, con lo cual los números incluirán una imprecisión.

Bola extra: Una manera de corregir este error es conseguir datos de Airbnb que incluyan el código postal para cada alojamiento (Data Hippo no lo proporciona, Inside Airbnb sí). Entonces se podría hacer una tabla de equivalencia entre distritos y códigos postales. Con dicha tabla podríamos recorrer el listado de alojamientos y añadir una columna con el distrito. Esta unión de tablas se puede realizar con QGIS o con una consulta SQL.

Contorno de distritos

Los contornos que nos hemos descargado de Data Hippo están listos para ser usados.

Viviendas por distrito

El archivo que nos hemos descargado del portal de datos del Ayuntamiento de Madrid es una hoja de cálculo con una pestaña para cada distrito y muchos datos para cada distrito y cada barrio. El dato de cantidad de viviendas para cada distrito hay que ir a buscarlo en cada una de las pestañas en la celda 239E. Se podría automatizar la obtención de ese dato para cada pestaña, pero como son pocos distritos no merece la pena.

Pegamos aquí la tabla con el total de vivienda para cada distrito y así te ahorramos este aburrido paso:

Arganzuela 76260
Barajas 20370
Carabanchel 115270
Centro 86795
Chamartín 72120
Chamberí 79780
Ciudad Lineal 101740
Fuencarral- El Pardo 99260
Hortaleza 74930
Latina 115500
Moncloa-Aravaca 55125
Moratalaz 44405
Puente de Vallecas 106585
Retiro 56595
Salamanca 83575
San Blas-Canillejas 67450
Tetuán 80160
Usera 59285
Vicálvaro 30305
Villa de Vallecas 43520
Villaverde 61920

A continuación tienes los mismos datos pero sin tildes y en formato CSV, ya preparada para ser usada:

distrito,total
Arganzuela,76260
Barajas,20370
Carabanchel,115270
Centro,86795
Chamartin,72120
Chamberi,79780
Ciudad Lineal,101740
Fuencarral- El Pardo,99260
Hortaleza,74930
Latina,115500
Moncloa-Aravaca,55125
Moratalaz,44405
Puente de Vallecas,106585
Retiro,56595
Salamanca,83575
San Blas -Canillejas,67450
Tetuan,80160
Usera,59285
Vicalvaro,30305
Villa de Vallecas,43520
Villaverde,61920

d. Qué herramientas uso para producir la visualización

El mapa de coropletas de los distritos se puede realizar con diferentes herramientas. Una posibilidad es usar QGIS, que nos permite hacer el cálculo de puntos (alojamientos) dentro de un polígono (distrito), y producir un paquete incluyendo todo lo necesario (archivos con los datos, librerías JavaScript y archivos HTML) para publicar en web. Otra opción es usar el servicio Carto.com, que nos permite hacer lo mismo que QGIS y luego generar un código para incrustar el mapa en otro sitio web.

Número de puntos por distrito

Como comentábamos en la sección anterior, el dataset de Data Hippo ya incluye el número de alojamientos Airbnb por distrito, en la columna airbnb_aptms.

En el caso de que no lo tuviéramos, hay que seguir los pasos que se muestran a continuación para obtenerlo con Carto.com.

1) Inicia sesión con tu cuenta en Carto.com. Si no tienes cuenta, date de alta.

2) Añade como nuevos datasets el archivo de los alojamientos y el archivo con los contornos de los distritos.

No hace falta que te descargues los conjuntos de datos de Data Hippo; con proporcionar a las URL a los archivos, Carto.com creará los datasets:

3) Crea un mapa y añade como capas los archivos que acabas de subir:

4) Sitúate en la capa de los contornos y pincha en Analysis. Añade un nuevo análisis. Selecciona el modo Intersect second layer. Intersect with a second layer and calculate aggregations on the fly.

 

En el menú desplegado debes seleccionar la capa de los contornos como Aggregate intersection, y la de los alojamientos como Intersect Layer.

En Operation debe estar seleccionada la opción COUNT.

Pincha en Done. Eso generará una nueva columna en la base de datos llamada count_values.

5) Entra en el modo tabla con el conmutador de la esquina inferior derecha del mapa, y cambia el nombre de la columna count_values a alojamientos_airbnb.

6) En este momento, ya podemos producir un primer mapa de coropletas que nos coloree los distritos en función del número de alojamientos Airbnb. Para ello, vamos a la capa de contornos y en la pestaña Style editamos el estilo Color y asignamos a la opción By value como valor la columna que contiene el count de alojamientos, alojamientos_airbnb.

Proporción de alojamientos Airbnb por distrito

Para hacer este paso necesitamos unir información que está en diferentes archivos. En concreto, necesitamos hacer la siguiente ecuación para cada distrito:

alojamientos de airbnb del distrito / viviendas totales del distrito

Para poder relacionar fácilmente estos dos valores para cada distrito, tenemos que incluir los totales de vivienda en el dataset de los contornos. Una opción es hacerlo manualmente, ya que son pocos valores. Recogemos aquí también la opción semiautomática para casos en los que haya gran cantidad de datos: vamos a hacerlo con una consulta SQL en Carto.com.

1) Creamos un nuevo dataset con el listado de viviendas totales por distrito. Anotamos el nombre del dataset y cambiamos el nombre de la columna que contiene los distritos a distrito, y de la columna que contiene el número total de viviendas a total.

2) Creamos dos nuevas columnas en el dataset de contornos que llamamos total_viviendas y percent_turisticas. Seleccionamos como tipo de dato number para ambas.

3) Nos tenemos que asegurar de que el nombre de los distritos está escrito de igual manera en ambos datasets: mismos caracteres acentuados, mismos espacios, mismas mayúsculas.

4) Volvemos al mapa, entramos en la capa de contornos y en la pestaña Data. Allí, abajo cambiamos a la consola SQL con el conmutador situado en la parte inferior de la barra lateral izquierda.

5) Escribimos la siguiente consulta SQL:

UPDATE nombre_dataset_contornos SET total_viviendas = nombre_dataset_viviendas_distrito.total FROM nombre_dataset_viviendas_distrito WHERE nombre_dataset_contornos.name = nombre_dataset_viviendas_distrito.distrito

que, traducido a lenguaje común, significa: actualiza (UPDATE) el dataset de contornos y pon (SET) el número de viviendas por distrito de la tabla de viviendas por distrito (el nombre de la columna es total) (FROM) en las filas donde coincida la columna de distrito del dataset de contornos con la columna de distrito del dataset de total de viviendas (WHERE). Por esto era importante que fueran consistentes los nombres de los distritos.

De este modo tendremos los datos de viviendas por distrito en la tabla de contornos de distritos.

Ya solo nos queda calcular el ratio de alojamientos de Airbnb por cada 100 viviendas. Podemos hacerlo con otra consulta SQL:

UPDATE nombre_dataset_contornos SET percent_turisticas = airbnb_aptms * 100 / total_viviendas

Para redondear los decimales y evitar resultados tipo 8,21439204893, hacemos una consulta más restringiendo a dos decimales:

UPDATE nombre_dataset_contornos SET percent_turisticas = round( CAST(percent_turisticas as numeric), 2 )

Visualizaciones

1) Mapa de coropletas. Ya solo nos queda hacer el mapa de coropletas utilizando la variable percent_turistica, como hemos descrito en el apartado anterior. Fácil.

Para hacer el mapa público solo queda pinchar en el botón Publish. Y luego copiar el código para incrustar el mapa en cualquier web.

2) Gráfico de barras. Podemos descargar los datos que hemos calculado en Carto.com y utilizarlos en cualquier programa de hojas de cálculo para generar un gráfico de barras.

Para descargar, ve a modo Data view (tabla) de la capa de contornos y en el menú Edit > Export Layer se puede descargar la capa como CSV.

e. Cómo presento la información para hacer un relato inteligible

Una vez que tenemos los datos de los ratios por distrito, es posible comparar unos y otros valores. Con la representación en el mapa de coropletas podemos comparar la distribución espacial (es más difícil apreciar la diferencia de valores asociados a colores) y en el gráfico de barras podemos comparar la presencia de Airbnb en cada barrio. También puedes publicar una tabla con los distritos con más presencia de Airbnb.

Otras cosas que puedes hacer, para completar el reportaje, es analizar el tipo de alojamiento que se ofrece en cada uno de los distritos (private_room, entire_home dentro de la variable room_type) o el total de plazas (variable capacity).

El proceso para calcular el ratio de alojamientos de Airbnb por cada 100 viviendas es análogo. Busca los contornos y datos de cada y repite el proceso.