Efecto Airbnb > Preguntas > Concentración oferta por barrio
Dificultad: ALTA
Dos análisis complementarios:
Referencias: Airbnb vs Berlin
/data/listings_donostia_simple.csv
. /data/original/171002_airbnb_apartments-navarra_datahippo.csv
Con estos datos podremos calcular:
Para la proporción de anuncios de Airbnb respecto del total necesito el número de viviendas 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.
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.
Barrios.shp
(u otro archivo con terminación .shp) de los archivos. Podrás ver los contornos.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.
# 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.
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.
Con el programa QGIS se pueden contar puntos en polígonos.
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.n_listings_airbnb
contiene los valores calculados.save layer as
).Manual en youtube para hace mapa de coropletas a partir de puntos y regiones en Carto: https://youtu.be/ULZE7pUW4y4
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.
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
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.
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.
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.
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.Joins
y dale al +
verde.madrid-variables-barrios-clean.csv
)name
)NOMBRE
que es el nombre de la columan que incluye el nombre el barriomadridvar_
Apply
Fields
de la capa veremos como se han añadido nuevas variables, las que vienen del archivo madrid-variables-barrios-clean.csvAtribute table
para editar los datos. Veremos las nuevas columans que acabamos de crear. “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:ratioturis
: round( ratioturis, 2 )
Ya solo nos queda hacer el mapa de coropletas utilizando la variable del ratio calculado. Fácil.
- Ahora vamos a dar estilo al mapa. Botón derecho sobre la capa, Propiedades > Style. Elige:
Ratioturis
(la variable donde hemos guardado el ratio)Classify
, lo que genera los rangos y los colores.Apply
y OK
.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.
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