En primer lugar se cargan las librerías.
library(tidyverse)
library(sf)
Nos interesa evaluar la oferta de turismo a partir de la densidad de agencias de viajes en los barrios de la Ciudad Autónoma de Buenos Aires, y la accesibilidad a dichos barrios. Las bases de datos con las que vamos a trabajar se encuentran disponibles aquí.
En primer lugar, vamos a cargar los barrios.
barrios <- read_sf("https://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson")
¿Qué contiene el dataset?
head(barrios)
## Simple feature collection with 6 features and 4 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.50617 ymin: -34.63064 xmax: -58.41192 ymax: -34.57829
## geographic CRS: WGS 84
## # A tibble: 6 x 5
## barrio comuna perimetro area geometry
## <chr> <int> <dbl> <dbl> <POLYGON [°]>
## 1 CHACARITA 15 7725. 3.12e6 ((-58.45282 -34.59599, -58.45366 -34.5965…
## 2 PATERNAL 15 7088. 2.23e6 ((-58.46558 -34.59656, -58.46562 -34.5967…
## 3 VILLA CRE… 15 8132. 3.62e6 ((-58.42375 -34.59783, -58.42495 -34.5978…
## 4 VILLA DEL… 11 7705. 3.40e6 ((-58.49461 -34.61487, -58.49479 -34.6150…
## 5 ALMAGRO 5 8538. 4.05e6 ((-58.41287 -34.61412, -58.41282 -34.6154…
## 6 CABALLITO 6 10991. 6.85e6 ((-58.43061 -34.60705, -58.43056 -34.6077…
Realicemos un mapa. Como barrios tiene formato espacial, vamos a utilizar la función geom_sf()
dentro de ggplot.
ggplot() +
geom_sf(data = barrios) +
labs(title = "Barrios de la Ciudad Autónoma de Buenos Aires") +
theme_minimal()
Ahora vamos a cargar los datos de agencias de viajes.
agencias <- read.csv("https://cdn.buenosaires.gob.ar/datosabiertos/datasets/ente-de-turismo/agencias-viajes/agencias-de-viajes-y-turismo.csv")
¿Qué contiene el dataset?
head(agencias)
## id nombre id_usig periodo
## 1 254 Share Argentina Empresa de Viajes y Turismo 254 2021
## 2 253 Les Amis Viajes Tribunales 253 2021
## 3 252 Les Amis Viajes Recoleta 252 2021
## 4 251 Les Amis Viajes Catalinas 251 2021
## 5 250 Les Amis Viajes Plaza San Martin 250 2021
## 6 249 Les Amis Viajes Belgrano 249 2021
## domicilio telefono
## 1 Av. Córdoba 875 – Piso 12 – Oficina “E” (011) 4894-4004
## 2 Cerrito 844 (54-11) 5238-1690
## 3 Vicente López 1621 (54-11) 5246-9600
## 4 Leandro N Alem 1036 (54-11) 5246-6670
## 5 Av. Santa Fe 816 (54-11) 5246-6620
## 6 La Pampa 2525 (54-11) 5246-6610
## email web
## 1 info@shareargentina.com.ar http://shareargentina.com.ar/
## 2 cerrito@lesamis.com.ar http://lesamisviajes.com/
## 3 recoleta@lesamis.com.ar http://lesamisviajes.com/
## 4 cat@lesamis.com.ar http://lesamisviajes.com/
## 5 santafe@lesamis.com.ar http://lesamisviajes.com/
## 6 belgrano@lesamis.com.ar http://lesamisviajes.com/
## funciones calle altura
## 1 Agencias de viajes Córdoba 875
## 2 Agencias de viajes,Operadores de vi Cerrito 844
## 3 Agencias de viajes,Operadores de vi Vicente López 1621
## 4 Agencias de viajes,Operadores de vi Leandro N Alem 1036
## 5 Agencias de viajes,Operadores de vi Santa Fe 816
## 6 Agencias de viajes,Operadores de vi La Pampa 2525
## direccion barrio comuna Long Lat
## 1 CORDOBA AV. 875 Retiro Comuna 1 -58.37935 -34.59887
## 2 CERRITO 844 Retiro Comuna 1 -58.38263 -34.59858
## 3 LOPEZ, VICENTE 1621 Recoleta Comuna 2 -58.38914 -34.59232
## 4 ALEM, LEANDRO N. AV. 1036 Retiro Comuna 1 -58.37283 -34.59553
## 5 SANTA FE AV. 816 Retiro Comuna 1 -58.37876 -34.59520
## 6 LA PAMPA 2525 Belgrano Comuna 13 -58.45547 -34.56553
Vamos a agrupar los datos por barrio, y vamos a modificar el formato de la variable barrio
. Para que pueda unirse con nuestras geometrías, necesitamos que estén escritos en mayúscula.
agenciasxbarrio <- agencias %>%
group_by(barrio) %>%
summarise(cantidad = n()) %>%
mutate(barrio = toupper(barrio))
## `summarise()` ungrouping output (override with `.groups` argument)
agenciasxbarrio
## # A tibble: 15 x 2
## barrio cantidad
## <chr> <int>
## 1 BALVANERA 8
## 2 BELGRANO 3
## 3 COLEGIALES 2
## 4 MONSERRAT 10
## 5 MONTE CASTRO 1
## 6 PALERMO 5
## 7 PARQUE PATRICIOS 1
## 8 PUERTO MADERO 2
## 9 RECOLETA 7
## 10 RETIRO 66
## 11 SAN NICOLAS 143
## 12 VERSALLES 1
## 13 VILLA CRESPO 2
## 14 VILLA SANTA RITA 2
## 15 VILLA URQUIZA 1
A continuación, vamos a unir la cantidad de agencias por barrio a la geometría barrios
.
barrios <- left_join(barrios, agenciasxbarrio, by = "barrio")
Verifiquemos que en nuestro dataset efectivamente estén los 15 barrios que tenían agencias.
barrios %>%
filter(!is.na(cantidad)) %>%
nrow()
## [1] 15
Ahora vamos a calcular la densidad de agencias de viaje por km2 (100 manzanas).
barrios <- barrios %>%
mutate(dens_agencias = round(cantidad/(area/1000000), digits = 3))
Realicemos ahora un mapa con esta información.
ggplot() +
geom_sf(data = barrios, aes(fill = dens_agencias), size = 0.2) +
labs(title = "Barrios en CABA",
fill = "Densidad de \nAgencias de viaje") +
scale_fill_viridis_c(trans = "log2", na.value = "grey80") +
theme_minimal() +
theme(legend.direction = "horizontal",
legend.position = "bottom",
legend.title=element_text(size=8),
legend.key.width = unit(2,"cm"))
Tenemos nuestro mapa. Ahora queremos incorporar las líneas de subte, ya que queremos ver si los barrios que tienen mayor densidad de agencias de viajes se encuentran además más servidos por transporte público.
Cargamos los datos de líneas y estaciones de subte.
lineas <- read_sf("https://cdn.buenosaires.gob.ar/datosabiertos/datasets/subte-estaciones/subte_lineas.geojson")
estaciones <- read_sf("https://cdn.buenosaires.gob.ar/datosabiertos/datasets/subte-estaciones/subte_estaciones.geojson")
head(lineas)
## Simple feature collection with 6 features and 2 fields
## geometry type: MULTILINESTRING
## dimension: XY
## bbox: xmin: -58.45649 ymin: -34.58516 xmax: -58.41596 ymax: -34.56231
## geographic CRS: WGS 84
## # A tibble: 6 x 3
## ID LINEASUB geometry
## <int> <chr> <MULTILINESTRING [°]>
## 1 1 LINEA D ((-58.45213 -34.56622, -58.45163 -34.56648, -58.44903 -34.5678…
## 2 2 LINEA D ((-58.45649 -34.56231, -58.45528 -34.5637, -58.4543 -34.56488,…
## 3 3 LINEA D ((-58.44467 -34.57001, -58.44252 -34.5711, -58.43844 -34.57335…
## 4 4 LINEA D ((-58.43501 -34.57518, -58.43423 -34.57555, -58.43302 -34.5761…
## 5 5 LINEA D ((-58.42571 -34.57842, -58.42539 -34.57858, -58.42378 -34.5796…
## 6 6 LINEA D ((-58.4212 -34.58141, -58.42015 -34.58224, -58.41817 -34.58361…
head(estaciones)
## Simple feature collection with 6 features and 3 fields
## geometry type: POINT
## dimension: XY
## bbox: xmin: -58.40604 ymin: -34.63575 xmax: -58.38057 ymax: -34.60425
## geographic CRS: WGS 84
## # A tibble: 6 x 4
## ID ESTACION LINEA geometry
## <dbl> <chr> <chr> <POINT [°]>
## 1 1 CASEROS H (-58.39893 -34.63575)
## 2 2 INCLAN - MEZQUITA AL AHMAD H (-58.40097 -34.62938)
## 3 3 HUMBERTO 1° H (-58.40232 -34.62309)
## 4 4 VENEZUELA H (-58.40473 -34.61524)
## 5 5 ONCE - 30 DE DICIEMBRE H (-58.40604 -34.60894)
## 6 6 9 DE JULIO D (-58.38057 -34.60425)
Vemos que las líneas no están escritas de la misma manera. Vamos a modificar eso.
estaciones <- estaciones %>%
mutate(LINEASUB = paste0("LINEA ", LINEA))
Ahora vamos a incorporar las líneas y estaciones de subte a nuestro mapa coroplético sobre densidad de agencias de viaje por barrios. ¿Cómo lo hacemos? Es muy fácil!
Solo necesitamos incorporar más capas con geometrías utilizando la función geom_sf()
. No olviden de aclarar cual es el dataset (con data =) que van a utilizar.
ggplot() +
geom_sf(data = barrios, aes(fill = dens_agencias), size = 0.2, alpha = 0.89) +
labs(title = "OFERTA DE TURISMO EN MICROCENTRO",
subtitle = "Según cantidad de agencias de viajes y accesibilidad" ,
fill = "Densidad de \nAgencias de viaje",
color = "Subte") +
scale_fill_gradient(high = "black", low = "grey90", trans = "log2", na.value = "white") +
geom_sf(data = lineas, alpha = 0.6, linetype = "dashed", aes(color = LINEASUB)) +
geom_sf(data = estaciones, alpha = 0.6, aes(color = LINEASUB)) +
scale_color_manual(values = c("cyan3", "red","blue3", "forestgreen", "darkorchid3", "yellow" )) +
theme_minimal() +
theme(legend.title=element_text(size=8))
Podemos observar en la zona de Microcentro no solo hay mayor concentración de líneas de subte, sino que también hay mayor densidad de agencias de viaje.
Hagamos un zoom al microcentro.
ggplot() +
geom_sf(data = barrios, aes(fill = dens_agencias), size = 0.2, alpha = 0.89) +
labs(title = "OFERTA DE TURISMO EN MICROCENTRO",
subtitle = "Según cantidad de agencias de viajes y accesibilidad" ,
fill = "Densidad de \nAgencias de viaje",
color = "Subte",
x = "",
y = "") +
scale_fill_gradient(high = "black", low = "grey90", trans = "log2", na.value = "white") +
geom_sf(data = lineas, alpha = 0.6, linetype = "dashed", aes(color = LINEASUB)) +
geom_sf(data = estaciones, alpha = 0.6, aes(color = LINEASUB)) +
scale_color_manual(values = c("cyan3", "red","blue3", "forestgreen", "darkorchid3", "yellow" )) +
geom_sf_label(data = barrios, aes(label = barrio), size = 2, alpha = 0.7) +
theme_minimal() +
theme(legend.title=element_text(size=8)) +
coord_sf(xlim = c(-58.43, -58.37), ylim = c(-34.62, -34.57))