Este informe presenta un análisis detallado de la movilidad urbana en la ciudad de Cali, a partir de los datos recolectados y propiciados por la universidad para tal fin. El enfoque principal se centra en los trayectos realizados en bicicleta, moto y automóvil, con el fin de comprender los patrones de origen y destino, así como los motivos asociados a cada medio de transporte. Para ello, se aplicaron técnicas de análisis espacial utilizando R, incluyendo visualizaciones geográficas a través de mapas temáticos y la elaboración de tablas descriptivas.
encuesta <- encuesta %>% clean_names()
# Tabla de conteo de trayectos por comuna de origen
origen_general <- encuesta %>%
group_by(comuna_origen) %>%
summarise(total = n()) %>%
mutate(comuna_origen = as.numeric(comuna_origen))
# Conteo de trayectos por comuna de origen al shapefile
comunas_origen_general <- comunas %>%
left_join(origen_general, by = c("comuna" = "comuna_origen"))
# Mapa
ggplot(data = comunas_origen_general) +
geom_sf(aes(fill = total), color = "white") +
scale_fill_viridis_c(option = "inferno", name = "N° de trayectos", na.value = "gray90") +
labs(
title = "📍 Mapa general de origen de trayectos - Cali",
subtitle = "Cantidad total de trayectos por comuna de origen",
caption = "Fuente: Encuestas de Movilidad Urbana de Cali"
) +
theme_minimal()+
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
# Tabla de origen_general
origen_general %>%
kable(caption = "Conteo de trayectos por comuna de origen en Cali") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| comuna_origen | total |
|---|---|
| 0 | 672 |
| 1 | 794 |
| 2 | 2968 |
| 3 | 2121 |
| 4 | 1493 |
| 5 | 664 |
| 6 | 998 |
| 7 | 734 |
| 8 | 1124 |
| 9 | 952 |
| 10 | 1401 |
| 11 | 925 |
| 12 | 348 |
| 13 | 1238 |
| 14 | 685 |
| 15 | 1171 |
| 16 | 993 |
| 17 | 2377 |
| 18 | 1536 |
| 19 | 2850 |
| 20 | 733 |
| 21 | 818 |
| 22 | 1153 |
| NA | 6306 |
Los datos del análisis preliminar de los trayectos de origen reportados muestran una distribución desigual según la comuna de origen, lo que sugiere varias áreas clave de interés. Las comunas con mayor número de trayectos (como las comunas 2, 19 y 17) podrían estar relacionadas con una mayor actividad de desplazamiento, ya sea por densidad poblacional, ubicación estratégica o infraestructura de transporte. En contraste, comunas con menor cantidad de trayectos, como las comunas 0 y 12, pueden estar menos conectadas o tener una menor demanda de transporte, lo que podría ser indicativo de la necesidad de mejorar la infraestructura o los servicios de movilidad en esas áreas.
Se logra evidenciar, también, disparidad en la cantidad de trayectos por comuna, lo que sugiere que ciertas zonas podrían beneficiarse de intervenciones específicas en términos de infraestructura y políticas de movilidad, tales como la mejora del transporte público o la creación de carriles exclusivos para bicicletas.
# Mapa de destino general
destino_general <- encuesta %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
comunas_destino_general <- comunas %>%
left_join(destino_general, by = c("comuna" = "comuna_destino"))
# Mapa con números de comuna
ggplot(comunas_destino_general) +
geom_sf(aes(fill = total), color = "white") +
scale_fill_viridis_c() +
labs(title = "Mapa general de destino de viajes",
fill = "Cantidad de viajes") +
theme_minimal() +
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
# Tabla de conteo de trayectos por comuna de destino
destino_general <- encuesta %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
# Tabla destino_general
destino_general %>%
kable(caption = "Conteo de trayectos por comuna de destino en Cali") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| comuna_destino | total |
|---|---|
| 0 | 788 |
| 1 | 230 |
| 2 | 4810 |
| 3 | 3859 |
| 4 | 1856 |
| 5 | 522 |
| 6 | 716 |
| 7 | 748 |
| 8 | 1025 |
| 9 | 1279 |
| 10 | 927 |
| 11 | 564 |
| 12 | 246 |
| 13 | 673 |
| 14 | 379 |
| 15 | 579 |
| 16 | 743 |
| 17 | 2164 |
| 18 | 662 |
| 19 | 3158 |
| 20 | 351 |
| 21 | 515 |
| 22 | 1860 |
| NA | 6400 |
El análisis de los trayectos en función de los destinos revela una distribución asimétrica de los viajes en Cali, con ciertas comunas destacándose como destinos predominantes. Las comunas con mayor volumen de trayectos hacia ellas, como las comunas 2, 3, 19 y 17, sugieren una alta concentración de actividades económicas, servicios o infraestructura que atraen a un número significativo de usuarios. Esto podría estar relacionado con factores como la densidad poblacional, la accesibilidad a servicios clave o la ubicación estratégica de estas áreas dentro de la red de transporte urbano.
En contraste, algunas comunas, como la 0 y la 20, presentan una cantidad considerablemente menor de trayectos hacia ellas, lo que podría indicar que estas áreas no concentran alta demanda de movilidad o que existen limitaciones en términos de conectividad y accesibilidad. Estas diferencias en la distribución de los destinos reflejan posibles disparidades en la infraestructura de transporte, que pueden requerir una evaluación más profunda para identificar, seguramente, algunas oportunidades de mejora en las zonas menos visitadas.
# Recodificación por tipo de vehículo
encuesta <- encuesta %>%
mutate(tipo_vehiculo = recode(as.character(`tipo_de_vehiculo`),
"1" = "Bicicleta",
"2" = "Moto",
"3" = "Automóvil"))
# Subconjunto: trayectos en bicicleta
bicicleta <- encuesta %>%
filter(tipo_vehiculo == "Bicicleta")
# Conteo de trayectos por comuna origen
origen_bici <- bicicleta %>%
group_by(comuna_origen) %>%
summarise(total = n()) %>%
mutate(comuna_origen = as.numeric(comuna_origen))
# Tabla para inspección
origen_bici %>%
kable(caption = "Distribución de trayectos en bicicleta por comuna de origen",
col.names = c("Comuna de Origen", "Número de Trayectos")) %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| Comuna de Origen | Número de Trayectos |
|---|---|
| 0 | 43 |
| 1 | 36 |
| 2 | 159 |
| 3 | 99 |
| 4 | 74 |
| 5 | 38 |
| 6 | 44 |
| 7 | 35 |
| 8 | 52 |
| 9 | 53 |
| 10 | 82 |
| 11 | 52 |
| 12 | 14 |
| 13 | 76 |
| 14 | 37 |
| 15 | 70 |
| 16 | 73 |
| 17 | 141 |
| 18 | 111 |
| 19 | 141 |
| 20 | 46 |
| 21 | 44 |
| 22 | 55 |
| NA | 156 |
# Unión con el shapefile por comuna
comunas_bici <- comunas %>%
mutate(comuna = as.numeric(comuna)) %>%
left_join(origen_bici, by = c("comuna" = "comuna_origen"))
# Mapa
ggplot(comunas_bici) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Origen de trayectos en bicicleta - Cali",
fill = "Cantidad") +
theme_minimal()+
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
Comunas con alta actividad de origen:
Las comunas 2, 17 y 19 presentan un volumen elevado de trayectos en bicicleta, lo que podría indicar que estas áreas son centros residenciales o comerciales de donde los usuarios inician sus desplazamientos. Esto puede reflejar un alto uso de la bicicleta para el transporte diario, como para ir al trabajo, a la escuela o realizar actividades cotidianas.
Comunas con baja actividad de origen:
Por otro lado, las comunas 12, 13 y 15 tienen una presencia más baja en cuanto a trayectos de bicicleta. Esto podría estar relacionado con una menor infraestructura ciclista o con una menor densidad de destinos relevantes en esas áreas, lo que hace que el uso de la bicicleta no sea tan común para desplazamientos largos desde esas zonas.
Zonas periféricas:
Se observa que algunas comunas ubicadas en las zonas periféricas o de rango más rural (como las comunas Fuera de Cali) también presentan una cantidad considerable de trayectos de bicicleta. Esto podría reflejar patrones de movilidad entre las periferias de la ciudad y el centro urbano, como desplazamientos hacia áreas laborales o comerciales.
# Mapa de destino bicicleta
destino_bici <- encuesta %>%
filter(tipo_vehiculo == "Bicicleta") %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
# Tabla para inspección
destino_bici %>%
kable(caption = "Distribución de trayectos en bicicleta por comuna de destino",
col.names = c("Comuna de Destino", "Número de Trayectos")) %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| Comuna de Destino | Número de Trayectos |
|---|---|
| 0 | 46 |
| 1 | 12 |
| 2 | 218 |
| 3 | 189 |
| 4 | 85 |
| 5 | 41 |
| 6 | 34 |
| 7 | 41 |
| 8 | 54 |
| 9 | 65 |
| 10 | 43 |
| 11 | 29 |
| 12 | 15 |
| 13 | 33 |
| 14 | 22 |
| 15 | 20 |
| 16 | 35 |
| 17 | 115 |
| 18 | 31 |
| 19 | 147 |
| 20 | 25 |
| 21 | 26 |
| 22 | 100 |
| NA | 305 |
comunas_destino_bici <- comunas %>%
left_join(destino_bici, by = c("comuna" = "comuna_destino"))
ggplot(comunas_destino_bici) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c() +
labs(title = "Destino de trayectos en bicicleta",
fill = "Cantidad de viajes") +
theme_minimal()
Comunas con alta actividad de destino:
Las comunas 2, 19 y 17 son las que más destacan en cuanto a la cantidad de trayectos en bicicleta, lo que sugiere que estos lugares son destinos importantes para los ciclistas. Pueden ser zonas con una alta concentración de trabajo, comercio o actividad recreativa, lo que atrae a las personas a utilizarlas como puntos de destino.
Comunas con menor actividad de destino:
Algunas comunas, como las comunas 12, 15 y 5, muestran una menor cantidad de trayectos de bicicleta. Esto podría reflejar una menor concentración de destinos relevantes en esas áreas, o bien una falta de infraestructura adecuada para fomentar el uso de la bicicleta.
Zonas rurales o periféricas:
Similar al análisis de origen, se observa una fuerte relación con las comunas Fuera de Cali, que también aparecen como destinos frecuentes. Esto sugiere que los trayectos en bicicleta no solo ocurren dentro de los límites urbanos, sino que existe un flujo significativo de personas viajando hacia o desde áreas periféricas o rurales, lo que puede estar relacionado con el transporte hacia áreas de trabajo fuera del centro de la ciudad.
# Resumen estadístico del conteo de trayectos por comuna
summary(comunas_bici$total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 14.00 44.00 54.00 69.64 80.50 159.00
# Tabla de datos con conteos por comuna
head(comunas_bici %>% dplyr::select(comuna, total))
## Simple feature collection with 6 features and 2 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 863572.5 xmax: 1066087 ymax: 878628.1
## Projected CRS: MAGNA_Colombia_Cali
## comuna total geometry
## 1 2 159 POLYGON ((1059648 874236.3,...
## 2 1 36 POLYGON ((1054094 875172.8,...
## 3 3 99 POLYGON ((1061757 874615.5,...
## 4 19 141 POLYGON ((1057817 873269.4,...
## 5 15 70 POLYGON ((1065485 869864.1,...
## 6 17 141 POLYGON ((1061675 868320.9,...
El resumen estadístico muestra una gran variabilidad en cuanto a cantidad de trayectos en bicicleta entre las comunas de Cali, con valores que oscilan entre 14 y 159 trayectos. La mediana (54) y la media (69.64) indican que, aunque la mayoría de las comunas registran niveles moderados de desplazamientos, hay algunas que destacan por un volumen significativamente superior, como es el caso de la comuna 2. Esta dispersión sugiere diferencias marcadas en el uso de la bicicleta como medio de transporte, posiblemente por factores como la infraestructura ciclista, la topografía, la conectividad con puntos de interés y las condiciones socioeconómicas.
La asociación entre comunas permitió una representación espacial precisa que facilita la identificación visual de patrones y zonas con alta o baja intensidad de movilidad ciclista. Tenemos:
# Tablas individuales para mostrar en formato tabla
tabla_mayor <- comunas_bici %>%
arrange(desc(total)) %>%
slice_head(n = 10)
tabla_menor <- comunas_bici %>%
arrange(total) %>%
slice_head(n = 10)
tabla_mayor %>%
kable(caption = "Top 10 comunas con mayor cantidad de trayectos en bicicleta") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 | 159 | POLYGON ((1059648 874236.3,… |
| 4 | 110 | 19 | Comuna 19 | 141 | POLYGON ((1057817 873269.4,… |
| 6 | 104 | 17 | Comuna 17 | 141 | POLYGON ((1061675 868320.9,… |
| 7 | 105 | 18 | Comuna 18 | 111 | POLYGON ((1059061 867223.6,… |
| 3 | 109 | 3 | Comuna 3 | 99 | POLYGON ((1061757 874615.5,… |
| 20 | 100 | 10 | Comuna 10 | 82 | POLYGON ((1061946 870944.4,… |
| 16 | 96 | 13 | Comuna 13 | 76 | POLYGON ((1065206 872591.4,… |
| 10 | 90 | 4 | Comuna 4 | 74 | POLYGON ((1063833 877507.1,… |
| 22 | 102 | 16 | Comuna 16 | 73 | POLYGON ((1062914 866767.5,… |
| 5 | 103 | 15 | Comuna 15 | 70 | POLYGON ((1065485 869864.1,… |
tabla_menor %>%
kable(caption = "Top 10 comunas con menor cantidad de trayectos en bicicleta") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 17 | 97 | 12 | Comuna 12 | 14 | POLYGON ((1065201 872590, 1… |
| 12 | 92 | 7 | Comuna 7 | 35 | POLYGON ((1066866 875282.2,… |
| 2 | 108 | 1 | Comuna 1 | 36 | POLYGON ((1054094 875172.8,… |
| 18 | 98 | 14 | Comuna 14 | 37 | POLYGON ((1066257 872256.8,… |
| 11 | 91 | 5 | Comuna 5 | 38 | POLYGON ((1064821 877198.6,… |
| 9 | 89 | 6 | Comuna 6 | 44 | POLYGON ((1065143 879409.5,… |
| 15 | 95 | 21 | Comuna 21 | 44 | POLYGON ((1066744 873158.6,… |
| 21 | 101 | 20 | Comuna 20 | 46 | POLYGON ((1058420 870976.2,… |
| 13 | 93 | 8 | Comuna 8 | 52 | POLYGON ((1063039 874065.4,… |
| 19 | 99 | 11 | Comuna 11 | 52 | POLYGON ((1063357 870771.6,… |
A continuación, se presenta una comparación visual que refuerza esta desigualdad espacial en la movilidad ciclista urbana:
# Comunas con más y menos trayectos
comunas_bici_resumen <- bind_rows(
comunas_bici %>%
arrange(desc(total)) %>%
head(10) %>%
mutate(tipo = "Mayor cantidad de trayectos"),
comunas_bici %>%
arrange(total) %>%
head(10) %>%
mutate(tipo = "Menor cantidad de trayectos")
)
# Visualización en un gráfico
ggplot(comunas_bici_resumen) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Comparación de trayectos en bicicleta por comuna en Cali",
fill = "Cantidad de trayectos") +
facet_wrap(~tipo) +
theme_minimal()+
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
El contraste entre las comunas con mayor y menor número de trayectos evidencia disparidades importantes en el uso de la bicicleta como medio de transporte. Mientras que comunas como la 2, 17 y 19 presentan una alta concentración de trayectos, otras como la 12, 7 y 1 muestran una participación significativamente menor. Estas diferencias podrían estar relacionadas con factores como la presencia de infraestructura ciclística, la conectividad vial, las pendientes del terreno o incluso aspectos sociales y económicos.
Los datos revelan que las comunas con mayor número de trayectos en bicicleta son:
Estas comunas se caracterizan por una mezcla de zonas residenciales, comerciales y universitarias (como en el caso de la Comuna 2). La alta concentración de trayectos puede deberse a una mayor densidad poblacional, la cultura de movilidad alternativa más desarrollada precisamente debido a ello o presencia de equipamientos educativos o laborales accesibles en bicicleta.
# Conteo por comuna destino
destino_bici <- bicicleta %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
# Unión con el shapefile
comunas_destino_bici <- comunas %>%
left_join(destino_bici, by = c("comuna" = "comuna_destino"))
# Tabla 'comunas_destino_bici'
comunas_destino_bici %>%
kable(caption = "Comunas con trayectos en bicicleta por destino") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 | 218 | POLYGON ((1059648 874236.3,… |
| 2 | 108 | 1 | Comuna 1 | 12 | POLYGON ((1054094 875172.8,… |
| 3 | 109 | 3 | Comuna 3 | 189 | POLYGON ((1061757 874615.5,… |
| 4 | 110 | 19 | Comuna 19 | 147 | POLYGON ((1057817 873269.4,… |
| 5 | 103 | 15 | Comuna 15 | 20 | POLYGON ((1065485 869864.1,… |
| 6 | 104 | 17 | Comuna 17 | 115 | POLYGON ((1061675 868320.9,… |
| 7 | 105 | 18 | Comuna 18 | 31 | POLYGON ((1059061 867223.6,… |
| 8 | 106 | 22 | Comuna 22 | 100 | POLYGON ((1059486 864976.4,… |
| 9 | 89 | 6 | Comuna 6 | 34 | POLYGON ((1065143 879409.5,… |
| 10 | 90 | 4 | Comuna 4 | 85 | POLYGON ((1063833 877507.1,… |
| 11 | 91 | 5 | Comuna 5 | 41 | POLYGON ((1064821 877198.6,… |
| 12 | 92 | 7 | Comuna 7 | 41 | POLYGON ((1066866 875282.2,… |
| 13 | 93 | 8 | Comuna 8 | 54 | POLYGON ((1063039 874065.4,… |
| 14 | 94 | 9 | Comuna 9 | 65 | POLYGON ((1062123 873592.6,… |
| 15 | 95 | 21 | Comuna 21 | 26 | POLYGON ((1066744 873158.6,… |
| 16 | 96 | 13 | Comuna 13 | 33 | POLYGON ((1065206 872591.4,… |
| 17 | 97 | 12 | Comuna 12 | 15 | POLYGON ((1065201 872590, 1… |
| 18 | 98 | 14 | Comuna 14 | 22 | POLYGON ((1066257 872256.8,… |
| 19 | 99 | 11 | Comuna 11 | 29 | POLYGON ((1063357 870771.6,… |
| 20 | 100 | 10 | Comuna 10 | 43 | POLYGON ((1061946 870944.4,… |
| 21 | 101 | 20 | Comuna 20 | 25 | POLYGON ((1058420 870976.2,… |
| 22 | 102 | 16 | Comuna 16 | 35 | POLYGON ((1062914 866767.5,… |
Las comunas con más salidas de trayectos en bicicleta se ubican principalmente en el norte-centro y sur-centro de Cali, zonas densamente pobladas con alta concentración de instituciones educativas, empleo y equipamientos urbanos. Es probable que la infraestructura existente (como ciclorrutas en la Calle 5ª o la Av. Pasoancho) influya positivamente en la elección de este modo de transporte.
Las comunas 2, 3, 19 y 17 no solo son puntos de partida, sino también destinos frecuentes, lo cual indica trayectos intracomunales o hacia zonas cercanas.
La comuna 22 aparece como destino frecuente, lo que podría estar reflejando flujos hacia zonas más periféricas donde puede haber zonas industriales o residenciales nuevas.
# Diccionario de motivos
motivos_dict <- tibble::tibble(
que_va_hacer_a_ese_lugar = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 77),
motivo = c(
"A trabajar",
"Asuntos de Trabajo",
"Estudiar",
"Recibir Atención de Salud",
"Ver a Alguien",
"Volver a casa",
"Buscar / Dejar a Alguien",
"Buscar / Dejar algo",
"Comer / Tomar algo",
"Compras",
"Trámites",
"Recreación",
"Buscando Trabajo",
"Otra cosa"
)
)
# Conteo de motivos, unión con nombres y ordenamiento
motivo_bici <- bicicleta %>%
count(que_va_hacer_a_ese_lugar) %>%
left_join(motivos_dict, by = "que_va_hacer_a_ese_lugar") %>%
mutate(motivo = ifelse(is.na(motivo), "No especificado", motivo)) %>%
arrange(desc(n))
# Tabla
motivo_bici %>%
dplyr::select(ID = que_va_hacer_a_ese_lugar, Motivo = motivo, Cantidad = n) %>%
kable(caption = "Distribución de motivos de viaje en bicicleta",
col.names = c("ID", "Motivo del viaje", "Cantidad")) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))
| ID | Motivo del viaje | Cantidad |
|---|---|---|
| 1 | A trabajar | 930 |
| 6 | Volver a casa | 264 |
| 2 | Asuntos de Trabajo | 172 |
| 11 | Trámites | 75 |
| 3 | Estudiar | 46 |
| 10 | Compras | 44 |
| 5 | Ver a Alguien | 40 |
| 12 | Recreación | 36 |
| 7 | Buscar / Dejar a Alguien | 32 |
| 4 | Recibir Atención de Salud | 31 |
| 77 | Otra cosa | 23 |
| 13 | Buscando Trabajo | 18 |
| 8 | Buscar / Dejar algo | 13 |
| NA | No especificado | 4 |
| 9 | Comer / Tomar algo | 3 |
Los resultados demuestran que el motivo predominante para los viajes realizados en bicicleta es “ir a trabajar” (930 trayectos), lo que evidencia el rol fundamental de este modo de transporte en los desplazamientos laborales. Esta alta frecuencia refuerza la noción de que la bicicleta no solo es un medio de transporte alternativo, sino también una herramienta funcional en la movilidad diaria de quienes la utilizan.
Como segundo motivo más común está el “volver a casa” (264 trayectos), lo que sugiere que muchos de estos viajes forman parte de trayectos más amplios, posiblemente intermodales, donde la bicicleta se utiliza en el tramo de retorno tras haber llegado al destino inicial por otro medio de transporte.
“Asuntos de trabajo” (172 trayectos) y “estudiar” (46 trayectos) también aparecen con una presencia significativa, indicando que la bicicleta se emplea en actividades productivas y educativas, no solo para ocio o diligencias menores.
Motivos como “trámites” (75 trayectos), “compras” (44) y “ver a alguien” (40) confirman que la bicicleta también es utilizada para cubrir necesidades cotidianas, probablemente dentro de la misma comuna o en trayectos de corta distancia.
Aunque los motivos recreativos (36 trayectos para “recreación” y 23 trayectos catalogados como “otra cosa”) tienen una presencia menor, su presencia en este punto revela el uso de la bicicleta asociada al esparcimiento, la salud y el bienestar.
Por otra parte, algo interesante y bastante bueno es la baja cantidad de trayectos sin motivo especificado (4) porque esto muestra alto nivel de completitud en la recolección de datos, lo que respalda la confiabilidad del análisis.
viajes_por_comunas <- bicicleta %>%
group_by(comuna_origen, comuna_destino) %>%
summarise(n = n(), .groups = "drop") %>%
arrange(desc(n))
viajes_por_comunas %>%
slice_head(n = 10) %>%
kable(caption = "Top 10 viajes entre comunas de origen y destino en bicicleta") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| comuna_origen | comuna_destino | n |
|---|---|---|
| 02 | Fuera de Cali | 35 |
| 17 | Fuera de Cali | 30 |
| Fuera de Cali | Fuera de Cali | 28 |
| 19 | Fuera de Cali | 26 |
| 02 | 02 | 24 |
| 18 | Fuera de Cali | 24 |
| 19 | 02 | 22 |
| 02 | 03 | 21 |
| 18 | 03 | 21 |
| 18 | 02 | 20 |
Alta conexión con “Fuera de Cali”: Muchos viajes inician o terminan fuera del perímetro urbano. Esto puede reflejar dinámicas metropolitanas o zonas rurales bien conectadas a Cali a través de vías o transporte o en proceso de urbanización o tener una dependencia económica/social de Cali.
Intercambios internos destacados: Se notan flujos significativos entre comunas 2, 3, 18 y 19. Esto puede deberse a la alta densidad poblacional y presencia de instituciones educativas, comercios y servicios, así como zonas con actividad económica y social que generan o atraen viajes en bicicleta, y probablemente, debido a lo anterior también se cuente en estas comunas infraestructura favorable para quienes se transporten en bicicleta.
La comuna 2 aparece con frecuencia, tanto como origen como destino, lo que indica una posible centralidad funcional en la movilidad en bici.
moto <- encuesta %>%
filter(tipo_vehiculo == "Moto")
# Conteo de trayectos por comuna origen
origen_moto <- moto %>%
group_by(comuna_origen) %>%
summarise(total = n()) %>%
mutate(comuna_origen = as.numeric(comuna_origen))
# Tabla
origen_moto %>%
kable(caption = "Distribución de trayectos en moto por comuna de origen",
col.names = c("Comuna de Origen", "Número de Trayectos")) %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| Comuna de Origen | Número de Trayectos |
|---|---|
| 0 | 259 |
| 1 | 375 |
| 2 | 1414 |
| 3 | 970 |
| 4 | 720 |
| 5 | 319 |
| 6 | 473 |
| 7 | 350 |
| 8 | 552 |
| 9 | 413 |
| 10 | 675 |
| 11 | 431 |
| 12 | 176 |
| 13 | 554 |
| 14 | 310 |
| 15 | 536 |
| 16 | 450 |
| 17 | 1136 |
| 18 | 746 |
| 19 | 1280 |
| 20 | 339 |
| 21 | 378 |
| 22 | 515 |
| NA | 2706 |
# Unión con el shapefile por comuna
comunas_moto <- comunas %>%
mutate(comuna = as.numeric(comuna)) %>%
left_join(origen_moto, by = c("comuna" = "comuna_origen"))
# Mapa
ggplot(comunas_moto) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Origen de trayectos en moto - Cali",
fill = "Cantidad") +
theme_minimal()+
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
El mapa temático de los trayectos realizados en moto en la ciudad de Cali revela una clara concentración de viajes en ciertas comunas. Se observa un uso intensivo en el oriente y suroriente de la ciudad, especialmente en comunas como la 2, 19 y 17, donde se registran los valores más altos de trayectos. Esto podría estar asociado a factores como la alta densidad poblacional, la existencia de zonas residenciales populares con menor cobertura del transporte público y una mayor disponibilidad de motocicletas como medio de transporte accesible y flexible.
Además, comunas como la 3, 18 y 10 también presentan volúmenes significativos, lo que sugiere que la motocicleta es ampliamente utilizada tanto para trayectos cotidianos como para actividades laborales o personales. El número elevado de trayectos con origen “Fuera de Cali” (comuna 0 y NA) también puede indicar una relación importante entre zonas rurales o periurbanas y la ciudad, consolidando la moto como un vehículo clave en la movilidad regional.
# Conteo de trayectos por comuna destino
destino_moto <- moto %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
# Tabla para inspección de destino
destino_moto %>%
kable(caption = "Distribución de trayectos en moto por comuna de destino",
col.names = c("Comuna de Destino", "Número de Trayectos")) %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| Comuna de Destino | Número de Trayectos |
|---|---|
| 0 | 390 |
| 1 | 112 |
| 2 | 2177 |
| 3 | 1734 |
| 4 | 846 |
| 5 | 215 |
| 6 | 323 |
| 7 | 353 |
| 8 | 470 |
| 9 | 608 |
| 10 | 419 |
| 11 | 254 |
| 12 | 128 |
| 13 | 346 |
| 14 | 188 |
| 15 | 271 |
| 16 | 327 |
| 17 | 927 |
| 18 | 302 |
| 19 | 1421 |
| 20 | 151 |
| 21 | 243 |
| 22 | 911 |
| NA | 2961 |
# Unión con el shapefile por comuna
comunas_destino_moto <- comunas %>%
left_join(destino_moto, by = c("comuna" = "comuna_destino"))
# Mapa
ggplot(comunas_destino_moto) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Destino de trayectos en moto - Cali",
fill = "Cantidad") +
theme_minimal() +
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
En cuanto al destino de los trayectos, la Comuna 2 se destaca ampliamente con 2.177 trayectos, seguida por la Comuna 3 (1.734) y la Comuna 19 (1.421). Este patrón sugiere que estas zonas podrían estar cumpliendo funciones de centralidad urbana, ya sea por concentración de actividades económicas, servicios, equipamientos educativos o trámites.
La alta concentración de destinos en el nororiente y centro-sur refuerza la idea de que la moto se usa no solo para trayectos residenciales, sino también para movilidad productiva, permitiendo alcanzar destinos estratégicos para el día a día. También es notoria la cantidad de trayectos cuyo destino está clasificado como “Fuera de Cali” (NA y 0), lo cual indica posibles movimientos intermunicipales o hacia zonas rurales conectadas funcionalmente con la ciudad.
En conjunto, estos datos reflejan que la motocicleta no solo responde a necesidades individuales de movilidad, sino que también está integrada a dinámicas metropolitanas y económicas más amplias.
summary(comunas_moto$total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 176.0 375.8 494.0 596.0 708.8 1414.0
El número de trayectos en moto por comuna varía entre 176 y 1414. El promedio se sitúa en 596 viajes, mientras que la mediana es de 494, lo que indica una ligera asimetría hacia comunas con mayor volumen de trayectos. El primer cuartil (376) y el tercer cuartil (709) muestran que la mayoría de las comunas se encuentran en un rango intermedio, aunque unas pocas se destacan con valores significativamente superiores.
head(comunas_moto %>% dplyr::select(comuna, total))
## Simple feature collection with 6 features and 2 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 863572.5 xmax: 1066087 ymax: 878628.1
## Projected CRS: MAGNA_Colombia_Cali
## comuna total geometry
## 1 2 1414 POLYGON ((1059648 874236.3,...
## 2 1 375 POLYGON ((1054094 875172.8,...
## 3 3 970 POLYGON ((1061757 874615.5,...
## 4 19 1280 POLYGON ((1057817 873269.4,...
## 5 15 536 POLYGON ((1065485 869864.1,...
## 6 17 1136 POLYGON ((1061675 868320.9,...
# Resumen de las comunas con más y menos trayectos en moto
comunas_moto_resumen <- bind_rows(
comunas_moto %>%
arrange(desc(total)) %>%
head(10) %>%
mutate(tipo = "Mayor cantidad de trayectos"),
comunas_moto %>%
arrange(total) %>%
head(10) %>%
mutate(tipo = "Menor cantidad de trayectos")
)
# Visualización en un gráfico
ggplot(comunas_moto_resumen) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Comparación de trayectos en moto por comuna en Cali",
fill = "Cantidad de trayectos") +
facet_wrap(~tipo) +
theme_minimal()+
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
tabla_mayor_moto <- comunas_moto %>%
arrange(desc(total)) %>%
slice_head(n = 10)
tabla_menor_moto <- comunas_moto %>%
arrange(total) %>%
slice_head(n = 10)
tabla_mayor_moto %>%
kable(caption = "Top 10 comunas con mayor cantidad de trayectos en moto") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 | 1414 | POLYGON ((1059648 874236.3,… |
| 4 | 110 | 19 | Comuna 19 | 1280 | POLYGON ((1057817 873269.4,… |
| 6 | 104 | 17 | Comuna 17 | 1136 | POLYGON ((1061675 868320.9,… |
| 3 | 109 | 3 | Comuna 3 | 970 | POLYGON ((1061757 874615.5,… |
| 7 | 105 | 18 | Comuna 18 | 746 | POLYGON ((1059061 867223.6,… |
| 10 | 90 | 4 | Comuna 4 | 720 | POLYGON ((1063833 877507.1,… |
| 20 | 100 | 10 | Comuna 10 | 675 | POLYGON ((1061946 870944.4,… |
| 16 | 96 | 13 | Comuna 13 | 554 | POLYGON ((1065206 872591.4,… |
| 13 | 93 | 8 | Comuna 8 | 552 | POLYGON ((1063039 874065.4,… |
| 5 | 103 | 15 | Comuna 15 | 536 | POLYGON ((1065485 869864.1,… |
Las comunas con mayor cantidad de trayectos en moto son la 2 (1414), la 19 (1280), la 17 (1136) y la 3 (970). Estas zonas se caracterizan, como se ha evidenciado en el análisis de uso de las bicicletas, por ser áreas densamente pobladas, con infraestructura vial que favorece el uso de motos o bien por ser puntos centrales de movilidad urbana. Este patrón podría indicar que la moto es un medio preferido en estas comunas para evitar congestiones o por menor acceso a transporte masivo.
tabla_menor_moto %>%
kable(caption = "Top 10 comunas con menor cantidad de trayectos en moto") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 17 | 97 | 12 | Comuna 12 | 176 | POLYGON ((1065201 872590, 1… |
| 18 | 98 | 14 | Comuna 14 | 310 | POLYGON ((1066257 872256.8,… |
| 11 | 91 | 5 | Comuna 5 | 319 | POLYGON ((1064821 877198.6,… |
| 21 | 101 | 20 | Comuna 20 | 339 | POLYGON ((1058420 870976.2,… |
| 12 | 92 | 7 | Comuna 7 | 350 | POLYGON ((1066866 875282.2,… |
| 2 | 108 | 1 | Comuna 1 | 375 | POLYGON ((1054094 875172.8,… |
| 15 | 95 | 21 | Comuna 21 | 378 | POLYGON ((1066744 873158.6,… |
| 14 | 94 | 9 | Comuna 9 | 413 | POLYGON ((1062123 873592.6,… |
| 19 | 99 | 11 | Comuna 11 | 431 | POLYGON ((1063357 870771.6,… |
| 22 | 102 | 16 | Comuna 16 | 450 | POLYGON ((1062914 866767.5,… |
En contraste, las comunas con menor número de trayectos en moto son la 12 (176), 14 (310), 5 (319) y 20 (339). Estas zonas podrían tener una mayor cobertura de transporte público, menor densidad poblacional o estar ubicadas en áreas donde las condiciones no son tan favorables para el uso de motocicletas. También es posible que haya restricciones o menor disponibilidad económica para este medio de transporte.
# Conteo por comuna de origen
origen_moto <- moto %>%
group_by(comuna_origen) %>%
summarise(total = n()) %>%
mutate(comuna_origen = as.numeric(comuna_origen))
# Unir al shapefile
comunas_origen_moto <- comunas %>%
left_join(origen_moto, by = c("comuna" = "comuna_origen"))
# Tabla
comunas_origen_moto %>%
kable(caption = "Comunas con trayectos en moto por origen") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 | 1414 | POLYGON ((1059648 874236.3,… |
| 2 | 108 | 1 | Comuna 1 | 375 | POLYGON ((1054094 875172.8,… |
| 3 | 109 | 3 | Comuna 3 | 970 | POLYGON ((1061757 874615.5,… |
| 4 | 110 | 19 | Comuna 19 | 1280 | POLYGON ((1057817 873269.4,… |
| 5 | 103 | 15 | Comuna 15 | 536 | POLYGON ((1065485 869864.1,… |
| 6 | 104 | 17 | Comuna 17 | 1136 | POLYGON ((1061675 868320.9,… |
| 7 | 105 | 18 | Comuna 18 | 746 | POLYGON ((1059061 867223.6,… |
| 8 | 106 | 22 | Comuna 22 | 515 | POLYGON ((1059486 864976.4,… |
| 9 | 89 | 6 | Comuna 6 | 473 | POLYGON ((1065143 879409.5,… |
| 10 | 90 | 4 | Comuna 4 | 720 | POLYGON ((1063833 877507.1,… |
| 11 | 91 | 5 | Comuna 5 | 319 | POLYGON ((1064821 877198.6,… |
| 12 | 92 | 7 | Comuna 7 | 350 | POLYGON ((1066866 875282.2,… |
| 13 | 93 | 8 | Comuna 8 | 552 | POLYGON ((1063039 874065.4,… |
| 14 | 94 | 9 | Comuna 9 | 413 | POLYGON ((1062123 873592.6,… |
| 15 | 95 | 21 | Comuna 21 | 378 | POLYGON ((1066744 873158.6,… |
| 16 | 96 | 13 | Comuna 13 | 554 | POLYGON ((1065206 872591.4,… |
| 17 | 97 | 12 | Comuna 12 | 176 | POLYGON ((1065201 872590, 1… |
| 18 | 98 | 14 | Comuna 14 | 310 | POLYGON ((1066257 872256.8,… |
| 19 | 99 | 11 | Comuna 11 | 431 | POLYGON ((1063357 870771.6,… |
| 20 | 100 | 10 | Comuna 10 | 675 | POLYGON ((1061946 870944.4,… |
| 21 | 101 | 20 | Comuna 20 | 339 | POLYGON ((1058420 870976.2,… |
| 22 | 102 | 16 | Comuna 16 | 450 | POLYGON ((1062914 866767.5,… |
El análisis territorial de los trayectos en moto según la comuna de origen evidencia que las comunas con mayor número de salidas son la Comuna 2 (1.414 trayectos), Comuna 19 (1.280) y Comuna 3 (970). Estas comunas, ubicadas en zonas céntricas y con alta actividad residencial y comercial, funcionan como grandes generadores de viajes en motocicleta. También destacan la Comuna 17 y la Comuna 18, indicando una importante dinámica de movilidad en el sur de la ciudad.
# Conteo por comuna destino
destino_moto <- moto %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
# Unir al shapefile
comunas_destino_moto <- comunas %>%
left_join(destino_moto, by = c("comuna" = "comuna_destino"))
# Tabla
comunas_destino_moto %>%
kable(caption = "Comunas con trayectos en moto por destino") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 | 2177 | POLYGON ((1059648 874236.3,… |
| 2 | 108 | 1 | Comuna 1 | 112 | POLYGON ((1054094 875172.8,… |
| 3 | 109 | 3 | Comuna 3 | 1734 | POLYGON ((1061757 874615.5,… |
| 4 | 110 | 19 | Comuna 19 | 1421 | POLYGON ((1057817 873269.4,… |
| 5 | 103 | 15 | Comuna 15 | 271 | POLYGON ((1065485 869864.1,… |
| 6 | 104 | 17 | Comuna 17 | 927 | POLYGON ((1061675 868320.9,… |
| 7 | 105 | 18 | Comuna 18 | 302 | POLYGON ((1059061 867223.6,… |
| 8 | 106 | 22 | Comuna 22 | 911 | POLYGON ((1059486 864976.4,… |
| 9 | 89 | 6 | Comuna 6 | 323 | POLYGON ((1065143 879409.5,… |
| 10 | 90 | 4 | Comuna 4 | 846 | POLYGON ((1063833 877507.1,… |
| 11 | 91 | 5 | Comuna 5 | 215 | POLYGON ((1064821 877198.6,… |
| 12 | 92 | 7 | Comuna 7 | 353 | POLYGON ((1066866 875282.2,… |
| 13 | 93 | 8 | Comuna 8 | 470 | POLYGON ((1063039 874065.4,… |
| 14 | 94 | 9 | Comuna 9 | 608 | POLYGON ((1062123 873592.6,… |
| 15 | 95 | 21 | Comuna 21 | 243 | POLYGON ((1066744 873158.6,… |
| 16 | 96 | 13 | Comuna 13 | 346 | POLYGON ((1065206 872591.4,… |
| 17 | 97 | 12 | Comuna 12 | 128 | POLYGON ((1065201 872590, 1… |
| 18 | 98 | 14 | Comuna 14 | 188 | POLYGON ((1066257 872256.8,… |
| 19 | 99 | 11 | Comuna 11 | 254 | POLYGON ((1063357 870771.6,… |
| 20 | 100 | 10 | Comuna 10 | 419 | POLYGON ((1061946 870944.4,… |
| 21 | 101 | 20 | Comuna 20 | 151 | POLYGON ((1058420 870976.2,… |
| 22 | 102 | 16 | Comuna 16 | 327 | POLYGON ((1062914 866767.5,… |
En cuanto a los destinos, se observa que la Comuna 2 (2.177 trayectos) y la Comuna 3 (1.734) concentran una alta recepción de viajes en moto, seguidas por la Comuna 19. Estas comunas funcionan como puntos de atracción, posiblemente por su actividad económica, servicios, empleo o educación. Es notorio también el volumen de trayectos con destino en la Comuna 22 y Comuna 4, lo cual puede asociarse a zonas de servicios o centros laborales.
# Conteo de motivos
motivo_moto <- moto %>%
count(`que_va_hacer_a_ese_lugar`) %>%
arrange(desc(n))
motivos_moto <- tibble::tibble(
motivo_codigo = c(1, 6, 2, 11, 3, 10, 5, 12, 7, 4),
motivo = c(
"Ir al trabajo",
"Regresar a casa",
"Ir a estudiar",
"Otro",
"Realizar diligencias personales",
"Actividades recreativas/deportivas",
"Compras o mercado",
"Trámite institucional / salud / gobierno",
"Acompañar a otra persona",
"Visitar familiares/amigos"
)
)
# Unir con los datos
motivo_moto_final <- motivo_moto %>%
left_join(motivos_moto, by = c("que_va_hacer_a_ese_lugar" = "motivo_codigo")) %>%
dplyr::select(motivo_codigo = que_va_hacer_a_ese_lugar, motivo, n) %>%
arrange(desc(n))
motivo_moto_final %>%
kable(col.names = c("Código", "Motivo del viaje", "Total de viajes"),
caption = "Motivos de desplazamiento en moto - Encuesta de Movilidad en Cali") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| Código | Motivo del viaje | Total de viajes |
|---|---|---|
| 1 | Ir al trabajo | 7983 |
| 2 | Ir a estudiar | 2766 |
| 6 | Regresar a casa | 2118 |
| 11 | Otro | 755 |
| 3 | Realizar diligencias personales | 425 |
| 7 | Acompañar a otra persona | 395 |
| 4 | Visitar familiares/amigos | 366 |
| 10 | Actividades recreativas/deportivas | 361 |
| 5 | Compras o mercado | 340 |
| 77 | NA | 211 |
| 8 | NA | 179 |
| 12 | Trámite institucional / salud / gobierno | 74 |
| NA | NA | 38 |
| 13 | NA | 37 |
| 9 | NA | 28 |
| 72 | NA | 1 |
Los principales motivos de desplazamiento en moto son:
Esto confirma que el uso de la motocicleta en Cali está fuertemente vinculado a actividades rutinarias y obligatorias, como el empleo y la educación. En menor medida, se reportan viajes por diligencias personales, acompañar a otros, actividades recreativas y compras.
viajes_por_comunas_moto <- moto %>%
group_by(comuna_origen, comuna_destino) %>%
summarise(n = n(), .groups = "drop") %>%
arrange(desc(n))
viajes_por_comunas_moto %>%
slice_head(n = 10) %>%
kable(caption = "Top 10 viajes entre comunas de origen y destino en moto") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| comuna_origen | comuna_destino | n |
|---|---|---|
| Fuera de Cali | Fuera de Cali | 433 |
| Fuera de Cali | 02 | 399 |
| Fuera de Cali | 03 | 370 |
| 02 | Fuera de Cali | 318 |
| 17 | Fuera de Cali | 250 |
| Fuera de Cali | 19 | 250 |
| 03 | Fuera de Cali | 244 |
| 19 | Fuera de Cali | 244 |
| 02 | 02 | 233 |
| 19 | 02 | 212 |
El cruce entre comunas de origen y destino revela una fuerte movilidad intermunicipal, con un número significativo de trayectos que inician y terminan fuera de Cali (433), o con uno de los extremos fuera de la ciudad. Las comunas 2, 3 y 19 también aparecen recurrentemente en las rutas más frecuentes, lo que confirma su rol tanto como emisoras como receptoras de desplazamientos en moto.
Llama la atención la cantidad de trayectos bidireccionales entre la misma comuna (por ejemplo, Comuna 2 a Comuna 2), lo que podría relacionarse con movilidad interna, como reparto de domicilios o múltiples paradas en un mismo sector.
automovil <- encuesta %>%
filter(tipo_vehiculo == "Automóvil")
# Conteo de trayectos por comuna origen
origen_automovil <- automovil %>%
group_by(comuna_origen) %>%
summarise(total = n()) %>%
mutate(comuna_origen = as.numeric(comuna_origen))
# Tabla de origen
origen_automovil %>%
kable(caption = "Distribución de trayectos en automóvil por comuna de origen",
col.names = c("Comuna de Origen", "Número de Trayectos")) %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| Comuna de Origen | Número de Trayectos |
|---|---|
| 0 | 317 |
| 1 | 301 |
| 2 | 1121 |
| 3 | 854 |
| 4 | 551 |
| 5 | 241 |
| 6 | 389 |
| 7 | 283 |
| 8 | 420 |
| 9 | 382 |
| 10 | 529 |
| 11 | 361 |
| 12 | 123 |
| 13 | 486 |
| 14 | 272 |
| 15 | 456 |
| 16 | 385 |
| 17 | 899 |
| 18 | 559 |
| 19 | 1165 |
| 20 | 272 |
| 21 | 328 |
| 22 | 489 |
| NA | 2917 |
# Unión con el shapefile por comuna
comunas_automovil <- comunas %>%
mutate(comuna = as.numeric(comuna)) %>%
left_join(origen_automovil, by = c("comuna" = "comuna_origen"))
# Mapa
ggplot(comunas_automovil) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Origen de trayectos en automóvil - Cali",
fill = "Cantidad") +
theme_minimal()+
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
El análisis espacial de los trayectos que se inician en automóvil revela una concentración significativa en las comunas del sur y centro-occidente de Cali, especialmente en las comunas 2 (1121 viajes), 19 (1165), y 17 (899). Esta distribución sugiere que estas zonas podrían tener mayores niveles de motorización privada, probablemente asociados a factores como mejores condiciones socioeconómicas, presencia de parqueaderos, oferta vial y conectividad urbana.
Además, varias comunas como la 3, 10, 13 y 15 también registran altos volúmenes de salida en automóvil, lo cual refuerza la idea de que el automóvil se utiliza extensamente para desplazamientos desde sectores residenciales bien consolidados.
# Conteo de trayectos por comuna destino
destino_automovil <- automovil %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
# Tabla de destino
destino_automovil %>%
kable(caption = "Distribución de trayectos en automóvil por comuna de destino",
col.names = c("Comuna de Destino", "Número de Trayectos")) %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| Comuna de Destino | Número de Trayectos |
|---|---|
| 0 | 280 |
| 1 | 86 |
| 2 | 2006 |
| 3 | 1557 |
| 4 | 757 |
| 5 | 225 |
| 6 | 275 |
| 7 | 286 |
| 8 | 403 |
| 9 | 489 |
| 10 | 384 |
| 11 | 239 |
| 12 | 85 |
| 13 | 226 |
| 14 | 138 |
| 15 | 245 |
| 16 | 321 |
| 17 | 959 |
| 18 | 276 |
| 19 | 1302 |
| 20 | 144 |
| 21 | 198 |
| 22 | 694 |
| NA | 2525 |
# Unión con el shapefile para destino
comunas_destino_automovil <- comunas %>%
left_join(destino_automovil, by = c("comuna" = "comuna_destino"))
# Mapa del destino
ggplot(comunas_destino_automovil) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Destino de trayectos en automóvil - Cali",
fill = "Cantidad de viajes") +
theme_minimal() +
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
En cuanto a los destinos, destaca fuertemente la Comuna 2, que recibe 2006 trayectos, consolidándose como un importante centro de atracción de viajes en automóvil. Esto podría estar relacionado con la presencia de zonas comerciales, centros educativos, servicios de salud, oficinas y vías principales que facilitan el acceso en carro.
Le siguen comunas como la 3 (1557 viajes) y la 19 (1302 viajes), lo cual evidencia una distribución del flujo vehicular hacia sectores centrales y del sur de la ciudad, posiblemente por motivos laborales, comerciales o administrativos.
También se observa un flujo considerable hacia la Comuna 22 (694 viajes), lo que puede vincularse a zonas de expansión urbana y sectores de mayor poder adquisitivo, donde el uso del automóvil es más frecuente.
summary(comunas_automovil$total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 123.0 307.8 404.5 493.9 545.5 1165.0
El resumen estadístico de los trayectos en automóvil por comuna revela una marcada dispersión en la cantidad de viajes registrados. El número mínimo de trayectos fue de 123, mientras que el máximo alcanzó los 1.165. Esto indica que algunas comunas son centros importantes de origen de viajes en automóvil, posiblemente por su conectividad o nivel de actividad económica como bien lo mencioné inicialmente.
head(comunas_automovil %>% dplyr::select(comuna, total))
## Simple feature collection with 6 features and 2 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 863572.5 xmax: 1066087 ymax: 878628.1
## Projected CRS: MAGNA_Colombia_Cali
## comuna total geometry
## 1 2 1121 POLYGON ((1059648 874236.3,...
## 2 1 301 POLYGON ((1054094 875172.8,...
## 3 3 854 POLYGON ((1061757 874615.5,...
## 4 19 1165 POLYGON ((1057817 873269.4,...
## 5 15 456 POLYGON ((1065485 869864.1,...
## 6 17 899 POLYGON ((1061675 868320.9,...
tabla_mayor_automovil <- comunas_automovil %>%
arrange(desc(total)) %>%
slice_head(n = 10)
tabla_menor_automovil <- comunas_automovil %>%
arrange(total) %>%
slice_head(n = 10)
tabla_mayor_automovil %>%
kable(caption = "Top 10 comunas con mayor cantidad de trayectos en automóvil") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 4 | 110 | 19 | Comuna 19 | 1165 | POLYGON ((1057817 873269.4,… |
| 1 | 107 | 2 | Comuna 2 | 1121 | POLYGON ((1059648 874236.3,… |
| 6 | 104 | 17 | Comuna 17 | 899 | POLYGON ((1061675 868320.9,… |
| 3 | 109 | 3 | Comuna 3 | 854 | POLYGON ((1061757 874615.5,… |
| 7 | 105 | 18 | Comuna 18 | 559 | POLYGON ((1059061 867223.6,… |
| 10 | 90 | 4 | Comuna 4 | 551 | POLYGON ((1063833 877507.1,… |
| 20 | 100 | 10 | Comuna 10 | 529 | POLYGON ((1061946 870944.4,… |
| 8 | 106 | 22 | Comuna 22 | 489 | POLYGON ((1059486 864976.4,… |
| 16 | 96 | 13 | Comuna 13 | 486 | POLYGON ((1065206 872591.4,… |
| 5 | 103 | 15 | Comuna 15 | 456 | POLYGON ((1065485 869864.1,… |
Las comunas 19, 2, y 17 se destacan por tener los mayores volúmenes de viajes en automóvil, superando los 850 trayectos cada una. Estas comunas presentan una combinación de zonas residenciales de estrato medio-alto y corredores viales principales, lo cual puede incentivar el uso del automóvil como modo de transporte predominante.
tabla_menor_automovil %>%
kable(caption = "Top 10 comunas con menor cantidad de trayectos en automóvil") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 17 | 97 | 12 | Comuna 12 | 123 | POLYGON ((1065201 872590, 1… |
| 11 | 91 | 5 | Comuna 5 | 241 | POLYGON ((1064821 877198.6,… |
| 18 | 98 | 14 | Comuna 14 | 272 | POLYGON ((1066257 872256.8,… |
| 21 | 101 | 20 | Comuna 20 | 272 | POLYGON ((1058420 870976.2,… |
| 12 | 92 | 7 | Comuna 7 | 283 | POLYGON ((1066866 875282.2,… |
| 2 | 108 | 1 | Comuna 1 | 301 | POLYGON ((1054094 875172.8,… |
| 15 | 95 | 21 | Comuna 21 | 328 | POLYGON ((1066744 873158.6,… |
| 19 | 99 | 11 | Comuna 11 | 361 | POLYGON ((1063357 870771.6,… |
| 14 | 94 | 9 | Comuna 9 | 382 | POLYGON ((1062123 873592.6,… |
| 22 | 102 | 16 | Comuna 16 | 385 | POLYGON ((1062914 866767.5,… |
En contraste, comunas como la 12, 5 y 14 registran los menores niveles de trayectos. Estas comunas pueden tener una menor tenencia de vehículos privados o estar ubicadas en zonas donde predominan otros medios de transporte como la moto o el transporte público. Además, su infraestructura vial podría limitar el uso intensivo del automóvil.
comunas_automovil_resumen <- bind_rows(
comunas_automovil %>%
arrange(desc(total)) %>%
head(10) %>%
mutate(tipo = "Mayor cantidad de trayectos"),
comunas_automovil %>%
arrange(total) %>%
head(10) %>%
mutate(tipo = "Menor cantidad de trayectos")
)
ggplot(comunas_automovil_resumen) +
geom_sf(aes(fill = total)) +
scale_fill_viridis_c(option = "C") +
labs(title = "Comparación de trayectos en automóvil por comuna en Cali",
fill = "Cantidad de trayectos") +
facet_wrap(~tipo) +
theme_minimal()+
geom_sf_text(aes(label = comuna), size = 3, color = "black", fontface = "bold", check_overlap = TRUE)
La información tabulada y la visualización comparativa permiten observar que en el grupo de comunas con mayor cantidad de trayectos destacan la Comuna 19 (1.165 trayectos), Comuna 2 (1.121), Comuna 17 (899) y Comuna 3 (854), todas ubicadas en sectores del sur y centro de la ciudad, caracterizados por una alta densidad residencial y presencia de vías principales. Estos resultados sugieren que estas comunas concentran una población con mayor acceso a vehículos particulares y mayores niveles de motorización.
Por otro lado, entre las comunas con menor número de trayectos se encuentran la Comuna 12 (123 trayectos), Comuna 5 (241), Comuna 14 y Comuna 20 (ambas con 272). Estas comunas se ubican principalmente en el oriente y ladera occidental de la ciudad, zonas que han enfrentado desafíos socioeconómicos y en donde otros modos de transporte como la moto, el transporte público o caminar pueden ser más prevalentes.
origen_auto <- automovil %>%
group_by(comuna_origen) %>%
summarise(total = n()) %>%
mutate(comuna_origen = as.numeric(comuna_origen))
# Unir al shapefile
comunas_origen_auto <- comunas %>%
left_join(origen_auto, by = c("comuna" = "comuna_origen"))
# Tabla
comunas_origen_auto %>%
kable(caption = "Comunas con trayectos en automóvil por origen") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 | 1121 | POLYGON ((1059648 874236.3,… |
| 2 | 108 | 1 | Comuna 1 | 301 | POLYGON ((1054094 875172.8,… |
| 3 | 109 | 3 | Comuna 3 | 854 | POLYGON ((1061757 874615.5,… |
| 4 | 110 | 19 | Comuna 19 | 1165 | POLYGON ((1057817 873269.4,… |
| 5 | 103 | 15 | Comuna 15 | 456 | POLYGON ((1065485 869864.1,… |
| 6 | 104 | 17 | Comuna 17 | 899 | POLYGON ((1061675 868320.9,… |
| 7 | 105 | 18 | Comuna 18 | 559 | POLYGON ((1059061 867223.6,… |
| 8 | 106 | 22 | Comuna 22 | 489 | POLYGON ((1059486 864976.4,… |
| 9 | 89 | 6 | Comuna 6 | 389 | POLYGON ((1065143 879409.5,… |
| 10 | 90 | 4 | Comuna 4 | 551 | POLYGON ((1063833 877507.1,… |
| 11 | 91 | 5 | Comuna 5 | 241 | POLYGON ((1064821 877198.6,… |
| 12 | 92 | 7 | Comuna 7 | 283 | POLYGON ((1066866 875282.2,… |
| 13 | 93 | 8 | Comuna 8 | 420 | POLYGON ((1063039 874065.4,… |
| 14 | 94 | 9 | Comuna 9 | 382 | POLYGON ((1062123 873592.6,… |
| 15 | 95 | 21 | Comuna 21 | 328 | POLYGON ((1066744 873158.6,… |
| 16 | 96 | 13 | Comuna 13 | 486 | POLYGON ((1065206 872591.4,… |
| 17 | 97 | 12 | Comuna 12 | 123 | POLYGON ((1065201 872590, 1… |
| 18 | 98 | 14 | Comuna 14 | 272 | POLYGON ((1066257 872256.8,… |
| 19 | 99 | 11 | Comuna 11 | 361 | POLYGON ((1063357 870771.6,… |
| 20 | 100 | 10 | Comuna 10 | 529 | POLYGON ((1061946 870944.4,… |
| 21 | 101 | 20 | Comuna 20 | 272 | POLYGON ((1058420 870976.2,… |
| 22 | 102 | 16 | Comuna 16 | 385 | POLYGON ((1062914 866767.5,… |
En este análisis, se observa la distribución territorial de los trayectos en automóvil según su comuna de origen. Los resultados muestran que las comunas con mayor cantidad de trayectos en automóvil incluyen la Comuna 2, Comuna 19 y Comuna 3, con 1121, 1165 y 854 trayectos respectivamente. Esto sugiere que estas áreas tienen una alta actividad de movilidad en automóvil, lo que podría estar relacionado con su ubicación geográfica o características socioeconómicas.
destino_auto <- automovil %>%
group_by(comuna_destino) %>%
summarise(total = n()) %>%
mutate(comuna_destino = as.numeric(comuna_destino))
# Unir al shapefile
comunas_destino_auto <- comunas %>%
left_join(destino_auto, by = c("comuna" = "comuna_destino"))
# Tabla
comunas_destino_auto %>%
kable(caption = "Comunas con trayectos en automóvil por destino") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| OBJECTID | gid | comuna | nombre | total | geometry |
|---|---|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 | 2006 | POLYGON ((1059648 874236.3,… |
| 2 | 108 | 1 | Comuna 1 | 86 | POLYGON ((1054094 875172.8,… |
| 3 | 109 | 3 | Comuna 3 | 1557 | POLYGON ((1061757 874615.5,… |
| 4 | 110 | 19 | Comuna 19 | 1302 | POLYGON ((1057817 873269.4,… |
| 5 | 103 | 15 | Comuna 15 | 245 | POLYGON ((1065485 869864.1,… |
| 6 | 104 | 17 | Comuna 17 | 959 | POLYGON ((1061675 868320.9,… |
| 7 | 105 | 18 | Comuna 18 | 276 | POLYGON ((1059061 867223.6,… |
| 8 | 106 | 22 | Comuna 22 | 694 | POLYGON ((1059486 864976.4,… |
| 9 | 89 | 6 | Comuna 6 | 275 | POLYGON ((1065143 879409.5,… |
| 10 | 90 | 4 | Comuna 4 | 757 | POLYGON ((1063833 877507.1,… |
| 11 | 91 | 5 | Comuna 5 | 225 | POLYGON ((1064821 877198.6,… |
| 12 | 92 | 7 | Comuna 7 | 286 | POLYGON ((1066866 875282.2,… |
| 13 | 93 | 8 | Comuna 8 | 403 | POLYGON ((1063039 874065.4,… |
| 14 | 94 | 9 | Comuna 9 | 489 | POLYGON ((1062123 873592.6,… |
| 15 | 95 | 21 | Comuna 21 | 198 | POLYGON ((1066744 873158.6,… |
| 16 | 96 | 13 | Comuna 13 | 226 | POLYGON ((1065206 872591.4,… |
| 17 | 97 | 12 | Comuna 12 | 85 | POLYGON ((1065201 872590, 1… |
| 18 | 98 | 14 | Comuna 14 | 138 | POLYGON ((1066257 872256.8,… |
| 19 | 99 | 11 | Comuna 11 | 239 | POLYGON ((1063357 870771.6,… |
| 20 | 100 | 10 | Comuna 10 | 384 | POLYGON ((1061946 870944.4,… |
| 21 | 101 | 20 | Comuna 20 | 144 | POLYGON ((1058420 870976.2,… |
| 22 | 102 | 16 | Comuna 16 | 321 | POLYGON ((1062914 866767.5,… |
El análisis de las comunas de destino de los trayectos en automóvil revela que la Comuna 2 es también la que recibe el mayor número de vehículos, con un total de 2006 trayectos. Este patrón sugiere que la Comuna 2 actúa como un centro de atracción de movilidad, lo cual podría estar vinculado a diversos factores, tales como la infraestructura vial que conecta eficazmente esta comuna con otras áreas de la ciudad, su concentración de servicios esenciales (como centros comerciales, parques industriales, o instituciones educativas), o su actividad económica dinámica. Estos elementos hacen que la Comuna 2 sea un punto focal para los desplazamientos en automóvil, tanto para los habitantes locales como para aquellos provenientes de otras zonas de Cali.
motivos_dict <- tibble::tibble(
codigo = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 77),
motivo = c(
"A trabajar",
"Asuntos de Trabajo",
"Estudiar",
"Recibir Atención de Salud",
"Ver a Alguien",
"Volver a casa",
"Buscar /Dejar a Alguien",
"Buscar /Dejar a Algo",
"Comer /Tomar Algo",
"Compras",
"Trámites",
"Recreación",
"Buscando Trabajo",
"Otra cosa"
)
)
motivo_auto <- automovil %>%
count(que_va_hacer_a_ese_lugar) %>%
left_join(motivos_dict, by = c("que_va_hacer_a_ese_lugar" = "codigo")) %>%
arrange(desc(n)) %>%
mutate(
motivo = ifelse(is.na(motivo), "No especificado", motivo),
codigo = que_va_hacer_a_ese_lugar
)
motivo_auto %>%
dplyr::select(codigo, motivo, n) %>%
kable(
caption = "Distribución de motivos de viaje en automóvil",
col.names = c("Código", "Motivo del viaje", "Cantidad")
) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))
| Código | Motivo del viaje | Cantidad |
|---|---|---|
| 1 | A trabajar | 5705 |
| 2 | Asuntos de Trabajo | 2122 |
| 6 | Volver a casa | 1951 |
| 11 | Trámites | 946 |
| 7 | Buscar /Dejar a Alguien | 647 |
| 10 | Compras | 583 |
| 5 | Ver a Alguien | 529 |
| 4 | Recibir Atención de Salud | 509 |
| 3 | Estudiar | 380 |
| 77 | Otra cosa | 266 |
| 8 | Buscar /Dejar a Algo | 183 |
| 12 | Recreación | 164 |
| NA | No especificado | 55 |
| 9 | Comer /Tomar Algo | 47 |
| 13 | Buscando Trabajo | 13 |
El análisis de la distribución de los motivos de viaje en automóvil revela que el motivo más frecuente es “A trabajar” (código 1), con un total de 5705 viajes. Le siguen los motivos “Asuntos de Trabajo” (código 2) con 2122 trayectos y “Volver a casa” (código 6) con 1951 trayectos. Este patrón sugiere que una parte significativa de los desplazamientos en automóvil está directamente vinculada con actividades laborales y el regreso al hogar, lo que refuerza la idea de que el automóvil es un medio utilizado principalmente para fines productivos y funcionales.
Motivos adicionales como “Trámites” (946), “Buscar o dejar a alguien” (647), y “Compras” (583) también presentan cifras destacadas, lo que sugiere que el automóvil sigue siendo una opción clave para desplazamientos personales y logísticos. Sin embargo, este comportamiento podría verse influenciado por la creciente oferta de plataformas de transporte y servicios de transporte privado, que han aumentado la flexibilidad y accesibilidad del uso de vehículos privados sin necesidad de ser dueño del automóvil.
En contraste, motivos como “Estudiar” (380), “Recreación” (164), “Comer o tomar algo” (47), y “Buscando trabajo” (13) muestran una menor incidencia, lo que podría indicar una menor dependencia del automóvil para estas actividades o bien una preferencia por otros medios de transporte, como el uso de plataformas como Uber para trayectos más cortos o más económicos, o bien el uso de transporte público, especialmente en zonas de mayor densidad de población o con mejor infraestructura de movilidad.
viajes_por_comunas_auto <- automovil %>%
group_by(comuna_origen, comuna_destino) %>%
summarise(n = n(), .groups = "drop") %>%
arrange(desc(n))
viajes_por_comunas_auto %>%
slice_head(n = 10) %>%
kable(caption = "Top 10 viajes entre comunas de origen y destino en automóvil") %>%
kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed"))
| comuna_origen | comuna_destino | n |
|---|---|---|
| Fuera de Cali | Fuera de Cali | 449 |
| Fuera de Cali | 02 | 441 |
| Fuera de Cali | 03 | 417 |
| Fuera de Cali | 19 | 336 |
| Fuera de Cali | 17 | 264 |
| 02 | Fuera de Cali | 235 |
| 19 | 02 | 215 |
| 19 | Fuera de Cali | 211 |
| 17 | Fuera de Cali | 190 |
| 02 | 02 | 189 |
El análisis de las relaciones entre las comunas de origen y destino en los trayectos en automóvil revela que los viajes más frecuentes están relacionados con trayectos hacia y desde el área de “Fuera de Cali”. Los primeros lugares en el top de trayectos incluyen viajes desde Fuera de Cali hacia las comunas 02 (441 trayectos), 03 (417 trayectos), y 19 (336 trayectos), lo que sugiere una interconexión importante con áreas periféricas o rurales cercanas a la ciudad.
El hecho de que “Fuera de Cali” aparezca repetidamente tanto como origen como destino indica que existe una movilidad significativa entre Cali y sus alrededores. Esto podría estar relacionado con actividades laborales, comerciales o recreativas, y sugiere una interdependencia de Cali con las zonas rurales y suburbanas cercanas.
El análisis desarrollado permitió aplicar de forma integral técnicas de exploración y visualización espacial, mostrando cómo los patrones de movilidad en Cali varían significativamente según el tipo de vehículo utilizado. A través del uso de herramientas del lenguaje R y el procesamiento de datos espaciales, se logró representar con claridad la distribución de los trayectos por comunas, tanto en origen como destino, complementando esta información con tablas estadísticas y mapas temáticos.
Los hallazgos evidencian que la bicicleta, la moto y el automóvil responden a dinámicas urbanas diferenciadas. Mientras que la bicicleta presenta trayectos más localizados y funcionales, la moto muestra una amplia presencia en comunas con menor cobertura de transporte público, y el automóvil se concentra en zonas con mayores niveles socioeconómicos y de motorización. Además, la significativa cantidad de trayectos que conectan comunas con zonas “Fuera de Cali” pone en evidencia procesos de expansión urbana, flujos regionales y posibles vacíos en la infraestructura de transporte metropolitano.
Este ejercicio permitió demostrar cómo el análisis espacial no solo proporciona una visión descriptiva del territorio, sino que también facilita la identificación de patrones clave para la toma de decisiones en planeación urbana. En suma, la integración entre análisis estadístico, modelado espacial y visualización geográfica resultó fundamental para interpretar con mayor profundidad la movilidad urbana, consolidando habilidades esenciales en el contexto de la ciencia de datos aplicada a problemas territoriales.