Estadística Espacial y conceptos de CartografíaEl 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.
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:
Entendimiento de los datos (Análisis exploratorio y preparación de datos).
Realización de mapas y análisis de resultados.
Conclusiones
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.
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)
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:
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)
| 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)
| 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")
| 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 |
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
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")
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
# 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
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
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
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
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
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)