# 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)

1 Introducción

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.

2 Procesamiento de datos

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
plot(comunas)

Paso 2. Importación de base de datos de la Encuesta Origen - Destino.

or_des = read_excel("C:/Users/Juan/Desktop/EncuestaOrigenDestino.xlsx")

or_des

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

comunas$conteo = origen[comunas$comuna,]$conteo
comunas_db=comunas@data
comunas_db

3 Origen

3.1 Origen General

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")
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

3.2 Origen por Modo de Transporte

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")
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)

4 Destino

4.1 Destino General

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,]$conteo

Como 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")
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

4.2 Destinos por Modo de Transporte

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")
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)

5 Conclusión

A partir del anterior ejercicio se señalan los siguientes aspectos:

  1. 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.

  2. 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.