require(raster)
require(rgdal)
require(readxl)
require(dplyr)
require(sf)
require(ggplot2)
require(leaflet)

1 ORIGEN

Primero se procede a cargar el shapefile de comunas de la ciudad de Cali y tambien se carga el archivo de excel, se realizan algunos filtros, ya que solo vamos a necesitar los viajes dentro de la ciudad de Cali y solo tres tipos de vehiculos(bicicleta, moto y automovil).

comunas=shapefile("~/Maestria/Segundo Semestre/Electiva/CAsos/cali/Comunas.shp")


excel = read_excel("~/Maestria/Segundo Semestre/Electiva/CAsos/EncuestaOrigenDestino.xlsx", sheet = 1)

origen_destino_filtrados <- excel %>%
  select(`TIPO DE VEHÍCULO`, `comuna origen`, `comuna destino`) %>%
  filter(
    `TIPO DE VEHÍCULO` %in% c(1, 2, 3), 
    `comuna origen` != "Fuera de Cali", 
    `comuna destino` != "Fuera de Cali", 
    `comuna origen` != 0,
    `comuna destino` != 0
  )

origen_destino_filtrados$`comuna origen` <- as.integer(origen_destino_filtrados$`comuna origen`)
origen_destino_filtrados$`comuna destino` <- as.integer(origen_destino_filtrados$`comuna destino`)

head(origen_destino_filtrados, n=10)
## # A tibble: 10 × 3
##    `TIPO DE VEHÍCULO` `comuna origen` `comuna destino`
##                 <dbl>           <int>            <int>
##  1                  2               2               22
##  2                  2               6                2
##  3                  3               6                4
##  4                  3               3                2
##  5                  3               4                2
##  6                  3               6                2
##  7                  2               4                2
##  8                  2               2                3
##  9                  2              13                2
## 10                  3               6               19
conteo_comunas_origen <- origen_destino_filtrados %>%
  group_by(`comuna origen`) %>%
  summarise(cantidad_origen = n())


conteo_comunas_origen <- conteo_comunas_origen %>%
  arrange(desc(cantidad_origen))

head(conteo_comunas_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_origen
##             <int>           <int>
## 1               2            2045
## 2              19            2031
## 3              17            1618
## 4               3            1465
## 5              18            1111
## 6               4            1072
tail(conteo_comunas_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_origen
##             <int>           <int>
## 1               1             562
## 2              20             539
## 3               7             531
## 4              14             526
## 5               5             473
## 6              12             231
ggplot(conteo_comunas_origen, aes(x = factor(`comuna origen`), y = cantidad_origen)) +
  geom_bar(stat = "identity", fill = "steelblue") + 
  geom_text(aes(label = cantidad_origen), vjust = -0.3, color = "black", size = 3) + 
  labs(title = "Cantidad de viajes por Comuna de Origen",
       x = "Comuna de Origen", y = "Cantidad de Viajes") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

shapefile_comunas_sf <- st_as_sf(comunas)

shapefile_comunas_sf <- shapefile_comunas_sf %>%
  left_join(conteo_comunas_origen, by = c("comuna" = "comuna origen"))

1.1 MAPA ORIGEN

# Asegúrate de que el shapefile esté en el CRS correcto
shapefile_comunas_sf_wgs84 <- st_transform(shapefile_comunas_sf, crs = 4326)


pal <- colorNumeric(palette = "plasma", domain = shapefile_comunas_sf_wgs84$cantidad_origen)


leaflet(shapefile_comunas_sf_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>%  
  addPolygons(
    fillColor = ~pal(cantidad_origen),  
    color = "black",  
    weight = 0.5,  
    opacity = 1,  
    fillOpacity = 0.7,  
    popup = ~paste("Comuna:", nombre, "<br>Viajes de origen:", cantidad_origen) 
  ) %>%
  addLegend(
    position = "bottomright",  
    pal = pal,  
    values = shapefile_comunas_sf_wgs84$cantidad_origen,  
    title = "Cantidad de Origen",
    opacity = 1
  )

Las tres comunas con más viajes de origen son la comuna 2, 19 y 17. En cambio, las tres comunas con menos viajes de origen, 14, 5 y 12, presentan cifras más bajas.

2 ORIGEN BICICLETAS

bicicletas_origen <- origen_destino_filtrados %>%
  filter(`TIPO DE VEHÍCULO` == 1)  


conteo_bicicletas_origen <- bicicletas_origen %>%
  group_by(`comuna origen`) %>%
  summarise(cantidad_bicicletas = n(), .groups = "drop")

conteo_bicicletas_origen <- conteo_bicicletas_origen %>%
  arrange(desc(cantidad_bicicletas))

head(conteo_bicicletas_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_bicicletas
##             <int>               <int>
## 1               2                 122
## 2              19                 113
## 3              17                 103
## 4              18                  85
## 5               3                  84
## 6              10                  71
tail(conteo_bicicletas_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_bicicletas
##             <int>               <int>
## 1               1                  32
## 2              14                  32
## 3               7                  30
## 4               6                  29
## 5               5                  28
## 6              12                  10
ggplot(conteo_bicicletas_origen, aes(x = factor(`comuna origen`), y = cantidad_bicicletas)) +
  geom_bar(stat = "identity", fill = "steelblue") +  
  geom_text(aes(label = cantidad_bicicletas), vjust = -0.3, color = "black", size = 3) +  
  labs(title = "Cantidad de Bicicletas por Comuna de Origen",
       x = "Comuna de Origen", y = "Cantidad de Bicicletas") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

shapefile_comunas_sf2 <- st_as_sf(comunas)


shapefile_origen_bici <- shapefile_comunas_sf2 %>%
  left_join(conteo_bicicletas_origen, by = c("comuna" = "comuna origen"))

2.1 MAPA ORIGEN BICICLETAS

# Asegúrate de que el shapefile esté en el CRS correcto (WGS84)
shapefile_comunas_sf2_wgs84 <- st_transform(shapefile_origen_bici, crs = 4326)


pal <- colorNumeric(palette = "viridis", domain = shapefile_comunas_sf2_wgs84$cantidad_bicicletas)

# Crear el mapa con Leaflet
leaflet(shapefile_comunas_sf2_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>%  
  addPolygons(
    fillColor = ~pal(cantidad_bicicletas),
    color = "black",  
    weight = 0.5,  
    opacity = 1,  
    fillOpacity = 0.7,  
    popup = ~paste("Comuna:", nombre, "<br>Bicicletas de origen:", cantidad_bicicletas)  
  ) %>%
  addLegend(
    position = "bottomright",  
    pal = pal,  
    values = shapefile_comunas_sf2_wgs84$cantidad_bicicletas,  
    title = "Cantidad de Bicicletas",
    opacity = 1
  )

Las tres comunas con más viajes de origen en bicicleta son la comuna 2, 19 y 17. Por otro lado, las comunas que presentan un uso mucho más bajo de la bicicleta para los desplazamientos de origen son la 6, 5 y 12.

3 ORIGEN MOTOS

motos_origen <- origen_destino_filtrados %>%
  filter(`TIPO DE VEHÍCULO` == 2)  


conteo_motos_origen <- motos_origen %>%
  group_by(`comuna origen`) %>%
  summarise(cantidad_motos = n(), .groups = "drop")


conteo_motos_origen <- conteo_motos_origen %>%
  arrange(desc(cantidad_motos))

head(conteo_motos_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_motos
##             <int>          <int>
## 1               2           1063
## 2              19            995
## 3              17            853
## 4               3            702
## 5              18            593
## 6               4            571
tail(conteo_motos_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_motos
##             <int>          <int>
## 1               1            296
## 2              20            278
## 3               7            272
## 4               5            260
## 5              14            258
## 6              12            133
ggplot(conteo_motos_origen, aes(x = factor(`comuna origen`), y = cantidad_motos)) +
  geom_bar(stat = "identity", fill = "steelblue") +  
  geom_text(aes(label = cantidad_motos), vjust = -0.3, color = "black", size = 3) +  
  labs(title = "Cantidad de Motos por Comuna de Origen",
       x = "Comuna de Origen", y = "Cantidad de Motos") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

shapefile_comunas_sf3 <- st_as_sf(comunas)


shapefile_origen_moto <- shapefile_comunas_sf3 %>%
  left_join(conteo_motos_origen, by = c("comuna" = "comuna origen"))

3.1 MAPA ORIGEN MOTOS

# Asegúrate de que el shapefile esté en el CRS correcto (WGS84)
shapefile_comunas_sf3_wgs84 <- st_transform(shapefile_origen_moto, crs = 4326)


pal <- colorNumeric(palette = "magma", domain = shapefile_comunas_sf3_wgs84$cantidad_motos)


leaflet(shapefile_comunas_sf3_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>%  
  addPolygons(
    fillColor = ~pal(cantidad_motos), 
    color = "black", 
    weight = 0.5, 
    opacity = 1, 
    fillOpacity = 0.7, 
    popup = ~paste("Comuna:", nombre, "<br>Motos de origen:", cantidad_motos)  
  ) %>%
  addLegend(
    position = "bottomright",  
    pal = pal,  
    values = shapefile_comunas_sf3_wgs84$cantidad_motos, 
    title = "Cantidad de Motos",
    opacity = 1
  )

Las tres comunas con más viajes de origen en moto son la comuna 2, 19 y 17, y las ultimas comunas son la 5, 14 y 12 que tienen un uso considerablemente más bajo de la moto.

4 ORIGEN AUTOMOVIL

autos_origen <- origen_destino_filtrados %>%
  filter(`TIPO DE VEHÍCULO` == 3) 

conteo_autos_origen <- autos_origen %>%
  group_by(`comuna origen`) %>%
  summarise(cantidad_autos = n(), .groups = "drop")

conteo_autos_origen <- conteo_autos_origen %>%
  arrange(desc(cantidad_autos))

head(conteo_autos_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_autos
##             <int>          <int>
## 1              19            923
## 2               2            860
## 3               3            679
## 4              17            662
## 5               4            443
## 6              18            433
tail(conteo_autos_origen)
## # A tibble: 6 × 2
##   `comuna origen` cantidad_autos
##             <int>          <int>
## 1              14            236
## 2               1            234
## 3               7            229
## 4              20            228
## 5               5            185
## 6              12             88
ggplot(conteo_autos_origen, aes(x = factor(`comuna origen`), y = cantidad_autos)) +
  geom_bar(stat = "identity", fill = "steelblue") + 
  geom_text(aes(label = cantidad_autos), vjust = -0.3, color = "black", size = 3) +  
  labs(title = "Cantidad de Automoviles por Comuna de Origen",
       x = "Comuna de Origen", y = "Cantidad de Automoviles") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Asegúrate de que el shapefile esté en formato 'sf' (spatial features)
shapefile_comunas_sf4 <- st_as_sf(comunas)

# Unir los conteos de bicicletas con el shapefile de las comunas
shapefile_origen_auto <- shapefile_comunas_sf4 %>%
  left_join(conteo_autos_origen, by = c("comuna" = "comuna origen"))

4.1 MAPA ORIGEN AUTOMOVILES

# Asegúrate de que el shapefile esté en el CRS correcto (WGS84)
shapefile_comunas_sf4_wgs84 <- st_transform(shapefile_origen_auto, crs = 4326)


pal <- colorNumeric(palette = "inferno", domain = shapefile_comunas_sf4_wgs84$cantidad_autos)


leaflet(shapefile_comunas_sf4_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(
    fillColor = ~pal(cantidad_autos),
    color = "black",  
    weight = 0.5,  
    opacity = 1,  
    fillOpacity = 0.7,  
    popup = ~paste("Comuna:", nombre, "<br>Automoviles de origen:", cantidad_autos)  
  ) %>%
  addLegend(
    position = "bottomright",
    pal = pal,
    values = shapefile_comunas_sf4_wgs84$cantidad_autos, 
    title = "Cantidad de Automoviles",
    opacity = 1
  )

Las tres comunas con más viajes de origen en automóvil son la comuna 19, 2 y 3. En contraste, las comunas 20, 5 y 12 tienen un uso mucho más bajo del automóvil.

5 DESTINO

conteo_comunas_destino <- origen_destino_filtrados %>%
  group_by(`comuna destino`) %>%
  summarise(cantidad_destino = n())



conteo_comunas_destino <- conteo_comunas_destino %>%
  arrange(desc(cantidad_destino))

head(conteo_comunas_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_destino
##              <int>            <int>
## 1                2             3446
## 2                3             2600
## 3               19             2209
## 4               17             1489
## 5               22             1425
## 6                4             1354
tail(conteo_comunas_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_destino
##              <int>            <int>
## 1                5              402
## 2               21              390
## 3               14              290
## 4               20              277
## 5               12              190
## 6                1              172
ggplot(conteo_comunas_destino, aes(x = factor(`comuna destino`), y = cantidad_destino)) +
  geom_bar(stat = "identity", fill = "steelblue") + 
  geom_text(aes(label = cantidad_destino), vjust = -0.3, color = "black", size = 3) +
  labs(title = "Cantidad de viajes por Comuna de Destino",
       x = "Comuna de Destino", y = "Cantidad de Viajes") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

shapefile_comunas2_sf <- st_as_sf(comunas)

shapefile_comunas2_sf <- shapefile_comunas2_sf %>%
  left_join(conteo_comunas_destino, by = c("comuna" = "comuna destino"))

5.1 MAPA DESTINO

# Asegúrate de que el shapefile esté en el CRS correcto
shapefile_comunas2_sf_wgs84 <- st_transform(shapefile_comunas2_sf, crs = 4326)


pal <- colorNumeric(palette = "plasma", domain = shapefile_comunas2_sf_wgs84$cantidad_destino)


leaflet(shapefile_comunas2_sf_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(
    fillColor = ~pal(cantidad_destino),
    color = "black",  
    weight = 0.5,  
    opacity = 1,  
    fillOpacity = 0.7,  
    popup = ~paste("Comuna:", nombre, "<br>Viajes de destino:", cantidad_destino)
  ) %>%
  addLegend(
    position = "bottomright", 
    pal = pal, 
    values = shapefile_comunas2_sf_wgs84$cantidad_destino,
    title = "Cantidad de destino",
    opacity = 1
  )

Las tres comunas con más viajes de destino son la comuna 2, 3 y 19. En cambio, las tres comunas con menos viajes de destino, 20, 12 y 1, presentan las cifras más bajas.

6 DESTINO BICICLETAS

bicicletas_destino <- origen_destino_filtrados %>%
  filter(`TIPO DE VEHÍCULO` == 1)  


conteo_bicicletas_destino <- bicicletas_destino %>%
  group_by(`comuna destino`) %>%
  summarise(cantidad_bicicletas = n(), .groups = "drop")


conteo_bicicletas_destino <- conteo_bicicletas_destino %>%
  arrange(desc(cantidad_bicicletas))

head(conteo_bicicletas_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_bicicletas
##              <int>               <int>
## 1                2                 194
## 2                3                 169
## 3               19                 131
## 4               17                  95
## 5               22                  95
## 6                4                  80
tail(conteo_bicicletas_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_bicicletas
##              <int>               <int>
## 1               21                  24
## 2               20                  22
## 3               14                  20
## 4               15                  17
## 5               12                  13
## 6                1                   9
ggplot(conteo_bicicletas_destino, aes(x = factor(`comuna destino`), y = cantidad_bicicletas)) +
  geom_bar(stat = "identity", fill = "steelblue") +  
  geom_text(aes(label = cantidad_bicicletas), vjust = -0.3, color = "black", size = 3) +  
  labs(title = "Cantidad de Bicicletas por Comuna de Destino",
       x = "Comuna de Destino", y = "Cantidad de Bicicletas") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

shapefile_comunas2_sf2 <- st_as_sf(comunas)


shapefile_destino_bici <- shapefile_comunas2_sf2 %>%
  left_join(conteo_bicicletas_destino, by = c("comuna" = "comuna destino"))

6.1 MAPA DESTINO BICICLETAS

# Asegúrate de que el shapefile esté en el CRS correcto (WGS84)
shapefile_comunas2_sf2_wgs84 <- st_transform(shapefile_destino_bici, crs = 4326)


pal <- colorNumeric(palette = "viridis", domain = shapefile_comunas2_sf2_wgs84$cantidad_bicicletas)

leaflet(shapefile_comunas2_sf2_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(
    fillColor = ~pal(cantidad_bicicletas),
    color = "black",  
    weight = 0.5,  
    opacity = 1,
    fillOpacity = 0.7, 
    popup = ~paste("Comuna:", nombre, "<br>Bicicletas de Destino:", cantidad_bicicletas)
  ) %>%
  addLegend(
    position = "bottomright",
    pal = pal,
    values = shapefile_comunas2_sf2_wgs84$cantidad_bicicletas,
    title = "Cantidad de Bicicletas",
    opacity = 1
  )

Las tres comunas con más viajes como destino en bicicleta son la comuna 2, 3 y 19, y las comunas que presentan un uso mucho más bajo de la bicicleta para los desplazamientos de destino son la 15, 12 y 1.

7 DESTINO MOTO

motos_destino <- origen_destino_filtrados %>%
  filter(`TIPO DE VEHÍCULO` == 2) 


conteo_motos_destino <- motos_destino %>%
  group_by(`comuna destino`) %>%
  summarise(cantidad_motos = n(), .groups = "drop")


conteo_motos_destino <- conteo_motos_destino %>%
  arrange(desc(cantidad_motos))

head(conteo_motos_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_motos
##              <int>          <int>
## 1                2           1734
## 2                3           1333
## 3               19           1152
## 4               22            766
## 5               17            744
## 6                4            678
tail(conteo_motos_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_motos
##              <int>          <int>
## 1               21            202
## 2                5            183
## 3               14            150
## 4               20            124
## 5               12            106
## 6                1             90
ggplot(conteo_motos_destino, aes(x = factor(`comuna destino`), y = cantidad_motos)) +
  geom_bar(stat = "identity", fill = "steelblue") + 
  geom_text(aes(label = cantidad_motos), vjust = -0.3, color = "black", size = 3) +  
  labs(title = "Cantidad de Motos por Comuna de Destino",
       x = "Comuna de Destino", y = "Cantidad de Motos") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  

shapefile_comunas2_sf3 <- st_as_sf(comunas)


shapefile_destino_moto <- shapefile_comunas2_sf3 %>%
  left_join(conteo_motos_destino, by = c("comuna" = "comuna destino"))

7.1 MAPA DESTINO MOTOS

# Asegúrate de que el shapefile esté en el CRS correcto (WGS84)
shapefile_comunas2_sf3_wgs84 <- st_transform(shapefile_destino_moto, crs = 4326)


pal <- colorNumeric(palette = "magma", domain = shapefile_comunas2_sf3_wgs84$cantidad_motos)


leaflet(shapefile_comunas2_sf3_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(
    fillColor = ~pal(cantidad_motos),
    color = "black", 
    weight = 0.5, 
    opacity = 1, 
    fillOpacity = 0.7, 
    popup = ~paste("Comuna:", nombre, "<br>Motos de destino:", cantidad_motos)  # 
  ) %>%
  addLegend(
    position = "bottomright", 
    pal = pal,  
    values = shapefile_comunas2_sf3_wgs84$cantidad_motos,  
    title = "Cantidad de Motos",
    opacity = 1
  )

Las tres comunas con más viajes de destino en moto son la comuna 2, 3 y 19, y las ultimas comunas son la 20, 12 y 1 que tienen un uso más bajo de la moto.

8 DESTINO AUTOMOVIL

autos_destino <- origen_destino_filtrados %>%
  filter(`TIPO DE VEHÍCULO` == 3) 


conteo_autos_destino <- autos_destino %>%
  group_by(`comuna destino`) %>%
  summarise(cantidad_autos = n(), .groups = "drop")

conteo_autos_destino <- conteo_autos_destino %>%
  arrange(desc(cantidad_autos))

head(conteo_autos_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_autos
##              <int>          <int>
## 1                2           1518
## 2                3           1098
## 3               19            926
## 4               17            650
## 5                4            596
## 6               22            564
tail(conteo_autos_destino)
## # A tibble: 6 × 2
##   `comuna destino` cantidad_autos
##              <int>          <int>
## 1                5            181
## 2               21            164
## 3               20            131
## 4               14            120
## 5                1             73
## 6               12             71
ggplot(conteo_autos_destino, aes(x = factor(`comuna destino`), y = cantidad_autos)) +
  geom_bar(stat = "identity", fill = "steelblue") + 
  geom_text(aes(label = cantidad_autos), vjust = -0.3, color = "black", size = 3) +  
  labs(title = "Cantidad de Automoviles por Comuna de Destino",
       x = "Comuna de Destino", y = "Cantidad de Automoviles") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

shapefile_comunas2_sf4 <- st_as_sf(comunas)


shapefile_destino_auto <- shapefile_comunas2_sf4 %>%
  left_join(conteo_autos_destino, by = c("comuna" = "comuna destino"))

8.1 MAPA DESTINO AUTOMOVILES

# Asegúrate de que el shapefile esté en el CRS correcto (WGS84)
shapefile_comunas2_sf4_wgs84 <- st_transform(shapefile_destino_auto, crs = 4326)


pal <- colorNumeric(palette = "inferno", domain = shapefile_comunas2_sf4_wgs84$cantidad_autos)


leaflet(shapefile_comunas2_sf4_wgs84) %>%
  addProviderTiles("CartoDB.Positron") %>%  
  addPolygons(
    fillColor = ~pal(cantidad_autos), 
    color = "black", 
    weight = 0.5,  
    opacity = 1,  
    fillOpacity = 0.7,  
    popup = ~paste("Comuna:", nombre, "<br>Automoviles de Destino:", cantidad_autos) 
  ) %>%
  addLegend(
    position = "bottomright",  
    pal = pal,  
    values = shapefile_comunas2_sf4_wgs84$cantidad_autos,  
    title = "Cantidad de Automoviles",
    opacity = 1
  )

Las tres comunas con más viajes de destino en automóvil son la comuna 2, 3 y 19.Por otro lado, las comunas 14, 1 y 12 tienen un uso mucho más bajo del automóvil.

9 CONCLUSIONES

  • Las comunas 2, 19 y 17 se destacan consistentemente como las más activas en términos de viajes, tanto de origen como de destino, para todos los medios de transporte. Estas áreas probablemente presentan una mayor densidad de población, una infraestructura de transporte más desarrollada, o una mayor concentración de actividades comerciales y de servicios.En cuanto a las de menor volumen de viajes, las comunas 5, 12 y 14 tienen significativamente menos viajes de origen y destino, lo que podría indicar un menor flujo de personas, una menor accesibilidad a los medios de transporte, tambien podria deberse a problemas de seguridad en estas zonas.

  • Los medios de transporte más utilizados son la moto, el automóvil y, en menor medida, la bicicleta. La moto se destaca como la opción más popular debido a su accesibilidad, bajo costo y capacidad para sortear el tráfico, mientras que el automóvil es más utilizado por sectores con mayores recursos económicos, a pesar de los problemas de congestión. La bicicleta, aunque promovida como una opción sostenible, sigue siendo menos utilizada, principalmente por la falta de infraestructura adecuada y la percepción de inseguridad.

  • Es crucial que las autoridades locales inviertan en infraestructura adecuada para bicicletas, mejorando las ciclovías y ofreciendo incentivos para su uso, esto ayudara a fomentar una movilidad más equilibrada y sostenible.