Herramientas de usuario

Herramientas del sitio


como-se-concentra-la-oferta-por-barrios-de-airbnb

¡Esta es una revisión vieja del documento!


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:

  • Un mapa en el que se vean os contornos de los barrios y los pisos de Airbnb representados por puntos. Las áreas pueden tener con un código de color que indique la cantidad de pisos de Airbnb en esa zona o la proporción de viviendas de Airbnb respecto del total. 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 barrio.

Referencias: Airbnb vs Berlin

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

Con estos datos podremos calcular:

  • Número de alojamientos de Airbnb por barrio.

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

Ver datos para Madrid.

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.

Opcional: Sin embargo los alojamientos sí que tienen asociado el código postal. Habría que hacer una tabla de equivalencia entre barrios y códigos postales. Con esta tabla podemos recorrer los registros de Inside Airbnb y añadir una columna que sea barrio. Esta unión de tablas puede ralizarse con QGIS.

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

4.1 Número de alojamientos en cada barrio

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

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 Builder (Carto.com)

Este modo utiliza la interfaz gráfica nueva de Carto.com.

  1. Sube a tus bases de datos los archivos: barrios-donsotia.zip y listings_donostia_simple.csv
  2. Crea un mapa y añade como capas barrios-donsotia y listings_donostia_simple
  3. Sitúate en la capa barrios-donsotia y ve a “Analysis”. Añade “add” nuevo análisis.
  4. Selecciona el modo “Intersect second layer. Intersect with a second layer and calculate aggregations on the fly”.
  5. En el menú desplegado debes tener: Aggregate intersection: Base layer - barrios_donostia; Intersect Layer - listings_donostia_simple Measure by: Operation - COUNT.
  6. Click en “Apply”. Eso generará una nueva columna en la base de datos llamada “count_values”.
  7. Entra en el modo tabla y cambia el nombre de la columna. Llámala “alojamientos_airbnb”.

Extra: 8. Puedes repetir el paso 5 pero ahora para usando COUNT y seleccionando la variable “accomodates” (plazas) para que sume todas las plazas por barrio: Measure by: Operation - sum(accommodates). Generará la columna “sum_accommodates”. Para hacer esto tienen que añadir otro análisis.

4.1.d Modo Editor(Carto.com)

Este modo utiliza la interfaz gráfica antigua de Carto.com. Algunos usuarios antiguos aún no tienen el modo “Builder”.

  1. Entra en el modo dataview del archivo de contornos de barrios de Donostia barrios_donostia.
  2. Haz click en el icono “merge datasets” de abajo a la derecha. merge-datasets-carto
  3. Selecciona la opción “Spatial join. Measure the number of intesecting records between two datasets (ex. count point inside polygons)”. merge-datasets-carto
  4. A la izquierda tendrás la base de datos de los barrios de Donostia (activa todos los campos). A la derecha selecciona la base de datos de los puntos, en nuestro caso listings_donostia_simple. Selecciona la opción “COUNT” de abajo. merge-datasets-carto
  5. Click en “Merge datasets”. La columna “intersect_count” de la nueva base de datos creada, voila, barrios_donostia_merge tiene el número de alojamientos en cada barrio. merge-datasets-carto Puedes cambiar el nombre de la columna por “viviendas_airbnb” o el nombre que quieras, para saber lo que contiene.

Extra: para calcular el número de plazas (la variable accommodates) seguiremos el mismo proceso pero en el paso 4. seleccionaremos la variable accommodates y la opción “SUM” para que sume todas las plazas que hay en esos alojamientos.

4.2 Añadir localización de barrio a cada punto

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 puedes descargarlo aquí:

Ahora con una tabla dinámica puedes calcular el número de anuncios por barrio.

4.3 Proporción de pisos por barrio

Para hacer este paso 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. Los datos de nº de viviendas por barrio los tenemos en viviendas_barrios_donostia.csv en la columna total. Tenemos que pasar esos datos a la tabla de datos de barrios_donostia.

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

  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.
  2. Ahora vamos a dar estilo al mapa. Botón derecho sobre la capa, Propiedades > Style

4.3.b Modo manual (Carto)

Puedes meter esos datos en Carto “a mano” en la tabla de valores. Añade columna y edita todos los campos. Copia pega. Son sólo 18 valores. Fácil.

Pero más fácil todavía lo siguiente:

  1. Descarga la tabla generada en el anterior ejercicio en table. Es la tabla de contornos de barrios que ahora incluye los valores de alojamientos por barrio.
  2. Edita con un editor de hojas de cálculo y añade los valores a cada barrio de los datos de /data/viviendas-barrios-donostia.csv
  3. Crea una columna percent_turisticas y haz el cálculo: 100 * (viviendas airbnb / viviendas totales) para calcular el porcentaje.
  4. Salva la tabla como .csv y súbela a carto.

4.3.c Modo script (Carto.com)

Junta dos tablas

Primero tenemos que añadir al mapa de carto la base de datos viviendas_barrios_donostia. Esta base de datos contiene el número de viviendas por barrio.

Usaremos el siguiente script (un join) para unir ambas tablas:

UPDATE barrios_donostia SET viviendas_join = viviendas_barrios_donostia.totalFROM viviendas_barrios_donostia WHERE barrios_donostia.bar_ds_o = viviendas_barrios_donostia.barrios

que traducido a lenguaje común significa: actualiza (UPDATE) la tabla barrios_donostia y pon (SET) el número de viviendas por barrio de la tabla viviendas_barrios_donostia (el nombre de la columna es total) (FROM) en las filas donde coincidan la columna bar_ds_o (nombre del barrio) de un archivo con la columna barrios de otro (WHERE).

De este modo tendremos los datos de viviendas por barrio en la tabla de contornos de barrios.

Calcula porcentaje de alojamientos de Airbnb por el total de viviendas

Luego nos queda calcular el porcentaje con otro script que divide una columna por otra (nº de alojamientos de airbnb / nº viviendas para cada barrio). Antes de esta operación hay que crear la coluna percent_turisticas:

UPDATE barrios_donostia SET percent_turisticas = alojamientos * 100 / viviendas

Esto es, en la tabla de los contornos de los barrios mete en la recién creada columna percent_turisticas el resultado de dividir el número de viviendas por el total de viviendas en ese barrio viviendas. Multiplica por 100 para obtener el porcentaje.

Para evitar que salgan muchos decimales correr este script:

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

Pasará de 0.124342983492 a 0.12.

Manual: para join: https://carto.com/academy/courses/sql-postgis/joining-data

4.3.d Modo Builder (Carto.com)

Tienes que unir los datos incluidos en dos tablas diferentes: la tabla de barrios_donostia con el número de viviendas por barrio de la tabla viviendas_barrios_donostia.

Entra en el modo dataview del archivo de contornos de barrios de Donostia. Haz click en el icono “merge datasets” de abajo a la derecha. merge-datasets-carto Selecciona la opción “Column join. Merge two datasets based on a shared value (ex. ISO codes in both datasets)”. merge-datasets-carto A la izquierda selecciona barrios_donostia y la variable bar_ds_o (que contiene el nombre de los barrios) y a la derecha la tabla “viviendas_barrios_donostia” y la variable barrios. Click en “next”. merge-datasets-carto Selecciona las variables de ambas tablas que quieras incluir. De la izquierda todas, y de la derecha todas menos “barrios” ya que si la incluyes estarías duplicando el nombre del barrio. CLick en “merge data sets”. merge-datasets-carto Renombra la tabla para saber lo que inclute: barrios_donostia_viviendas_airbnb_normales

Mapa de coropletas 3

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

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

como-se-concentra-la-oferta-por-barrios-de-airbnb.1524181260.txt.gz · Última modificación: 2018/04/20 01:41 por numeroteca