Requerimientos de Análisis

Se solicita realizar 8 mapas de la siguiente manera:

  1. Mapa de comuna origen
  2. Mapa de comuna de origen por tipo de vehículo: bicicleta
  3. Mapa de comuna de origen por tipo de vehículo: moto
  4. Mapa de comuna de origen por tipo de vehículo: automóvil
  5. Mapa de comuna destino
  6. Mapa de comuna de destino por tipo de vehículo: bicicleta
  7. Mapa de comuna de destino por tipo de vehículo: moto
  8. Mapa de comuna de destino por tipo de vehículo: automóvil

Limpieza de la base de movilidad

Se encuentra que la base de datos tiene diferentes variables que no se utilizarán en contexto de las consultas requeridas para este ejercicio. Por lo tanto las columnas que no son de utilidad se eliminarán.

# Seleccionar variables que se utilizarán en la consulta
movilidad2 <- movilidad[, c("MUNICIPIO...7","MUNICIPIO...11", "comuna origen", "comuna destino", "TIPO DE VEHC\rCULO")]
colnames(movilidad2) <- c("municipio_origen", "municipio_destino", "comuna_origen", "comuna_destino", "tipo_vehiculo")

Posteriormente, considerando que se realizará el cruce únicamente con los números de comunas del shapefile, los valores “Fuera de Cali” en comuna de origen y destino deben eliminarse para poder realizar la visualización correctamente para las comunas de la ciudad. De igual forma se filtran los valores de comuna “0”, toda vez que las comunas están enumeradas del 1 al 22 y al validar con el nombre que toma en “municipio”, se encuentra que no corresponden a lugares en la ciudad de Cali.

movilidad2 <- as.data.frame(movilidad2)

movilidad2 <- movilidad2 %>% 
    filter(comuna_origen != "Fuera de Cali" & comuna_origen != "0",
           comuna_destino != "Fuera de Cali" & comuna_destino != "0",
           tipo_vehiculo == "1" | tipo_vehiculo == "2" | tipo_vehiculo =="3")

Teniendo en cuenta estos filtros se valida que en la variable “municipio_origen” todos los valores correspondan a “CALI”.

table(movilidad2$municipio_origen)
## 
##       CALI HORMIGUERO      PANCE    POPAYAN 
##      20127          1          6          1

Al observar los valores que toma la variable “municipio” se encuentra que, pese a que se encuentran enumerados correctamente con un número de comuna de origen o destino, el nombre en “municipio” es diferente de “CALI”, como Popayán (municipio de otro departamento), Hormiguero y Pance (Corregimientos de Cali). Dado que las observaciones con estas inconsistencias son 7, se decide eliminarlas.

  movilidad2 <- movilidad2 %>% 
    filter(municipio_origen == "CALI")

Se realiza el mismo procedimiento con la variable “municipio_destino”

table(movilidad2$municipio_destino)
## 
##      CALI    CALIMA MANIZALES   POPAYAN 
##     20123         1         1         1

Al observar los valores que toma la variable “municipio” pese a que se encuentran enumerados correctamente con un número de comuna de origen o destino, el nombre en “municipio” es diferente de “CALI”, como Manizales y Popayán (municipios de otro departamento) y Calima (Corregimiento de Cali). Dado que las observaciones con estas inconsistencias son 3, se decide eliminarlas.

  movilidad2 <- movilidad2 %>% 
    filter(municipio_destino == "CALI")  

Finalmente, se valida que el tipo de variable sea el correcto tanto en el shape como en el dataframe

str(movilidad2)
## 'data.frame':    20123 obs. of  5 variables:
##  $ municipio_origen : chr  "CALI" "CALI" "CALI" "CALI" ...
##  $ municipio_destino: chr  "CALI" "CALI" "CALI" "CALI" ...
##  $ comuna_origen    : chr  "02" "06" "06" "03" ...
##  $ comuna_destino   : chr  "22" "02" "04" "02" ...
##  $ tipo_vehiculo    : num  2 2 3 3 3 3 2 2 2 3 ...
str(comunas$comuna)
##  int [1:22] 2 1 3 19 15 17 18 22 6 4 ...

Se encuentra que la variable “comuna” en el shape es tipo int cuando deberían ser chr, dado que el número es un identificador de comunas y no se realizarán operaciones numéricas con esta variable. Se transforma el tipo de variable para que sea compatible posteriormente con el dataframe de movilidad.

comunas$comuna <- as.character(comunas$comuna)
str(comunas$comuna)
##  chr [1:22] "2" "1" "3" "19" "15" "17" "18" "22" "6" "4" "5" "7" "8" "9" ...

Finalmente, para que la visualización de los mapas de comunas de origen y destino por tipo de vehículo se realicen indicando el tipo de vehículo específico en lugar de su código, se recodifican los atributos de esta variable. Así mismo se eliminan los “0” a la izquierda en las variables “comuna_origen” y “comuna_destino” para que al realizar el left join con el shape no se generen valores nulos porque no coinciden los códigos.

# recodificar la variable "tipo_vehículo
movilidad2$tipo_vehiculo <- recode(movilidad2$tipo_vehiculo,
                                   "1" = "Bicicleta",
                                   "2" = "Moto",
                                   "3" = "Automovil")
#Eliminar los "0" a la izquierda en los valores de comunas
movilidad2$comuna_origen  <- sub("^0+", "", as.character(movilidad2$comuna_origen))
movilidad2$comuna_destino <- sub("^0+", "", as.character(movilidad2$comuna_destino))

Mapa comunas origen

Una vez la base tiene la información necesaria, se agrupan los datos de movilidad por comuna de origen para calcular el número de viajes por comuna y representarlo posteriormente en el mapa.

# agrupar datos por "comuna_origen"
m_origen <- movilidad2 %>%
  group_by(comuna_origen) %>%
  summarise(total_viajes = n())
# Unir el data frame con el mapa de comunas
map_origen <- left_join(comunas, m_origen,
                        by = c("comuna" = "comuna_origen"))

# Representar los viajes de origen en el mapa de comunas
ggplot(map_origen) +
  geom_sf(aes(fill = total_viajes), color = "white", size = 0.3) +
  geom_sf_text(aes(label = comuna), color = "white", size = 3, fontface = "bold") +
  scale_fill_viridis_c(
    option = "C",
    direction = -1,
    na.value = "gray90",
    name = "Total de viajes"
  ) +
  labs(
    title = "Cantidad de Viajes por comuna de origen",
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    legend.position = "right"
  )

Mapa comunas destino

# agrupar datos por "comuna_destino"
m_destino <- movilidad2 %>%
  group_by(comuna_destino) %>%
  summarise(total_viajes = n())

# Unir el data frame con el mapa de comunas
map_destino <- left_join(comunas,m_destino,
                        by = c("comuna" = "comuna_destino"))



# Representar los viajes de origen en el mapa de comunas
ggplot(map_destino) +
  geom_sf(aes(fill = total_viajes), color = "white", size = 0.3) +
  geom_sf_text(aes(label = comuna), color = "white", size = 3, fontface = "bold") +
  scale_fill_viridis_c(
    option = "C",
    direction = -1,
    na.value = "gray90",
    name = "Total de viajes"
  ) +
  labs(
    title = "Cantidad de Viajes por comuna de destino",
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    legend.position = "right"
  )

De acuerdo con el resultado de los mapas anteriores, se encuentra que las comunas de origen con mayor concentración de los viajes en Cali son principalmente la 2, 19, 17 y 3 y en una cantidad menor pero considerable las comunas 3 y 18. En cuanto a las comunas de destino las de mayor concurrencia son la comuna 2, 3 y 19, pero también existe una movilidad considerable hacia las comuna 17 y 22.

Mapas de comunas de origen por tipo de vehículo

# agrupar datos por "comuna_origen" y "tipo_vehiculo"
origen_veh <- movilidad2 %>%
  group_by(comuna_origen, tipo_vehiculo) %>%
  summarise(total_viajes = n())%>%
  ungroup()
# Unir el data frame con el mapa de comunas
map_or_veh <- left_join(comunas,origen_veh,
                        by = c("comuna" = "comuna_origen"))
ggplot(map_or_veh) +
  geom_sf(aes(fill = total_viajes), color = "gray30") +
  geom_sf_text(aes(label = comuna, color = tipo_vehiculo), 
               size = 2, fontface = "bold") +
  scale_fill_viridis(option = "magma", direction = -1, na.value = "white") +
  scale_color_manual(values = c("Bicicleta" = "black", 
                                "Automovil" = "white",
                                "Moto" = "white")) +  
  facet_wrap(~ tipo_vehiculo) +
  labs(
    title = "Cantidad de viajes por tipo de vehiculo y comuna de origen",
    fill = "Total de viajes"
  ) +
  theme_bw() +
  theme(
    strip.text = element_text(size = 10, face = "bold"),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    panel.grid = element_blank(),
    legend.position = "right"
  )

De los mapas anteriores se puede apreciar que por el rango de viajes por tipo de vehículo, la bicicleta es el medio de transporte menos utilizado por las personas en la ciudad de Cali, porque el número de viajes no supera con bicicleta no supera los 250 trayectos entre las comunas (según la escala de color). De los resultados se puede apreciar que las comunas donde mayor número de viajes son la 2, 17 y 19.

Por otro lado, se encuentra que la mayor parte de la población en Cali se moviliza en moto y, particularmente desde la comuna 2, 19 y 17 (en orden descendente), mientras que el automovil es la segunda opción de transporte con mayor número de trayectos y la población sale particularmente desde las comunas 19, 2, 3 y 17 (de manera descendente).

Sin embargo se encuentra que en las comunas con menor frecuencia de trayectos para todos los tipos de vehículo, el número de trayectos es similar entre comunas (dado que se encuentran entre los mismos rangos de color), lo que indicaría que, por fuera de las comunas de mayor frecuencia de trayectos, la población se distribuye de una manera similar en el resto de comunas.

Mapas de comunas de destino por tipo de vehículo

# agrupar datos por "comuna_destino" y "tipo_vehiculo"
destino_veh <- movilidad2 %>%
  group_by(comuna_destino, tipo_vehiculo) %>%
  summarise(total_viajes = n())%>%
  ungroup()
# Unir el data frame con el mapa de comunas
map_dest_veh <- left_join(comunas,destino_veh,
                        by = c("comuna" = "comuna_destino"))
ggplot(map_dest_veh) +
  geom_sf(aes(fill = total_viajes), color = "gray30") +
  geom_sf_text(aes(label = comuna, color = tipo_vehiculo), 
               size = 2, fontface = "bold") +
  scale_fill_viridis(option = "magma", direction = -1, na.value = "white") +
  scale_color_manual(values = c("Bicicleta" = "black", 
                                "Automovil" = "white",
                                "Moto" = "white")) +  
  facet_wrap(~ tipo_vehiculo) +
  labs(
    title = "Cantidad de viajes por tipo de vehiculo y comuna de destino",
    fill = "Total de viajes"
  ) +
  theme_bw() +
  theme(
    strip.text = element_text(size = 10, face = "bold"),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    panel.grid = element_blank(),
    legend.position = "right"
  )

De manera coherente con los resultados de las comunas de origen, el medio de transporte más utilizado por la población en Cali es la moto, seguido de automovil y bicicleta. De los mapas anteriores se puede apreciar que las comunas de destino de los trayectos realizados con bicicleta son la comuna 2, 3 y 19, principalmente. De la misa manera, los trayectos en automovil y moto tienen como principal destino las comunas 2, 3 y 19, y las comunas 17 y 22 con una menor frecuencia de trayectos.

Conclusiones

Lo anterior permite inferir que, cuando se analiza el origen de los trayectos de las personas en Cali, por fuera de las comunas de mayor concentración de trayectos, el resto de la población se divide de manera similar entre las comunas, sin embargo, cuando se habla del destino de los trayectos, estos se concentran de manera particular en las comunas ya mencionadas, mientas que las otras comunas no tienen una movilidad muy grande como destino, lo que permite observar que la población en Cali se dirige por motivos de trabajo, estudio u otros a comunas diferentes a las de origen.

En la comuna 2, se identifica que es una zona con diferentes servicios para la población como hoteles, instituciones públicas, centros educativos, sitios comerciales, de servicios, de entretenimiento y parques. Considerando esta infraestructura disponible en esta comuna, resulta coherente que los trayectos de destino se concentren particularmente en esta comuna, dado que concentra diferentes actividades económicas y actividades educativas, lo que genera una mayor presión en la movilidad de esta comuna para todos los tipos de vehículo.

Por su parte, en la comuna 3 se encuentran diferentes lugares de interés turístico como el Bulevar del Río Cali, la Iglesia La Ermita, el Monumento el Gato del Río, entre otros lugares, por lo que se podría inferir que dados estos sitios de interés existen igual establecimientos comerciales y hoteles que indicarían una mayor movilidad de la población por motivos de trabajo, principalmente.