Introducción

El análisis de datos espaciales consiste en estudiar los fenómenos de la superficie terrestre para comprender un poco más el espacio en el que vivimos. Se busca establecer algunos patrones, relaciones y distribuciones de estos fenómenos resultando ser muy útil en ámbitos como la planificación urbana, gestión de recursos, salud y medio ambiente.

El siguiente proyecto, basado en la revisión de una encuesta a personas del área metropolitana de Cali, pretende identificar los lugares de origen y destino que tienen los individuos así como la incidencia de uso en medios de transporte utilizado como bicicletas, motos y automóviles, de igual forma se busca conocer los flujos las las zonas y comunas para la ciudad.

Métodos

Para el desarrollo de este informe, se hará uso de técnicas y herramientas de análisis estadístico y espacial con el fin organizar, resumir y presentar los datos recopilados en la encuesta de origen y destino de la actividad 1 en la asignatura análisis de Información Geográfica y Espacial. El desarrollo abordará las siguientes etapas:

  1. Entendimiento de los datos (Análisis exploratorio y preparación de datos).

  2. Realización de mapas y análisis de resultados.

  3. Conclusiones

1. Entendimiento de los datos (Análisis exploratorio y preparación de datos).

En este apartado, se realizará la carga de la base de datos original, se realizará una primera visualización de los datos obtenidos, además de los paquetes a utilizar para el desarrollo de la actividad.

1.1 Paquete de librerías.

Consolidado de paquete de librerias a utilizar en el proyecto.

library(sf)
library(terra)
library(stars)
library(raster)
library(readxl)
library(kableExtra)
library(dplyr)
library(sp)
library(ggplot2)
library(latticeExtra)
library(RColorBrewer)
library(gridExtra)
library(formattable)

1.2 Importar BD y entendimiento de los datos

A continuación, cargamos la base de datos Encuesta Origen - Destino, la cual tiene 28 variables y 35054 registros con información relacionada con la movilidad de personas en la ciudad de Cali y sus alrededores. De sus características se pueden resaltar atributos como los municipios de origen y destino, el barrio, la dirección, el estrato, el medio de transporte, la edad, el sexo, entre otros.

#Cargar la BD original, y mostrar
EncuestaOrigenDestino = read_excel("C:/Users/gusta/OneDrive/Escritorio/Maestria_Ciencia_ Datos/2do Semestre/Georeferenciación/Casos/Casos/EncuestaOrigenDestino.xlsx")
print(EncuestaOrigenDestino)
## # A tibble: 35,054 × 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     
##  7 2015-06-01 00:00:00             1 Avenida 6N X Calle 70N NORTE  MOV 1     
##  8 2015-06-01 00:00:00             1 Avenida 6N X Calle 70N NORTE  MOV 1     
##  9 2015-06-01 00:00:00             1 Avenida 6N X Calle 70N NORTE  MOV 1     
## 10 2015-06-01 00:00:00             1 Avenida 6N X Calle 70N NORTE  MOV 1     
## # ℹ 35,044 more rows
## # ℹ 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>, …
#Se crea una copia del archivo, con la que se trabajará en principio
encuesta = EncuestaOrigenDestino

De igual forma, cargamos el Data Frame Spacial (Polinomios) de las comunas correspondientes a la ciudad de Santiago de Cali, Colombia.

#carga DF Spacial Polynom
comunas = shapefile("C:/Users/gusta/OneDrive/Escritorio/Maestria_Ciencia_ Datos/2do Semestre/Georeferenciación/Casos/Casos/cali/Comunas.shp")
print(comunas)
## class       : SpatialPolygonsDataFrame 
## features    : 22 
## extent      : 1053868, 1068492, 860190.2, 879441.5  (xmin, xmax, ymin, ymax)
## crs         : +proj=tmerc +lat_0=3.441883333 +lon_0=-76.5205625 +k=1 +x_0=1061900.18 +y_0=872364.63 +a=6379137 +rf=298.257222101 +units=m +no_defs 
## variables   : 4
## names       : OBJECTID, gid, comuna,   nombre 
## min values  :        1,  89,      1, Comuna 1 
## max values  :       22, 110,     22, Comuna 9

Antes de realizar el procesamiento de los datos, es necesario conocer como están compuestos. Para ello, se realiza el siguiente análisis exploratorio:

  1. Cantidad de registros, atributos y clase.
  2. Datos faltantes por variables
  3. Registros duplicados.
  4. Consistencia de las variables de interés (origen, destino, medio de transporte)
  5. Cambiar el tipo de variables “tipo de vehículo” de numéricas a sus nombres.

Se puede observar que, hay varias variables con un elevado número de datos faltantes en columnas como: “otro, cual”, ”antes”, “despues”, “¿disponía de vehiculo”, entre otros. Sin embargo, estas variables no tendrán mayor injerencia en el desarrollo del análisis.

#Conocer los datos faltantes de la base de datos
faltantes = colSums(is.na(encuesta)) %>%
  as.data.frame()
colnames(faltantes) = "Datos Faltantes"

kable(faltantes, caption = " ") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = FALSE, position = "center")
Datos Faltantes
FECHA 0
ID ESTACIÓN 0
ESTACIÓN 0
ACCESO 0
MOVIMIENTO 0
Hora de Encuesta 0
MUNICIPIO…7 38
DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN…8 0
Codigo Origen_SDG 0
¿QUE ESTABA HACIENDO EN ESE LUGAR? 383
MUNICIPIO…11 41
DEPARTAMENTO / LOCALIDAD / COMUNA / DISTRITO / BARRIO / VEREDA / HITO / DIRECCIÓN…12 1
Codigo Destino_SDG 0
¿QUE VA HACER A ESE LUGAR? 154
ESTRATO EN SU VIVIENDA 1231
¿DISPONIA DE UN VEHÍCULO PARA REALIZAR ESTE DESPLAZAMIENTO? 18189
OTRO ¿CUÁL?…17 35054
ANTES 34919
DESPUES 35001
EDAD 479
SEXO 731
PERSONAS EN EL VEHÍCULO 118
TIPO DE VEHÍCULO 115
OTRO ¿CUÁL?…24 35054
TIPO DE VIAJERO 129
comuna origen 0
comuna destino 0
Intracomuna 0

De igual forma, hay un dato repetido el cual se procederá con su eliminación.

# Contar registros duplicados en el dataframe
duplicados = sum(duplicated(encuesta))

resultado_duplicados = data.frame(
  Descripción = "Registros duplicados",
  Cantidad = duplicados
)

kable(resultado_duplicados, col.names = c("Descripción", "Cantidad"), format = "html") %>%
  kable_styling(position = "center", full_width = F) %>%
  column_spec(1:2, width = "5cm")
Descripción Cantidad
Registros duplicados 1

A continuación, podemos observar la frecuencia que tienen la comuna de Origen, en donde en principio vemos que hay valores como 0 y fuera de cali, que procederemos con su eliminación al no ser útiles en el análisis. Se puede observar que las variables que más tienen participación, a nivel general, son la 2, la 19, 17 y 3.

#Ver frecuencia de categorías en la variable "Comuna de Origen"
kbl(addmargins(table(encuesta$`comuna origen`, useNA = "ifany")), caption = "<center><b>Tabla 1. Frecuencia de la variable Comuna Origen</b></center>", col.names=c("Comuna","Frecuencia"))%>%
  kable_classic(full_width = F)
Tabla 1. Frecuencia de la variable Comuna Origen
Comuna Frecuencia
0 672
01 794
02 2968
03 2121
04 1493
05 664
06 998
07 734
08 1124
09 952
10 1401
11 925
12 348
13 1238
14 685
15 1171
16 993
17 2377
18 1536
19 2850
20 733
21 818
22 1153
Fuera de Cali 6306
Sum 35054

Por su parte, las comunas que más participación tienen como destino de las personas son la 02,03, 19 y 17. Ahora, procederemos a realizar el procesamiento de algunas variables para determinar el comportamiento que tienen según lo pedido en el ejercicio.

#Ver frecuencia de categorías en la variable "Comuna Destino"
kbl(addmargins(table(encuesta$`comuna destino`, useNA = "ifany")), caption = "<center><b>Tabla 2. Frecuencia de la variable Comuna Destino</b></center>", col.names=c("Comuna","Frecuencia"))%>%
  kable_classic(full_width = F)
Tabla 2. Frecuencia de la variable Comuna Destino
Comuna Frecuencia
0 788
01 230
02 4810
03 3859
04 1856
05 522
06 716
07 748
08 1025
09 1279
10 927
11 564
12 246
13 673
14 379
15 579
16 743
17 2164
18 662
19 3158
20 351
21 515
22 1860
Fuera de Cali 6400
Sum 35054

Ahora, procedemos a organizar la base de datos y realizar los filtros necesarios de acuerdo a la actividad: “Tipo de vehículo”, “Comuna origen” y “Comuna destino” y el “Municipio”. En ese mismo sentido, como parte del pre procesamiento eliminamos algunos atributos de la variables que no corresponden al analisis, y cambiamos tipograficamente el nombre para mejor entendimiento de las variables.

Por ultimo, cambiamos el tipo de dato en las variables de las comunas que en un principio era caracter, ahora pasan a numérico y se eliminar los NA que podrían existir.

# Crea un nuevo dataframe 'df' con las variables a filtrar: Comuna Orige y Comuna Destino y Municipio de Cali
df = encuesta[, c("TIPO DE VEHÍCULO", "MUNICIPIO...7", "comuna origen", "MUNICIPIO...11", "comuna destino")]


# Eliminar las filas de 'df' donde 'Comuna Origen y Destino' son cero '0' o 'Fuera de Cali'y, donde 'MUNICIPIO_ORIGEN' y 'MUNICIPIO_DESTINO' son diferentes de 'CALI'
df = df[!(df$`comuna origen` %in% c("0", "Fuera de Cali") | 
             df$`comuna destino` %in% c("0", "Fuera de Cali")) & 
           df$`TIPO DE VEHÍCULO` %in% c("1", "2", "3") & 
           df$`MUNICIPIO...7` == "CALI" & 
           df$`MUNICIPIO...11` == "CALI", ]


# Renombrar las columnas para mejor entendimiento
df = df %>%
  rename(`municipio de origen` = `MUNICIPIO...7`,
         `municipio destino` = `MUNICIPIO...11`,
         `tipo de vehículo` = `TIPO DE VEHÍCULO`)


# Cambiar los valores de "TIPO DE VEHÍCULO"
df$`tipo de vehículo` <- recode(df$`tipo de vehículo`, 
                                "1" = "Bicicleta", 
                                "2" = "Moto", 
                                "3" = "Automóvil")

# Convertir 'Comuna Origen' y 'Comuna Destino' a numéricas
df$`comuna origen` = as.numeric(as.character(df$`comuna origen`))
df$`comuna destino` = as.numeric(as.character(df$`comuna destino`))

# Eliminar filas con valores faltantes
df = na.omit(df)

Se valida que el nuevo dataset no tenga columnas con datos perdidos.

#Conocer los datos faltantes de la nueva BD filtrada
faltantes = colSums(is.na(df)) %>%
  as.data.frame()
colnames(faltantes) = "Datos Faltantes 'df'"

kable(faltantes, caption = " ") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = FALSE, position = "center")
Datos Faltantes ‘df’
tipo de vehículo 0
municipio de origen 0
comuna origen 0
municipio destino 0
comuna destino 0

Se muestra un ejemplo del nuevo dataset con las variables a considerar en el ejercicio.

# Mostrar una vista aleatoria filas del dataset
df %>% 
  sample_n(10) %>% 
  kable("html", caption = "Muestra aleatoria de 10 filas") %>% 
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center")
Muestra aleatoria de 10 filas
tipo de vehículo municipio de origen comuna origen municipio destino comuna destino
Moto CALI 10 CALI 2
Automóvil CALI 8 CALI 17
Automóvil CALI 6 CALI 14
Moto CALI 3 CALI 2
Automóvil CALI 18 CALI 2
Bicicleta CALI 18 CALI 19
Moto CALI 3 CALI 19
Automóvil CALI 13 CALI 3
Automóvil CALI 2 CALI 20
Moto CALI 20 CALI 3

2. Realización de mapas y análisis de resultados.

Analisis del movimiento de personas por Comuna de Origen con los vehiculos del analisis (bicicleta, moto y automovil)

Las comunas desde donde se originan el mayor número de viajes independientemente del medio de transporte que utilizan estás personas son: Comuna 2 (2.044 - 10.2%), seguido de la Comuna 19 (2.030 - 10.1%), Comuna 17 (1.616 - 8.04%) y la Comuna 3 (1.463 - 7.27%).

En contraste, la comuna donde se origina el menor número de viajes es la 12 con 231 viajes, equivalente a un 1.15%.

# Agrupar y contar los movimientos por comuna de origen
conteo_movimientos_or = df %>%
  group_by(`comuna origen`) %>%
  summarize(total_movimientos = n(), .groups = "drop")

# Calcular el porcentaje sobre el total
conteo_movimientos_or = conteo_movimientos_or %>%
  mutate(porcentaje = round((total_movimientos / sum(total_movimientos)) * 100, 2))

# Mostrar el dataframe resultante
formattable(conteo_movimientos_or)
comuna origen total_movimientos porcentaje
1 562 2.79
2 2044 10.16
3 1463 7.27
4 1072 5.33
5 473 2.35
6 719 3.57
7 531 2.64
8 786 3.91
9 648 3.22
10 1010 5.02
11 649 3.23
12 231 1.15
13 927 4.61
14 525 2.61
15 887 4.41
16 768 3.82
17 1618 8.04
18 1111 5.52
19 2030 10.09
20 539 2.68
21 630 3.13
22 900 4.47
# Unir los datos espaciales
ComunaOrigen = merge(comunas, conteo_movimientos_or, 
                      by.x = "comuna", by.y = "comuna origen", all.x = TRUE)

# Calcular los centroides de cada comuna
centroids_origen = coordinates(ComunaOrigen)

# Definir la paleta de colores
palette_or = brewer.pal(n = 9, name = "Spectral")

# Visualizar los resultados
grafico_origen = spplot(ComunaOrigen, "total_movimientos",
                         main = "Comuna de Origen",
                         col.regions = palette_or, cuts = 6, col = "black") +
  layer(panel.text(centroids_origen[,1], centroids_origen[,2], 
                   labels = ComunaOrigen$comuna, 
                   cex = 0.7, col = "black", pos = 3))
grafico_origen

Analisis del movimiento de personas por Comuna Destino con los vehiculos del analisis (bicicleta, moto y automovil)

De acuerdo con la siguiente información, se puede observar que independientemente del medio de transporte, las comunas que mayor afluencia de destino tienen son la 2, 3 y 19 con un 17.1%, 12.9% y 11%, respectivamente. Estas tres comunas representan un poco más del 40% de la movilidad de personas como destino.

# Agrupar y contar los movimientos por comuna de destino
conteo_movimientos_destino = df %>%
  group_by(`comuna destino`) %>%
  summarize(total_movimientos = n(), .groups = "drop")

# Calcular el porcentaje sobre el total
conteo_movimientos_destino = conteo_movimientos_destino %>%
  mutate(porcentaje = round((total_movimientos / sum(total_movimientos)) * 100, 2))

# Mostrar la tabla completa
formattable(conteo_movimientos_destino)
comuna destino total_movimientos porcentaje
1 172 0.85
2 3445 17.12
3 2594 12.89
4 1353 6.72
5 402 2.00
6 494 2.45
7 539 2.68
8 753 3.74
9 950 4.72
10 678 3.37
11 447 2.22
12 190 0.94
13 502 2.49
14 290 1.44
15 448 2.23
16 596 2.96
17 1488 7.39
18 484 2.41
19 2206 10.96
20 277 1.38
21 390 1.94
22 1425 7.08
# Gráfico movimientos por comuna de destino
# Unir los datos espaciales
ComunaDestino = merge(comunas, conteo_movimientos_destino, 
                       by.x = "comuna", by.y = "comuna destino", all.x = TRUE)

#Calcular los centroides de cada comuna
centroids_destino = coordinates(ComunaDestino)

#Definir la paleta de colores
palette_dest = brewer.pal(n = 9, name = "Spectral")

#Visualizar los resultados
grafico_destino = spplot(ComunaDestino, "total_movimientos",
                          main = "Comuna Destino",
                          col.regions = palette_dest, cuts = 6, col = "black") +
  layer(panel.text(centroids_destino[,1], centroids_destino[,2], 
                   labels = ComunaDestino$comuna, 
                   cex = 0.7, col = "black", pos = 3))

grafico_destino

Ahora, se realizará el analisis por cada tipo de transporte. En este, se creará una tabla por origen y destino, filtrando bicicleta, moto y automóvil.

# Agrupar y contar los movimientos por comuna de origen y tipo de vehículo
conteo_movimientos_origen = df %>%
  filter(`tipo de vehículo` %in% c("Moto", "Bicicleta", "Automóvil")) %>%
  group_by(`tipo de vehículo`, `comuna origen`) %>%
  summarize(total_movimientos = n(), .groups = "drop")

# Calcular el porcentaje sobre el total de cada tipo de vehículo
conteo_movimientos_origen = conteo_movimientos_origen %>%
  group_by(`tipo de vehículo`) %>%
  mutate(porcentaje = round((total_movimientos / sum(total_movimientos)) * 100, 2)) %>%
  ungroup()

# Filtrar los datos por tipo de vehículo
bicicleta_origen = conteo_movimientos_origen %>% filter(`tipo de vehículo` == "Bicicleta")
moto_origen = conteo_movimientos_origen %>% filter(`tipo de vehículo` == "Moto")
automovil_origen = conteo_movimientos_origen %>% filter(`tipo de vehículo` == "Automóvil")

Analisis del movimiento de personas en Bicicleta por Comuna de Origen

La movilidad en bicicleta tiene una baja representatividad, solo en algunos casos sobrepasa los 100 movimientos de origen de las personas. Igualmente la comuna 2 y 19 son las que mayor movimientos tienes con 122 (9.98%) y 103 (9.24%), respectivamente. La comuna de menor movimiento de origen en bicicleta es la 12 con un 0.82%. De igual forma se observa la existencia de un corredor vial para bicicletas en la zona occidente de la ciudad, representando una menor salida de personas en bicicleta desde la zona oriente.

formattable(bicicleta_origen)
tipo de vehículo comuna origen total_movimientos porcentaje
Bicicleta 1 32 2.62
Bicicleta 2 122 9.98
Bicicleta 3 84 6.87
Bicicleta 4 58 4.74
Bicicleta 5 28 2.29
Bicicleta 6 29 2.37
Bicicleta 7 30 2.45
Bicicleta 8 46 3.76
Bicicleta 9 36 2.94
Bicicleta 10 71 5.81
Bicicleta 11 42 3.43
Bicicleta 12 10 0.82
Bicicleta 13 62 5.07
Bicicleta 14 32 2.62
Bicicleta 15 55 4.50
Bicicleta 16 65 5.31
Bicicleta 17 103 8.42
Bicicleta 18 85 6.95
Bicicleta 19 113 9.24
Bicicleta 20 33 2.70
Bicicleta 21 35 2.86
Bicicleta 22 52 4.25
# Filtrar tipo de vehículo "Bicicleta"
Bicicleta = subset(df, `tipo de vehículo` == "Bicicleta")

# Consolidar datos para bicicletas
ComunaOrigenBici = table(Bicicleta$`comuna origen`)
ComunaOrigenBici = as.data.frame(ComunaOrigenBici)
colnames(ComunaOrigenBici) <- c("comuna", "conteo")

# agrupar datos espaciales
ComunaOrigenBici_mp = merge(comunas, ComunaOrigenBici, by = "comuna", all.x = TRUE)

# Visualización espacial
bicicleta_origen = spplot(ComunaOrigenBici_mp, "conteo",
       main = "Origen Bicicleta",
       col.regions = colorRampPalette(c("lightblue", "darkblue"))(100),
       cuts = 10, col = "black")
bicicleta_origen

Analisis del movimiento de personas en Bicicleta por Comuna Destino

# Agrupar y contar los movimientos por comuna de destino y tipo de vehículo
conteo_movimientos_destino = df %>%
  filter(`tipo de vehículo` %in% c("Moto", "Bicicleta", "Automóvil")) %>%
  group_by(`tipo de vehículo`, `comuna destino`) %>%
  summarize(total_movimientos = n(), .groups = "drop")

# Calcular el porcentaje sobre el total de cada tipo de vehículo
conteo_movimientos_destino = conteo_movimientos_destino %>%
  group_by(`tipo de vehículo`) %>%
  mutate(porcentaje = round((total_movimientos / sum(total_movimientos)) * 100, 2)) %>%
  ungroup()

# Filtrar los datos por tipo de vehículo
bicicleta_destino = conteo_movimientos_destino %>% filter(`tipo de vehículo` == "Bicicleta")
moto_destino = conteo_movimientos_destino %>% filter(`tipo de vehículo` == "Moto")
automovil_destino = conteo_movimientos_destino %>% filter(`tipo de vehículo` == "Automóvil")

Por su parte, los destinos de las personas están comprendidos por las comunas 2, 3, 19, 17 y 22. Estas 5 comunas tienen más de 55% como ruta de destino de las personas en bicicleta. De igual forma, se observa una mayor acumulación de personas con destino en bicicleta para las comunas noriente de la ciudad, y se conserva ese mapa de intensidad hacia el sur.

formattable(bicicleta_destino)
tipo de vehículo comuna destino total_movimientos porcentaje
Bicicleta 1 9 0.74
Bicicleta 2 194 15.86
Bicicleta 3 169 13.82
Bicicleta 4 80 6.54
Bicicleta 5 38 3.11
Bicicleta 6 31 2.53
Bicicleta 7 36 2.94
Bicicleta 8 46 3.76
Bicicleta 9 56 4.58
Bicicleta 10 34 2.78
Bicicleta 11 26 2.13
Bicicleta 12 13 1.06
Bicicleta 13 28 2.29
Bicicleta 14 20 1.64
Bicicleta 15 17 1.39
Bicicleta 16 31 2.53
Bicicleta 17 95 7.77
Bicicleta 18 28 2.29
Bicicleta 19 131 10.71
Bicicleta 20 22 1.80
Bicicleta 21 24 1.96
Bicicleta 22 95 7.77
# Consolidado datos para bicicletas (Destino)
ComunaDestinoBici = table(Bicicleta$`comuna destino`)
ComunaDestinoBici = as.data.frame(ComunaDestinoBici)
colnames(ComunaDestinoBici) = c("comuna", "conteo")

# agrupar datos espaciales
ComunaDestinoBici_mp = merge(comunas, ComunaDestinoBici, by = "comuna", all.x = TRUE)

# Visualización espacial
bicicleta_destino = spplot(ComunaDestinoBici_mp, "conteo",
       main = "Destino Bicicleta",
       col.regions = colorRampPalette(c("lightblue", "darkblue"))(100),
       cuts = 10, col = "black")
bicicleta_destino

Analisis del movimiento de personas en Moto por Comuna de Origen

La moto resulta siendo uno de los medios con mayor uso por los encuestados para realizar sus desplazamientos. De igual forma, la comuna 2 es la de mayor representatividad con un 10.31% de movimientos de origen, seguido de la comuna 19 (9.66% )y la 17 (8.28%).

formattable(moto_origen)
tipo de vehículo comuna origen total_movimientos porcentaje
Moto 1 296 2.87
Moto 2 1062 10.31
Moto 3 701 6.80
Moto 4 571 5.54
Moto 5 260 2.52
Moto 6 377 3.66
Moto 7 272 2.64
Moto 8 421 4.09
Moto 9 317 3.08
Moto 10 535 5.19
Moto 11 339 3.29
Moto 12 133 1.29
Moto 13 453 4.40
Moto 14 258 2.50
Moto 15 455 4.42
Moto 16 383 3.72
Moto 17 853 8.28
Moto 18 593 5.76
Moto 19 995 9.66
Moto 20 278 2.70
Moto 21 323 3.14
Moto 22 427 4.14
# Filtrar datos para motos
Motos = subset(df, `tipo de vehículo` == "Moto")

# Consolidado datos para motos (Origen)
ComunaOrigenMoto = table(Motos$`comuna origen`)
ComunaOrigenMoto = as.data.frame(ComunaOrigenMoto)
colnames(ComunaOrigenMoto) <- c("comuna", "conteo")

# agrupar los datos espaciales
ComunaOrigenMoto_mp = merge(comunas, ComunaOrigenMoto, by = "comuna", all.x = TRUE)

# Visualización espacial
moto_origen = spplot(ComunaOrigenMoto_mp, "conteo",
       main = "Origen Motos",
       col.regions = colorRampPalette(c("lightcoral", "darkred"))(100),
       cuts = 10, col = "black")
moto_origen

Analisis del movimiento de personas en Moto por Comuna Destino

Los destinos en moto tienen una mayor tasa de movimientos y representatividad, alcanzando casi los 1800 registros. La comuna 2 con un 16.83% y la comuna 3 con un 12.91%. La comuna 1 es la de menor participación con 90 movimientos representando un 0.87%.

formattable(moto_destino)
tipo de vehículo comuna destino total_movimientos porcentaje
Moto 1 90 0.87
Moto 2 1734 16.83
Moto 3 1330 12.91
Moto 4 678 6.58
Moto 5 183 1.78
Moto 6 255 2.48
Moto 7 279 2.71
Moto 8 382 3.71
Moto 9 512 4.97
Moto 10 353 3.43
Moto 11 217 2.11
Moto 12 106 1.03
Moto 13 285 2.77
Moto 14 150 1.46
Moto 15 232 2.25
Moto 16 290 2.81
Moto 17 743 7.21
Moto 18 240 2.33
Moto 19 1151 11.17
Moto 20 124 1.20
Moto 21 202 1.96
Moto 22 766 7.44
# Consolidado datos para motos (Destino)
ComunaDestinoMoto = table(Motos$`comuna destino`)
ComunaDestinoMoto = as.data.frame(ComunaDestinoMoto)
colnames(ComunaDestinoMoto) = c("comuna", "conteo")

# agrupar datos espaciales
ComunaDestinoMoto_mp = merge(comunas, ComunaDestinoMoto, by = "comuna", all.x = TRUE)

# Visualización espacial
moto_destino = spplot(ComunaDestinoMoto_mp, "conteo",
       main = "Destino Motos",
       col.regions = colorRampPalette(c("lightcoral", "darkred"))(100),
       cuts = 10, col = "black")
moto_destino

Analisis del movimiento de personas en Automovil por Comuna de Origen

En automóvil, el origen de los movimientos está representado por un 10.72 desde la comuna 19 con un 10.72% seguido de la comuna 2 con un 10%. Los movimientos en este transporte, logran alcanzar hasta un valor de 1000 según lo recogido en la encuesta.

formattable(automovil_origen)
tipo de vehículo comuna origen total_movimientos porcentaje
Automóvil 1 234 2.72
Automóvil 2 860 10.00
Automóvil 3 678 7.89
Automóvil 4 443 5.15
Automóvil 5 185 2.15
Automóvil 6 313 3.64
Automóvil 7 229 2.66
Automóvil 8 319 3.71
Automóvil 9 295 3.43
Automóvil 10 404 4.70
Automóvil 11 268 3.12
Automóvil 12 88 1.02
Automóvil 13 412 4.79
Automóvil 14 235 2.73
Automóvil 15 377 4.38
Automóvil 16 320 3.72
Automóvil 17 662 7.70
Automóvil 18 433 5.04
Automóvil 19 922 10.72
Automóvil 20 228 2.65
Automóvil 21 272 3.16
Automóvil 22 421 4.90
# Filtrar datos para automóviles
Automoviles = subset(df, `tipo de vehículo` == "Automóvil")

# Consolidado datos para automóviles (Origen)
ComunaOrigenAuto = table(Automoviles$`comuna origen`)
ComunaOrigenAuto = as.data.frame(ComunaOrigenAuto)
colnames(ComunaOrigenAuto) = c("comuna", "conteo")

# agrupar datos espaciales
ComunaOrigenAuto_mp = merge(comunas, ComunaOrigenAuto, by = "comuna", all.x = TRUE)

# Visualización espacial
auto_origen = spplot(ComunaOrigenAuto_mp, "conteo",
       main = "Origen Automovil",
       col.regions = colorRampPalette(c("lightgreen", "darkgreen"))(100),
       cuts = 10, col = "black")
auto_origen

Analisis del movimiento de personas en Automovil por Comuna Destino

El destino en automóvil logra tener un mayor valor porcentual en comparación de los orígenes, las comunas 2, 3 y 19 alcanzan una participación cercana al 40%. La comuna 1 y 2 son las menos preferidad como destino en este tipo de vehiclo con valores 0.85 y 0.83%.

formattable(automovil_destino)
tipo de vehículo comuna destino total_movimientos porcentaje
Automóvil 1 73 0.85
Automóvil 2 1517 17.64
Automóvil 3 1095 12.74
Automóvil 4 595 6.92
Automóvil 5 181 2.11
Automóvil 6 208 2.42
Automóvil 7 224 2.61
Automóvil 8 325 3.78
Automóvil 9 382 4.44
Automóvil 10 291 3.38
Automóvil 11 204 2.37
Automóvil 12 71 0.83
Automóvil 13 189 2.20
Automóvil 14 120 1.40
Automóvil 15 199 2.31
Automóvil 16 275 3.20
Automóvil 17 650 7.56
Automóvil 18 216 2.51
Automóvil 19 924 10.75
Automóvil 20 131 1.52
Automóvil 21 164 1.91
Automóvil 22 564 6.56
# Consolidado datos para automóviles (Destino)
ComunaDestinoAuto = table(Automoviles$`comuna destino`)
ComunaDestinoAuto = as.data.frame(ComunaDestinoAuto)
colnames(ComunaDestinoAuto) = c("comuna", "conteo")

# agrupar datos espaciales
ComunaDestinoAuto_mp = merge(comunas, ComunaDestinoAuto, by = "comuna", all.x = TRUE)

# Visualización espacial
auto_destino = spplot(ComunaDestinoAuto_mp, "conteo",
       main = "Destino Automovil",
       col.regions = colorRampPalette(c("lightgreen", "darkgreen"))(100),
       cuts = 10, col = "black")
auto_destino

3. Conclusiones

  • Las comunas de destino más importantes son la 2, 3, 19 y 17, en este caso la comuna de mayor tráfico es la 2 y sus comunas aledañas son las que le siguen en participación. La comuna 2 está integra por barrios del nor occidente de la ciudad como Altos de Menga, Alameda del Río, Arboleda, Brisas de los Álamos, Centenario, Chipichape, Ciudad Los Álamos, El Bosque, entre otros. Las zonas del centro y el oriente presentan información muy baja, quizá se deba a algún sesgo en la toma de registros de la encuesta, pues las comunas 13 y 14 son las que mayor cantidad de habitantes tienen en la ciudad (171 y 174 mil habitantes), estas comunas del oriente de la ciudad suelen ser las más pobladas debido a su alta densidad y extensión.
  • Las motos representan el mayor medio y espacio de transporte de la ciudadanía de Cali. Quizá por su facilidad de adquisición y la misma ocupación de espacio que tienen los autos, las personas suelen utilizar este transporte, además de otros factores como economía de uso y mantenimiento, y factores de la ciudad como el clima.
  • Las Bicicletas representan el medio de transporte con menor uso, al ser un medio de transporte de corto alcance y no de viajes largos existe la probabilidad de que las personas se desplacen dentro de la misma comuna. La ciudad hace poco ha venido implementando estrategias para dar espacio a este medio de transporte, habría que revisar datos con una encuesta más actualizada, quizá pueda tener algo de participación. En varias instituciones se incentiva su uso, como premios y obsequios, además del uso en horas pico.

A continuación, para realizar un ejercicio visual de lo analizado anteriormente, se propone consolidar la información para los movimientos de origen y destino, además de los tres medios de transporte. En estos se ven los tonos con mayor color, los que más participación tienen:

grid.arrange(grafico_origen, grafico_destino, ncol = 2, nrow = 1)

grid.arrange(bicicleta_origen, moto_origen, auto_origen, ncol = 3, nrow = 1)

grid.arrange(bicicleta_destino, moto_destino, auto_destino, ncol = 3, nrow = 1)