Nota: Documento académico para la Maestría en ciencia de datos de la Universidad Javeriana de Cali

1 Introducción

Las instrucciones del trabajo a realizar se encuentran en el vídeo de Youtube llamado M1U1 “Caso encuesta Origen destino”:

Ver video de YouTube aquí

En resumen, se solicita:

  • Utilizar el archivo Excel EncuestaOrigenDestino.xlsx para identificar patrones de viajes de personas, enfocándose en las columnas “Comuna origen” y “Comuna destino”.
  • Emplear el shapefile Comunas.shp para generar un total de 8 mapas.
  • El primer mapa debe representar la caracterización del origen de los viajes (conteo de trayectos).
  • Los siguientes tres mapas deben mostrar el origen de los viajes desagregado por tipo de vehículo: “1. Bicicleta”, “2. Moto” y “3. Automóvil”.
  • Crear un mapa que caracterice el destino general de los viajes.
  • Generar otros tres mapas que desagreguen los destinos por tipo de vehículo: “1. Bicicleta”, “2. Moto” y “3. Automóvil”.

2 Cargar archivos

2.1 Cargar shapefile de comunas

##Importar Datos Espaciales en R
#install.packages("rgdal") #no voy a usar rgdal porque por mi versión de rtools ya no sirve.
#install.packages("sf")
#install.packages("terra")


library(terra)
## terra 1.7.78
library(sf)
## Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE
comunas <- vect("Comunas.shp")

comunas_data <- st_read("Comunas.shp")
## Reading layer `Comunas' from data source 
##   `C:\Users\doar9\OneDrive\Javeriana\analisis espacial\Trabajo M1U1\Comunas.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 22 features and 4 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: 1053868 ymin: 860190.2 xmax: 1068492 ymax: 879441.5
## Projected CRS: MAGNA_Colombia_Cali
names(comunas)
## [1] "OBJECTID" "gid"      "comuna"   "nombre"
colnames(comunas_data)
## [1] "OBJECTID" "gid"      "comuna"   "nombre"   "geometry"
plot(comunas)

2.2 Cargar excel de origen destino

# Cargar el paquete readxl
#install.packages("readxl")

library(readxl)

# Cargar la hoja "Hoja1" del archivo EncuestaOrigenDestino.xlsx sin warnings
EncuestaOrigenDestino <- suppressWarnings(read_excel("EncuestaOrigenDestino.xlsx", sheet = "Hoja1"))
## New names:
## • `MUNICIPIO` -> `MUNICIPIO...7`
## • `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO /
##   DIRECCIÓN` -> `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA
##   / HITO / DIRECCIÓN...8`
## • `MUNICIPIO` -> `MUNICIPIO...11`
## • `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO /
##   DIRECCIÓN` -> `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA
##   / HITO / DIRECCIÓN...12`
## • `OTRO ¿CUÁL?` -> `OTRO ¿CUÁL?...17`
## • `OTRO ¿CUÁL?` -> `OTRO ¿CUÁL?...24`
# Visualizar las primeras filas del conjunto de datos
head(EncuestaOrigenDestino)
names(EncuestaOrigenDestino)
##  [1] "FECHA"                                                                                   
##  [2] "ID ESTACIÓN"                                                                             
##  [3] "ESTACIÓN"                                                                                
##  [4] "ACCESO"                                                                                  
##  [5] "MOVIMIENTO"                                                                              
##  [6] "Hora de Encuesta"                                                                        
##  [7] "MUNICIPIO...7"                                                                           
##  [8] "DEPARTAMENTO / LOCALIDAD  / COMUNA / DISTRITO / BARRIO / VEREDA  / HITO / DIRECCIÓN...8" 
##  [9] "Codigo Origen_SDG"                                                                       
## [10] "¿QUE ESTABA HACIENDO EN ESE LUGAR?"                                                      
## [11] "MUNICIPIO...11"                                                                          
## [12] "DEPARTAMENTO / LOCALIDAD  / COMUNA / DISTRITO / BARRIO / VEREDA  / HITO / DIRECCIÓN...12"
## [13] "Codigo Destino_SDG"                                                                      
## [14] "¿QUE VA HACER A ESE LUGAR?"                                                              
## [15] "ESTRATO EN SU VIVIENDA"                                                                  
## [16] "¿DISPONIA DE UN VEHÍCULO PARA REALIZAR ESTE DESPLAZAMIENTO?"                             
## [17] "OTRO ¿CUÁL?...17"                                                                        
## [18] "ANTES"                                                                                   
## [19] "DESPUES"                                                                                 
## [20] "EDAD"                                                                                    
## [21] "SEXO"                                                                                    
## [22] "PERSONAS EN EL VEHÍCULO"                                                                 
## [23] "TIPO DE VEHÍCULO"                                                                        
## [24] "OTRO ¿CUÁL?...24"                                                                        
## [25] "TIPO DE VIAJERO"                                                                         
## [26] "comuna origen"                                                                           
## [27] "comuna destino"                                                                          
## [28] "Intracomuna"

2.3 ver missing

no hay en origen ni en destino de comuna, pero el tipo de vehículo puede tener valores en blanco

library(naniar)
## 
## Adjuntando el paquete: 'naniar'
## The following object is masked from 'package:terra':
## 
##     shade
gg_miss_var(EncuestaOrigenDestino) # Gráfico de datos faltantes

3 Distribución Origen Destino

library(ggplot2)

# Asegurarse de que las variables se traten como factores para preservar las etiquetas
EncuestaOrigenDestino$`comuna origen` <- as.factor(EncuestaOrigenDestino$`comuna origen`)
EncuestaOrigenDestino$`comuna destino` <- as.factor(EncuestaOrigenDestino$`comuna destino`)

# Gráfico de distribución para "comuna origen" con conteo encima de las barras
ggplot(EncuestaOrigenDestino, aes(x = `comuna origen`)) +
  geom_bar(fill = "blue", color = "black") +
  geom_text(stat = 'count', aes(label = after_stat(count)), vjust = -0.5) +  
  ylim(0, 7000) +  # Ampliar el límite superior del eje Y
  labs(title = "Distribución de Comuna Origen", x = "Comuna Origen", y = "Frecuencia") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas si son muchas

# Gráfico de distribución para "comuna destino" con conteo encima de las barras
ggplot(EncuestaOrigenDestino, aes(x = `comuna destino`)) +
  geom_bar(fill = "green", color = "black") +
  geom_text(stat = 'count', aes(label = after_stat(count)), vjust = -0.5) +  
  ylim(0, 7000) +  # Ampliar el límite superior del eje Y
  labs(title = "Distribución de Comuna Destino", x = "Comuna Destino", y = "Frecuencia") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas si son muchas

3.1 ver tipos de vehículo

table(EncuestaOrigenDestino$`TIPO DE VEHÍCULO`)
## 
##     1     2     3     4     5     6     7     8     9    77 
##  1731 16077 14100   459  1999   211   167    88    30    77
library(dplyr)

# Crear una nueva variable 'tipo_vehiculo' que recodifique los valores, incluyendo los vacíos y faltantes
EncuestaOrigenDestino <- EncuestaOrigenDestino %>%
  mutate(tipo_vehiculo = case_when(
    `TIPO DE VEHÍCULO` == '1' ~ 'Bicicleta',
    `TIPO DE VEHÍCULO` == '2' ~ 'Moto',
    `TIPO DE VEHÍCULO` == '3' ~ 'Automovil',
    `TIPO DE VEHÍCULO` == '4' ~ 'Campero (Guala)',
    `TIPO DE VEHÍCULO` == '5' ~ 'Taxi',
    `TIPO DE VEHÍCULO` == '6' ~ 'Intermunicipal - Bus',
    `TIPO DE VEHÍCULO` == '7' ~ 'Intermunicipal - Buseta',
    `TIPO DE VEHÍCULO` == '8' ~ 'Intermunicipal - Van',
    `TIPO DE VEHÍCULO` == '9' ~ 'Taxi blanco',
    `TIPO DE VEHÍCULO` == '77' ~ 'Otro',
    is.na(`TIPO DE VEHÍCULO`) | `TIPO DE VEHÍCULO` == "" ~ 'Missing',  # Tratar NA y vacíos como "Missing"
    TRUE ~ 'Sin dato'  # Para cualquier otro valor no contemplado
  ))

# Visualizar la tabla con la nueva variable para verificar el resultado
table(EncuestaOrigenDestino$tipo_vehiculo)
## 
##               Automovil               Bicicleta         Campero (Guala) 
##                   14100                    1731                     459 
##    Intermunicipal - Bus Intermunicipal - Buseta    Intermunicipal - Van 
##                     211                     167                      88 
##                 Missing                    Moto                    Otro 
##                     115                   16077                      77 
##                    Taxi             Taxi blanco 
##                    1999                      30
library(knitr)
## 
## Adjuntando el paquete: 'knitr'
## The following object is masked from 'package:terra':
## 
##     spin
# Tabla de contingencia para "comuna origen" y "tipo de vehículo" con totales
tabla_origen_vehiculo <- table(EncuestaOrigenDestino$`comuna origen`, EncuestaOrigenDestino$tipo_vehiculo)
tabla_origen_vehiculo_con_totales <- addmargins(tabla_origen_vehiculo, FUN = sum, quiet = TRUE)
colnames(tabla_origen_vehiculo_con_totales)[ncol(tabla_origen_vehiculo_con_totales)] <- "Total"
rownames(tabla_origen_vehiculo_con_totales)[nrow(tabla_origen_vehiculo_con_totales)] <- "Total"
kable(tabla_origen_vehiculo_con_totales, caption = "Tabla de Contingencia - Comuna Origen y Tipo de Vehículo con Totales")
Tabla de Contingencia - Comuna Origen y Tipo de Vehículo con Totales
Automovil Bicicleta Campero (Guala) Intermunicipal - Bus Intermunicipal - Buseta Intermunicipal - Van Missing Moto Otro Taxi Taxi blanco Total
0 317 43 5 2 1 2 1 259 3 38 1 672
01 301 36 11 8 6 3 0 375 1 52 1 794
02 1121 159 36 11 13 9 6 1414 5 192 2 2968
03 854 99 27 12 12 8 9 970 4 123 3 2121
04 551 74 17 6 6 4 2 720 5 106 2 1493
05 241 38 11 2 2 1 3 319 4 43 0 664
06 389 44 9 7 4 4 3 473 4 61 0 998
07 283 35 8 6 2 0 1 350 4 45 0 734
08 420 52 19 5 4 4 0 552 2 65 1 1124
09 382 53 10 9 6 3 2 413 3 69 2 952
10 529 82 18 7 4 3 4 675 3 76 0 1401
11 361 52 9 7 2 2 3 431 0 57 1 925
12 123 14 3 1 0 0 0 176 1 30 0 348
13 486 76 24 4 4 3 3 554 2 82 0 1238
14 272 37 9 5 6 2 2 310 1 40 1 685
15 456 70 24 6 5 3 2 536 1 68 0 1171
16 385 73 12 7 5 5 3 450 1 51 1 993
17 899 141 35 14 6 6 4 1136 4 132 0 2377
18 559 111 22 6 2 3 0 746 1 85 1 1536
19 1165 141 37 19 10 9 7 1280 6 171 5 2850
20 272 46 16 0 2 2 4 339 3 48 1 733
21 328 44 5 8 3 2 3 378 1 44 2 818
22 489 55 14 5 4 2 3 515 4 62 0 1153
Fuera de Cali 2917 156 78 54 58 8 50 2706 14 259 6 6306
Total 14100 1731 459 211 167 88 115 16077 77 1999 30 35054
# Tabla de contingencia para "comuna destino" y "tipo de vehículo" con totales
tabla_destino_vehiculo <- table(EncuestaOrigenDestino$`comuna destino`, EncuestaOrigenDestino$tipo_vehiculo)
tabla_destino_vehiculo_con_totales <- addmargins(tabla_destino_vehiculo, FUN = sum, quiet = TRUE)
colnames(tabla_destino_vehiculo_con_totales)[ncol(tabla_destino_vehiculo_con_totales)] <- "Total"
rownames(tabla_destino_vehiculo_con_totales)[nrow(tabla_destino_vehiculo_con_totales)] <- "Total"
kable(tabla_destino_vehiculo_con_totales, caption = "Tabla de Contingencia - Comuna Destino y Tipo de Vehículo con Totales")
Tabla de Contingencia - Comuna Destino y Tipo de Vehículo con Totales
Automovil Bicicleta Campero (Guala) Intermunicipal - Bus Intermunicipal - Buseta Intermunicipal - Van Missing Moto Otro Taxi Taxi blanco Total
0 280 46 16 7 1 3 3 390 2 38 2 788
01 86 12 3 2 1 0 0 112 0 14 0 230
02 2006 218 41 24 20 9 11 2177 8 290 6 4810
03 1557 189 54 30 21 12 13 1734 11 236 2 3859
04 757 85 28 9 8 3 5 846 5 110 0 1856
05 225 41 2 1 1 0 0 215 1 33 3 522
06 275 34 17 4 2 0 2 323 2 57 0 716
07 286 41 18 7 4 0 2 353 1 36 0 748
08 403 54 18 7 3 2 1 470 3 62 2 1025
09 489 65 13 17 5 4 3 608 2 72 1 1279
10 384 43 10 9 8 3 2 419 1 47 1 927
11 239 29 7 1 0 1 0 254 1 32 0 564
12 85 15 3 1 0 0 0 128 1 13 0 246
13 226 33 15 2 2 3 2 346 1 41 2 673
14 138 22 6 3 1 1 0 188 1 19 0 379
15 245 20 10 2 2 3 2 271 2 22 0 579
16 321 35 4 3 0 3 1 327 1 46 2 743
17 959 115 18 14 9 9 3 927 2 107 1 2164
18 276 31 7 2 5 1 0 302 1 36 1 662
19 1302 147 34 12 17 9 9 1421 9 196 2 3158
20 144 25 5 0 2 1 2 151 0 21 0 351
21 198 26 2 2 1 3 1 243 1 38 0 515
22 694 100 37 16 10 4 4 911 5 79 0 1860
Fuera de Cali 2525 305 91 36 44 14 49 2961 16 354 5 6400
Total 14100 1731 459 211 167 88 115 16077 77 1999 30 35054

3.2 Filtrar origen y destino para no tener en cuenta cuando sea “Fuera de Cali” y quedarse solo con Comunas

library(dplyr)

# Filtrar el dataframe excluyendo "Fuera de Cali" en comuna origen
EncuestaOrigen <- EncuestaOrigenDestino %>%
  filter(`comuna origen` != "Fuera de Cali") %>%
  mutate(`comuna origen` = as.numeric(as.character(`comuna origen`)))  # Convertir a numérica

# Filtrar el dataframe excluyendo "Fuera de Cali" en comuna destino
EncuestaDestino <- EncuestaOrigenDestino %>%
  filter(`comuna destino` != "Fuera de Cali") %>%
  mutate(`comuna destino` = as.numeric(as.character(`comuna destino`)))  # Convertir a numérica

# Verificar el resultado
table(EncuestaOrigen$`comuna origen`)
## 
##    0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
##  672  794 2968 2121 1493  664  998  734 1124  952 1401  925  348 1238  685 1171 
##   16   17   18   19   20   21   22 
##  993 2377 1536 2850  733  818 1153
table(EncuestaDestino$`comuna destino`)
## 
##    0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
##  788  230 4810 3859 1856  522  716  748 1025 1279  927  564  246  673  379  579 
##   16   17   18   19   20   21   22 
##  743 2164  662 3158  351  515 1860
# Verificar el resultado
str(EncuestaOrigen$`comuna origen`)
##  num [1:28748] 2 6 6 3 4 6 4 2 13 6 ...
str(EncuestaDestino$`comuna destino`)
##  num [1:28654] 22 19 3 9 2 2 17 2 2 2 ...

4 Mapa 1 conteos Total de trayectos de origen

library(dplyr)

# Contar los viajes por comuna origen en EncuestaOrigen
conteo_origen <- EncuestaOrigen %>%
  group_by(`comuna origen`) %>%
  summarise(conteo_viajes_origen = n())




# Aquí usamos el objeto comunas_data que es de sf
library(sf)

# Unir los conteos de EncuestaOrigen al shapefile usando la columna "comuna"
comunas_data_conteo <- merge(comunas_data, conteo_origen, by.x = "comuna", by.y = "comuna origen", all.x = TRUE)


library(sp)

# Convertir el objeto sf a sp
comunas_sp <- as(comunas_data_conteo, "Spatial")


# Crear el mapa con spplot usando el conteo de viajes
spplot(comunas_sp, "conteo_viajes_origen", main = "Conteo de Viajes por Comuna - Origen Total Cali")

library(ggplot2)

# Crear una nueva columna 'comuna_origen_factor' como factor
conteo_origen$comuna_origen_factor <- as.factor(conteo_origen$`comuna origen`)

# Gráfico de distribución para "comuna_origen_factor" usando el dataframe conteo_origen
ggplot(conteo_origen, aes(x = comuna_origen_factor, y = conteo_viajes_origen)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_origen), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes por Comuna - Origen", x = "Comuna Origen", y = "Conteo de Viajes") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

5 Mapa 2 distribución de Origen para Bicicleta

library(dplyr)
library(sf)
library(sp)
library(ggplot2)

# 1. Filtrar solo los viajes en bicicleta desde EncuestaOrigen
Bicicleta_Origen <- EncuestaOrigen %>%
  filter(tipo_vehiculo == "Bicicleta")

# 2. Contar los viajes por comuna origen en Bicicleta_Origen
conteo_bicicleta_origen <- Bicicleta_Origen %>%
  group_by(`comuna origen`) %>%
  summarise(conteo_viajes_bicicleta_origen = n())

# 3. Unir los conteos de Bicicleta_Origen al shapefile usando la columna "comuna"
comunas_data_conteo_bicicleta <- merge(comunas_data, conteo_bicicleta_origen, by.x = "comuna", by.y = "comuna origen", all.x = TRUE)

# 4. Convertir el objeto sf a sp
comunas_sp_bicicleta <- as(comunas_data_conteo_bicicleta, "Spatial")

# 5. Crear el mapa con spplot usando el conteo de viajes en bicicleta
spplot(comunas_sp_bicicleta, "conteo_viajes_bicicleta_origen", main = "Conteo de Viajes en Bicicleta por Comuna de origen")

# 6. Crear una nueva columna 'comuna_origen_factor' como factor para bicicletas
conteo_bicicleta_origen$comuna_origen_factor <- as.factor(conteo_bicicleta_origen$`comuna origen`)

# 7. Gráfico de distribución para "comuna_origen_factor" usando el dataframe conteo_bicicleta_origen
ggplot(conteo_bicicleta_origen, aes(x = comuna_origen_factor, y = conteo_viajes_bicicleta_origen)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_bicicleta_origen), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes en Bicicleta por Comuna de origen", x = "Comuna Origen", y = "Conteo de Viajes en Bicicleta") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

6 Mapa 3 distribución de Origen para Moto

library(dplyr)
library(sf)
library(sp)
library(ggplot2)

# 1. Filtrar solo los viajes en moto desde EncuestaOrigen
Moto_Origen <- EncuestaOrigen %>%
  filter(tipo_vehiculo == "Moto")

# 2. Contar los viajes por comuna origen en Moto_Origen
conteo_moto_origen <- Moto_Origen %>%
  group_by(`comuna origen`) %>%
  summarise(conteo_viajes_moto_origen = n())

# 3. Unir los conteos de Moto_Origen al shapefile usando la columna "comuna"
comunas_data_conteo_moto <- merge(comunas_data, conteo_moto_origen, by.x = "comuna", by.y = "comuna origen", all.x = TRUE)

# 4. Convertir el objeto sf a sp
comunas_sp_moto <- as(comunas_data_conteo_moto, "Spatial")

# 5. Crear el mapa con spplot usando el conteo de viajes en moto
spplot(comunas_sp_moto, "conteo_viajes_moto_origen", main = "Conteo de Viajes en Moto por Comuna de origen")

# 6. Crear una nueva columna 'comuna_origen_factor' como factor para moto
conteo_moto_origen$comuna_origen_factor <- as.factor(conteo_moto_origen$`comuna origen`)

# 7. Gráfico de distribución para "comuna_origen_factor" usando el dataframe conteo_moto_origen
ggplot(conteo_moto_origen, aes(x = comuna_origen_factor, y = conteo_viajes_moto_origen)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_moto_origen), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes en Moto por Comuna de origen", x = "Comuna Origen", y = "Conteo de Viajes en Moto") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

7 Mapa 4 distribución de origen para Auto

Además, aunque el efecto es mínimo, mantener o mejorar los salarios podría ayudar a retener empleados, ya que un mayor ingreso tiene una ligera relación con una menor probabilidad de rotación.

library(dplyr)
library(sf)
library(sp)
library(ggplot2)

# 1. Filtrar solo los viajes en auto desde EncuestaOrigen
Auto_Origen <- EncuestaOrigen %>%
  filter(tipo_vehiculo == "Automovil")

# 2. Contar los viajes por comuna origen en Auto_Origen
conteo_auto_origen <- Auto_Origen %>%
  group_by(`comuna origen`) %>%
  summarise(conteo_viajes_auto_origen = n())

# 3. Unir los conteos de Auto_Origen al shapefile usando la columna "comuna"
comunas_data_conteo_auto <- merge(comunas_data, conteo_auto_origen, by.x = "comuna", by.y = "comuna origen", all.x = TRUE)

# 4. Convertir el objeto sf a sp
comunas_sp_auto <- as(comunas_data_conteo_auto, "Spatial")

# 5. Crear el mapa con spplot usando el conteo de viajes en auto
spplot(comunas_sp_auto, "conteo_viajes_auto_origen", main = "Conteo de Viajes en Automóvil por Comuna de origen")

# 6. Crear una nueva columna 'comuna_origen_factor' como factor para auto
conteo_auto_origen$comuna_origen_factor <- as.factor(conteo_auto_origen$`comuna origen`)

# 7. Gráfico de distribución para "comuna_origen_factor" usando el dataframe conteo_auto_origen
ggplot(conteo_auto_origen, aes(x = comuna_origen_factor, y = conteo_viajes_auto_origen)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_auto_origen), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes en Automóvil por Comuna de origen", x = "Comuna Origen", y = "Conteo de Viajes en Automóvil") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

8 Dsitribución de viajes por comuna de destino

library(dplyr)
library(sf)
library(sp)
library(ggplot2)

# 1. Contar los viajes por comuna destino en EncuestaDestino
conteo_destino <- EncuestaDestino %>%
  group_by(`comuna destino`) %>%
  summarise(conteo_viajes_destino = n())

# 2. Unir los conteos de comuna destino al shapefile usando la columna "comuna"
comunas_data_conteo_destino <- merge(comunas_data, conteo_destino, by.x = "comuna", by.y = "comuna destino", all.x = TRUE)

# 3. Convertir el objeto sf a sp
comunas_sp_destino <- as(comunas_data_conteo_destino, "Spatial")

# 4. Crear el mapa con spplot usando el conteo de viajes en comuna destino
spplot(comunas_sp_destino, "conteo_viajes_destino", main = "Conteo de Viajes por Comuna de Destino - Total Cali")

# 5. Crear una nueva columna 'comuna_destino_factor' como factor para comuna destino
conteo_destino$comuna_destino_factor <- as.factor(conteo_destino$`comuna destino`)

# 6. Gráfico de distribución para "comuna_destino_factor" usando el dataframe conteo_destino
ggplot(conteo_destino, aes(x = comuna_destino_factor, y = conteo_viajes_destino)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_destino), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes por Comuna de Destino", x = "Comuna Destino", y = "Conteo de Viajes") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

9 Mapa 6 Distribución de comuna destino Bicicleta

library(dplyr)
library(sf)
library(sp)
library(ggplot2)

# 1. Filtrar solo los viajes en bicicleta desde EncuestaDestino
Bicicleta_Destino <- EncuestaDestino %>%
  filter(tipo_vehiculo == "Bicicleta")

# 2. Contar los viajes por comuna destino en Bicicleta_Destino
conteo_bicicleta_destino <- Bicicleta_Destino %>%
  group_by(`comuna destino`) %>%
  summarise(conteo_viajes_bicicleta_destino = n())

# 3. Unir los conteos de Bicicleta_Destino al shapefile usando la columna "comuna"
comunas_data_conteo_bicicleta_destino <- merge(comunas_data, conteo_bicicleta_destino, by.x = "comuna", by.y = "comuna destino", all.x = TRUE)

# 4. Convertir el objeto sf a sp
comunas_sp_bicicleta_destino <- as(comunas_data_conteo_bicicleta_destino, "Spatial")

# 5. Crear el mapa con spplot usando el conteo de viajes en bicicleta
spplot(comunas_sp_bicicleta_destino, "conteo_viajes_bicicleta_destino", main = "Conteo de Viajes en Bicicleta por Comuna de Destino")

# 6. Crear una nueva columna 'comuna_destino_factor' como factor para bicicletas
conteo_bicicleta_destino$comuna_destino_factor <- as.factor(conteo_bicicleta_destino$`comuna destino`)

# 7. Gráfico de distribución para "comuna_destino_factor" usando el dataframe conteo_bicicleta_destino
ggplot(conteo_bicicleta_destino, aes(x = comuna_destino_factor, y = conteo_viajes_bicicleta_destino)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_bicicleta_destino), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes en Bicicleta por Comuna de Destino", x = "Comuna Destino", y = "Conteo de Viajes en Bicicleta") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

10 Mapa 7 Distribución de comuna destino para Moto

library(dplyr)
library(sf)
library(sp)
library(ggplot2)

# 1. Filtrar solo los viajes en moto desde EncuestaDestino
Moto_Destino <- EncuestaDestino %>%
  filter(tipo_vehiculo == "Moto")

# 2. Contar los viajes por comuna destino en Moto_Destino
conteo_moto_destino <- Moto_Destino %>%
  group_by(`comuna destino`) %>%
  summarise(conteo_viajes_moto_destino = n())

# 3. Unir los conteos de Moto_Destino al shapefile usando la columna "comuna"
comunas_data_conteo_moto_destino <- merge(comunas_data, conteo_moto_destino, by.x = "comuna", by.y = "comuna destino", all.x = TRUE)

# 4. Convertir el objeto sf a sp
comunas_sp_moto_destino <- as(comunas_data_conteo_moto_destino, "Spatial")

# 5. Crear el mapa con spplot usando el conteo de viajes en moto
spplot(comunas_sp_moto_destino, "conteo_viajes_moto_destino", main = "Conteo de Viajes en Moto por Comuna de Destino")

# 6. Crear una nueva columna 'comuna_destino_factor' como factor para moto
conteo_moto_destino$comuna_destino_factor <- as.factor(conteo_moto_destino$`comuna destino`)

# 7. Gráfico de distribución para "comuna_destino_factor" usando el dataframe conteo_moto_destino
ggplot(conteo_moto_destino, aes(x = comuna_destino_factor, y = conteo_viajes_moto_destino)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_moto_destino), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes en Moto por Comuna de Destino", x = "Comuna Destino", y = "Conteo de Viajes en Moto") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

11 Mapa 8 Distribución de comuna destino para Auto

library(dplyr)
library(sf)
library(sp)
library(ggplot2)

# 1. Filtrar solo los viajes en auto desde EncuestaDestino
Auto_Destino <- EncuestaDestino %>%
  filter(tipo_vehiculo == "Automovil")

# 2. Contar los viajes por comuna destino en Auto_Destino
conteo_auto_destino <- Auto_Destino %>%
  group_by(`comuna destino`) %>%
  summarise(conteo_viajes_auto_destino = n())

# 3. Unir los conteos de Auto_Destino al shapefile usando la columna "comuna"
comunas_data_conteo_auto_destino <- merge(comunas_data, conteo_auto_destino, by.x = "comuna", by.y = "comuna destino", all.x = TRUE)

# 4. Convertir el objeto sf a sp
comunas_sp_auto_destino <- as(comunas_data_conteo_auto_destino, "Spatial")

# 5. Crear el mapa con spplot usando el conteo de viajes en auto
spplot(comunas_sp_auto_destino, "conteo_viajes_auto_destino", main = "Conteo de Viajes en Automóvil por Comuna de Destino")

# 6. Crear una nueva columna 'comuna_destino_factor' como factor para auto
conteo_auto_destino$comuna_destino_factor <- as.factor(conteo_auto_destino$`comuna destino`)

# 7. Gráfico de distribución para "comuna_destino_factor" usando el dataframe conteo_auto_destino
ggplot(conteo_auto_destino, aes(x = comuna_destino_factor, y = conteo_viajes_auto_destino)) +
  geom_bar(stat = "identity", fill = "blue", color = "black") +
  geom_text(aes(label = conteo_viajes_auto_destino), vjust = -0.5) +  # Mostrar el conteo encima de las barras
  labs(title = "Distribución de Viajes en Automóvil por Comuna de Destino", x = "Comuna Destino", y = "Conteo de Viajes en Automóvil") +
  scale_x_discrete(drop = FALSE) +  # Asegurarse de que todas las comunas se muestren
  theme(axis.text.x = element_text(angle = 90, hjust = 1))  # Rotar etiquetas para legibilidad

12 Análisis

El análisis de las distribuciones de viajes por comuna en Origen me indica una concentración de los trayectos en ciertas zonas de Cali. Al eliminar los viajes etiquetados como “Fuera de Cali”, que no pueden ser representados en el shapefile de las comunas de la ciudad, observamos que las comunas 2, 17, y 18 destacan como las más frecuentes. La comuna 2, en particular, es la que concentra una mayor cantidad de viajes de origen, superando los 2.900 trayectos. Por otro lado, comunas como la 12 y la 14 presentan una menor frecuencia de viajes, con menos de 400 trayectos en total. Esto indica una distribución desigual de los flujos de origen en la ciudad, donde ciertas zonas funcionan como importantes polos generadores de viajes.

Para los viajes en bicicleta, la distribución muestra una concentración más moderada. Las comunas 2, 18, y 16 son las que más viajes generan en este tipo de transporte, con la comuna 2 alcanzando el mayor número de viajes, 159 en total. Sin embargo, en este caso las diferencias entre las comunas no son tan drásticas como en el análisis general, aunque algunas comunas, como la 12, se mantienen con una baja frecuencia de viajes en bicicleta, con solo 14 trayectos. Esto sugiere que el uso de la bicicleta está más repartido entre las comunas, pero sigue habiendo una tendencia hacia ciertos sectores.

En cuanto a los viajes en moto, el patrón es más concentrado. La comuna 2 vuelve a ser un punto destacado, con más de 1.400 viajes de origen, seguida por la comuna 18 con 1.280 trayectos. Las comunas 0 y 1 también registran una actividad significativa en este tipo de transporte. Al igual que con la bicicleta, la comuna 12 se posiciona entre las menos activas, con solo 176 viajes. Las comunas 16 y 18 demuestran ser áreas de alto uso de la moto, lo cual podría estar relacionado con la accesibilidad o la infraestructura disponible para este tipo de vehículos.

Por último, en los viajes en automóvil, la concentración se observa principalmente en las comunas 2, 18, y 17, con la comuna 2 liderando una vez más, con más de 1.100 trayectos. En este caso, la comuna 18 también presenta un alto volumen de viajes, lo cual es consistente con su alto número de viajes en otros modos de transporte. Las comunas 12 y 10, en cambio, tienen un número significativamente menor de viajes en automóvil, sugiriendo que estas zonas podrían tener menos dependencia del vehículo privado en comparación con otras partes de la ciudad.

El análisis de las distribuciones de viajes por comuna en Destino muestra una dinámica algo diferente a la de Origen. Las comunas 2, 3, y 18 son las que concentran la mayor cantidad de viajes, destacándose la comuna 2 con más de 4.800 viajes registrados. Este resultado es consistente en términos de su papel central en la ciudad. Sin embargo, observamos también que las comunas con menor frecuencia de viajes, como la comuna 12 y la comuna 14, permanecen en niveles bajos, registrando menos de 400 viajes. La eliminación de los viajes “Fuera de Cali” sigue siendo importante, ya que el shapefile utilizado representa solo las comunas de Cali.

Al observar los viajes en bicicleta con respecto a los destinos, la comuna 2 y la comuna 18 nuevamente sobresalen, con 218 y 147 viajes, respectivamente. Sin embargo, en este caso, la diferencia entre las comunas es más notoria, con varias comunas registrando menos de 50 viajes en total. Las comunas 0 y 12, en particular, presentan muy pocos viajes en bicicleta hacia ellas como destino, lo que puede ser indicativo de una infraestructura menos favorable o una menor actividad en este modo de transporte en esas zonas.

Los viajes en moto muestran un patrón de concentración similar al de los viajes generales y en bicicleta, con la comuna 2 dominando con más de 2.100 viajes de destino, seguida por la comuna 18 con más de 1.400. A diferencia de otros medios, el uso de la moto está más uniformemente distribuido entre las comunas, aunque sigue existiendo una concentración notable en las zonas más centrales y de mayor actividad económica.

Finalmente, los viajes en automóvil mantienen el patrón de concentración en las comunas 2, 18, y 19, con la comuna 2 registrando más de 2.000 viajes de destino en total. El automóvil, como modo de transporte, parece seguir las mismas tendencias que otros medios, pero con una mayor disparidad entre las comunas que registran altos niveles de actividad y aquellas con pocos viajes, como la comuna 12, que tiene menos de 100 viajes en total. Esto sugiere que el uso del automóvil está estrechamente ligado a ciertas zonas de la ciudad, con una clara preferencia por destinos en áreas más centrales y de mayor desarrollo económico.

En resumen, tanto en los viajes de Origen como en los de Destino, se observa que las comunas 2, 18 y 17 son las más activas, mientras que las comunas 12 y 14 tienden a registrar menos actividad en casi todos los medios de transporte.

Fin del documento

dibujar