library(sf)
library(sp)
library(dplyr)
library(ggplot2)
library(readxl)
library(xfun)
library(tidyr)
# Verifica nombres de columnas si da error
colnames(EncuestaOrigenDestino)
## [1] "FECHA"
## [2] "ID ESTACIÓN"
## [3] "ESTACIÓN"
## [4] "ACCESO"
## [5] "MOVIMIENTO"
## [6] "Hora de Encuesta"
## [7] "MUNICIPIO...7"
## [8] "DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8"
## [9] "Codigo Origen_SDG"
## [10] "¿QUE ESTABA HACIENDO EN ESE LUGAR?"
## [11] "MUNICIPIO...11"
## [12] "DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12"
## [13] "Codigo Destino_SDG"
## [14] "¿QUE VA HACER A ESE LUGAR?"
## [15] "ESTRATO EN SU VIVIENDA"
## [16] "¿DISPONIA DE UN VEHÍCULO PARA REALIZAR ESTE DESPLAZAMIENTO?"
## [17] "OTRO ¿CUÁL?...17"
## [18] "ANTES"
## [19] "DESPUES"
## [20] "EDAD"
## [21] "SEXO"
## [22] "PERSONAS EN EL VEHÍCULO"
## [23] "TIPO DE VEHÍCULO"
## [24] "OTRO ¿CUÁL?...24"
## [25] "TIPO DE VIAJERO"
## [26] "comuna origen"
## [27] "comuna destino"
## [28] "Intracomuna"
# Selección de columnas de interés (asegúrate que los nombres estén bien escritos y sin errores)
datos <- EncuestaOrigenDestino[, c("TIPO DE VEHÍCULO", "comuna origen", "comuna destino")]
# Verificar los primeros registros seleccionados
head(datos)
## # A tibble: 6 × 3
## `TIPO DE VEHÍCULO` `comuna origen` `comuna destino`
## <dbl> <chr> <chr>
## 1 2 02 22
## 2 3 Fuera de Cali 19
## 3 2 Fuera de Cali 03
## 4 2 Fuera de Cali 09
## 5 2 Fuera de Cali 02
## 6 3 Fuera de Cali 02
comunas <- st_read("C:/Users/Fabio/OneDrive/Desktop/Analisis de informacion geografica y espacial/Casos/cali/Comunas.shp")
## Reading layer `Comunas' from data source
## `C:\Users\Fabio\OneDrive\Desktop\Analisis de informacion geografica y espacial\Casos\cali\Comunas.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 22 features and 4 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 860190.2 xmax: 1068492 ymax: 879441.5
## Projected CRS: MAGNA_Colombia_Cali
ggplot(comunas) +
geom_sf(fill = "seashell", color = "black") +
theme_minimal() +
labs(title = "Mapa de Comunas")
# Filtrar filas que NO contienen "Fuera de cali" en comuna origen ni comuna destino
datos_filtrados <- datos %>%
dplyr::select(`TIPO DE VEHÍCULO`, `comuna origen`, `comuna destino`) %>%
filter(`comuna origen` != "Fuera de Cali" & `comuna destino` != "Fuera de Cali")
head(datos_filtrados)
## # A tibble: 6 × 3
## `TIPO DE VEHÍCULO` `comuna origen` `comuna destino`
## <dbl> <chr> <chr>
## 1 2 02 22
## 2 2 06 02
## 3 3 06 04
## 4 3 03 02
## 5 3 04 02
## 6 3 06 02
# Calcular viajes por comuna de orige
viajes_origen <-
datos_filtrados %>%
count(`comuna origen`) %>%
mutate(`comuna origen` = as.double(`comuna origen`)) %>%
filter(`comuna origen` != 0 & !is.na(`comuna origen`)) %>%
rename(comuna_origen = `comuna origen`,
viajes_origen = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_origen, by = c("comuna" = "comuna_origen"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_origen)) +
scale_fill_viridis_c(option = "plasma", na.value = "white") +
labs(title = "Viajes de origen por Comuna", fill = "N° de Viajes") +
theme_minimal()
# Calcular viajes por comuna de destino
viajes_destino <-
datos_filtrados %>%
count(`comuna destino`) %>%
mutate(`comuna destino` = as.double(`comuna destino`)) %>%
filter(`comuna destino` != 0 & !is.na(`comuna destino`)) %>%
rename(comuna_destino = `comuna destino`,
viajes_destino = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_destino, by = c("comuna" = "comuna_destino"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_destino)) +
scale_fill_viridis_c(option = "turbo", na.value = "white") +
labs(title = "Viajes de destino por Comuna", fill = "N° de Viajes") +
theme_minimal()
# Filtrar solo registros para bicicletas (tipo 1)
datos_tipo1 <- datos_filtrados %>%
filter(`TIPO DE VEHÍCULO` == 1)
# Viajes por comuna de origen en Bicicleta
viajes_origen <-
datos_tipo1 %>%
count(`comuna origen`) %>%
mutate(`comuna origen` = as.double(`comuna origen`)) %>%
filter(`comuna origen` != 0 & !is.na(`comuna origen`)) %>%
rename(comuna_origen = `comuna origen`,
viajes_origen = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_origen, by = c("comuna" = "comuna_origen"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_origen)) +
scale_fill_viridis_c(option = "plasma", na.value = "white") +
labs(title = "Viajes de origen por comuna en bicicleta", fill = "N° de Viajes") +
theme_minimal()
# Viajes por comuna de destino en Bicicleta
viajes_destino <-
datos_tipo1 %>%
count(`comuna destino`) %>%
mutate(`comuna destino` = as.double(`comuna destino`)) %>%
filter(`comuna destino` != 0 & !is.na(`comuna destino`)) %>%
rename(comuna_destino = `comuna destino`,
viajes_destino = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_destino, by = c("comuna" = "comuna_destino"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_destino)) +
scale_fill_viridis_c(option = "turbo", na.value = "white") +
labs(title = "Viajes de destino por comuna en bicicleta", fill = "N° de Viajes") +
theme_minimal()
# Filtrar solo registros para moto (tipo 2)
datos_tipo2 <- datos_filtrados %>%
filter(`TIPO DE VEHÍCULO` == 2)
# Viajes por comuna de origen en Moto
viajes_origen <-
datos_tipo2 %>%
count(`comuna origen`) %>%
mutate(`comuna origen` = as.double(`comuna origen`)) %>%
filter(`comuna origen` != 0 & !is.na(`comuna origen`)) %>%
rename(comuna_origen = `comuna origen`,
viajes_origen = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_origen, by = c("comuna" = "comuna_origen"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_origen)) +
scale_fill_viridis_c(option = "plasma", na.value = "white") +
labs(title = "Viajes de origen por comuna en Moto", fill = "N° de Viajes") +
theme_minimal()
# Viajes por comuna de destino en moto
viajes_destino <-
datos_tipo2 %>%
count(`comuna destino`) %>%
mutate(`comuna destino` = as.double(`comuna destino`)) %>%
filter(`comuna destino` != 0 & !is.na(`comuna destino`)) %>%
rename(comuna_destino = `comuna destino`,
viajes_destino = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_destino, by = c("comuna" = "comuna_destino"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_destino)) +
scale_fill_viridis_c(option = "turbo", na.value = "white") +
labs(title = "Viajes de destino por comuna en moto", fill = "N° de Viajes") +
theme_minimal()
# Filtrar solo registros para automovil (tipo 3)
datos_tipo3 <- datos_filtrados %>%
filter(`TIPO DE VEHÍCULO` == 3)
# Viajes por comuna de origen en Automovil
viajes_origen <-
datos_tipo3 %>%
count(`comuna origen`) %>%
mutate(`comuna origen` = as.double(`comuna origen`)) %>%
filter(`comuna origen` != 0 & !is.na(`comuna origen`)) %>%
rename(comuna_origen = `comuna origen`,
viajes_origen = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_origen, by = c("comuna" = "comuna_origen"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_origen)) +
scale_fill_viridis_c(option = "plasma", na.value = "white") +
labs(title = "Viajes de origen por comuna en Automovil", fill = "N° de Viajes") +
theme_minimal()
# Viajes por comuna de origen en Automovil
viajes_origen <-
datos_tipo3 %>%
count(`comuna origen`) %>%
mutate(`comuna origen` = as.double(`comuna origen`)) %>%
filter(`comuna origen` != 0 & !is.na(`comuna origen`)) %>%
rename(comuna_origen = `comuna origen`,
viajes_origen = n)
# Asegurar que la columna de emparejamiento es numérica
comunas_sf <- comunas %>%
mutate(comuna = as.double(comuna)) %>%
left_join(viajes_origen, by = c("comuna" = "comuna_origen"))
# Graficar con ggplot2
ggplot(comunas_sf) +
geom_sf(aes(fill = viajes_origen)) +
scale_fill_viridis_c(option = "turbo", na.value = "white") +
labs(title = "Viajes de destino en Automovil", fill = "N° de Viajes") +
theme_minimal()
El análisis espacial realizado sobre los viajes en la ciudad de Cali, según los datos de la Encuesta Origen-Destino, permitió identificar la distribución geográfica del origen y destino de los desplazamientos según el tipo de vehículo (bicicleta, moto, automóvil). Los mapas generados muestran con claridad que las comunas con mayor cantidad de viajes de origen y destino se concentran principalmente en zonas como la comuna 2, 17, 19 y 22, que corresponden a sectores con una mayor actividad económica y mejores infraestructuras viales.
Para los viajes en bicicleta, se observa una mayor intensidad en comunas centrales, posiblemente relacionadas con el uso recreativo o la cercanía a zonas universitarias o laborales.
En cuanto a los viajes en moto y automóvil, se evidencia una distribución más amplia, incluyendo comunas periféricas, lo cual refleja una dependencia motorizada para cubrir distancias mayores o falta de alternativas de transporte público eficientes.
La representación espacial de los viajes permite inferir patrones de movilidad urbana y desigualdad territorial. Las comunas con mayor número de viajes suelen coincidir con áreas de mayor desarrollo socioeconómico y oferta de servicios, mientras que las periferias muestran una menor participación, posiblemente por limitaciones de acceso o condiciones socioeconómicas. Este tipo de análisis es fundamental para planificar políticas públicas enfocadas en la movilidad sostenible, la mejora de infraestructura vial y la equidad territorial en el acceso a oportunidades en la ciudad