MATERIA: Ciencia de Datos para Ciudades 2

TAREA 5: Analizando y Visualizando Flujos de Viajes Urbanos

1. Elegir UNA SOLA de las siguientes opciones:

1.a. Un dataset que contenga viajes origen-destino (por ejemplo bicicletas públicas) de la Ciudad con la que están trabajando.

1.b. 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 cualquiera y calcular el centroide con st_centroid(). Los datos pueden ser descargados del portal open data de la ciudad y deben tener ubicación geográfica.

Siguiendo con temas vinculados al abordaje sanitario en el contexto de pandemia, optamos por la opción 1.b. Vamos a utilizar un dataset de los hospitales de la Ciudad Autónoma de Buenos Aires

Cargamos las librerías a utilizar:

library(tidyverse)
library(sf)
library(ggmap)
library(leaflet)
library(osrm)
library(osmdata)
library(Rcpp)

Traemos los datasets de barrios y hospitales de la Ciudad de Buenos Aires:

barrios <- st_read("http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson", stringsAsFactors = TRUE)
## 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
## Bounding box:  xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS:  WGS 84
hospitales <- read.csv("http://cdn.buenosaires.gob.ar/datosabiertos/datasets/hospitales/hospitales.csv",
                       stringsAsFactors = TRUE,
                       encoding="UTF-8") %>%
                       mutate(nombre=as.character(nombre))

Observamos el resumen de ambos datasets:

summary(barrios)
##        barrio       comuna         perimetro          area         
##  AGRONOMIA: 1   Min.   : 1.000   Min.   : 4531   Min.   : 1232270  
##  ALMAGRO  : 1   1st Qu.: 4.000   1st Qu.: 6554   1st Qu.: 2222027  
##  BALVANERA: 1   Median : 9.500   Median : 8254   Median : 3679709  
##  BARRACAS : 1   Mean   : 8.458   Mean   : 9863   Mean   : 4242703  
##  BELGRANO : 1   3rd Qu.:12.000   3rd Qu.:11127   3rd Qu.: 5142993  
##  BOCA     : 1   Max.   :15.000   Max.   :22127   Max.   :15845871  
##  (Other)  :42                                                      
##           geometry 
##  POLYGON      :48  
##  epsg:4326    : 0  
##  +proj=long...: 0  
##                    
##                    
##                    
## 

La Ciudad de Buenos Aires cuenta con 48 barrios y 15 comunas.

summary(hospitales)
##       long             lat               id           nombre         
##  Min.   :-58.52   Min.   :-34.67   Min.   : 1.00   Length:36         
##  1st Qu.:-58.46   1st Qu.:-34.64   1st Qu.: 9.75   Class :character  
##  Median :-58.41   Median :-34.62   Median :18.50   Mode  :character  
##  Mean   :-58.43   Mean   :-34.62   Mean   :18.50                     
##  3rd Qu.:-58.39   3rd Qu.:-34.60   3rd Qu.:27.25                     
##  Max.   :-58.36   Max.   :-34.55   Max.   :36.00                     
##                                                                      
##                           nom_map        objeto                  calle_nombre
##  HOSP. ALVAREZ                : 1   HOSPITAL:36   DIAZ VELEZ           : 2   
##  HOSP. ARGERICH               : 1                 DOCTOR RAMON CARRILLO: 2   
##  HOSP. BORDA                  : 1                 BRANDSEN             : 1   
##  HOSP. CURIE                  : 1                 CASEROS              : 1   
##  HOSP. DE ELIZALDE            : 1                 CERVIÑO              : 1   
##  HOSP. DE QUEMADOS A. U. ILLIA: 1                 COMBATE DE LOS POZOS : 1   
##  (Other)                      :30                 (Other)              :28   
##   calle_altura                          calle_altura.1
##  Min.   :  15.0   BRANDSEN 2570                : 1    
##  1st Qu.: 924.8   CASEROS 2061                 : 1    
##  Median :2041.0   CERVIÑO 3356                 : 1    
##  Mean   :2074.1   COMBATE DE LOS POZOS 1881    : 1    
##  3rd Qu.:2776.2   COMBATIENTES DE MALVINAS 3002: 1    
##  Max.   :5044.0   CORBETA PI Y MARGAL 750      : 1    
##                   (Other)                      :30    
##                              dom_geo                    telefono 
##  1301 VARELA AV.                 : 1   4121-0700 / 0800     : 1  
##  1330 GALLO                      : 1   4123-3100            : 1  
##  15 MUÑIZ                        : 1   4127-0200 / 300      : 1  
##  150  PATRICIAS ARGENTINAS AV.   : 1   4127-3100 / 4941-5555: 1  
##  1550 CALDERON DE LA BARCA, PEDRO: 1   4301-3655 / 3659     : 1  
##  1795 DON PEDRO DE MENDOZA AV.   : 1   4301-3961            : 1  
##  (Other)                         :30   (Other)              :30  
##                                     guardia             fax    
##                                         : 2               : 1  
##  4121-0683                              : 1   4301-4870   : 1  
##  4127-0400                              : 1   4302-7400   : 1  
##  4301-4522                              : 1   4302-9160   : 1  
##  4301-4870                              : 1   4303-3655/59: 1  
##  4304-5555 / 4304-3380 / 2946 (int. 213): 1   4304-1200   : 1  
##  (Other)                                :29   (Other)     :30  
##                                                                   web    
##                                                                     :23  
##  www.buenosaires.gov.ar/areas/salud/hospital_quemados/?menu_id=24263: 1  
##  www.buenosaires.gov.ar/areas/salud/rivadavia                       : 1  
##  www.elizalde.gov.ar                                                : 1  
##  www.garrahan.gov.ar                                                : 1  
##  www.guti.gov.ar                                                    : 1  
##  (Other)                                                            : 8  
##                      tipo                         tipo_espec
##  Hospital de agudos    :13   GRAL: BAS/CRIT/OTR        :13  
##  Hospital de niños     : 3   SALUD MENTAL              : 5  
##  Hospital especializado:20   ODONTOLOGIA               : 3  
##                              PEDIATRIA                 : 3  
##                              MED. FISICA/REHABILITACION: 2  
##                              OFTALMOLOGIA              : 2  
##                              (Other)                   : 8  
##                  mod_at_1           mod_at_2                     depend_adm
##                      : 1                : 1   Ministerio de Salud GCBA:36  
##  AT. AMB./INTERNACION:30   DIAG./TRATAM.:32                                
##  AT. AMBULATORIA     : 5   DIAGNOSTICO  : 3                                
##                                                                            
##                                                                            
##                                                                            
##                                                                            
##                            director                             dom_norma 
##  Dr. Alejandro Fernández       : 1   ARANGUREN, JUAN F., DR. 2701    : 1  
##  Dr. Armando Escobar           : 1   BRANDSEN 2570                   : 1  
##  Dr. Bolla Horacio Alberto     : 1   CALDERON DE LA BARCA, PEDRO 1550: 1  
##  Dr. Cichero Carlos            : 1   CARRILLO, RAMON, DR. 315        : 1  
##  Dr. Daniel Cichello           : 1   CARRILLO, RAMON, DR. 375        : 1  
##  Dr. Eduardo Fernández Rostello: 1   CASEROS AV. 2061                : 1  
##  (Other)                       :30   (Other)                         :30  
##  calle_altura.2                         calle_altura.3              barrio  
##  Min.   :  15.0   BRANDSEN 2570                : 1     Barracas        : 6  
##  1st Qu.: 924.8   CASEROS 2061                 : 1     Parque Patricios: 5  
##  Median :2041.0   CERVIÑO 3356                 : 1     Caballito       : 4  
##  Mean   :2074.1   COMBATE DE LOS POZOS 1881    : 1     Recoleta        : 3  
##  3rd Qu.:2776.2   COMBATIENTES DE MALVINAS 3002: 1     Boca            : 2  
##  Max.   :5044.0   CORBETA PI Y MARGAL 750      : 1     Flores          : 2  
##                   (Other)                      :30     (Other)         :14  
##        comuna   codigo_postal  codigo_postal_argentino
##  Comuna 4 :13   Min.   :1155   C1275AHG: 2            
##  Comuna 6 : 4   1st Qu.:1271           : 1            
##  Comuna 2 : 3   Median :1406   C1155AHD: 1            
##  Comuna 10: 2   Mean   :1349   C1169AAB: 1            
##  Comuna 11: 2   3rd Qu.:1425   C1212AAA: 1            
##  Comuna 15: 2   Max.   :1439   C1221ADC: 1            
##  (Other)  :10   NA's   :1      (Other) :29

La Ciudad de Buenos Aires cuenta con 36 hospitales.

Armamos el mapa correspondiente a la ciudad elegida:

bbox_CABA <- getbb("Ciudad Autónoma de Buenos Aires, Buenos Aires, Argentina")
mapa_CABA <- get_stamenmap(bbox = bbox_CABA,
                           zoom=12)
ggmap(mapa_CABA)+
  labs(title="Ciudad Autónoma de Buenos Aires",
       caption="Fuente: Open Street Map")+
  theme_void()

Ubicamos los hospitales y barrios sobre el mapa de CABA y visualizamos:

ggmap(mapa_CABA)+
  geom_sf(data = barrios, inherit.aes = FALSE)+
  geom_point(data = hospitales, aes(x=long, y=lat), inherit.aes = FALSE)+
  labs(title="Ciudad Autónoma de Buenos Aires", subtitle = "Hospitales y Barrios",
       caption="Fuente: Open Street Map")+
  theme_void()

Elegimos para trabajar el barrio de Caballito. calculamos su centroide:

CABALLITO_centroide <- barrios %>%
  st_centroid() %>%
  filter(barrio=="CABALLITO")

Transformamos la geometría en coordenadas X e Y para poder realizar, posteriormente, el ruteo:

CABALLITO_centroide <- cbind(CABALLITO_centroide, st_coordinates(CABALLITO_centroide)) %>%
                      st_set_geometry(NULL) %>% 
                      rename(LON_ORIGEN=X,
                             LAT_ORIGEN=Y)
hospitales %>% 
  group_by(barrio) %>% 
  summarise(cantidad=n()) %>%
  mutate(barrio=toupper(barrio)) %>% 
  left_join(barrios, by="barrio") %>%
  ungroup()
## # A tibble: 19 x 6
##    barrio   cantidad comuna perimetro    area                           geometry
##    <chr>       <int>  <int>     <dbl>   <dbl>                      <POLYGON [°]>
##  1 ALMAGRO         1      5     8538.  4.05e6 ((-58.41287 -34.61412, -58.41282 ~
##  2 BALVANE~        1      3     8376.  4.34e6 ((-58.41192 -34.598, -58.41029 -3~
##  3 BARRACAS        6      4    12790.  7.95e6 ((-58.37034 -34.63293, -58.37028 ~
##  4 BELGRANO        1     13    20610.  8.00e6 ((-58.45057 -34.53561, -58.45066 ~
##  5 BOCA            2      4    20060.  5.04e6 ((-58.35429 -34.62977, -58.35427 ~
##  6 CABALLI~        4      6    10991.  6.85e6 ((-58.43061 -34.60705, -58.43056 ~
##  7 COGHLAN         1     12     4628.  1.28e6 ((-58.47242 -34.5661, -58.47296 -~
##  8 FLORES          2      7    15772.  8.59e6 ((-58.46041 -34.6568, -58.4609 -3~
##  9 LINIERS         1      9     9257.  4.37e6 ((-58.51925 -34.63301, -58.51908 ~
## 10 MONTE C~        2     10     7361.  2.63e6 ((-58.50349 -34.62403, -58.50467 ~
## 11 PALERMO         1     14    22127.  1.58e7 ((-58.42676 -34.55202, -58.42676 ~
## 12 PARQUE ~        1     15     4531.  1.39e6 ((-58.47082 -34.58745, -58.47082 ~
## 13 PARQUE ~        5      4     7878.  3.74e6 ((-58.41037 -34.6483, -58.4121 -3~
## 14 PATERNAL        1     15     7088.  2.23e6 ((-58.46558 -34.59656, -58.46562 ~
## 15 RECOLETA        3      2    21453.  6.32e6 ((-58.38 -34.57002, -58.38002 -34~
## 16 SAN CRI~        1      3     5987.  2.04e6 ((-58.39155 -34.62156, -58.39149 ~
## 17 VILLA D~        1     11    11562.  6.40e6 ((-58.50831 -34.61392, -58.50847 ~
## 18 VILLA G~        1     11     6290.  2.16e6 ((-58.4714 -34.61904, -58.47162 -~
## 19 VILLA S~        1      8    12442.  8.69e6 ((-58.44913 -34.65117, -58.44883 ~

Mapeamos el centroide de Caballito y los 36 hospitales de la Ciudad:

ggplot()+
  geom_sf(data=barrios, fill="gray90", color="white")+
  geom_point(data=CABALLITO_centroide, aes(x=LON_ORIGEN, y=LAT_ORIGEN, color=barrio), shape=4, stroke=2, size=2)+
  geom_point(data=hospitales, aes(x=long, y=lat), size=1.5)+
  scale_fill_gradient(low="gold", high= "deeppink4")+
  scale_color_manual(values = c("turquoise4", "magenta4"))+
  labs(title = "Ciudad Autónoma de Buenos Aires",
       subtitle = "Hospitales y Barrios",
       caption= "Fuente: Elaboración propia en base a datos de BAData",
       color="Barrio")+
   theme_void()

2. Según la opción elegida en el punto 1, deberán:

2.a. Viajes origen-destino: Calcular los 10 recorridos más realizados, describir los resultados obtenidos y hacer un mapa con los ruteos.

2.b. Servicios esenciales: Estimar la distancia entre el centroide calculado en el punto 1 y los ítems que componen la capa descargada. Describir los resultados obtenidos y hacer un mapa con los ruteos.

Continuando con la opción 2.b, generamos los pasos necesarios para calcular la distancia entre el centroide del barrio Caballito y los hospitales.

Comenzamos armando la función:

ruteo_hospitales <- 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)
}

Generamos un nuevo dataset que establece las coordenadas del centroide de Caballito como punto de origen y las coordenadas de los hospitales como puntos de destino:

h_caballito <- hospitales %>%
  mutate(NOMBRE_ORIGEN="CABALLITO") %>%
  left_join(CABALLITO_centroide, by=c("NOMBRE_ORIGEN"="barrio")) %>%
  rename(NOMBRE_DESTINO=nombre,
         LON_DESTINO=long,
         LAT_DESTINO=lat) %>%
  select(NOMBRE_ORIGEN, LON_ORIGEN, LAT_ORIGEN, NOMBRE_DESTINO, LON_DESTINO, LAT_DESTINO)

Observamos el nuevo dataset:

head(h_caballito)
##   NOMBRE_ORIGEN LON_ORIGEN LAT_ORIGEN
## 1     CABALLITO   -58.4436  -34.61683
## 2     CABALLITO   -58.4436  -34.61683
## 3     CABALLITO   -58.4436  -34.61683
## 4     CABALLITO   -58.4436  -34.61683
## 5     CABALLITO   -58.4436  -34.61683
## 6     CABALLITO   -58.4436  -34.61683
##                                             NOMBRE_DESTINO LON_DESTINO
## 1              HOSPITAL GENERAL DE NIÑOS PEDRO DE ELIZALDE   -58.37755
## 2              HOSPITAL GENERAL DE NIÑOS RICARDO GUTIERREZ   -58.41207
## 3 HOSPITAL DE ODONTOLOGIA DR. RAMON CARRILLO (EX NACIONAL)   -58.40273
## 4                  HOSPITAL DE SALUD MENTAL BRAULIO MOYANO   -58.38516
## 5                 HOSPITAL DE GASTROENTEROLOGIA B. UDAONDO   -58.39131
## 6                         INSTITUTO DE ZOONOSIS L. PASTEUR   -58.43494
##   LAT_DESTINO
## 1   -34.62885
## 2   -34.59419
## 3   -34.58453
## 4   -34.63940
## 5   -34.63415
## 6   -34.60847

Armamos la lista para aplicar el correspondiente ruteo:

ruteo_caballito <- list(h_caballito$NOMBRE_ORIGEN, h_caballito$LON_ORIGEN,h_caballito$LAT_ORIGEN,
                   h_caballito$NOMBRE_DESTINO, h_caballito$LON_DESTINO,h_caballito$LAT_DESTINO)

Unimos la función creada y la lista:

ruteo <- pmap(ruteo_caballito, ruteo_hospitales) %>% 
  reduce(rbind)

Observamos los resultados para obtener conclusiones:

ruteo %>% 
summary()
##     ORIGEN            DESTINO              src                dst           
##  Length:36          Length:36          Length:36          Length:36         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     duration         distance               geometry 
##  Min.   : 2.810   Min.   : 1.466   LINESTRING   :36  
##  1st Qu.: 7.784   1st Qu.: 4.566   epsg:4326    : 0  
##  Median :11.617   Median : 6.984   +proj=long...: 0  
##  Mean   :10.648   Mean   : 6.366                     
##  3rd Qu.:13.719   3rd Qu.: 8.313                     
##  Max.   :17.160   Max.   :11.258

El resumen nos arroja que:

1) Tenemos un total de 36 viajes (origen-destino), lo cual equivale a la cantidad de hospitales.

2) En automóvil, la duración mínima de un viaje desde el centro de Caballito a un hospital es 3 minutos aproximadamente. La duración máxima es de 17 minutos. El promedio de duración de todos los viajes es de 10.6 minutos.

3) La distancia promedio entre el centroide de Caballito y todos los hospitales es de 6.4km. El hospital más cercano se encuentra a 1.4km y el más alejado está a 11.2km.

Mapeamos las geometrías:

ggmap(mapa_CABA)+
  geom_sf(data=ruteo, color="darkgreen", size=1.2, inherit.aes = FALSE)+
  labs(title="Ciudad Autónoma de Buenos Aires",
       subtitle="Ruteo a Hospitales desde el centro de Caballito",
       caption="Fuente: Elaboración propia en base a datos de BAData")+
  scale_color_viridis_c(direction=-1)+
  theme_void()

¿Cuál es el Hospital más cercano al centro de Caballito?

filter(ruteo, distance == min(distance))$DESTINO
## [1] "HOSPITAL GENERAL DE AGUDOS DR. C. DURAND"

La respuesta es el Hospital Durand.

¿Cuáles son los 5 hospitales que tienen menor distancia al centro de Caballito?

ruteo5 <- ruteo %>% 
  arrange(distance) %>% 
  head(5) %>% 
  left_join(h_caballito, by=c("DESTINO"="NOMBRE_DESTINO")) %>% 
  mutate(RUTA = paste("Desde", ORIGEN,"hasta", DESTINO))

ruteo5$DESTINO
## [1] "HOSPITAL GENERAL DE AGUDOS DR. C. DURAND"     
## [2] "HOSPITAL DE QUEMADOS DR. ARTURO UMBERTO ILLIA"
## [3] "INSTITUTO DE ZOONOSIS L. PASTEUR"             
## [4] "HOSPITAL MUNICIPAL DE ONCOLOGIA MARIE CURIE"  
## [5] "HOSPITAL DE ODONTOLOGIA  JOSE DUEÑAS"

En la lista anterior se pueden ver los 5 hospitales más cercanos al centro de Caballito, siendo el Hospital Durand el más cercano y el Hospital Dueñas el más alejado dentro de este corte.

Creamos los mapas con los ruteos.

En primer lugar, mapeamos los 5 ruteos a los hospitales más cercanos desde el centro de Caballito:

paleta <- c(low="gold", high= "deeppink4")

icons_d <- awesomeIcons(icon = "hospital-o",
                      iconColor = "black",
                      library = "fa",
                      markerColor = "red")

icons_o <- awesomeIcons(icon = "whatever",
                      iconColor = "black",
                      library = "fa",
                      markerColor = "gray")

labels <- sprintf(
  "<strong>%s</strong><br/>%g km <br/>%g min",
  ruteo5$RUTA, round(ruteo5$distance, 2), round(ruteo5$duration, 0)
) %>% lapply(htmltools::HTML)

leaflet(ruteo5) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB) %>%
  addPolylines(color = ~colorNumeric(paleta, ruteo5$distance)(distance),
               weight = 6,
               label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "2px 5px"),
      textsize = "10px",
      direction = "top"),
              highlight = highlightOptions(weight = 8,
                                           bringToFront = TRUE)) %>% 
  addLegend("bottomright", pal = colorNumeric(paleta, ruteo5$distance), values = ~distance,
            title = "Distancia",
            labFormat = labelFormat(suffix = "km"),
            opacity = 0.75) %>%
  addAwesomeMarkers(~LON_DESTINO, ~LAT_DESTINO, popup = ~DESTINO, icon=icons_d)%>%
  addAwesomeMarkers(~LON_ORIGEN, ~LAT_ORIGEN, popup = ~ORIGEN, icon=icons_o)

En segundo lugar, mapeamos los ruteos desde el centro de Caballito a la totalidad de 36 hospitales de la Ciudad:

ruteo36 <- ruteo %>% 
  arrange(distance) %>% 
  head(36) %>% 
  left_join(h_caballito, by=c("DESTINO"="NOMBRE_DESTINO")) %>% 
  mutate(RUTA = paste("Desde", ORIGEN,"hasta", DESTINO))
leaflet(ruteo36) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB) %>%
  addPolylines(color = ~colorNumeric(paleta, ruteo36$distance)(distance),
               weight = 6,
               label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "2px 5px"),
      textsize = "10px",
      direction = "top"),
              highlight = highlightOptions(weight = 8,
                                           bringToFront = TRUE)) %>% 
  addLegend("bottomright", pal = colorNumeric(paleta, ruteo36$distance), values = ~distance,
            title = "Distancia",
            labFormat = labelFormat(suffix = "km"),
            opacity = 0.75) %>%
  addAwesomeMarkers(~LON_DESTINO, ~LAT_DESTINO, popup = ~DESTINO, icon=icons_d)%>%
  addAwesomeMarkers(~LON_ORIGEN, ~LAT_ORIGEN, popup = ~ORIGEN, icon=icons_o)

EXTRA: Duración y distancia de los trayectos en bicicleta y a pie.

Hasta aquí, calculamos el tiempo y la distancia de los ruteos desde el centro de Caballito hasta los hospitales de la Ciudad, considerando que el trayecto se realiza en automóvil.

Primero, realizamos el mismo procedimiento aplicado a la posibilidad de trasladarse en bicicleta.

Armamos una nueva función:

ruteo_hospitales_bike <- 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",
                    osrm.profile = "bike")
  
  cbind(ORIGEN = o_nombre, DESTINO = d_nombre, ruta)
}

Unimos la función creada y la lista original:

ruteo_bike <- pmap(ruteo_caballito, ruteo_hospitales_bike) %>% 
  reduce(rbind)

Observamos los resultados para obtener conclusiones:

ruteo_bike %>% 
summary()
##     ORIGEN            DESTINO              src                dst           
##  Length:36          Length:36          Length:36          Length:36         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     duration        distance               geometry 
##  Min.   : 6.63   Min.   : 1.466   LINESTRING   :36  
##  1st Qu.:19.38   1st Qu.: 4.481   epsg:4326    : 0  
##  Median :27.21   Median : 6.368   +proj=long...: 0  
##  Mean   :25.95   Mean   : 5.974                     
##  3rd Qu.:34.78   3rd Qu.: 8.024                     
##  Max.   :44.73   Max.   :10.351

El resumen nos arroja que:

1) Tenemos un total de 36 viajes (origen-destino), lo cual equivale a la cantidad de hospitales.

2) En bicicleta, la duración mínima de un viaje desde el centro de Caballito a un hospital es 7 minutos aproximadamente. La duración máxima es de 45 minutos. El promedio de duración de todos los viajes es de 26 minutos.

3) En cuanto a la variable distancia, los resultados varían respecto al automóvil. Suponemos que en bicicleta pueden tomarse rutas diferentes. Con el nuevo medio de transporte, la distancia promedio entre el centroide de Caballito y todos los hospitales es de 6km. El hospital más cercano se encuentra a 1.5km y el más alejado está a 10.4km.

Mapeamos el ruteo en bicicleta a los 10 hospitales más cercanos al centro de Caballito:

ruteo_bike_10 <- ruteo_bike %>% 
  arrange(distance) %>% 
  head(10) %>% 
  left_join(h_caballito, by=c("DESTINO"="NOMBRE_DESTINO")) %>% 
  mutate(RUTA = paste("Desde", ORIGEN,"hasta", DESTINO))
leaflet(ruteo_bike_10) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB) %>%
  addPolylines(color = ~colorNumeric(paleta, ruteo_bike_10$distance)(distance),
               weight = 6,
               label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "2px 5px"),
      textsize = "10px",
      direction = "top"),
              highlight = highlightOptions(weight = 8,
                                           bringToFront = TRUE)) %>% 
  addLegend("bottomright", pal = colorNumeric(paleta, ruteo_bike_10$distance), values = ~distance,
            title = "Distancia",
            labFormat = labelFormat(suffix = "km"),
            opacity = 0.75) %>%
  addAwesomeMarkers(~LON_DESTINO, ~LAT_DESTINO, popup = ~DESTINO, icon=icons_d)%>%
  addAwesomeMarkers(~LON_ORIGEN, ~LAT_ORIGEN, popup = ~ORIGEN, icon=icons_o)

A continuación, realizamos el mismo procedimiento aplicado a la posibilidad de trasladarse a pie.

ruteo_hospitales_foot <- 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",
                    osrm.profile = "foot")
  
  cbind(ORIGEN = o_nombre, DESTINO = d_nombre, ruta)
}
ruteo_foot <- pmap(ruteo_caballito, ruteo_hospitales_foot) %>% 
  reduce(rbind)

Observamos los resultados para obtener conclusiones:

ruteo_foot %>% 
summary()
##     ORIGEN            DESTINO              src                dst           
##  Length:36          Length:36          Length:36          Length:36         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     duration         distance              geometry 
##  Min.   : 17.91   Min.   :1.328   LINESTRING   :36  
##  1st Qu.: 55.74   1st Qu.:4.155   epsg:4326    : 0  
##  Median : 83.06   Median :6.144   +proj=long...: 0  
##  Mean   : 76.69   Mean   :5.694                     
##  3rd Qu.:101.58   3rd Qu.:7.523                     
##  Max.   :134.65   Max.   :9.995

El resumen nos arroja que:

1) Tenemos un total de 36 viajes (origen-destino), lo cual equivale a la cantidad de hospitales.

2) A pie, la duración mínima de un viaje desde el centro de Caballito a un hospital es 18 minutos aproximadamente. La duración máxima es de 135 minutos. El promedio de duración de todos los viajes es de 77 minutos.

3) En cuanto a la variable distancia, los resultados también varían respecto al traslado en automóvil y en bicicleta. Si una persona se traslada caminando, la distancia promedio entre el centroide de Caballito y todos los hospitales es de 6km. El hospital más cercano se encuentra a 1.3km y el más alejado está a 10km.

Mapeamos el ruteo ¨a pie a los 10 hospitales más cercanos al centro de Caballito:

ruteo_foot_10 <- ruteo_foot %>% 
  arrange(distance) %>% 
  head(10) %>% 
  left_join(h_caballito, by=c("DESTINO"="NOMBRE_DESTINO")) %>% 
  mutate(RUTA = paste("Desde", ORIGEN,"hasta", DESTINO))
leaflet(ruteo_foot_10) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB) %>%
  addPolylines(color = ~colorNumeric(paleta, ruteo_foot_10$distance)(distance),
               weight = 6,
               label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "2px 5px"),
      textsize = "10px",
      direction = "top"),
              highlight = highlightOptions(weight = 8,
                                           bringToFront = TRUE)) %>% 
  addLegend("bottomright", pal = colorNumeric(paleta, ruteo_foot_10$distance), values = ~distance,
            title = "Distancia",
            labFormat = labelFormat(suffix = "km"),
            opacity = 0.75) %>%
  addAwesomeMarkers(~LON_DESTINO, ~LAT_DESTINO, popup = ~DESTINO, icon=icons_d)%>%
  addAwesomeMarkers(~LON_ORIGEN, ~LAT_ORIGEN, popup = ~ORIGEN, icon=icons_o)

Si comparamos lás 2 últimas visualizaciones, se pueden ver las diferencias entre las rutas propuestas para movilizarse en bicicleta y las rutas sugeridas para realizar a pie.