library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
## ✓ tibble 3.1.1 ✓ dplyr 1.0.5
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(sf)
## Linking to GEOS 3.8.1, GDAL 3.1.4, PROJ 6.3.1
library(ggmap)
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
library(leaflet)
library(osrm)
## Data: (c) OpenStreetMap contributors, ODbL 1.0 - http://www.openstreetmap.org/copyright
## Routing: OSRM - http://project-osrm.org/
Cargamos el set de datos de los recorridos en bicileta realizados en 2021 en la Ciudad de Buenos Aires:
recorridos_realizados <- read.csv ("recorridos_realizados_2021.csv", stringsAsFactors = TRUE)
summary (recorridos_realizados)
## duracion_recorrido id_estacion_origen fecha_origen_recorrido
## Min. : 0 Min. : 2.0 2021-03-04 21:39:05: 8
## 1st Qu.: 656 1st Qu.: 75.0 2021-01-27 18:14:00: 7
## Median : 1035 Median :162.0 2021-01-28 18:08:59: 7
## Mean : 1196 Mean :166.8 2021-03-02 15:55:16: 7
## 3rd Qu.: 1526 3rd Qu.:235.0 2021-01-07 18:32:09: 5
## Max. :548595 Max. :449.0 2021-01-09 17:41:17: 5
## (Other) :647123
## nombre_estacion_origen fecha_destino_recorrido
## 029 - Parque Centenario : 9514 2021-03-04 21:39:07: 8
## 014 - Pacifico : 9498 2021-01-08 19:56:13: 7
## 160 - Godoy Cruz y Libertador: 9004 2021-01-07 12:25:31: 5
## 255 - BARRANCAS DE BELGRANO : 7556 2021-01-08 17:39:30: 5
## 292 - PLAZA BOLIVIA : 7414 2021-01-13 19:09:59: 5
## 005 - Plaza Italia : 6999 2021-01-20 20:55:26: 5
## (Other) :597177 (Other) :647127
## id_estacion_destino nombre_estacion_destino id_usuario
## Min. : 2 160 - Godoy Cruz y Libertador: 9138 Min. : 38
## 1st Qu.: 76 029 - Parque Centenario : 9041 1st Qu.:195320
## Median :163 014 - Pacifico : 8692 Median :569922
## Mean :168 255 - BARRANCAS DE BELGRANO : 7687 Mean :463098
## 3rd Qu.:235 292 - PLAZA BOLIVIA : 7572 3rd Qu.:707265
## Max. :449 096 - Carlos Gardel : 7062 Max. :754621
## (Other) :597970
## direccion_estacion_origen
## Av. Patricias Argentinas & Estivao : 9514
## Santa Fe Av. & Bullrich, Int. Av. : 9498
## Godoy Cruz 3279 y Libertador : 9004
## Sucre, Antonio Jose De, Mcal. Y Vertiz Virrey Av.: 7556
## Olleros Av. & Del Libertador Av. : 7414
## Av. Sarmiento 2601 : 6999
## (Other) :597177
## long_estacion_origen lat_estacion_origen
## Min. :-58.49 Min. :-34.65
## 1st Qu.:-58.44 1st Qu.:-34.61
## Median :-58.42 Median :-34.60
## Mean :-58.42 Mean :-34.60
## 3rd Qu.:-58.40 3rd Qu.:-34.58
## Max. :-58.36 Max. :-34.54
##
## direccion_estacion_destino
## Godoy Cruz 3279 y Libertador : 9138
## Av. Patricias Argentinas & Estivao : 9041
## Santa Fe Av. & Bullrich, Int. Av. : 8692
## Sucre, Antonio Jose De, Mcal. Y Vertiz Virrey Av.: 7687
## Olleros Av. & Del Libertador Av. : 7572
## 3302 Guardia Vieja & Aguero : 7062
## (Other) :597970
## long_estacion_destino lat_estacion_destino periodo
## Min. :-58.49 Min. :-34.65 Min. :2020
## 1st Qu.:-58.44 1st Qu.:-34.61 1st Qu.:2020
## Median :-58.42 Median :-34.60 Median :2020
## Mean :-58.42 Mean :-34.60 Mean :2020
## 3rd Qu.:-58.40 3rd Qu.:-34.58 3rd Qu.:2020
## Max. :-58.36 Max. :-34.54 Max. :2020
##
Vemos que en los datos tenemos: la duración del recorrido, la fecha y hora de la salida de la estacion de origen y de la llegada a la estacion de destino, el nombre de estacion origen y de destino, el id de la estacion de origen y de destino, las coordenadas geograficas, entre otras.
Ahora vamos a calcular la cantidad de viajes realizados y a visualizar los datos en un histograma
viajes_2021 <- recorridos_realizados%>%
group_by(id_estacion_origen, nombre_estacion_origen, fecha_origen_recorrido, long_estacion_origen, lat_estacion_origen, id_estacion_destino, nombre_estacion_destino, fecha_destino_recorrido, long_estacion_destino, lat_estacion_destino) %>%
summarise(cant_viajes = n())
## `summarise()` has grouped output by 'id_estacion_origen', 'nombre_estacion_origen', 'fecha_origen_recorrido', 'long_estacion_origen', 'lat_estacion_origen', 'id_estacion_destino', 'nombre_estacion_destino', 'fecha_destino_recorrido', 'long_estacion_destino'. You can override using the `.groups` argument.
options (scipen=999)
ggplot(viajes_2021)+
geom_histogram(aes(x=cant_viajes)) +
labs(title="Cantidad de recorridos realizados",
subtitle="CABA")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Vemos que todos los viajes realizados en 2021 se realizaron una sola vez. Vamos a ver el top 20 de viajes, para verificar si hay algun viaje que se repitio mas veces o si realmente todos se realizaron una única vez.
top_20 <- viajes_2021 %>%
filter(nombre_estacion_origen != nombre_estacion_destino) %>%
arrange(desc(cant_viajes)) %>%
head(20)
top_20
## # A tibble: 20 x 11
## # Groups: id_estacion_origen, nombre_estacion_origen, fecha_origen_recorrido,
## # long_estacion_origen, lat_estacion_origen, id_estacion_destino,
## # nombre_estacion_destino, fecha_destino_recorrido, long_estacion_destino
## # [20]
## id_estacion_orig… nombre_estacion_orig… fecha_origen_recor… long_estacion_or…
## <int> <fct> <fct> <dbl>
## 1 56 056 - Plaza Palermo … 2021-03-04 21:39:05 -58.4
## 2 56 056 - Plaza Palermo … 2021-03-02 15:55:16 -58.4
## 3 56 056 - Plaza Palermo … 2021-03-03 21:14:43 -58.4
## 4 3 003 - ADUANA 2021-02-28 16:52:18 -58.4
## 5 5 005 - Plaza Italia 2021-01-01 16:18:03 -58.4
## 6 5 005 - Plaza Italia 2021-01-13 19:21:27 -58.4
## 7 5 005 - Plaza Italia 2021-02-06 01:08:56 -58.4
## 8 5 005 - Plaza Italia 2021-02-06 12:37:18 -58.4
## 9 5 005 - Plaza Italia 2021-02-12 18:26:55 -58.4
## 10 5 005 - Plaza Italia 2021-02-18 23:13:07 -58.4
## 11 5 005 - Plaza Italia 2021-02-27 19:32:55 -58.4
## 12 5 005 - Plaza Italia 2021-03-02 23:31:48 -58.4
## 13 6 006 - Parque Lezama 2021-01-01 05:44:37 -58.4
## 14 8 008 - Congreso 2021-01-18 08:08:10 -58.4
## 15 8 008 - Congreso 2021-02-03 00:06:16 -58.4
## 16 12 012 - Plaza Vicente … 2021-01-04 17:30:24 -58.4
## 17 13 013 - ONCE 2021-02-06 22:22:36 -58.4
## 18 13 013 - ONCE 2021-02-20 00:48:08 -58.4
## 19 17 017 - Plaza Almagro 2021-01-10 21:13:49 -58.4
## 20 20 020 - Distrito Audio… 2021-01-09 16:16:10 -58.4
## # … with 7 more variables: lat_estacion_origen <dbl>,
## # id_estacion_destino <int>, nombre_estacion_destino <fct>,
## # fecha_destino_recorrido <fct>, long_estacion_destino <dbl>,
## # lat_estacion_destino <dbl>, cant_viajes <int>
Vemos que los viajes que salieron de la estación de la Plaza Palermo Viejo con destino a Plaza Libertad fueron los que mas se repitieron, con una cantidad de 7 veces (aunque muy pocas), Le siguen los viajes que salieron de Plaza Palermo Viejo con destino a Billinghurst y a Plaza Italia, con una cantidad de 3 viajes. Por debajo, el resto del top 20 lo ocupan viajes que se repitieron solo dos veces. Esto nos lleva a pensar que el sistema de bicicletas públicas en CABA se utiliza para mas que nada para el turismo.
ggplot() +
geom_tile(data = top_20,
aes(x = as.factor(id_estacion_origen),
y = as.factor(id_estacion_destino),
fill = cant_viajes)) +
scale_fill_distiller(palette = "RdYlGn") +
labs(title="Matriz Origen-Destino",
subtitle="Top 20 Recorridos en Bicicleta - CABA",
x="Estacion Origen",
y="Estación Destino",
fill="Viajes")
Vamos a ver el trayecto del viaje que más se repitio, es decir, de viaje que salió de Plaza Palermo Viejo a Plaza Libertad.
viaje1 <- top_20 %>%
ungroup() %>%
filter(cant_viajes==max(cant_viajes))
ruteo_viaje1 <- osrmRoute(src = c(viaje1$id_estacion_origen, viaje1$long_estacion_origen, viaje1$lat_estacion_origen),
dst = c(viaje1$id_estacion_destino, viaje1$long_estacion_destino, viaje1$lat_estacion_destino),
returnclass = "sf",
overview = "full",
osrm.profile = "bike")
ruteo_viaje1
## Simple feature collection with 1 feature and 4 fields
## Geometry type: LINESTRING
## Dimension: XY
## Bounding box: xmin: -58.426 ymin: -34.59697 xmax: -58.38268 ymax: -34.58358
## Geodetic CRS: WGS 84
## src dst duration distance geometry
## 56_38 56 38 20.795 4.808 LINESTRING (-58.426 -34.588...
Para poder hacer el gráfico espacial, cargamos el dataset con las coordenadas geográficas de las estaciones de biciletas de la Ciudad de Buenos Aires:
estaciones<- read.csv("estaciones.csv", stringsAsFactors = TRUE)
summary (estaciones)
## id_estacion nombre_estacion long_estacion lat_estacion
## Min. : 1.00 15 de Noviembre : 1 Min. :-58.46 Min. :-34.64
## 1st Qu.: 49.75 25 de Mayo : 1 1st Qu.:-58.42 1st Qu.:-34.62
## Median : 99.50 9 de Julio : 1 Median :-58.40 Median :-34.60
## Mean : 99.90 Acevedo : 1 Mean :-58.40 Mean :-34.61
## 3rd Qu.:149.25 Acuña de Figueroa: 1 3rd Qu.:-58.38 3rd Qu.:-34.59
## Max. :200.00 Aduana : 1 Max. :-58.36 Max. :-34.57
## NA's :4 (Other) :198 NA's :6 NA's :6
## domicilio_estacion
## : 6
## Plaza Fuerza Aérea: Av. Dr. J. Ramos Mejia y Av Del Libertador: 2
## 15 de Noviembre de 1889 2687 entre Catamarca y Jujuy : 1
## 25 de Mayo y Lavalle : 1
## 33 Orientales 1439, entre Av. Pavón y Av. Garay : 1
## 9 de Julio y Moreno : 1
## (Other) :192
## tipo_estacion observaciones
## : 11 Abril 2015 (pasó de ser Manual a Automática): 24
## AUTOMÁTICA:193 Marzo 2017 : 17
## Mayo 2017 : 16
## Abril 2017 : 15
## : 11
## Agosto 2017 : 11
## (Other) :110
## horario_estacion
## : 11
## Estación automática: disponibilidad las 24 horas:193
##
##
##
##
##
bbox_caba <- make_bbox(estaciones$long_estacion, estaciones$lat_estacion)
mapa_caba <- get_stamenmap(bbox_caba,
zoom = 12)
## Source : http://tile.stamen.com/terrain/12/1382/2467.png
## Source : http://tile.stamen.com/terrain/12/1383/2467.png
## Source : http://tile.stamen.com/terrain/12/1384/2467.png
## Source : http://tile.stamen.com/terrain/12/1382/2468.png
## Source : http://tile.stamen.com/terrain/12/1383/2468.png
## Source : http://tile.stamen.com/terrain/12/1384/2468.png
ggmap(mapa_caba)+
geom_point(data=estaciones, aes(x=long_estacion, y=lat_estacion), inherit.aes = FALSE)+
geom_sf(data=ruteo_viaje1, color="red", size=1.5, inherit.aes = FALSE)+
labs(title="Recorrido más Realizado en Bicicleta",
subtitle="CABA") +
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
## Warning: Removed 6 rows containing missing values (geom_point).
Hacemos un mapa interactivo para observar bien el recorrido:
leaflet(ruteo_viaje1) %>%
addTiles() %>%
addPolylines(color = "red",
label = paste("Distancia:", ruteo_viaje1$distance, "|",
"Duración:", ruteo_viaje1$duration))
Vemos que el viaje que más veces se repitió salió de Palermo y recorrió todo Avenida Santa Fe hasta llegar a Plaza Libertad en Retiro. Probablemente haya sido un viaje de recreación dado que el destino fue una plaza.
RUTEO MULTIPLE:
Vamos a rutear el resto de los viajes del top20:
ruteo_bicis <- function(nombre_estacion_origen, long_estacion_origen, lat_estacion_origen,
nombre_estacion_destino, long_estacion_destino, lat_estacion_destino) {
ruta <- osrmRoute(src = c(nombre_estacion_origen, long_estacion_origen, lat_estacion_origen),
dst = c(nombre_estacion_destino, long_estacion_destino, lat_estacion_destino),
returnclass = "sf",
overview = "full",
osrm.profile = "bike")
cbind(ORIGEN = nombre_estacion_origen, DESTINO = nombre_estacion_destino, ruta)
}
ruteotop20 <- list(top_20$nombre_estacion_origen, top_20$long_estacion_origen, top_20$lat_estacion_origen,
top_20$nombre_estacion_destino, top_20$long_estacion_destino, top_20$lat_estacion_destino)
ruteotop20 <- pmap(ruteotop20, ruteo_bicis) %>%
reduce(rbind)
summary (ruteotop20)
## ORIGEN DESTINO src
## 005 - Plaza Italia :8 003 - ADUANA : 1 Min. : 3.00
## 056 - Plaza Palermo Viejo:3 005 - Plaza Italia : 1 1st Qu.: 5.00
## 008 - Congreso :2 007 - OBELISCO : 1 Median : 7.00
## 013 - ONCE :2 025 - Plaza Guemes : 1 Mean :12.20
## 003 - ADUANA :1 027 - Montevideo : 1 3rd Qu.:11.75
## 006 - Parque Lezama :1 038 - Plaza Libertad: 1 Max. :39.00
## (Other) :3 (Other) :14
## dst duration distance geometry
## Min. : 3.00 Min. : 4.288 Min. :0.8532 LINESTRING :20
## 1st Qu.: 28.25 1st Qu.: 7.317 1st Qu.:1.3417 epsg:4326 : 0
## Median : 80.00 Median :11.703 Median :2.4343 +proj=long...: 0
## Mean : 82.80 Mean :15.275 Mean :3.2867
## 3rd Qu.:118.00 3rd Qu.:21.369 3rd Qu.:4.9378
## Max. :196.00 Max. :33.215 Max. :7.5092
##
ggmap(mapa_caba)+
geom_sf(data=ruteotop20, color="red", size=1.5, inherit.aes = FALSE)+
labs(title="Top 20 Recorridos más Realizados en Bicicleta",
subtitle="CABA",
caption="Fuente: BAdata")+
scale_color_viridis_c(direction=-1)+
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
bbox_zoom <- as.numeric(st_bbox(ruteotop20))
mapa_zoom <- get_stamenmap(bbox_zoom,
color="bw",
zoom = 13)
## Source : http://tile.stamen.com/terrain/13/2765/4935.png
## Source : http://tile.stamen.com/terrain/13/2766/4935.png
## Source : http://tile.stamen.com/terrain/13/2767/4935.png
## Source : http://tile.stamen.com/terrain/13/2765/4936.png
## Source : http://tile.stamen.com/terrain/13/2766/4936.png
## Source : http://tile.stamen.com/terrain/13/2767/4936.png
ggmap(mapa_zoom)
ggmap(mapa_zoom)+
geom_sf(data=ruteotop20, aes(color=duration), size=2, inherit.aes = FALSE)+
labs(title="Top 20 Recorridos más Realizados en Bicicleta",
subtitle="CABA",
caption="Fuente: BAdata")+
scale_color_viridis_c(direction=-1)+
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
Vemos que la mayoría de los viajes se mueven de norte a sur a lo largo de capital federal, habiendo un par de excepciones. Todos son recorridos cortos y la mayoría de los destinos son en Palermo o zona centro. Algunos también llegan a los parques sobre Av, Libertador de la Ciudad.
Realizamos un mapa interactivo:
ruteotop20 <- ruteotop20 %>%
mutate(RUTA = paste("Desde", ORIGEN,"hasta", DESTINO))
paleta <- c(low="gold", high= "deeppink4")
labels <- sprintf(
"<strong>%s</strong><br/>%g km <br/>%g min",
ruteotop20$RUTA, round(ruteotop20$distance, 2), round(ruteotop20$duration, 0)
) %>% lapply(htmltools::HTML)
leaflet(ruteotop20) %>%
addTiles() %>%
addProviderTiles(providers$CartoDB) %>%
addPolylines(color = ~colorNumeric(paleta, ruteotop20$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, ruteotop20$distance), values = ~distance,
title = "Distancia",
labFormat = labelFormat(suffix = "km"),
opacity = 0.75)