1 Contexto del análisis

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. Las comunas desde donde se genera la mayor cantidad de viajes, es decir, las comunas de origen.
  2. Las comunas hacia donde se dirige la mayor cantidad de viajes, es decir, las comunas de destino.
  3. La distribución espacial de los viajes discriminada por tres tipos de vehículo:
    • 1: Bicicleta.
    • 2: Moto.
    • 3: Automóvil.

El resultado principal son ocho mapas temáticos:

  1. Mapa general de origen.
  2. Mapa de origen para bicicleta.
  3. Mapa de origen para moto.
  4. Mapa de origen para automóvil.
  5. Mapa general de destino.
  6. Mapa de destino para bicicleta.
  7. Mapa de destino para moto.
  8. Mapa de destino para automóvil.

2 Carga de datos

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

3 Exploración inicial de la información

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

4 Limpieza y preparación de variables

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
  )

5 Validación de calidad de datos

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

6 Funciones para agregación de mapas

Para evitar código repetido, se crean funciones que permiten:

  1. Agregar registros por comuna.
  2. Unir el resultado con el shapefile.
  3. Crear el mapa temático.
  4. Generar una interpretación automática del resultado.
  5. Presentar una tabla con las comunas de mayor volumen.
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"
  ))
}

7 Mapas de origen

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.

7.1 Mapa general de origen

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

7.2 Mapa de origen para bicicleta

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

7.3 Mapa de origen para moto

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

7.4 Mapa de origen para automóvil

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

8 Mapas de destino

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.

8.1 Mapa general de destino

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

8.2 Mapa de destino para bicicleta

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

8.3 Mapa de destino para moto

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

8.4 Mapa de destino para automóvil

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)
Top 10 comunas con mayor cantidad de viajes cartografiables
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.

9 Conclusiones generales

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

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

  3. 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).

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

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