## Reading layer `Comunas' from data source
## `/home/dtoro/Documents/Javeriana/Semestre 2/Análisis espacial/Unidad 1/Data/cali/Comunas.shx'
## 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
library(readxl)
encuesta <- read_excel("Data/EncuestaOrigenDestino.xlsx")
head(encuesta)
## # A tibble: 6 × 28
## FECHA `ID ESTACIÓN` ESTACIÓN ACCESO MOVIMIENTO
## <dttm> <dbl> <chr> <chr> <chr>
## 1 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 2 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 3 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 4 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 5 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## 6 2015-06-01 00:00:00 1 Avenida 6N X Calle 70N NORTE MOV 1
## # ℹ 23 more variables: `Hora de Encuesta` <dttm>, MUNICIPIO...7 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...8` <chr>,
## # `Codigo Origen_SDG` <chr>, `¿QUE ESTABA HACIENDO EN ESE LUGAR?` <dbl>,
## # MUNICIPIO...11 <chr>,
## # `DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN...12` <chr>,
## # `Codigo Destino_SDG` <chr>, `¿QUE VA HACER A ESE LUGAR?` <dbl>,
## # `ESTRATO EN SU VIVIENDA` <dbl>, …
# Se intenta convertir la columna "comuna origen" a numérico
encuesta$comunaorigen_num <- as.numeric(encuesta$`comuna origen`)
encuesta$comunadestino_num <- as.numeric(encuesta$`comuna destino`)
# Elimina las filas donde la conversión falló (es decir, donde hay NA)
encuesta <- encuesta[!is.na(encuesta$comunaorigen_num), ]
encuesta <- encuesta[!is.na(encuesta$comunadestino_num), ]
# Conteo del número de veces que aparece cada comuna en 'comunaorigen'
conteo_comunas <- as.data.frame(table(encuesta$`comuna origen`))
# Reemplazo del nombre de comuna por "conteo" para facilitar la interpretación
names(conteo_comunas) <- c("comuna", "conteo")
# Se debe convertir los nombres de comunas a numérico para poder realizar una unión posteriormente
comunas_sf$comuna <- as.numeric(comunas_sf$comuna)
conteo_comunas$comuna <- as.numeric(conteo_comunas$comuna)
# Se unen los conteos con el shapefile de las comunas
comunas_conteo_sf <- merge(comunas_sf, conteo_comunas, by = "comuna", all.x = TRUE)
head(comunas_conteo_sf)
## Simple feature collection with 6 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 872018.1 xmax: 1066866 ymax: 879441.5
## Projected CRS: MAGNA_Colombia_Cali
## comuna OBJECTID gid nombre conteo geometry
## 1 1 2 108 Comuna 1 557 POLYGON ((1054094 875172.8,...
## 2 2 1 107 Comuna 2 642 POLYGON ((1059648 874236.3,...
## 3 3 3 109 Comuna 3 2319 POLYGON ((1061757 874615.5,...
## 4 4 10 90 Comuna 4 1651 POLYGON ((1063833 877507.1,...
## 5 5 11 91 Comuna 5 1221 POLYGON ((1064821 877198.6,...
## 6 6 9 89 Comuna 6 538 POLYGON ((1065143 879409.5,...
# Graficar el mapa de calor utilizando el conteo de comunas
plot(comunas_conteo_sf["conteo"], main = "Mapa de Calor: Comuna Origen")
Este mapa muestra de dónde salen más viajes en la ciudad de Cali. Las comunas con más viajes tienen colores más intensos. Por ejemplo, la Comuna 3 tiene muchos viajes, lo que sugiere que es una zona con mucha actividad, mientras que las comunas más alejadas tienen menos viajes.
# Conversión del campo "comuna origen" a numérico
encuesta$`comuna origen` <- as.numeric(encuesta$`comuna origen`)
encuesta$`comuna destino` <- as.numeric(encuesta$`comuna destino`)
# Filtro por tipo de vehículo
bicicleta_data <- encuesta[encuesta$"TIPO DE VEHÍCULO" == 1, ]
moto_data <- encuesta[encuesta$"TIPO DE VEHÍCULO" == 2, ]
automovil_data <- encuesta[encuesta$"TIPO DE VEHÍCULO" == 3, ]
# Conteo las comunas para cada tipo de vehículo
conteo_bicicleta <- as.data.frame(table(bicicleta_data$`comuna origen`))
conteo_moto <- as.data.frame(table(moto_data$`comuna origen`))
conteo_automovil <- as.data.frame(table(automovil_data$`comuna origen`))
# Se renombran las columnas para mayor claridad
names(conteo_bicicleta) <- c("comuna", "conteo")
names(conteo_moto) <- c("comuna", "conteo")
names(conteo_automovil) <- c("comuna", "conteo")
# Se unen los conteos con el shapefile de comunas
comunas_bicicleta_sf <- merge(comunas_sf, conteo_bicicleta, by = "comuna", all.x = TRUE)
comunas_moto_sf <- merge(comunas_sf, conteo_moto, by = "comuna", all.x = TRUE)
comunas_automovil_sf <- merge(comunas_sf, conteo_automovil, by = "comuna", all.x = TRUE)
library(tmap)
tm_shape(comunas_bicicleta_sf) +
tm_polygons("conteo", title = "Bicicleta") +
tm_layout(title = "Mapa de Calor: Bicicleta - Comuna Origen")
tm_shape(comunas_moto_sf) +
tm_polygons("conteo", title = "Moto") +
tm_layout(title = "Mapa de Calor: Moto - Comuna Origen")
Es posible evidenciar cómo en las afueras de Cali tienen más personas que usan bicicletas para desplazarse. Esto podría ser porque en esas zonas hay menos transporte público o la gente prefiere usar bici por distancias cortas.
tm_shape(comunas_automovil_sf) +
tm_polygons("conteo", title = "Automóvil") +
tm_layout(title = "Mapa de Calor: Automóvil - Comuna Origen")
Las motos están distribuidas por varias comunas, tanto en el centro como en las afueras. Esto indica que la moto es popular en toda la ciudad, no solo en un área específica.
# Se intenta convertir la columna "comuna origen" a numérico
encuesta$comunadestino_num <- as.numeric(encuesta$`comuna destino`)
# Elimina las filas donde la conversión falló (es decir, donde hay NA)
encuesta <- encuesta[!is.na(encuesta$comunadestino_num), ]
# Conteo del número de veces que aparece cada comuna en 'comuna destino'
conteo_comunas_destino <- as.data.frame(table(encuesta$`comuna destino`))
# Reemplazo del nombre de comuna por "conteo" para facilitar la interpretación
names(conteo_comunas_destino) <- c("comuna", "conteo")
# Se debe convertir los nombres de comunas a numérico para poder realizar una unión posteriormente
conteo_comunas_destino$comuna <- as.numeric(conteo_comunas_destino$comuna)
# Unir los conteos de los destinos con el shapefile de las comunas
comunas_conteo_destino_sf <- merge(comunas_sf, conteo_comunas_destino, by = "comuna", all.x = TRUE)
head(comunas_conteo_destino_sf)
## Simple feature collection with 6 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 872018.1 xmax: 1066866 ymax: 879441.5
## Projected CRS: MAGNA_Colombia_Cali
## comuna OBJECTID gid nombre conteo geometry
## 1 1 2 108 Comuna 1 686 POLYGON ((1054094 875172.8,...
## 2 2 1 107 Comuna 2 190 POLYGON ((1059648 874236.3,...
## 3 3 3 109 Comuna 3 3876 POLYGON ((1061757 874615.5,...
## 4 4 10 90 Comuna 4 2974 POLYGON ((1063833 877507.1,...
## 5 5 11 91 Comuna 5 1528 POLYGON ((1064821 877198.6,...
## 6 6 9 89 Comuna 6 448 POLYGON ((1065143 879409.5,...
# Graficar el mapa de calor utilizando el conteo de comunas destino
plot(comunas_conteo_destino_sf["conteo"], main = "Mapa de Calor: Comuna Destino")
Nuevamente, la Comuna 3 destaca como una de las zonas más activas, ya que muchas personas se dirigen hacia allí. Las comunas más alejadas tienen menos viajes como destino.
# Contar las comunas para cada tipo de vehículo
conteo_destino_bicicleta <- as.data.frame(table(bicicleta_data$`comuna destino`))
conteo_destino_moto <- as.data.frame(table(moto_data$`comuna destino`))
conteo_destino_automovil <- as.data.frame(table(automovil_data$`comuna destino`))
# Renombrar las columnas para mayor claridad
names(conteo_destino_bicicleta) <- c("comuna", "conteo")
names(conteo_destino_moto) <- c("comuna", "conteo")
names(conteo_destino_automovil) <- c("comuna", "conteo")
# Se unen los conteos con el shapefile de comunas
comunas_destino_bicicleta_sf <- merge(comunas_sf, conteo_destino_bicicleta, by = "comuna", all.x = TRUE)
comunas_destino_moto_sf <- merge(comunas_sf, conteo_destino_moto, by = "comuna", all.x = TRUE)
comunas_destino_automovil_sf <- merge(comunas_sf, conteo_destino_automovil, by = "comuna", all.x = TRUE)
tm_shape(comunas_destino_bicicleta_sf) +
tm_polygons("conteo", title = "Bicicleta") +
tm_layout(title = "Mapa de Calor: Bicicleta - Comuna Destino")
Las comunas en las afueras, como en el caso de los orígenes, son donde más personas terminan sus recorridos en bicicleta. Esto sugiere que los viajes en bicicleta son más comunes en zonas alejadas del centro.
tm_shape(comunas_destino_moto_sf) +
tm_polygons("conteo", title = "Moto") +
tm_layout(title = "Mapa de Calor: Moto - Comuna Destino")
Al igual que con los orígenes, las motos se distribuyen bastante entre varias comunas, tanto en las áreas centrales como en las periferias. Esto confirma que la moto es un medio de transporte popular en toda la ciudad.
tm_shape(comunas_destino_automovil_sf) +
tm_polygons("conteo", title = "Automóvil") +
tm_layout(title = "Mapa de Calor: Automóvil - Comuna Destino")
Similar al caso de las motos, los destinos están bastante distribuidos entre diferentes comunas, lo que muestra que el automóvil es un medio de transporte común en muchas áreas de Cali.
Las comunas más noroccidentales de la ciudad, como la Comuna 2, 3 y la 4, presentan los mayores conteos tanto de orígen como de destino de viajes, lo que sugiere que estas zonas actúan como nodos principales de transporte en la ciudad.
Los mapas de calor muestran que los diferentes tipos de vehículos tienen patrones de uso distintos. Por ejemplo, las bicicletas parecen concentrarse en ciertas comunas más periféricas, mientras que las motos y automóviles se distribuyen de una forma más igual entre las comunas.
La integración de datos geográficos (shapefiles) con información de encuestas permite visualizar mejor patrones de movilidad y facilita la identificación de áreas prioritarias para posibles intervenciones en transporte público o infraestructura vial.