El objetivo de esta actividad es realizar un análisis geográfico y
espacial de una encuesta de origen-destino asociada a las comunas de
Cali. A partir de un archivo cartográfico en formato shapefile y de la
base tabular EncuestaOrigenDestino.xlsx, se busca
identificar:
1: Bicicleta.2: Moto.3: Automóvil.El resultado principal son ocho mapas temáticos:
En este bloque se definen las rutas de entrada.
ruta_excel <- "EncuestaOrigenDestino.xlsx"
ruta_shp <- "Comunas.shp"
archivos_requeridos <- c(
ruta_excel,
"Comunas.shp",
"Comunas.shx",
"Comunas.dbf",
"Comunas.prj"
)
archivos_faltantes <- archivos_requeridos[!file.exists(archivos_requeridos)]
if (length(archivos_faltantes) > 0) {
stop(
"Faltan los siguientes archivos en la carpeta de trabajo: ",
paste(archivos_faltantes, collapse = ", ")
)
}
# Cargar shapefile de comunas de Cali
comunas <- sf::st_read(ruta_shp, quiet = TRUE)
# Cargar hoja principal de la encuesta
encuesta_raw <- readxl::read_excel(
path = ruta_excel,
sheet = "Hoja1",
.name_repair = "unique"
)
Antes de construir los mapas es necesario revisar la estructura de los dos insumos. El shapefile contiene la geometría de las comunas y el Excel contiene los registros de la encuesta.
cat("Número de polígonos/comunas en el shapefile:", nrow(comunas), "\n")
## Número de polígonos/comunas en el shapefile: 22
cat("Sistema de referencia de coordenadas:\n")
## Sistema de referencia de coordenadas:
print(sf::st_crs(comunas))
## Coordinate Reference System:
## User input: MAGNA_Colombia_Cali
## wkt:
## PROJCRS["MAGNA_Colombia_Cali",
## BASEGEOGCRS["GCS_MAGNA_CALI",
## DATUM["D_<custom>",
## ELLIPSOID["_custom",6379137,298.257222101,
## LENGTHUNIT["metre",1,
## ID["EPSG",9001]]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["Degree",0.0174532925199433]]],
## CONVERSION["unnamed",
## METHOD["Transverse Mercator",
## ID["EPSG",9807]],
## PARAMETER["Latitude of natural origin",3.441883333,
## ANGLEUNIT["Degree",0.0174532925199433],
## ID["EPSG",8801]],
## PARAMETER["Longitude of natural origin",-76.5205625,
## ANGLEUNIT["Degree",0.0174532925199433],
## ID["EPSG",8802]],
## PARAMETER["Scale factor at natural origin",1,
## SCALEUNIT["unity",1],
## ID["EPSG",8805]],
## PARAMETER["False easting",1061900.18,
## LENGTHUNIT["metre",1],
## ID["EPSG",8806]],
## PARAMETER["False northing",872364.63,
## LENGTHUNIT["metre",1],
## ID["EPSG",8807]]],
## CS[Cartesian,2],
## AXIS["(E)",east,
## ORDER[1],
## LENGTHUNIT["metre",1,
## ID["EPSG",9001]]],
## AXIS["(N)",north,
## ORDER[2],
## LENGTHUNIT["metre",1,
## ID["EPSG",9001]]]]
knitr::kable(
head(sf::st_drop_geometry(comunas), 10),
caption = "Primeros atributos del shapefile de comunas"
)
| OBJECTID | gid | comuna | nombre |
|---|---|---|---|
| 1 | 107 | 2 | Comuna 2 |
| 2 | 108 | 1 | Comuna 1 |
| 3 | 109 | 3 | Comuna 3 |
| 4 | 110 | 19 | Comuna 19 |
| 5 | 103 | 15 | Comuna 15 |
| 6 | 104 | 17 | Comuna 17 |
| 7 | 105 | 18 | Comuna 18 |
| 8 | 106 | 22 | Comuna 22 |
| 9 | 89 | 6 | Comuna 6 |
| 10 | 90 | 4 | Comuna 4 |
cat("Número de registros en la encuesta:", nrow(encuesta_raw), "\n")
## Número de registros en la encuesta: 35054
cat("Número de columnas en la encuesta:", ncol(encuesta_raw), "\n")
## Número de columnas en la encuesta: 28
knitr::kable(
tibble::tibble(nombre_columna = names(encuesta_raw)),
caption = "Columnas disponibles en la hoja Hoja1 del Excel"
)
| nombre_columna |
|---|
| FECHA |
| ID ESTACIÓN |
| ESTACIÓN |
| ACCESO |
| MOVIMIENTO |
| Hora de Encuesta |
| MUNICIPIO…7 |
| DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN…8 |
| Codigo Origen_SDG |
| ¿QUE ESTABA HACIENDO EN ESE LUGAR? |
| MUNICIPIO…11 |
| DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN…12 |
| Codigo Destino_SDG |
| ¿QUE VA HACER A ESE LUGAR? |
| ESTRATO EN SU VIVIENDA |
| ¿DISPONIA DE UN VEHÍCULO PARA REALIZAR ESTE DESPLAZAMIENTO? |
| OTRO ¿CUÁL?…17 |
| ANTES |
| DESPUES |
| EDAD |
| SEXO |
| PERSONAS EN EL VEHÍCULO |
| TIPO DE VEHÍCULO |
| OTRO ¿CUÁL?…24 |
| TIPO DE VIAJERO |
| comuna origen |
| comuna destino |
| Intracomuna |
Las variables centrales para esta actividad son:
comuna origen: código de comuna desde donde sale la
persona.comuna destino: código de comuna hacia donde se dirige
la persona.TIPO DE VEHÍCULO: código del tipo de vehículo usado en
el desplazamiento.Para poder unir correctamente la encuesta con el shapefile, se
estandarizan los códigos de comuna. En el Excel algunas comunas aparecen
como 02, 03, etc.; en el shapefile la columna
comuna está como número entero. Por eso se crea un
identificador común en formato de dos dígitos: 01,
02, …, 22.
También se recodifica el tipo de vehículo de acuerdo con la convención solicitada en la actividad:
1 = Bicicleta.2 = Moto.3 = Automóvil.normalizar_comuna <- function(x) {
x <- as.character(x)
x <- stringr::str_squish(x)
x[x == ""] <- NA_character_
salida <- rep(NA_character_, length(x))
es_fuera <- !is.na(x) & stringr::str_detect(stringr::str_to_lower(x), "fuera")
salida[es_fuera] <- "Fuera de Cali"
x_num <- suppressWarnings(as.integer(as.numeric(x)))
es_num <- !is.na(x_num) & !es_fuera
salida[es_num] <- stringr::str_pad(x_num[es_num], width = 2, side = "left", pad = "0")
otros <- is.na(salida) & !is.na(x)
salida[otros] <- x[otros]
salida
}
normalizar_vehiculo <- function(x) {
x <- as.character(x)
x <- stringr::str_squish(x)
x[x == ""] <- NA_character_
x_num <- suppressWarnings(as.integer(as.numeric(x)))
x_cod <- as.character(x_num)
dplyr::case_when(
x_cod == "1" ~ "Bicicleta",
x_cod == "2" ~ "Moto",
x_cod == "3" ~ "Automovil",
x_cod == "4" ~ "Campero (Guala)",
x_cod == "5" ~ "Taxi",
x_cod == "6" ~ "Intermunicipal - Bus",
x_cod == "7" ~ "Intermunicipal - Buseta",
x_cod == "8" ~ "Intermunicipal - Van",
x_cod == "9" ~ "Taxi blanco",
x_cod == "77" ~ "Otro ¿Cuál?",
TRUE ~ x_cod
)
}
columnas_necesarias <- c("comuna origen", "comuna destino", "TIPO DE VEHÍCULO")
columnas_no_encontradas <- setdiff(columnas_necesarias, names(encuesta_raw))
if (length(columnas_no_encontradas) > 0) {
stop(
"No se encontraron estas columnas necesarias en el Excel: ",
paste(columnas_no_encontradas, collapse = ", ")
)
}
# Preparación de la capa espacial de comunas
if (!"comuna" %in% names(comunas)) {
stop("El shapefile no contiene la columna 'comuna'. Revise los atributos de Comunas.shp.")
}
comunas$comuna_num <- as.integer(comunas$comuna)
comunas$comuna_id <- stringr::str_pad(
comunas$comuna_num,
width = 2,
side = "left",
pad = "0"
)
if ("nombre" %in% names(comunas)) {
comunas$nombre_comuna <- as.character(comunas$nombre)
} else {
comunas$nombre_comuna <- paste("Comuna", comunas$comuna_num)
}
# Validación simple de geometrías
if (any(!sf::st_is_valid(comunas))) {
comunas <- sf::st_make_valid(comunas)
}
# Preparación de la encuesta
encuesta <- encuesta_raw %>%
transmute(
comuna_origen_raw = `comuna origen`,
comuna_destino_raw = `comuna destino`,
tipo_vehiculo_raw = `TIPO DE VEHÍCULO`,
comuna_origen = normalizar_comuna(`comuna origen`),
comuna_destino = normalizar_comuna(`comuna destino`),
tipo_vehiculo = normalizar_vehiculo(`TIPO DE VEHÍCULO`)
) %>%
mutate(
origen_en_cali = comuna_origen %in% comunas$comuna_id,
destino_en_cali = comuna_destino %in% comunas$comuna_id
)
Esta validación permite entender cuántos registros se pueden
representar directamente en el mapa de comunas de Cali y cuántos
corresponden a lugares fuera de Cali. Los registros marcados como
Fuera de Cali no se grafican como comuna porque el
shapefile suministrado solo contiene las comunas de Cali.
validacion <- tibble::tibble(
indicador = c(
"Registros totales de la encuesta",
"Comunas disponibles en el shapefile",
"Registros con origen dentro de Cali",
"Registros con origen fuera de Cali",
"Registros con destino dentro de Cali",
"Registros con destino fuera de Cali",
"Registros sin tipo de vehículo identificado",
"Registros de bicicleta",
"Registros de moto",
"Registros de automóvil"
),
valor = c(
nrow(encuesta),
nrow(comunas),
sum(encuesta$origen_en_cali, na.rm = TRUE),
sum(encuesta$comuna_origen == "Fuera de Cali", na.rm = TRUE),
sum(encuesta$destino_en_cali, na.rm = TRUE),
sum(encuesta$comuna_destino == "Fuera de Cali", na.rm = TRUE),
sum(is.na(encuesta$tipo_vehiculo), na.rm = TRUE),
sum(encuesta$tipo_vehiculo == "Bicicleta", na.rm = TRUE),
sum(encuesta$tipo_vehiculo == "Moto", na.rm = TRUE),
sum(encuesta$tipo_vehiculo == "Automovil", na.rm = TRUE)
)
)
knitr::kable(validacion, caption = "Resumen de validación de datos")
| indicador | valor |
|---|---|
| Registros totales de la encuesta | 35054 |
| Comunas disponibles en el shapefile | 22 |
| Registros con origen dentro de Cali | 28076 |
| Registros con origen fuera de Cali | 6306 |
| Registros con destino dentro de Cali | 27866 |
| Registros con destino fuera de Cali | 6400 |
| Registros sin tipo de vehículo identificado | 115 |
| Registros de bicicleta | 1731 |
| Registros de moto | 16077 |
| Registros de automóvil | 14100 |
distribucion_vehiculos <- encuesta %>%
count(tipo_vehiculo, name = "registros", sort = TRUE) %>%
mutate(
tipo_vehiculo = tidyr::replace_na(tipo_vehiculo, "Sin dato"),
porcentaje = registros / sum(registros)
)
knitr::kable(
distribucion_vehiculos %>%
mutate(
registros = scales::comma(registros),
porcentaje = scales::percent(porcentaje, accuracy = 0.1)
),
caption = "Distribución de registros por tipo de vehículo"
)
| tipo_vehiculo | registros | porcentaje |
|---|---|---|
| Moto | 16,077 | 45.9% |
| Automovil | 14,100 | 40.2% |
| Taxi | 1,999 | 5.7% |
| Bicicleta | 1,731 | 4.9% |
| Campero (Guala) | 459 | 1.3% |
| Intermunicipal - Bus | 211 | 0.6% |
| Intermunicipal - Buseta | 167 | 0.5% |
| Sin dato | 115 | 0.3% |
| Intermunicipal - Van | 88 | 0.3% |
| Otro ¿Cuál? | 77 | 0.2% |
| Taxi blanco | 30 | 0.1% |
El análisis cartográfico se concentra en las comunas de Cali, por lo
tanto, los registros cuyo origen o destino aparece como
Fuera de Cali son relevantes para la lectura general de
movilidad, pero no se pueden pintar dentro del mapa de comunas porque no
existe una geometría asociada dentro del shapefile suministrado. En
consecuencia, los mapas representan únicamente los registros que tienen
comuna válida entre 01 y 22.
Para evitar código repetido, se crean funciones que permiten:
resumir_por_comuna <- function(datos, variable_comuna, vehiculo = NULL) {
datos_filtrados <- datos
if (!is.null(vehiculo)) {
datos_filtrados <- datos_filtrados %>%
filter(tipo_vehiculo == vehiculo)
}
resumen <- datos_filtrados %>%
filter(.data[[variable_comuna]] %in% comunas$comuna_id) %>%
count(comuna_id = .data[[variable_comuna]], name = "viajes") %>%
right_join(
comunas %>%
sf::st_drop_geometry() %>%
select(comuna_id, nombre_comuna),
by = "comuna_id"
) %>%
mutate(
viajes = tidyr::replace_na(viajes, 0L)
)
total_viajes <- sum(resumen$viajes, na.rm = TRUE)
resumen %>%
mutate(
porcentaje = if (total_viajes > 0) viajes / total_viajes else 0
) %>%
arrange(desc(viajes))
}
crear_datos_mapa <- function(resumen) {
comunas %>%
left_join(
resumen %>% select(comuna_id, viajes, porcentaje),
by = "comuna_id"
) %>%
mutate(
viajes = tidyr::replace_na(viajes, 0L),
porcentaje = tidyr::replace_na(porcentaje, 0),
etiqueta = if_else(
viajes > 0,
paste0("C", comuna_id, "\n", scales::comma(viajes)),
paste0("C", comuna_id)
)
)
}
graficar_mapa <- function(datos_mapa, titulo, subtitulo) {
ggplot(datos_mapa) +
geom_sf(aes(fill = viajes), color = "white", linewidth = 0.25) +
geom_sf_text(aes(label = etiqueta), size = 2.6, check_overlap = TRUE) +
scale_fill_viridis_c(
option = "C",
labels = scales::comma,
trans = "sqrt",
name = "Cantidad\nde viajes"
) +
labs(
title = titulo,
subtitle = subtitulo,
caption = "Fuente: EncuestaOrigenDestino.xlsx y shapefile Comunas.shp.\nNota: los registros 'Fuera de Cali' no se grafican porque no tienen geometría en el shapefile de comunas."
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 16),
plot.subtitle = element_text(size = 11),
legend.position = "right",
panel.grid.major = element_line(color = "grey85", linewidth = 0.2)
)
}
tabla_top_comunas <- function(resumen, n = 10) {
resumen %>%
filter(viajes > 0) %>%
arrange(desc(viajes)) %>%
slice_head(n = n) %>%
transmute(
ranking = row_number(),
comuna = paste0("C", comuna_id, " - ", nombre_comuna),
viajes = scales::comma(viajes),
participacion = scales::percent(porcentaje, accuracy = 0.1)
) %>%
knitr::kable(caption = paste("Top", n, "comunas con mayor cantidad de viajes cartografiables"))
}
interpretar_resultado <- function(resumen, sentido = c("origen", "destino"), vehiculo = NULL) {
sentido <- match.arg(sentido)
datos <- resumen %>%
filter(viajes > 0) %>%
arrange(desc(viajes))
if (nrow(datos) == 0 || sum(datos$viajes) == 0) {
cat("> **Interpretación.** No se identificaron registros cartografiables para este filtro.\n")
return(invisible(NULL))
}
total <- sum(datos$viajes)
top1 <- datos[1, ]
top3 <- datos %>% slice_head(n = min(3, nrow(datos)))
acumulado_top3 <- sum(top3$viajes) / total
top3_texto <- paste0(
top3$nombre_comuna,
" (C", top3$comuna_id, ": ", scales::comma(top3$viajes), ")",
collapse = ", "
)
etiqueta_vehiculo <- if (!is.null(vehiculo)) {
paste0(" para **", vehiculo, "**")
} else {
" general"
}
accion <- if (sentido == "origen") {
"desde donde se generan o salen más viajes"
} else {
"hacia donde llegan o se dirigen más viajes"
}
lectura <- if (sentido == "origen") {
"una zona con alta generación de desplazamientos dentro de la encuesta"
} else {
"una zona con alta atracción de desplazamientos dentro de la encuesta"
}
cat(paste0(
"> En el mapa de ", sentido, etiqueta_vehiculo,
", la comuna con mayor volumen cartografiable es **", top1$nombre_comuna,
" (C", top1$comuna_id, ")**, con **", scales::comma(top1$viajes),
"** viajes, equivalentes al **", scales::percent(top1$porcentaje, accuracy = 0.1),
"** del total representado en el mapa. Las tres comunas principales son: ",
top3_texto, ". En conjunto concentran el **",
scales::percent(acumulado_top3, accuracy = 0.1),
"** de los viajes cartografiables. Esto evidencia ", lectura,
" y permite identificar las comunas ", accion, ".\n"
))
}
Los mapas de origen permiten identificar las comunas desde donde salen o se generan los viajes reportados en la encuesta. En este bloque primero se presenta el mapa general y luego los mapas filtrados por bicicleta, moto y automóvil.
res_origen_general <- resumir_por_comuna(encuesta, variable_comuna = "comuna_origen")
mapa_origen_general <- crear_datos_mapa(res_origen_general)
graficar_mapa(
mapa_origen_general,
titulo = "1. Mapa general de origen por comuna",
subtitulo = "Cantidad de viajes según comuna de origen. Incluye todos los tipos de vehículo registrados."
)
tabla_top_comunas(res_origen_general, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C02 - Comuna 2 | 2,968 | 10.6% |
| 2 | C19 - Comuna 19 | 2,850 | 10.2% |
| 3 | C17 - Comuna 17 | 2,377 | 8.5% |
| 4 | C03 - Comuna 3 | 2,121 | 7.6% |
| 5 | C18 - Comuna 18 | 1,536 | 5.5% |
| 6 | C04 - Comuna 4 | 1,493 | 5.3% |
| 7 | C10 - Comuna 10 | 1,401 | 5.0% |
| 8 | C13 - Comuna 13 | 1,238 | 4.4% |
| 9 | C15 - Comuna 15 | 1,171 | 4.2% |
| 10 | C22 - Comuna 22 | 1,153 | 4.1% |
En el mapa de origen general, la comuna con mayor volumen cartografiable es Comuna 2 (C02), con 2,968 viajes, equivalentes al 10.6% del total representado en el mapa. Las tres comunas principales son: Comuna 2 (C02: 2,968), Comuna 19 (C19: 2,850), Comuna 17 (C17: 2,377). En conjunto concentran el 29.2% de los viajes cartografiables. Esto evidencia una zona con alta generación de desplazamientos dentro de la encuesta y permite identificar las comunas desde donde se generan o salen más viajes.
res_origen_bicicleta <- resumir_por_comuna(
encuesta,
variable_comuna = "comuna_origen",
vehiculo = "Bicicleta"
)
mapa_origen_bicicleta <- crear_datos_mapa(res_origen_bicicleta)
graficar_mapa(
mapa_origen_bicicleta,
titulo = "2. Mapa de origen para bicicleta",
subtitulo = "Cantidad de viajes en bicicleta según comuna de origen."
)
tabla_top_comunas(res_origen_bicicleta, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C02 - Comuna 2 | 159 | 10.4% |
| 2 | C17 - Comuna 17 | 141 | 9.2% |
| 3 | C19 - Comuna 19 | 141 | 9.2% |
| 4 | C18 - Comuna 18 | 111 | 7.2% |
| 5 | C03 - Comuna 3 | 99 | 6.5% |
| 6 | C10 - Comuna 10 | 82 | 5.4% |
| 7 | C13 - Comuna 13 | 76 | 5.0% |
| 8 | C04 - Comuna 4 | 74 | 4.8% |
| 9 | C16 - Comuna 16 | 73 | 4.8% |
| 10 | C15 - Comuna 15 | 70 | 4.6% |
En el mapa de origen para Bicicleta, la comuna con mayor volumen cartografiable es Comuna 2 (C02), con 159 viajes, equivalentes al 10.4% del total representado en el mapa. Las tres comunas principales son: Comuna 2 (C02: 159), Comuna 17 (C17: 141), Comuna 19 (C19: 141). En conjunto concentran el 28.8% de los viajes cartografiables. Esto evidencia una zona con alta generación de desplazamientos dentro de la encuesta y permite identificar las comunas desde donde se generan o salen más viajes.
res_origen_moto <- resumir_por_comuna(
encuesta,
variable_comuna = "comuna_origen",
vehiculo = "Moto"
)
mapa_origen_moto <- crear_datos_mapa(res_origen_moto)
graficar_mapa(
mapa_origen_moto,
titulo = "3. Mapa de origen para moto",
subtitulo = "Cantidad de viajes en moto según comuna de origen."
)
tabla_top_comunas(res_origen_moto, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C02 - Comuna 2 | 1,414 | 10.8% |
| 2 | C19 - Comuna 19 | 1,280 | 9.8% |
| 3 | C17 - Comuna 17 | 1,136 | 8.7% |
| 4 | C03 - Comuna 3 | 970 | 7.4% |
| 5 | C18 - Comuna 18 | 746 | 5.7% |
| 6 | C04 - Comuna 4 | 720 | 5.5% |
| 7 | C10 - Comuna 10 | 675 | 5.1% |
| 8 | C13 - Comuna 13 | 554 | 4.2% |
| 9 | C08 - Comuna 8 | 552 | 4.2% |
| 10 | C15 - Comuna 15 | 536 | 4.1% |
En el mapa de origen para Moto, la comuna con mayor volumen cartografiable es Comuna 2 (C02), con 1,414 viajes, equivalentes al 10.8% del total representado en el mapa. Las tres comunas principales son: Comuna 2 (C02: 1,414), Comuna 19 (C19: 1,280), Comuna 17 (C17: 1,136). En conjunto concentran el 29.2% de los viajes cartografiables. Esto evidencia una zona con alta generación de desplazamientos dentro de la encuesta y permite identificar las comunas desde donde se generan o salen más viajes.
res_origen_automovil <- resumir_por_comuna(
encuesta,
variable_comuna = "comuna_origen",
vehiculo = "Automovil"
)
mapa_origen_automovil <- crear_datos_mapa(res_origen_automovil)
graficar_mapa(
mapa_origen_automovil,
titulo = "4. Mapa de origen para automóvil",
subtitulo = "Cantidad de viajes en automóvil según comuna de origen."
)
tabla_top_comunas(res_origen_automovil, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C19 - Comuna 19 | 1,165 | 10.7% |
| 2 | C02 - Comuna 2 | 1,121 | 10.3% |
| 3 | C17 - Comuna 17 | 899 | 8.3% |
| 4 | C03 - Comuna 3 | 854 | 7.9% |
| 5 | C18 - Comuna 18 | 559 | 5.1% |
| 6 | C04 - Comuna 4 | 551 | 5.1% |
| 7 | C10 - Comuna 10 | 529 | 4.9% |
| 8 | C22 - Comuna 22 | 489 | 4.5% |
| 9 | C13 - Comuna 13 | 486 | 4.5% |
| 10 | C15 - Comuna 15 | 456 | 4.2% |
En el mapa de origen para Automovil, la comuna con mayor volumen cartografiable es Comuna 19 (C19), con 1,165 viajes, equivalentes al 10.7% del total representado en el mapa. Las tres comunas principales son: Comuna 19 (C19: 1,165), Comuna 2 (C02: 1,121), Comuna 17 (C17: 899). En conjunto concentran el 29.3% de los viajes cartografiables. Esto evidencia una zona con alta generación de desplazamientos dentro de la encuesta y permite identificar las comunas desde donde se generan o salen más viajes.
Los mapas de destino permiten identificar las comunas hacia donde se dirigen los viajes reportados en la encuesta. En términos de movilidad, estas comunas pueden interpretarse como zonas de atracción de viajes, porque concentran llegada de personas.
res_destino_general <- resumir_por_comuna(encuesta, variable_comuna = "comuna_destino")
mapa_destino_general <- crear_datos_mapa(res_destino_general)
graficar_mapa(
mapa_destino_general,
titulo = "5. Mapa general de destino por comuna",
subtitulo = "Cantidad de viajes según comuna de destino. Incluye todos los tipos de vehículo registrados."
)
tabla_top_comunas(res_destino_general, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C02 - Comuna 2 | 4,810 | 17.3% |
| 2 | C03 - Comuna 3 | 3,859 | 13.8% |
| 3 | C19 - Comuna 19 | 3,158 | 11.3% |
| 4 | C17 - Comuna 17 | 2,164 | 7.8% |
| 5 | C22 - Comuna 22 | 1,860 | 6.7% |
| 6 | C04 - Comuna 4 | 1,856 | 6.7% |
| 7 | C09 - Comuna 9 | 1,279 | 4.6% |
| 8 | C08 - Comuna 8 | 1,025 | 3.7% |
| 9 | C10 - Comuna 10 | 927 | 3.3% |
| 10 | C07 - Comuna 7 | 748 | 2.7% |
En el mapa de destino general, la comuna con mayor volumen cartografiable es Comuna 2 (C02), con 4,810 viajes, equivalentes al 17.3% del total representado en el mapa. Las tres comunas principales son: Comuna 2 (C02: 4,810), Comuna 3 (C03: 3,859), Comuna 19 (C19: 3,158). En conjunto concentran el 42.4% de los viajes cartografiables. Esto evidencia una zona con alta atracción de desplazamientos dentro de la encuesta y permite identificar las comunas hacia donde llegan o se dirigen más viajes.
res_destino_bicicleta <- resumir_por_comuna(
encuesta,
variable_comuna = "comuna_destino",
vehiculo = "Bicicleta"
)
mapa_destino_bicicleta <- crear_datos_mapa(res_destino_bicicleta)
graficar_mapa(
mapa_destino_bicicleta,
titulo = "6. Mapa de destino para bicicleta",
subtitulo = "Cantidad de viajes en bicicleta según comuna de destino."
)
tabla_top_comunas(res_destino_bicicleta, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C02 - Comuna 2 | 218 | 15.8% |
| 2 | C03 - Comuna 3 | 189 | 13.7% |
| 3 | C19 - Comuna 19 | 147 | 10.7% |
| 4 | C17 - Comuna 17 | 115 | 8.3% |
| 5 | C22 - Comuna 22 | 100 | 7.2% |
| 6 | C04 - Comuna 4 | 85 | 6.2% |
| 7 | C09 - Comuna 9 | 65 | 4.7% |
| 8 | C08 - Comuna 8 | 54 | 3.9% |
| 9 | C10 - Comuna 10 | 43 | 3.1% |
| 10 | C05 - Comuna 5 | 41 | 3.0% |
En el mapa de destino para Bicicleta, la comuna con mayor volumen cartografiable es Comuna 2 (C02), con 218 viajes, equivalentes al 15.8% del total representado en el mapa. Las tres comunas principales son: Comuna 2 (C02: 218), Comuna 3 (C03: 189), Comuna 19 (C19: 147). En conjunto concentran el 40.1% de los viajes cartografiables. Esto evidencia una zona con alta atracción de desplazamientos dentro de la encuesta y permite identificar las comunas hacia donde llegan o se dirigen más viajes.
res_destino_moto <- resumir_por_comuna(
encuesta,
variable_comuna = "comuna_destino",
vehiculo = "Moto"
)
mapa_destino_moto <- crear_datos_mapa(res_destino_moto)
graficar_mapa(
mapa_destino_moto,
titulo = "7. Mapa de destino para moto",
subtitulo = "Cantidad de viajes en moto según comuna de destino."
)
tabla_top_comunas(res_destino_moto, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C02 - Comuna 2 | 2,177 | 17.1% |
| 2 | C03 - Comuna 3 | 1,734 | 13.6% |
| 3 | C19 - Comuna 19 | 1,421 | 11.2% |
| 4 | C17 - Comuna 17 | 927 | 7.3% |
| 5 | C22 - Comuna 22 | 911 | 7.2% |
| 6 | C04 - Comuna 4 | 846 | 6.6% |
| 7 | C09 - Comuna 9 | 608 | 4.8% |
| 8 | C08 - Comuna 8 | 470 | 3.7% |
| 9 | C10 - Comuna 10 | 419 | 3.3% |
| 10 | C07 - Comuna 7 | 353 | 2.8% |
En el mapa de destino para Moto, la comuna con mayor volumen cartografiable es Comuna 2 (C02), con 2,177 viajes, equivalentes al 17.1% del total representado en el mapa. Las tres comunas principales son: Comuna 2 (C02: 2,177), Comuna 3 (C03: 1,734), Comuna 19 (C19: 1,421). En conjunto concentran el 41.9% de los viajes cartografiables. Esto evidencia una zona con alta atracción de desplazamientos dentro de la encuesta y permite identificar las comunas hacia donde llegan o se dirigen más viajes.
res_destino_automovil <- resumir_por_comuna(
encuesta,
variable_comuna = "comuna_destino",
vehiculo = "Automovil"
)
mapa_destino_automovil <- crear_datos_mapa(res_destino_automovil)
graficar_mapa(
mapa_destino_automovil,
titulo = "8. Mapa de destino para automóvil",
subtitulo = "Cantidad de viajes en automóvil según comuna de destino."
)
tabla_top_comunas(res_destino_automovil, n = 10)
| ranking | comuna | viajes | participacion |
|---|---|---|---|
| 1 | C02 - Comuna 2 | 2,006 | 17.8% |
| 2 | C03 - Comuna 3 | 1,557 | 13.8% |
| 3 | C19 - Comuna 19 | 1,302 | 11.5% |
| 4 | C17 - Comuna 17 | 959 | 8.5% |
| 5 | C04 - Comuna 4 | 757 | 6.7% |
| 6 | C22 - Comuna 22 | 694 | 6.1% |
| 7 | C09 - Comuna 9 | 489 | 4.3% |
| 8 | C08 - Comuna 8 | 403 | 3.6% |
| 9 | C10 - Comuna 10 | 384 | 3.4% |
| 10 | C16 - Comuna 16 | 321 | 2.8% |
En el mapa de destino para Automovil, la comuna con mayor volumen cartografiable es Comuna 2 (C02), con 2,006 viajes, equivalentes al 17.8% del total representado en el mapa. Las tres comunas principales son: Comuna 2 (C02: 2,006), Comuna 3 (C03: 1,557), Comuna 19 (C19: 1,302). En conjunto concentran el 43.1% de los viajes cartografiables. Esto evidencia una zona con alta atracción de desplazamientos dentro de la encuesta y permite identificar las comunas hacia donde llegan o se dirigen más viajes.
La mayor concentración general de viajes de origen dentro de Cali se presenta en Comuna 2 (C02), con 2,968 viajes cartografiables. Esto permite identificarla como una de las principales zonas generadoras de desplazamientos de la encuesta.
La mayor concentración general de viajes de destino dentro de Cali se presenta en Comuna 2 (C02), con 4,810 viajes cartografiables. Esto permite interpretarla como una de las principales zonas atractoras de desplazamientos.
Al discriminar por tipo de vehículo, el patrón espacial permite observar si las zonas de mayor origen y destino cambian entre bicicleta, moto y automóvil. En bicicleta, el principal origen es Comuna 2 (C02) y el principal destino es Comuna 2 (C02).
Para moto, el principal origen es Comuna 2 (C02) y el principal destino es Comuna 2 (C02). La moto representa un volumen importante dentro de la encuesta, por lo que sus mapas son especialmente útiles para reconocer patrones de movilidad motorizada individual.
Para automóvil, el principal origen es Comuna 19 (C19) y el principal destino es Comuna 2 (C02). Este resultado ayuda a diferenciar el comportamiento del automóvil frente a otros modos de transporte.