#CIENCIA DE DATOS II
*1. Deberán elegir una ciudad en cualquier parte del mundo que les interese (ya que seguirán trabajando con ella) y que disponga de un portal de datos abiertos que ofrece un shapefile con sus barrios.
Ciudad elegida: CABA
library(tidyverse)
## ── Attaching packages ───────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.0 ✓ purrr 0.3.4
## ✓ tibble 3.0.1 ✓ dplyr 0.8.5
## ✓ tidyr 1.0.2 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ──────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(sf)
## Linking to GEOS 3.5.1, GDAL 2.2.2, PROJ 4.9.2
Cargo dataset barrios porteños
barrios <- st_read('http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson')
## Reading layer `barrios_badata' from data source `http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## CRS: 4326
names(barrios)
## [1] "barrio" "comuna" "perimetro" "area" "geometry"
2. Del mismo portal de datos, o de otra fuente si la tienen, elegirán un dataset con registros geo-referenciados. Por ejemplo, las escuelas de la ciudad (o las comisarías, o las propiedades en alquiler, o…) con sus coordenadas. Seleccionamos centros de vacunacion para adultos mayores.
Cargo dataset de vacunatorios para adultos
vacunatorios_adultos <-st_read('http://cdn.buenosaires.gob.ar/datosabiertos/datasets/vacunatorios-adultos-mayores/vacunatorios-adultos-mayores.geojson')
## Reading layer `vacunacion' from data source `http://cdn.buenosaires.gob.ar/datosabiertos/datasets/vacunatorios-adultos-mayores/vacunatorios-adultos-mayores.geojson' using driver `GeoJSON'
## Simple feature collection with 80 features and 6 fields
## geometry type: POINT
## dimension: XY
## bbox: xmin: -58.5253 ymin: -34.68989 xmax: -58.37062 ymax: -34.54537
## CRS: 4326
names(vacunatorios_adultos)
## [1] "nombre" "barrio" "comuna" "tipo" "domicilio" "aph"
## [7] "geometry"
3. Realizando un join espacial, asignar a cada registro geo-referenciado la comuna que le corresponde. Combinamos datasets con información espacial de vacunatorios para adultos mayores y comunas.
ggplot() +
geom_sf(data = barrios) +
geom_sf(data = vacunatorios_adultos, color = "red", alpha = .4)
vacunatorios_barrios <- st_join(barrios, vacunatorios_adultos)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
head(vacunatorios_barrios)
## Simple feature collection with 6 features and 10 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.47883 ymin: -34.60762 xmax: -58.42337 ymax: -34.57829
## CRS: 4326
## barrio.x comuna.x perimetro area nombre
## 1 CHACARITA 15 7724.853 3115707 Carlos Gardel
## 1.1 CHACARITA 15 7724.853 3115707 Baldomero Fernández Moreno
## 2 PATERNAL 15 7087.513 2229829 Santa Inés Virgen y Mártir
## 3 VILLA CRESPO 15 8131.857 3615978 Centro de dia 15
## 3.1 VILLA CRESPO 15 8131.857 3615978 Esc. de Educación Media N° 03/07°
## 3.2 VILLA CRESPO 15 8131.857 3615978 Casa de la Lectura
## barrio.y comuna.y tipo domicilio
## 1 CHACARITA 15 Espacio cultural Olleros 3640
## 1.1 CHACARITA 15 Espacio cultural Concepción Arenal 4206
## 2 PATERNAL 15 Iglesia Ávalos 250
## 3 VILLA CRESPO 15 Centro de día Jufre 350
## 3.1 VILLA CRESPO 15 Escuela Padilla 1051
## 3.2 VILLA CRESPO 15 Espacio cultural Lavalleja 924
## aph geometry
## 1 HTAL. DR. E. TORNÚ POLYGON ((-58.45282 -34.595...
## 1.1 HTAL. DR. E. TORNÚ POLYGON ((-58.45282 -34.595...
## 2 HTAL. DR. E. TORNÚ POLYGON ((-58.46558 -34.596...
## 3 HTAL. DR. C.G. DURAND POLYGON ((-58.42375 -34.597...
## 3.1 HTAL. DR. C.G. DURAND POLYGON ((-58.42375 -34.597...
## 3.2 HTAL. DR. C.G. DURAND POLYGON ((-58.42375 -34.597...
Creamos un nuevo dataset con las variables que nos interesa analizar, nombrándola vacunatorios_barrios
cantidad_vacunatorios <- vacunatorios_barrios %>%
group_by(barrio.x) %>%
summarise(cantidad = n())
head(cantidad_vacunatorios)
## Simple feature collection with 6 features and 2 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.50354 ymin: -34.66226 xmax: -58.33515 ymax: -34.53168
## CRS: 4326
## # A tibble: 6 x 3
## barrio.x cantidad geometry
## <fct> <int> <POLYGON [°]>
## 1 AGRONOMIA 1 ((-58.47712 -34.59511, -58.47788 -34.59709, -58.47835 -34.…
## 2 ALMAGRO 2 ((-58.41287 -34.61412, -58.41282 -34.61544, -58.41275 -34.…
## 3 BALVANERA 2 ((-58.41192 -34.598, -58.41029 -34.59809, -58.40943 -34.59…
## 4 BARRACAS 1 ((-58.37034 -34.63293, -58.37028 -34.63339, -58.37025 -34.…
## 5 BELGRANO 4 ((-58.45057 -34.53561, -58.45066 -34.53564, -58.45075 -34.…
## 6 BOCA 1 ((-58.35429 -34.62977, -58.35427 -34.62981, -58.35421 -34.…
4. Utilizando ggplot() realizar
** Ambos dataset presentan las variables de comunas y barrios Realizamos un join espacial de las variables de vacunatorios adultos y geriatricos
Realizamos grafico donde se ven los vacunatorios por comuna
ggplot() +
geom_sf(data = barrios) +
geom_sf(data = vacunatorios_adultos, aes(color = barrio))
Creamos gráfico de barras mostrando cantidad de vacunatorios para adultosmayores por barrio
ggplot(cantidad_vacunatorios) +
geom_bar(aes(x = barrio.x, weight = cantidad, color = cantidad, fill = barrio.x)) +
coord_flip() +
labs(title = "Centros de vacunacion de adultos mayores por comuna",
subtitle = "Ciudad Autónoma de Buenos Aires",
caption = "Fuente: portal de datos abiertos de la Ciudad - http://data.buenosaires.gob.ar",
x = "barrio",
y = "cantidad",
fill = "barrio")
Procederemos ahora a realizar un mapa con los límites de los barrios, cuyo color de relleno indique la cantidad de centros vacunatorios para adultos mayores encontrada en cada barrio.
cantidad_vacunatorios <- vacunatorios_barrios %>%
group_by(barrio.x) %>%
summarise(cantidad = n())
head(cantidad_vacunatorios)
## Simple feature collection with 6 features and 2 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -58.50354 ymin: -34.66226 xmax: -58.33515 ymax: -34.53168
## CRS: 4326
## # A tibble: 6 x 3
## barrio.x cantidad geometry
## <fct> <int> <POLYGON [°]>
## 1 AGRONOMIA 1 ((-58.47712 -34.59511, -58.47788 -34.59709, -58.47835 -34.…
## 2 ALMAGRO 2 ((-58.41287 -34.61412, -58.41282 -34.61544, -58.41275 -34.…
## 3 BALVANERA 2 ((-58.41192 -34.598, -58.41029 -34.59809, -58.40943 -34.59…
## 4 BARRACAS 1 ((-58.37034 -34.63293, -58.37028 -34.63339, -58.37025 -34.…
## 5 BELGRANO 4 ((-58.45057 -34.53561, -58.45066 -34.53564, -58.45075 -34.…
## 6 BOCA 1 ((-58.35429 -34.62977, -58.35427 -34.62981, -58.35421 -34.…
ggplot() +
geom_sf(data = cantidad_vacunatorios, aes(fill=cantidad)) +
labs(title = "Vacunatorios para adultos",
subtitle = "Ciudad Autonoma de Buenos Aires",
fill = "Cantidad",
caption= "Fuente: https://data.buenosaires.gob.ar/",
y="latitud",
x="longitud") +
scale_fill_gradient(low="pink", high="red")
Cargamos nuevas librerias
library(osmdata)
## Data (c) OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright
library(leaflet)
A continuacion obtener la bounding box Palermo con la función getbb()
bbox_st <- getbb('Palermo, Ciudad Autonoma de Buenos Aires')
bbox_st_poly = getbb('Palermo, Ciudad Autonoma de Buenos Aires', format_out = "sf_polygon")
leaflet(bbox_st_poly) %>%
addTiles() %>%
addPolygons()
Solicitaremos las vias de circulacion de Palermo
Palermo_calles <- opq(bbox_st) %>%
add_osm_feature(key = "highway") %>%
osmdata_sf()
Palermo_calles <- st_intersection(Palermo_calles$osm_lines, bbox_st_poly)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
Palermo_calles <- Palermo_calles %>%
mutate(lanes = as.numeric(lanes))
Realizamos un mapa de las calles de Palorme de acuerdo vias de circulacion(tipo de carril)
ggplot(Palermo_calles) +
geom_sf(aes(color = lanes), alpha = 0.5) +
scale_fill_continuous() + theme_void()+
labs(title = "Palermo",
subtitle = "Vías de circulación",
caption = "fuente: OpenStreetMap",
color = "cantidad de carriles")
Descargar de OpenStreetMap una (o más) capas de datos de tipo puntos o polígonos. (Ver catálogo de categorías en https://wiki.openstreetmap.org/wiki/Map_Features)
En este caso elegimos hospitales en Palermo
Palermo_hospitales <- opq(bbox_st) %>%
add_osm_feature(key = "amenity", value = "hospital") %>%
osmdata_sf()
Palermo_hospitales <- st_intersection(Palermo_hospitales$osm_points, bbox_st_poly)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
Proyectar los datos descargados en un mapa y comentar los resultados: ¿Cómo se distribuyen en la Ciudad?
ggplot() +
geom_sf(data = Palermo_calles, color = "gray60", alpha = .8) +
geom_sf(data = Palermo_hospitales, color= "red", alpha=.8) +
theme_void() +
labs(title = "Hospitales",
subtitle = "Palermo",
caption = "fuente: OpenStreetMap")
Hacer un conteo de los ítems de la capa descargada por barrio, mapearlo y compararlo con el conteo de los ítems descargados en el ejercicio anterior: ¿La distribución es similar o hay diferencias? ¿A qué se puede deber?
Ahora cargamos el mapa de toda la ciudad, para poder comparar con el item del ejercicio anterior que abarcaba todo CABA
bbox_st_caba <- getbb('Ciudad Autonoma de Buenos Aires')
bbox_st_poly_caba = getbb('Ciudad Autonoma de Buenos Aires', format_out = "sf_polygon")
Hospitales <- opq(bbox_st_caba) %>%
add_osm_feature(key = "amenity", value = "hospital") %>%
osmdata_sf()
hospitales_caba <- st_intersection(Hospitales$osm_points, bbox_st_poly_caba)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
hospitales_caba_barrios <- st_join(hospitales_caba,barrios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
hvb <- hospitales_caba_barrios %>%
group_by(barrio) %>%
summarise(cantidad = n())
hvb <- hvb %>%
st_set_geometry(NULL)
hospitales_vac_barrios <- barrios %>%
left_join(hvb, by="barrio")
ggplot() +
geom_sf(data=hospitales_vac_barrios, aes(fill=cantidad)) +
geom_sf_text(data=hospitales_vac_barrios, aes(label = cantidad ), size=2, colour = "blue")+
labs(title = "Hospitales en Caba",
subtitle = "Palermo",
fill = "Cantidad",
caption= "Fuente: https://datos.caba.gob.ar / OpenStreetMap",
y="latitud",
x="longitud") +
scale_fill_gradient(low="yellow", high="red")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning: Removed 16 rows containing missing values (geom_text).