Trabajo Práctico N5: “Analizando y visualizando flujo de viajes urbanos”

La ciudad con la que vamos a continuar trabajando es la Ciudad Autónoma de Buenos Aires

a. Un dataset que contenga servicios esenciales (hospitales, escuelas, comisarías, etc) de la Ciudad con la que están trabajando. En este caso deberán elegir un barrio céntrico y uno periférico del shape de barrios y calcular ambos centroides. Los datos pueden ser descargados del portal open data de la ciudad o de OSM y deben tener ubicación geográfica.

library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0     v purrr   0.3.3
## v tibble  2.1.3     v dplyr   0.8.4
## v tidyr   1.0.2     v stringr 1.4.0
## v readr   1.3.1     v 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.6.1, GDAL 2.2.3, PROJ 4.9.3
library(osrm)
## Data: (c) OpenStreetMap contributors, ODbL 1.0 - http://www.openstreetmap.org/copyright
## Routing: OSRM - http://project-osrm.org/
library(leaflet)

Dataset:Establecimientos educativos

Barrio Céntrico: Balvanera

Barrio Periférico: Mataderos

educativos <- read.csv("D:/Documents/01-Ditella/Ciencia de datos2/Clase 5/establecimientos-educativos.csv", encoding="UTF-8") 
head(educativos)
##        long       lat objectid    cui cueanexo    cue anexo sector
## 1 -58.51270 -34.60059        1 200794 20046500 200465     0      1
## 2 -58.40957 -34.62755        2 202368 20146700 201467     0      2
## 3 -58.47019 -34.56568        3 202343 20055900 200559     0      1
## 4 -58.40036 -34.58485        4 200063 20290700 202907     0      1
## 5 -58.42655 -34.60338        5 200084 20147803 201478     3      1
## 6 -58.46795 -34.62082        6 200588 20022003 200220     3      1
##                           dom_edific                         dom_establ
## 1                      Mercedes 4002                      Mercedes 4002
## 2                  Constitución 3156                  Constitución 3156
## 3               Blanco Encalada 3479               Blanco Encalada 3471
## 4         Avda. Gral. Las Heras 2670         Avda. Gral. Las Heras 2670
## 5          Obrero Roberto Núñez 4355          Obrero Roberto Núñez 4355
## 6 Gral. José Gervasio de Artigas 878 Gral. José Gervasio de Artigas 878
##                                        nombre_estab  nombre_abrev  telefono
## 1        Centro Educativo de Nivel Secundario N° 65       CENS 65 4501-9054
## 2                                  Inst. 9 de Julio  I 9 de Julio 4931-9299
## 3 Escuela Infantil N° 06/10° Madre Eufrasia Iaconis      EI 06/10 4545-3354
## 4                        Escuela Infantil N° 08/01°      EI 08/01 4804-9003
## 5      Jardín de Infantes Nucleado C (EPCjc 11/02°) JIN C-03 (11) 4867-2749
## 6      Jardín de Infantes Nucleado A (EPCjc 05/12°) JIN A-03 (05) 4611-5436
##                                                   email codpost
## 1                            deaa_cens65_de1@bue.edu.ar   C1419
## 2                 institutoprivado9dejulio@yahoo.com.ar   C1254
## 3                                   ei6_10@yahoo.com.ar   C1430
## 4 dei_ei8de1@bue.edu.ar / escuelainfantil8de1@gmail.com   C1425
## 5                             dei_jinc17_de2@bue.edu.ar   C1429
## 6                                 jinade12@yahoo.com.ar   C1404
##                                                                              pagina_web
## 1                http://www.buenosaires.gob.ar/educacion/estudiantes/adultos/secundaria
## 2 http://www.buenosaires.gob.ar/areas/educacion/gestion_privada/index.php?menu_id=19676
## 3              http://www.buenosaires.gob.ar/educacion/estudiantes/inicial?menu_id=9759
## 4              http://www.buenosaires.gob.ar/educacion/estudiantes/inicial?menu_id=9759
## 5              http://www.buenosaires.gob.ar/educacion/estudiantes/inicial?menu_id=9759
## 6              http://www.buenosaires.gob.ar/educacion/estudiantes/inicial?menu_id=9759
##   nivmod                            nivelmodal
## 1 SecAdu Nivel Secundario de Jóvenes y Adultos
## 2 SecCom                Nivel Secundario Común
## 3 IniCom                   Nivel Inicial Común
## 4 IniCom                   Nivel Inicial Común
## 5 IniCom                   Nivel Inicial Común
## 6 IniCom                   Nivel Inicial Común
##                                          depfun de
## 1 Dir de Educación del Adulto y del Adolescente 17
## 2      Dir Gral de Educación de Gestión Privada  6
## 3                      Dir de Educación Inicial 10
## 4                      Dir de Educación Inicial  1
## 5                      Dir de Educación Inicial  2
## 6                      Dir de Educación Inicial 12
##                      calle_nombre calle_altura comunas        barrio
## 1                       Mercedes          4002      11  VILLA DEVOTO
## 2                   Constitución          3156       3 SAN CRISTOBAL
## 3                Blanco Encalada          3471      13      BELGRANO
## 4          Avda. Gral. Las Heras          2670       2      RECOLETA
## 5               Obrero Roberto Nú         4355       5       ALMAGRO
## 6 Gral. José Gervasio de Artigas           878       7        FLORES
##   codigo_postal codigo_postal_argentino            areaprogra estado   point_x
## 1          1419                C1419BGJ 12 - HOSP ZUBIZARRETA      1  95468.38
## 2          1254                C1254ABB 08 - HOSP RAMOS MEJIA      1 104926.83
## 3          1430                C1430BNC    07 - HOSP PIROVANO      1  99367.47
## 4          1425                C1425ASQ   04 - HOSP FERNANDEZ      1 105774.80
## 5          1182                C1182AAA      03 - HOSP DURAND      1 103371.19
## 6            NA                             01 - HOSP ALVAREZ      1  99573.20
##    point_y                                                 tipest
## 1 103180.9                   Centro Educativo de Nivel Secundario
## 2 100190.1 Instituto Educativo Incorporado a la Enseñanza Oficial
## 3 107054.7                                       Escuela Infantil
## 4 104926.2                                       Escuela Infantil
## 5 102871.6                            Jardín de Infantes Nucleado
## 6 100937.8                            Jardín de Infantes Nucleado
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
ggplot() +
    geom_sf(data = barrios) +
    geom_point(data = educativos, 
               aes(x = long, y = lat),
               alpha = .3, 
               color = "orange")

b. Servicios esenciales: Estimar la distancia entre los centroides calculados en el punto I y los ítems que componen la capa descargada. Describir los resultados obtenidos y hacer los siguientes mapas:

- Mapa con los ruteos del centroide del barrio céntrico a los ítems de servicios esenciales elegido.

- Mapa con los ruteos del centroide del barrio periférico a los ítems de servicios esenciales elegido.

barrios_centroides <- barrios %>%
  st_centroid()
## Warning in st_centroid.sf(.): st_centroid assumes attributes are constant over
## geometries of x
## Warning in st_centroid.sfc(st_geometry(x), of_largest_polygon =
## of_largest_polygon): st_centroid does not give correct centroids for longitude/
## latitude data
ggplot()+
  geom_sf(data=barrios, fill="lightyellow")+
  geom_sf(data=barrios_centroides, size=2)+
  labs(title = "Barrios de la Ciudad",
         subtitle = "Ubicación de los centroides",
         fill="Barrios",
         caption= "Fuente:https://data.buenosaires.gob.ar/")+
  theme_void()

barrios_centroides <- barrios_centroides %>%
  filter(barrio=="BALVANERA" | barrio=="MATADEROS") %>%
  mutate(ubicacion=if_else(barrio=="BALVANERA", "CENTRO", "PERIFERIA"))
barrios_centroides <- cbind(barrios_centroides, st_coordinates(barrios_centroides)) %>%
                      st_set_geometry(NULL)
ggplot()+
  geom_sf(data=barrios, fill="gray80")+
  geom_point(data=barrios_centroides, aes(x=X, y=Y, color=ubicacion), size=4)+
  geom_point(data=educativos, aes(x=long, y=lat), color="darkblue")+
  
  geom_point(data=barrios_centroides, aes(x=X, y=Y, color=ubicacion), size=4)+
  labs(title = "Barrios de la Ciudad",
         subtitle = "Ubicación de los centroides",
         color="Barrios",
         caption= "Fuente:https://data.buenosaires.gob.ar/")+
  theme_void()

ruteo_a_educativos <- function(o_nombre, o_x, o_y, d_nombre, d_x, d_y) {
  
  ruta <- osrmRoute(src = c(o_nombre, o_x, o_y),
                    dst = c(d_nombre, d_x, d_y), 
                    returnclass = "sf",
                    overview = "full")
  
  cbind(ORIGEN = o_nombre, DESTINO = d_nombre, ruta)
}

Hacemos los ruteos del centroide del barrio céntrico a los centros educativos

educativos_balvanera <- educativos %>%
  mutate(ORIGEN="BALVANERA") %>%
  left_join(barrios_centroides, by=c("ORIGEN"="barrio")) %>%
  rename(NOMBRE_ORIGEN=ORIGEN,
         LON_ORIGEN=X,
         LAT_ORIGEN=Y,
         NOMBRE_DESTINO=nombre_estab,
         LON_DESTINO=long,
         LAT_DESTINO=lat) %>%
  select(NOMBRE_ORIGEN, LON_ORIGEN, LAT_ORIGEN, NOMBRE_DESTINO, LON_DESTINO, LAT_DESTINO)
## Warning: Column `ORIGEN`/`barrio` joining character vector and factor, coercing
## into character vector
head(educativos_balvanera)
##   NOMBRE_ORIGEN LON_ORIGEN LAT_ORIGEN
## 1     BALVANERA  -58.40306   -34.6091
## 2     BALVANERA  -58.40306   -34.6091
## 3     BALVANERA  -58.40306   -34.6091
## 4     BALVANERA  -58.40306   -34.6091
## 5     BALVANERA  -58.40306   -34.6091
## 6     BALVANERA  -58.40306   -34.6091
##                                      NOMBRE_DESTINO LON_DESTINO LAT_DESTINO
## 1        Centro Educativo de Nivel Secundario N° 65   -58.51270   -34.60059
## 2                                  Inst. 9 de Julio   -58.40957   -34.62755
## 3 Escuela Infantil N° 06/10° Madre Eufrasia Iaconis   -58.47019   -34.56568
## 4                        Escuela Infantil N° 08/01°   -58.40036   -34.58485
## 5      Jardín de Infantes Nucleado C (EPCjc 11/02°)   -58.42655   -34.60338
## 6      Jardín de Infantes Nucleado A (EPCjc 05/12°)   -58.46795   -34.62082
ruteo_balvanera <- list(educativos_balvanera$NOMBRE_ORIGEN, educativos_balvanera$LON_ORIGEN,educativos_balvanera$LAT_ORIGEN,
                  educativos_balvanera$NOMBRE_DESTINO, educativos_balvanera$LON_DESTINO,educativos_balvanera$LAT_DESTINO)

ruteo_centrico <- pmap(ruteo_balvanera, ruteo_a_educativos ) %>% 
  reduce(rbind)
ruteo_centrico <-mutate(ruteo_centrico, RUTA = paste(ORIGEN,"a", DESTINO))
filter(ruteo_centrico, distance == min(distance))
## Simple feature collection with 1 feature and 7 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -58.40612 ymin: -34.60911 xmax: -58.40337 ymax: -34.60754
## CRS:            EPSG:4326
##      ORIGEN                                          DESTINO       src dst
## 1 BALVANERA Centro Educativo de Nivel Primario N° 58 - AMMAR BALVANERA 379
##   duration distance                       geometry
## 1 3.638333    0.523 LINESTRING (-58.40337 -34.6...
##                                                           RUTA
## 1 BALVANERA a Centro Educativo de Nivel Primario N° 58 - AMMAR

El más cercano a Balvanera es el Centro Educativo de Nivel Primario N° 58, que se encuentra a 0,52km y la duración del viaje estimada es de 3,64 minutos.

leaflet(ruteo_centrico) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addPolylines(color = ~colorNumeric("BrBG", ruteo_centrico$distance)(distance),
              label = ruteo_centrico$RUTA %>%
              lapply(htmltools::HTML)) %>%
  addLegend("bottomright", pal = colorNumeric("BrBG", ruteo_centrico$distance), values = ~distance,
            title = "Distancia",
            opacity = 0.55)

Hacemos los ruteos del centroide del barrio periférico a los centros educativos

educativos_mataderos <- educativos %>%
  mutate(ORIGEN="MATADEROS") %>%
  left_join(barrios_centroides, by=c("ORIGEN"="barrio")) %>%
  rename(NOMBRE_ORIGEN=ORIGEN,
         LON_ORIGEN=X,
         LAT_ORIGEN=Y,
         NOMBRE_DESTINO=nombre_estab,
         LON_DESTINO=long,
         LAT_DESTINO=lat) %>%
  select(NOMBRE_ORIGEN, LON_ORIGEN, LAT_ORIGEN, NOMBRE_DESTINO, LON_DESTINO, LAT_DESTINO)
## Warning: Column `ORIGEN`/`barrio` joining character vector and factor, coercing
## into character vector
head(educativos_mataderos)
##   NOMBRE_ORIGEN LON_ORIGEN LAT_ORIGEN
## 1     MATADEROS  -58.50174  -34.65837
## 2     MATADEROS  -58.50174  -34.65837
## 3     MATADEROS  -58.50174  -34.65837
## 4     MATADEROS  -58.50174  -34.65837
## 5     MATADEROS  -58.50174  -34.65837
## 6     MATADEROS  -58.50174  -34.65837
##                                      NOMBRE_DESTINO LON_DESTINO LAT_DESTINO
## 1        Centro Educativo de Nivel Secundario N° 65   -58.51270   -34.60059
## 2                                  Inst. 9 de Julio   -58.40957   -34.62755
## 3 Escuela Infantil N° 06/10° Madre Eufrasia Iaconis   -58.47019   -34.56568
## 4                        Escuela Infantil N° 08/01°   -58.40036   -34.58485
## 5      Jardín de Infantes Nucleado C (EPCjc 11/02°)   -58.42655   -34.60338
## 6      Jardín de Infantes Nucleado A (EPCjc 05/12°)   -58.46795   -34.62082
ruteo_mataderos<- list(educativos_mataderos$NOMBRE_ORIGEN, educativos_mataderos$LON_ORIGEN,educativos_mataderos$LAT_ORIGEN,
                   educativos_mataderos$NOMBRE_DESTINO, educativos_mataderos$LON_DESTINO,educativos_mataderos$LAT_DESTINO)

ruteo_periferico <- pmap(ruteo_mataderos, ruteo_a_educativos) %>% 
  reduce(rbind)
ruteo_periferico <-mutate(ruteo_periferico, RUTA = paste(ORIGEN,"a", DESTINO)) 
filter(ruteo_periferico, distance == min(distance))
## Simple feature collection with 2 features and 7 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -58.50088 ymin: -34.65909 xmax: -58.49938 ymax: -34.6582
## CRS:            EPSG:4326
##      ORIGEN                                      DESTINO       src  dst
## 1 MATADEROS                           Esc. Técnica Nº 20 MATADEROS 1337
## 2 MATADEROS Centro de Formación Profesional N° 36 anexo2 MATADEROS  269
##    duration distance                       geometry
## 1 0.6016667   0.1922 LINESTRING (-58.50088 -34.6...
## 2 0.6016667   0.1922 LINESTRING (-58.50088 -34.6...
##                                                       RUTA
## 1                           MATADEROS a Esc. Técnica Nº 20
## 2 MATADEROS a Centro de Formación Profesional N° 36 anexo2

El más cercano a Mataderos es el Centro de Formación Profesional N° 36, que se encuentra a 0,19 km y la duración del viaje estimada es de 1 minuto.

leaflet(ruteo_periferico) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addPolylines(color = ~colorNumeric("BrBG", ruteo_periferico$distance)(distance),
              label = ruteo_periferico$RUTA %>%
              lapply(htmltools::HTML)) %>%
  addLegend("bottomright", pal = colorNumeric("BrBG", ruteo_periferico$distance), values = ~distance,
            title = "Distancia",
            opacity = 0.55)