# Cargar la librería readxl
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
# Cargar los datos desde un archivo Excel
encuesta_origen_destino <- read_excel("C:/Users/Daniel Restrepo/Desktop/Casos/EncuestaOrigenDestino.xlsx", sheet = "Sheet4")
# Cargar las librerías
library(sf)
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(leaflet)
## Warning: package 'leaflet' was built under R version 4.3.3
# Paso 1: Cargar el shapefile de las comunas de Cali
comunas_cali <- st_read("C:/Users/Daniel Restrepo/Desktop/Casos/mc_comunas.shp")
## Reading layer `mc_comunas' from data source
## `C:\Users\Daniel Restrepo\Desktop\Casos\mc_comunas.shp' using driver `ESRI Shapefile'
## Simple feature collection with 22 features and 4 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1054753 ymin: 860192.1 xmax: 1068492 ymax: 879441.5
## Projected CRS: MAGNA-SIRGAS / Cali urban grid
# Paso 2: Verificar el sistema de coordenadas (CRS actual)
st_crs(comunas_cali)
## Coordinate Reference System:
## User input: MAGNA-SIRGAS / Cali urban grid
## wkt:
## PROJCRS["MAGNA-SIRGAS / Cali urban grid",
## BASEGEOGCRS["MAGNA-SIRGAS",
## DATUM["Marco Geocentrico Nacional de Referencia",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]]],
## CONVERSION["unnamed",
## METHOD["Transverse Mercator",
## ID["EPSG",9807]],
## PARAMETER["Latitude of natural origin",3.44188333333333,
## 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["m",1],
## ID["EPSG",8806]],
## PARAMETER["False northing",872364.63,
## LENGTHUNIT["m",1],
## ID["EPSG",8807]]],
## CS[Cartesian,2],
## AXIS["x",east,
## ORDER[1],
## LENGTHUNIT["m",1]],
## AXIS["y",north,
## ORDER[2],
## LENGTHUNIT["m",1]],
## ID["EPSG",6249]]
# Paso 3: Transformar el sistema de coordenadas al sistema WGS 84 (EPSG:4326) para leaflet
comunas_cali_wgs84 <- st_transform(comunas_cali, crs = 4326)
# Paso 4: Calcular los centroides de las comunas en el nuevo sistema de coordenadas
centroides_comunas <- st_centroid(comunas_cali_wgs84)
## Warning: st_centroid assumes attributes are constant over geometries
# Paso 5: Extraer latitud y longitud de los centroides
centroides_comunas <- centroides_comunas %>%
mutate(longitud = st_coordinates(.)[,1], latitud = st_coordinates(.)[,2])
# Paso 6: Cargar los datos de la encuesta de origen y agrupar los orígenes por comuna
# Supongo que ya cargaste tus datos de origen de la encuesta en un dataframe llamado "encuesta_origen_destino"
# Aquí está el ejemplo:
# encuesta_origen_destino <- read_excel("C:/Users/Daniel Restrepo/Desktop/Casos/EncuestaOrigenDestino.xlsx", sheet = "Sheet4")
# Agrupar los datos de origen por comuna
origen_general <- encuesta_origen_destino %>%
group_by(comunaorigen) %>%
summarise(total_origenes = n())
# Convertir la columna comunaorigen a tipo entero para asegurar la unión correcta
origen_general$comunaorigen <- as.integer(origen_general$comunaorigen)
## Warning: NAs introducidos por coerción
# Paso 7: Unir los centroides con los datos de origen
centroides_origen <- centroides_comunas %>%
left_join(origen_general, by = c("comuna" = "comunaorigen"))
# Paso 8: Crear el mapa de puntos con los centroides y el número de orígenes
mapa_origen_general <- leaflet(centroides_origen) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud, # Coordenadas de los puntos (centroides transformados)
radius = 10, # Tamaño fijo de los puntos
color = "blue", # Color de los puntos
fillOpacity = 0.7, # Opacidad del relleno
label = ~paste("Comuna:", comuna, "<br>Total Orígenes:", total_origenes), # Texto emergente con el total de orígenes
labelOptions = labelOptions(noHide = TRUE, # Mostrar el texto de manera permanente
direction = 'center', # Centrar el texto en el punto
textOnly = TRUE, # Solo el texto, sin borde
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos por Comuna",
values = centroides_origen$total_origenes,
colors = "blue", labels = "Orígenes")
# Paso 9: Mostrar el mapa
mapa_origen_general
# Agrupar los datos de origen para bicicleta (TIPODEVEHÍCULO == 1)
origen_bicicleta <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 1) %>%
group_by(comunaorigen) %>%
summarise(total_bicicleta = n())
# Agrupar los datos de origen para moto (TIPODEVEHÍCULO == 2)
origen_moto <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 2) %>%
group_by(comunaorigen) %>%
summarise(total_moto = n())
# Agrupar los datos de origen para automóvil (TIPODEVEHÍCULO == 3)
origen_automovil <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 3) %>%
group_by(comunaorigen) %>%
summarise(total_automovil = n())
# Convertir la columna comunaorigen a entero
origen_bicicleta$comunaorigen <- as.integer(origen_bicicleta$comunaorigen)
## Warning: NAs introducidos por coerción
origen_moto$comunaorigen <- as.integer(origen_moto$comunaorigen)
## Warning: NAs introducidos por coerción
origen_automovil$comunaorigen <- as.integer(origen_automovil$comunaorigen)
## Warning: NAs introducidos por coerción
# Unir los datos de bicicleta con los centroides
centroides_bicicleta <- centroides_comunas %>%
left_join(origen_bicicleta, by = c("comuna" = "comunaorigen"))
# Unir los datos de moto con los centroides
centroides_moto <- centroides_comunas %>%
left_join(origen_moto, by = c("comuna" = "comunaorigen"))
# Unir los datos de automóvil con los centroides
centroides_automovil <- centroides_comunas %>%
left_join(origen_automovil, by = c("comuna" = "comunaorigen"))
# Crear el mapa de puntos para bicicleta
mapa_bicicleta <- leaflet(centroides_bicicleta) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud,
radius = 10,
color = "green", # Color verde para bicicleta
fillOpacity = 0.7,
label = ~paste("Comuna:", comuna, "<br>Total Bicicleta:", total_bicicleta),
labelOptions = labelOptions(noHide = TRUE,
direction = 'center',
textOnly = TRUE,
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos en Bicicleta",
values = centroides_bicicleta$total_bicicleta,
colors = "green", labels = "Bicicleta")
# Mostrar el mapa de bicicleta
mapa_bicicleta
# Crear el mapa de puntos para moto
mapa_moto <- leaflet(centroides_moto) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud,
radius = 10,
color = "orange", # Color naranja para moto
fillOpacity = 0.7,
label = ~paste("Comuna:", comuna, "<br>Total Moto:", total_moto),
labelOptions = labelOptions(noHide = TRUE,
direction = 'center',
textOnly = TRUE,
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos en Moto",
values = centroides_moto$total_moto,
colors = "orange", labels = "Moto")
# Mostrar el mapa de moto
mapa_moto
# Crear el mapa de puntos para automóvil
mapa_automovil <- leaflet(centroides_automovil) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud,
radius = 10,
color = "blue", # Color azul para automóvil
fillOpacity = 0.7,
label = ~paste("Comuna:", comuna, "<br>Total Automóvil:", total_automovil),
labelOptions = labelOptions(noHide = TRUE,
direction = 'center',
textOnly = TRUE,
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos en Automóvil",
values = centroides_automovil$total_automovil,
colors = "blue", labels = "Automóvil")
# Mostrar el mapa de automóvil
mapa_automovil
# Agrupar los datos de destino por comuna
destino_general <- encuesta_origen_destino %>%
group_by(comunadestino) %>%
summarise(total_destinos = n())
# Convertir la columna comunadestino a tipo entero para asegurar la unión correcta
destino_general$comunadestino <- as.integer(destino_general$comunadestino)
## Warning: NAs introducidos por coerción
# Unir los centroides con los datos de destino
centroides_destino <- centroides_comunas %>%
left_join(destino_general, by = c("comuna" = "comunadestino"))
# Crear el mapa de puntos para destino general
mapa_destino_general <- leaflet(centroides_destino) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud,
radius = 10,
color = "purple", # Color para destino general
fillOpacity = 0.7,
label = ~paste("Comuna:", comuna, "<br>Total Destinos:", total_destinos),
labelOptions = labelOptions(noHide = TRUE,
direction = 'center',
textOnly = TRUE,
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos por Comuna (Destino)",
values = centroides_destino$total_destinos,
colors = "purple", labels = "Destinos")
# Mostrar el mapa de destino general
mapa_destino_general
# Agrupar los datos de destino para bicicleta (TIPODEVEHÍCULO == 1)
destino_bicicleta <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 1) %>%
group_by(comunadestino) %>%
summarise(total_bicicleta = n())
# Convertir la columna comunadestino a tipo entero
destino_bicicleta$comunadestino <- as.integer(destino_bicicleta$comunadestino)
## Warning: NAs introducidos por coerción
# Unir los centroides con los datos de destino de bicicleta
centroides_bicicleta <- centroides_comunas %>%
left_join(destino_bicicleta, by = c("comuna" = "comunadestino"))
# Crear el mapa de puntos para destino en bicicleta
mapa_destino_bicicleta <- leaflet(centroides_bicicleta) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud,
radius = 10,
color = "green", # Color verde para bicicleta
fillOpacity = 0.7,
label = ~paste("Comuna:", comuna, "<br>Total Bicicleta:", total_bicicleta),
labelOptions = labelOptions(noHide = TRUE,
direction = 'center',
textOnly = TRUE,
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos en Bicicleta (Destino)",
values = centroides_bicicleta$total_bicicleta,
colors = "green", labels = "Bicicleta")
# Mostrar el mapa de destino en bicicleta
mapa_destino_bicicleta
# Agrupar los datos de destino para moto (TIPODEVEHÍCULO == 2)
destino_moto <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 2) %>%
group_by(comunadestino) %>%
summarise(total_moto = n())
# Convertir la columna comunadestino a tipo entero
destino_moto$comunadestino <- as.integer(destino_moto$comunadestino)
## Warning: NAs introducidos por coerción
# Unir los centroides con los datos de destino de moto
centroides_moto <- centroides_comunas %>%
left_join(destino_moto, by = c("comuna" = "comunadestino"))
# Crear el mapa de puntos para destino en moto
mapa_destino_moto <- leaflet(centroides_moto) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud,
radius = 10,
color = "orange", # Color naranja para moto
fillOpacity = 0.7,
label = ~paste("Comuna:", comuna, "<br>Total Moto:", total_moto),
labelOptions = labelOptions(noHide = TRUE,
direction = 'center',
textOnly = TRUE,
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos en Moto (Destino)",
values = centroides_moto$total_moto,
colors = "orange", labels = "Moto")
# Mostrar el mapa de destino en moto
mapa_destino_moto
# Agrupar los datos de destino para automóvil (TIPODEVEHÍCULO == 3)
destino_automovil <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 3) %>%
group_by(comunadestino) %>%
summarise(total_automovil = n())
# Convertir la columna comunadestino a tipo entero
destino_automovil$comunadestino <- as.integer(destino_automovil$comunadestino)
## Warning: NAs introducidos por coerción
# Unir los centroides con los datos de destino de automóvil
centroides_automovil <- centroides_comunas %>%
left_join(destino_automovil, by = c("comuna" = "comunadestino"))
# Crear el mapa de puntos para destino en automóvil
mapa_destino_automovil <- leaflet(centroides_automovil) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud,
radius = 10,
color = "blue", # Color azul para automóvil
fillOpacity = 0.7,
label = ~paste("Comuna:", comuna, "<br>Total Automóvil:", total_automovil),
labelOptions = labelOptions(noHide = TRUE,
direction = 'center',
textOnly = TRUE,
style = list("font-weight" = "bold", "color" = "black"))) %>%
addLegend(position = "bottomright", title = "Trayectos en Automóvil (Destino)",
values = centroides_automovil$total_automovil,
colors = "blue", labels = "Automóvil")
# Mostrar el mapa de destino en automóvil
mapa_destino_automovil
# Agrupar los datos de origen y destino por comuna y tipo de vehículo
# Orígenes generales
origen_general <- encuesta_origen_destino %>%
group_by(comunaorigen) %>%
summarise(total_origenes = n())
# Destinos generales
destino_general <- encuesta_origen_destino %>%
group_by(comunadestino) %>%
summarise(total_destinos = n())
# Orígenes en bicicleta
origen_bicicleta <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 1) %>%
group_by(comunaorigen) %>%
summarise(origen_bicicleta = n())
# Destinos en bicicleta
destino_bicicleta <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 1) %>%
group_by(comunadestino) %>%
summarise(destino_bicicleta = n())
# Orígenes en moto
origen_moto <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 2) %>%
group_by(comunaorigen) %>%
summarise(origen_moto = n())
# Destinos en moto
destino_moto <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 2) %>%
group_by(comunadestino) %>%
summarise(destino_moto = n())
# Orígenes en automóvil
origen_automovil <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 3) %>%
group_by(comunaorigen) %>%
summarise(origen_automovil = n())
# Destinos en automóvil
destino_automovil <- encuesta_origen_destino %>%
filter(TIPODEVEHÍCULO == 3) %>%
group_by(comunadestino) %>%
summarise(destino_automovil = n())
# Unir todas las tablas en una sola tabla resumen
tabla_resumen <- origen_general %>%
left_join(destino_general, by = c("comunaorigen" = "comunadestino")) %>%
left_join(origen_bicicleta, by = "comunaorigen") %>%
left_join(destino_bicicleta, by = c("comunaorigen" = "comunadestino")) %>%
left_join(origen_moto, by = "comunaorigen") %>%
left_join(destino_moto, by = c("comunaorigen" = "comunadestino")) %>%
left_join(origen_automovil, by = "comunaorigen") %>%
left_join(destino_automovil, by = c("comunaorigen" = "comunadestino"))
# Cambiar los nombres de las columnas para que queden claros
colnames(tabla_resumen) <- c("Comuna", "Total Orígenes", "Total Destinos",
"Orígenes en Bicicleta", "Destinos en Bicicleta",
"Orígenes en Moto", "Destinos en Moto",
"Orígenes en Automóvil", "Destinos en Automóvil")
# Mostrar la tabla resumen
tabla_resumen
## # A tibble: 24 × 9
## Comuna `Total Orígenes` `Total Destinos` `Orígenes en Bicicleta`
## <chr> <int> <int> <int>
## 1 0 672 788 43
## 2 01 794 230 36
## 3 02 2968 4810 159
## 4 03 2121 3859 99
## 5 04 1493 1856 74
## 6 05 664 522 38
## 7 06 998 716 44
## 8 07 734 748 35
## 9 08 1124 1025 52
## 10 09 952 1279 53
## # ℹ 14 more rows
## # ℹ 5 more variables: `Destinos en Bicicleta` <int>, `Orígenes en Moto` <int>,
## # `Destinos en Moto` <int>, `Orígenes en Automóvil` <int>,
## # `Destinos en Automóvil` <int>
Distribución general de los trayectos : Al analizar los datos de los trayectos de orígenes y destinos por comuna, observé que la Comuna 02 es la que presenta el mayor número de orígenes (2968) y destinos (4810) , lo que la convierte en un punto estratégico para la movilidad en la ciudad. Esta comuna actúa como un nodo importante tanto para la salida como para la llegada de trayectos. De manera similar, la Comuna 03 también tiene una alta cantidad de trayectos, con 2121 orígenes y 3859 destinos , lo que sugiere una alta interacción entre esta zona y otras comunas.
Además, es relevante destacar el papel de las conexiones Fuera de Cali , donde se registran 6306 orígenes y 6400 destinos . Esto pone de manifiesto la importancia de los trayectos intermunicipales o interregionales, lo que refleja una dinámica de movilidad más allá de los límites de la ciudad.
Uso de bicicletas : En cuanto al uso de la bicicleta , observé que su incidencia es baja en comparación con otros medios de transporte, aunque hay comunas donde se utiliza con mayor frecuencia. Por ejemplo:
En la Comuna 19 , se registraron 141 orígenes y 147 destinos en bicicleta , lo que sugiere una cultura activa de movilidad en esta zona. También en la Comuna 17 , se detectó un uso significativo de bicicletas, con 141 orígenes y 115 destinos . A pesar de no ser el medio de transporte predominante, estas comunas parecen favorecer la movilidad en bicicleta. Uso de motocicletas : La motocicleta aparece como uno de los medios de transporte más utilizados. Las comunas con mayor uso de motos son:
Fuera de Cali , con 2706 orígenes y 2961 destinos en moto , lo que subraya la alta dependencia de este medio en trayectos intermunicipales. La Comuna 19 , con 1280 orígenes y 1421 destinos , también demuestra una alta preferencia por este medio de transporte. En general, la moto es un elemento clave en la movilidad de casi todas las comunas, reflejando una tendencia de transporte rápido y accesible en varias zonas de la ciudad y sus alrededores.
Movilidad hacia y desde otras comunas : Observé que algunas comunas, como la 02, 03, 19 y los trayectos Fuera de Cali , tienen volúmenes particularmente altos de trayectos. Esto sugiere que estas zonas sirven como puntos clave de conectividad, probablemente debido a su ubicación estratégica oa la concentración de actividades comerciales y residenciales.
Desequilibrio entre orígenes y destinos : En varias comunas se evidencia una diferencia significativa entre el número de orígenes y destinos. Por ejemplo:
En la Comuna 02 , hay más destinos (4810) que orígenes (2968) , lo que indica que muchas personas se desplazan hacia esta comuna. Lo mismo ocurre en la Comuna 03 , donde los destinos (3859) superan a los orígenes (2121) , lo que refuerza la idea de que estas zonas son importantes centros de atracción de trayectos.
De este análisis, pude concluir que las Comunas 02, 03, 17,19 y las conexiones Fuera de Cali son áreas fundamentales para la movilidad de la ciudad, con una alta cantidad de trayectos tanto de orígenes como de destinos.
El uso de la motocicleta predomina en muchas comunas, mientras que el uso de la bicicleta es menos frecuente, aunque notable en ciertas áreas como la Comuna 2, 17 y la Comuna 19 . Finalmente, el desequilibrio entre orígenes y destinos en algunas comunas refleja que ciertos sectores son más atractivos como puntos de llegada que de salida, lo que podría estar vinculado a la distribución de actividades económicas, servicios o viviendas.