# Instalación y cargue de librerías
require(raster)
require(rgdal)
require(readxl)
library(readxl)
library(dplyr)
library(sp)
library(RColorBrewer)
library(classInt)
library(kableExtra)
library(gridExtra)
library(viridis)
library(ggplot2)
library(sf)
library(ggspatial)El presente ejercicio tiene como objetivo identificar el patrón de viajes que ocurren dentro de la ciudad de Santiago de Cali, especificando la modalidad de los viajes y los orígenes y destinos a los que responden.
Para el análisis que se realizará, se seguirán los siguientes pasos:
Paso 1. Carga de shapefile de comunas.
# importación de shape
comunas=shapefile("C:/Users/Juan/Desktop/Maestría/Casos/cali/Comunas.shp")
comunas## class : SpatialPolygonsDataFrame
## features : 22
## extent : 1053868, 1068492, 860190.2, 879441.5 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=3.441883333 +lon_0=-76.5205625 +k=1 +x_0=1061900.18 +y_0=872364.63 +a=6379137 +rf=298.257222101 +units=m +no_defs
## variables : 4
## names : OBJECTID, gid, comuna, nombre
## min values : 1, 89, 1, Comuna 1
## max values : 22, 110, 22, Comuna 9
Paso 2. Importación de base de datos de la Encuesta Origen -
Destino.
Paso 3. Limpieza de datos: debido a que el objetivo se reduce a viajes realizados con incidencia en Cali, se eliminan las entradas que implican orígenes o destinos fuera de ella.
# depuración de datos
or_des = or_des [!or_des$`comuna origen`%in%c("0","Fuera de Cali"), ]
or_des = or_des [!or_des$`comuna destino`%in%c("0","Fuera de Cali"), ]
# priorización de variables a analizar
or_des = or_des %>% dplyr::select("TIPO DE VEHÍCULO", "comuna origen", "comuna destino")Paso 4. Creación de tablas para cada uno de los dos análisis.
# creación de tablas de análisis de origen y de destino
origen = or_des%>%group_by(`comuna origen`)%>%summarise(conteo = n())
destino = or_des%>%group_by(`comuna destino`)%>%summarise(conteo = n())
# conversión a tipo numérico
origen$`comuna origen`= as.numeric(origen$`comuna origen`)
destino$`comuna destino`= as.numeric(destino$`comuna destino`)Paso 5. Verificación de dataframe resultante asociado al shapefile
A partir de lo anterior, se genera un mapa que define, para todos los modos de transporte, la cantidad de viajes que parten desde cada comuna.
# Crear una paleta de colores
color_palette <- brewer.pal(9, "YlGnBu")
# Calcular los centroides de los polígonos para posicionar las etiquetas
centroids <- coordinates(comunas)
# Crear el gráfico
spplot(comunas[,5],
main = "Comuna de origen de viajes",
col.regions = color_palette,
cuts = 6,
sp.layout = list(
list("sp.text", centroids, comunas@data[,3], cex = 0.7, font = 1)
)
)Como se puede ver, las comunas desde las cuales parten los viajes realizados se concentran en el occidente de la ciudad, de manera que, específicamente, tienen como principal origen: Comuna 2 (2.250),Comuna 19 (2.241), Comuna 17 (1.762) y la Comuna 3 (1.610).
tabla <- comunas_db %>%
dplyr::select(comuna, conteo) %>%
arrange(desc(conteo))
kable(tabla, caption = "Orígenes de viaje por comuna")| comuna | conteo |
|---|---|
| 2 | 2250 |
| 19 | 2241 |
| 17 | 1762 |
| 3 | 1610 |
| 18 | 1208 |
| 4 | 1193 |
| 10 | 1094 |
| 13 | 1031 |
| 22 | 985 |
| 15 | 974 |
| 8 | 862 |
| 16 | 836 |
| 6 | 797 |
| 9 | 737 |
| 11 | 717 |
| 21 | 693 |
| 1 | 626 |
| 20 | 599 |
| 7 | 583 |
| 14 | 575 |
| 5 | 521 |
| 12 | 257 |
Para realizar un análisis específico para los orígenes de viajes realizados en bicicleta, moto y automóvil, se realiza el filtro y conteo de dichas cantidades y se anexan al data frame asociado al shapefile de “comunas”.
# creación de conteos para cada tipo de vehículo
origen_bici = or_des%>% filter(`TIPO DE VEHÍCULO`==1) %>%group_by(`comuna origen`)%>%summarise(conteo = n())
origen_moto = or_des%>% filter(`TIPO DE VEHÍCULO`==2) %>%group_by(`comuna origen`)%>%summarise(conteo = n())
origen_auto = or_des%>% filter(`TIPO DE VEHÍCULO`==3) %>%group_by(`comuna origen`)%>%summarise(conteo = n())
# creación de paletas de colores individuales
pallete_bici = brewer.pal(n=9, name = "Reds")
pallete_moto = brewer.pal(n=9, name = "Greens")
pallete_auto = brewer.pal(n=9, name = "Blues")
#modificación del dataframe
comunas$conteo_bici = origen_bici[comunas$comuna,]$conteo
comunas$conteo_moto = origen_moto[comunas$comuna,]$conteo
comunas$conteo_auto = origen_auto[comunas$comuna,]$conteo
# revisión de dataframe
# revisión de dataframe
comunas_db=comunas@data
tabla_or <- comunas_db %>%
dplyr::select(comuna, conteo, conteo_bici, conteo_moto, conteo_auto) %>% arrange(desc(conteo))
kable(tabla_or, caption = "Orígenes de viajes por comuna")| comuna | conteo | conteo_bici | conteo_moto | conteo_auto |
|---|---|---|---|---|
| 2 | 2250 | 122 | 1063 | 860 |
| 19 | 2241 | 113 | 995 | 923 |
| 17 | 1762 | 103 | 853 | 662 |
| 3 | 1610 | 84 | 702 | 679 |
| 18 | 1208 | 85 | 593 | 433 |
| 4 | 1193 | 58 | 571 | 443 |
| 10 | 1094 | 71 | 535 | 404 |
| 13 | 1031 | 62 | 453 | 412 |
| 22 | 985 | 52 | 430 | 424 |
| 15 | 974 | 55 | 455 | 377 |
| 8 | 862 | 46 | 421 | 319 |
| 16 | 836 | 65 | 383 | 320 |
| 6 | 797 | 29 | 377 | 314 |
| 9 | 737 | 36 | 317 | 295 |
| 11 | 717 | 42 | 339 | 268 |
| 21 | 693 | 35 | 323 | 272 |
| 1 | 626 | 32 | 296 | 234 |
| 20 | 599 | 33 | 278 | 228 |
| 7 | 583 | 30 | 272 | 229 |
| 14 | 575 | 32 | 258 | 236 |
| 5 | 521 | 28 | 260 | 185 |
| 12 | 257 | 10 | 133 | 88 |
Como se puede ver, en términos generales, el comportamiento de los viajes en bicicleta, moto y automóvil presentan comportamientos similares en cuanto a la distribución que tienen los orígenes por comuna, siguiendo el patrón de movilidad y transporte de la generalidad de la ciudad. De manera que las comunas desde las cuales más parte la gente en sus viajes son: 2, 19, 17 y 3, mientras que las que menos son 7, 14, 5 y 12.
# Se construyen los mapas
or_bici =spplot(comunas[,6],
sub = "Bicicleta",
cuts = 6, col.regions = pallete_bici)
or_moto =spplot(comunas[,7],
main = list(label = "Comuna origen de viajes", cex = 1),
sub = "Moto",
col.regions = pallete_moto, cuts = 6)
or_auto =spplot(comunas[,8],
sub = "Automóvil",
col.regions = pallete_auto, cuts = 6)
grid.arrange(or_bici, or_moto, or_auto, ncol = 3, nrow = 1)Como un ejercicio paralelo al anterior, se elabora el mapa que denota hacia dónde se dirige la gente cuando realiza viajes dentro de la ciudad.
# Cargue de base de datos para analizar destinos.
comunas_des=shapefile("C:/Users/Juan/Desktop/Maestría/Casos/cali/Comunas.shp")
# Generación de conteos
comunas_des$conteo = destino[comunas$comuna,]$conteoComo se puede observar, con patrones similares al comportamiento de los orígenes, las principales comunas a las que se dirigen las personas son 2, 3, 19 y 17.
# Crear una paleta de colores (si aún no la tienes definida)
color_palette2 <- brewer.pal(9, "YlGnBu")
# Calcular los centroides de los polígonos para posicionar las etiquetas
centroids <- coordinates(comunas_des)
# Crear el gráfico con etiquetas
spplot(comunas_des[,5],
main = "Comuna de destino de viajes",
col.regions = color_palette,
cuts = 6,
sp.layout = list(
list("sp.text", centroids, comunas_des@data[,3], cex = 0.7, font = 1)
)
)comunas_db2=comunas_des@data
tabla2 <- comunas_db2 %>%
dplyr::select(comuna, conteo) %>%
arrange(desc(conteo))
kable(tabla2, caption = "Destinos de viajes por comuna")| comuna | conteo |
|---|---|
| 2 | 3773 |
| 3 | 2887 |
| 19 | 2441 |
| 17 | 1616 |
| 22 | 1561 |
| 4 | 1497 |
| 9 | 1055 |
| 8 | 830 |
| 10 | 741 |
| 16 | 645 |
| 7 | 598 |
| 6 | 570 |
| 13 | 560 |
| 18 | 526 |
| 11 | 483 |
| 15 | 481 |
| 5 | 440 |
| 21 | 434 |
| 14 | 316 |
| 20 | 303 |
| 12 | 207 |
| 1 | 187 |
En cuanto a cada modo de transporte se encuentra que:
# creación de conteos para cada tipo de vehículo
destino_bici = or_des%>% filter(`TIPO DE VEHÍCULO`==1) %>%group_by(`comuna destino`)%>%summarise(conteo = n())
destino_moto = or_des%>% filter(`TIPO DE VEHÍCULO`==2) %>%group_by(`comuna destino`)%>%summarise(conteo = n())
destino_auto = or_des%>% filter(`TIPO DE VEHÍCULO`==3) %>%group_by(`comuna destino`)%>%summarise(conteo = n())
#modificación del dataframe
comunas_des$conteo_bici = destino_bici[comunas_des$comuna,]$conteo
comunas_des$conteo_moto = destino_moto[comunas_des$comuna,]$conteo
comunas_des$conteo_auto = destino_auto[comunas_des$comuna,]$conteo
comunas_db2=comunas_des@data
tabla_des <- comunas_db2 %>%
dplyr::select(comuna, conteo, conteo_bici, conteo_moto, conteo_auto) %>%
arrange(desc(conteo))
kable(tabla_des, caption = "Destinos de viajes por comuna")| comuna | conteo | conteo_bici | conteo_moto | conteo_auto |
|---|---|---|---|---|
| 2 | 3773 | 194 | 1734 | 1518 |
| 3 | 2887 | 169 | 1333 | 1098 |
| 19 | 2441 | 131 | 1152 | 926 |
| 17 | 1616 | 95 | 744 | 650 |
| 22 | 1561 | 95 | 766 | 564 |
| 4 | 1497 | 80 | 678 | 596 |
| 9 | 1055 | 56 | 512 | 382 |
| 8 | 830 | 46 | 382 | 325 |
| 10 | 741 | 34 | 353 | 291 |
| 16 | 645 | 31 | 290 | 275 |
| 7 | 598 | 36 | 279 | 224 |
| 6 | 570 | 31 | 255 | 208 |
| 13 | 560 | 28 | 285 | 189 |
| 18 | 526 | 28 | 240 | 216 |
| 11 | 483 | 26 | 217 | 204 |
| 15 | 481 | 17 | 232 | 199 |
| 5 | 440 | 38 | 183 | 181 |
| 21 | 434 | 24 | 202 | 164 |
| 14 | 316 | 20 | 150 | 120 |
| 20 | 303 | 22 | 124 | 131 |
| 12 | 207 | 13 | 106 | 71 |
| 1 | 187 | 9 | 90 | 73 |
Similar a como ocurre con los orígenes, los destinos discriminados por modo de transporte siguen, en términos generales, el patrón de la generalidad de viajes que se realizan en la ciudad.
des_bici =spplot(comunas_des[,6],
sub = "Bicicleta",
cuts = 6, col.regions = pallete_bici)
des_moto =spplot(comunas_des[,7],
main = list(label = "Comuna destino de viajes", cex = 1),
sub = "Moto",
col.regions = pallete_moto, cuts = 6)
des_auto =spplot(comunas_des[,8],
sub = "Automóvil",
col.regions = pallete_auto, cuts = 6)
grid.arrange(des_bici, des_moto, des_auto, ncol = 3, nrow = 1)A partir del anterior ejercicio se señalan los siguientes aspectos:
Las zonas centrales de la ciudad, donde se concentra la oferta de servicios, así como la generación de empleo, corresponden a las comunas desde las cuales más sale la gente pero, también, a donde más llega. De manera que son las que más afluencia tienen diariamente en Santiago de Cali, con patrones que se replican a cada modo de transporte.
Este análisis puede ser mucho más enriquecedor si se logra ampliar la escala de análisis y considerar aquellos viajes que parten y llegan a territorios fuera de Cali.