Tabla de Contenidos

Efecto Airbnb > Preguntas > Concentración oferta por barrio

¿Cómo se concentra la oferta por barrios de Airbnb?

Dificultad: ALTA

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

Dos análisis complementarios:

Referencias: Airbnb vs Berlin

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

Con estos datos podremos calcular:

Para la proporción de anuncios de Airbnb respecto del total necesito el número de viviendas por barrio:

Ver datos para Barcelona.

3. Qué herramientas uso para preparar los datos. Qué pasos debo seguir

3.1 Número de pisos Airbnb por barrio

Los datos disponibles de Airbnb no están segmentados por barrio. Para calcular el número de alojamienos por barrio necesitamos calcular cuantos puntos en cada polígono (barrio).

Nota sobre ubicación en Airbnb: los puntos de los alojamientos descargados por InsideAirbnb tienen una ubicación aproximada. Según su 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 algunos pisos están ubicados fuera del barrio que les corresponde, incluso en el mar, lo cual hace que los números de alojamientos por barrios en los análisis que vamos a a realizar dejen algunos alojamientos fuera.

3.2 Contorno de barrios

Convertir un shapefile de proyección ETRS89 (Donostia y Madrid)

Para poder usar el shapefile de barrios de Donostia - San Sebastián o de barrios de Madrid hace falta cambiar su sistema de proyección a “EPSG:25830 Name:ETRS89 / UTM zone 30N”. Eso se puede hacer, como suele ser habitual, con varios métodos. Listamos aquí 2: QGIS y R.

Conversión con QGIS
  1. Se añade el archivo como nueva capa al programa. Si tienes QGIS abierto, basta con arrastrar el archivo .zip.
  2. Si no funciona (por que el .zip tiene a su vez un directorio dentro), extrae el contenido del .zip.
  3. Una vez en QGIS. Ve al menú Layer > Add Layer > Add vector layer y selecciona el archivo Barrios.shp (u otro archivo con terminación .shp) de los archivos. Podrás ver los contornos.
    1. En Project > Project Properties podrás definir los CRS del proyecto (para todas las capas).
    2. Dale a activar “Enable on-the-fly reprojection” de arriba a la izquierda.
    3. Ahora selecciona WGS 84/EPSG:4326 del panel de arriba o de abajo. Si no apareciera escribe 4326 en el campo para filtrar.
  4. Una vez se ha añadido la capa necesitamos exportarla, tenemos que salvar de nuevo la capa (“save as” con el botón derecho sobre el nombre de la capa) y salvarlo como “ESRI shapefile” seleccionando como CRS “EPSG:4326, WGS84”). También podemos salvarlo como archivo GeoJSON.
  5. Ahora que tiene su proyección correcta (por defecto QGIS utiliza la proyección “EPSG:4326, WGS84”. Ahora
  6. Por último, si queremos tener el conjunto de archivos que componen un shapefile comprimidos en un único archivo, hay que comprimir los archivos generados en un ZIP para poder usarlo, por ejemplo en Carto.com, una de las herramientas posibles para hacer el mapa.

Para el caso de Euskadi, este archivo contendrá todos los barrios de Euskadi. Se puede editar la tabla asociada a esa capa en QGIS [a completar explicación] y quitar todos los barrios que no nos interesen para dejar solamente los barrios de Donostia. El archivo con solo los barrios de Donostia puedes descargarlo aquí /data/barrios-donostia.zip.

Con R
# Leer un archivo SHP
barrios_ETRS89_UTM <- readOGR(dsn = "SHP", layer = "BARRIOS_EUSTAT_5000_ETRS89")

# Definir el sistema de coordenadas de entrada, EPSG:25830.
proj4string(barrios_ETRS89_UTM) <- CRS("+init=epsg:25830")

# Transformar al sistema de coordenadas de destino, EPSG:4326.
barrios_WGS84_LL <- spTransform(barrios_ETRS89_UTM, CRS("+init=epsg:4326"))

Pamplona

Los contornos de los barrios indicados más arriba hace falta convertirlos a proyección “EPSG:4326, WGS84” igualmente. Basta con abirlos como capa vectorial en QGIS y salvarlas “save as…” la capa como proyección WGS84.

4. Qué herramientas uso para producir la visualización. Qué pasos debo seguir

Necesitamos calcular los puntos (alojamientos) de Airbnb en cada polígono (barrio).

A veces las bases de datos ya ofrecen la información de a qué barrio pertenece cada anuncios (ver variable neighborhood en las bases de datos de InsideAirbnb) por lo que no haría falta realizar los pasos 4.1 y 4.2. Bastaría con realizar una tabla dinámica en cualquier programa de hoja de cálculo para contar el numero de anuncios por barrio.

4.1 Número de alojamientos en cada barrio (contar puntos en polígonos)

4.1.a Modo interfaz gráfica (QGIS)

Con el programa QGIS se pueden contar puntos en polígonos.

  1. Añadir la capa de puntos a QGIS. Añade capa desde el menú: Layers > Add layer > Add delimited text layer (porque vamos a importar un archivo csv) y selecciona el archivo donde esté los anunicios (listings) de Airbnb.
  2. Si el archivo tiene columnas que se llamen “latitude” y “longitud” las reconocerá como coordenadas y aparecerá la sección Point coordinates marcada.
  3. Escogemos el mismo sistema de proyección que con los contornos WGS 84.
  4. En el panel de la derecha Processing Toolbox selecciona en el menú: Processing Toolbox → QGIS Geoalgorithms → Vector analysis tools → Count Points in Polygon.

  1. Si ambas capas comparten CRS no me dará error ni avisao de error y realizará el cálculo. Puedo cambiar el nombre por defecto de la columan NUMPOINTS por n_listings_airbnb. Tras calcular QGIS crea una nueva capa de contornos debarrios que incluye el nuevo valor de alojamientos por barrio. Podemos elegir en este paso crear el archivo csv o GeoJSON directamente. Preferimos ver resultados y luego salvar.
  2. Botón derecho sobre capa “Open Atribute Table” para ver la tabla de datos. VEmos lo siguiente, a la derecha la columna n_listings_airbnb contiene los valores calculados.

  1. Ahora puedo salvar esa capa como un GeoJSON (barrios-madrid_n-listings-airbnb.geojson) y un .csv (barrios-madrid_n-listings-airbnb.csv) para utilzarlas más adelante (botón derecho sobre capa y save layer as).

Manual en youtube para hace mapa de coropletas a partir de puntos y regiones en Carto: https://youtu.be/ULZE7pUW4y4

4.1.b Modo script (Carto.com)

Este modo requiere ejecutar comandos en SQL para unir los datos desde Carto.com.

Crea la columna alojamientos en la tabla de los contornos barrios-donostia, ponla como valor numérico y se ejecuta este el script de SQL desde la capa barrios-donostia:

UPDATE barrios-donostia SET alojamientos = (SELECT count(*) FROM listings_donostia_simple WHERE ST_Intersects(the_geom, barrios-donostia.the_geom))

Donde barrios-donostia son los contornos y listings_donostia_simple los puntos.

Este script de SQL llenará la columna alojamientos con el número de puntos que haya en cada contorno. Si visitas de nuevo la tabla de datos barrios_donostia podrás ver lo datos que hay en la columna alojamientos. Nota: insideairbnb a veces posiciona los puntos en el mar (y por tanto fuera de la zona delimitada como barrio) por lo tanto el número total de puntos será algo menor que el total de alojamientos listados en airbnb.

4.1.c Modo script (R)

Con este script de R puedes añadir la columna de barrio a un archivo de puntos basado en su ubicación: https://github.com/montera34/airbnb.barcelona/blob/master/analisis/points-in-polygons.R

4.2 Añadir localización de barrio a cada punto (añadir a cada punto el polígono en que se encuentra)

Otra forma de abordar el problema es calcular en qué barrio está cada punto y asociar esa información a la base de datos. Este método añadirá el nombre del barrio a cada anuncio según se ubique el punto dentro del contorno de un barrio.

4.2.a Con QGIS

  1. Utilizamos la herramienta “Unir atributos por localizacion” (Menu: Vector > Data Management Tools > Join Attributes by location) para añadir informacion (de barrio) a cada unos de los anuncios de la base de datos de los anuncios.
  2. La capa “Target vector Layer” serán nuestros anuncios de Airbnb y la “Join Vector Layer” los barrios.
  3. Marca “Intersects” y las opciones “Take attributes of first located feature” y “Only keep matching records” (para quedarte solamente con los puntos que están en los barrios“).
  4. Salva la capa como un shapefile, csv (listings_airbnb-madrid_insideairbnb-datahippo_merged_con-barrio.csv) o geojson y comprueba que se ha añadido la columna de “barrio” a tus base de datos de anuncios.

El resultado de anuncios de Airbnb con el barrio añadido puedes descargarlo aquí:

Ahora mediante una tabla dinámica en culquier programa de hoja de cálculo puedes calcular el número de anuncios por barrio y salvarlo en un archivo .csv por separado.

Resultado final para Barcelona: data/output/airbnb/180911/barrios-n-listings-airbnb-barcelona-insideairbnb.csv.

4.3 Ratio de anuncios de Airbnb por viviendas existentes en el barrio

Para hacer calcular el ratio de anuncios de Airbnb por cada 100 viviendas existentes en el barrio necesitamos unir información que está en diferentes archivos. En concreto necesitamos hacer el cociente: nº de alojamientos de airbnb / nº viviendas para cada barrio. Tendremos por un lado una tabla con los datos de nº de viviendas por barrio y otra con el número de anuncios de airbnb por barrio, tenemos que unirlas.

4.3.a Modo con QGIS

  1. Añade la capa de contornos de barrio que contiene el número de anuncios de Airbnb. Si añades un archivo geojson (como barrios-madrid_n-listings-airbnb.geojson) no te dejará editarlo (ver por qué) así que mejor conviértelos a formato Shapefile .sph (ESRI) y añádelo al mapa como nueva capa.
  2. En propiedades de la capa ve a la sección Joins y dale al + verde.

  1. Rellena:
    • Join Layer: la capa con la información de número de viviendas por barrio (del archivo madrid-variables-barrios-clean.csv)
    • Join Field: la columna que tiene el nombre del barrio (name)
    • Target field: NOMBRE que es el nombre de la columan que incluye el nombre el barrio
    • Custom field name prefix: madridvar_
    • Dale a Apply

  1. Si ahora vamos a la sección Fields de la capa veremos como se han añadido nuevas variables, las que vienen del archivo madrid-variables-barrios-clean.csv
  2. Ahora con botón derecho sobre la capa Atribute table para editar los datos. Veremos las nuevas columans que acabamos de crear.

  1. Pulsa en el lápiz de arriba a la izquierda para poder editar la capa.
  2. Crea una columna nueva (botón de arriba a la derecha)

  1. Pulsa en el icono del ábaco para calcular el cociente entre número de anuncios por barrio y número de viviendas por barrio: “n_listings” / “madridvar_Nº Total de viviendas familiares (Censo Edificios y Viviendas 2011)” * 100. Pon que actualice la variable recien creada en el paso anterior ratioturis. Dale a aplicar. Nota: se pueden usar otras variables como:
    • Nº total de hogares
    • Nº de viviendas
    • Nº Total de viviendas familiares (Censo Edificios y Viviendas 2011)
    • Nº Total de viviendas (Censo Edificios y Viviendas 2011)

  1. Ya tienes la variable creada con el ratio de anuncios deAirbnb por cada 100 viviendas. Ahora quieres que tenga solamente 2 decimales, debes repetir el paso anterior pero con este cálculo para actualizar ratioturis: round( ratioturis, 2 )

  1. Dale a ok y vuelve a pulsar en el lápiz, para salvar los cambios.

Mapa de coropletas 3

Ya solo nos queda hacer el mapa de coropletas utilizando la variable del ratio calculado. Fácil.

Modo QGIS

- Ahora vamos a dar estilo al mapa. Botón derecho sobre la capa, Propiedades > Style. Elige:

  1. Dale a Classify, lo que genera los rangos y los colores.
  2. Dale a Apply y OK.

  1. ¡Tenemos el mapa! Coloreado usando modo “jenks” de partición de intervalos.

  1. Es posible mirar el histograma para ver cómo Jenks hace las particiones:

  1. Ahora falta exportar el mapa.Mira a partir de paso 7 de este tutorial. [completar]
  2. Crear layout
  3. Añadir mapa
  4. Cambiar nivel de zoom
  5. Añadir leyenda
  6. Exportar a pdf o SVG y continuar la edición en Inkscape para combinar un mapa con un gráfico de barras.

Gráfico de barras

Con los datos que hemos calculado en Carto podemos descargarlos y utilizar cualquier programa de hojas de cálculo para generar un gráfico de barras.

En Carto: ve a modo Data view (tabla) de la capa barrios_donostia y en el menú Edit > Export Layer y descarga la capa como .csv.

Resultado

Puedes consultar el resultado en el informe para Donostia https://lab.montera34.com/airbnb/donostia/#2 y en este gráfico:


Documentación basada en https://github.com/montera34/airbnbeuskadi/wiki/%C2%BFC%C3%B3mo-se-concentra-la-oferta-por-barrios-de-Airbnb%3F