Actividad 1 - Resumen

En este trabajo intentamos responder de donde salen y hacia donde llegan la mayoria de las personas de las diferentes comunas de la ciudad de Cali, lo haremos de una manera grafica y sencilla con la ayuda de los shapefiles y mapas y nos enfocaremos en los tipos de vehiculos (bicicleta, moto y automóvil).

Lo haremos ilustrando los siguientes mapas:

# Mapa
1 Origen - todos los viajes
2 Destino - todos los viajes
3 Origen - Bicicleta
4 Origen - Moto
5 Origen - Automóvil
6 Destino - Bicicleta
7 Destino - Moto
8 Destino - Automóvil

Importamos los datos espaciales (shapefile de comunas)

Igual que en el ejemplo de clase, cargamos el shapefile de las comunas de Cali con la función shapefile de la librería raster.

require(raster)
require(sp)
require(readxl)
require(leaflet)

comunas = shapefile("Casos/Casos/cali/Comunas.shp")
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
plot(comunas)

El shapefile tiene 22 polígonos (una por comuna) y está en el sistema de coordenadas MAGNA Cali (en metros). por razones de visibilidad y detalles le aposté a la libreria leaflet pero esta solo trabaja con coordenadas geográficas, entonces lo transformamos con spTransform:

comunas2 = spTransform(comunas, CRS("+proj=longlat +ellps=WGS84 +datum=WGS84"))
head(comunas2@data)
##   OBJECTID gid comuna    nombre
## 1        1 107      2  Comuna 2
## 2        2 108      1  Comuna 1
## 3        3 109      3  Comuna 3
## 4        4 110     19 Comuna 19
## 5        5 103     15 Comuna 15
## 6        6 104     17 Comuna 17

Importamos los datos de la Encuesta Origen - Destino

En el archivo solo nos interesan las columnas, tipo y comuna de origen y destino. Además necesitamos la tabla dimensional del archivo convenciones.

  • TIPO DE VEHÍCULO (columna 23): 1 = Bicicleta, 2 = Moto, 3 = Automóvil (según la hoja de convenciones).
  • comuna origen (columna 26) y comuna destino (columna 27).
encuesta = read_excel("Casos/Casos/EncuestaOrigenDestino.xlsx", sheet = 1, col_types = "text")
dim(encuesta)
## [1] 35054    28
datos = data.frame(
  vehiculo = suppressWarnings(as.numeric(encuesta[[23]])),
  origen   = suppressWarnings(as.numeric(encuesta[[26]])),
  destino  = suppressWarnings(as.numeric(encuesta[[27]]))
)

datos$tipo = factor(datos$vehiculo, levels = c(1, 2, 3),
                    labels = c("Bicicleta", "Moto", "Automovil"))
head(datos)
##   vehiculo origen destino      tipo
## 1        2      2      22      Moto
## 2        3     NA      19 Automovil
## 3        2     NA       3      Moto
## 4        2     NA       9      Moto
## 5        2     NA       2      Moto
## 6        3     NA       2 Automovil

Algunos viajes vienen de (o van hacia) fuera de Cali o tienen comuna 0. Como esos registros no caen dentro del mapa de comunas, se excluyen al momento de contar:

# Registros que no caen dentro de las 22 comunas
sum(!(datos$origen %in% 1:22))
## [1] 6978
sum(!(datos$destino %in% 1:22))
## [1] 7188

Funciones para los calculos

Para no repetir código creamos dos funciones: una que cuenta los viajes por comuna y la agrega al shapefile, y otra que dibuja el mapa de coropletas con leaflet.

# Cuenta los viajes por comuna (solo comunas 1 a 22)
contar_comuna = function(x) {
  x = x[x %in% 1:22]
  conteo = table(factor(x, levels = 1:22))
  as.numeric(conteo[as.character(comunas2$comuna)])
}

# Dibuja el mapa de coropletas
mapa_comunas = function(valores, titulo, paleta = "YlOrRd") {
  pal = colorNumeric(palette = paleta, domain = valores)
  etiquetas = lapply(sprintf("<b>%s</b><br/>Viajes: %s<br/>Participación: %.1f%%",
                             comunas2$nombre,
                             format(valores, big.mark = ".", decimal.mark = ",", trim = TRUE),
                             100 * valores / sum(valores)),
                     htmltools::HTML)
  leaflet(comunas2) %>%
    addTiles() %>%
    addPolygons(fillColor = ~pal(valores), fillOpacity = 0.75,
                color = "white", weight = 1.5,
                label = etiquetas,
                highlightOptions = highlightOptions(weight = 3, color = "#444",
                                                    bringToFront = TRUE)) %>%
    addLabelOnlyMarkers(lng = coordinates(comunas2)[, 1],
                        lat = coordinates(comunas2)[, 2],
                        label = as.character(comunas2$comuna),
                        labelOptions = labelOptions(noHide = TRUE, textOnly = TRUE,
                                                    style = list("font-weight" = "bold"))) %>%
    addLegend(pal = pal, values = valores, title = titulo, position = "bottomright")
}

# Tabla con las 5 comunas con más viajes
top5 = function(valores) {
  tabla = data.frame(Comuna = comunas2$nombre, Viajes = valores,
                     Porcentaje = round(100 * valores / sum(valores), 1))
  head(tabla[order(-tabla$Viajes), ], 5)
}

Ahora calculamos todos los conteos y los guardamos como nuevas columnas en la tabla de atributos del shapefile:

bici = datos$tipo %in% "Bicicleta"
moto = datos$tipo %in% "Moto"
auto = datos$tipo %in% "Automovil"

comunas2$origen         = contar_comuna(datos$origen)
comunas2$destino        = contar_comuna(datos$destino)
comunas2$origen_bici    = contar_comuna(datos$origen[bici])
comunas2$origen_moto    = contar_comuna(datos$origen[moto])
comunas2$origen_auto    = contar_comuna(datos$origen[auto])
comunas2$destino_bici   = contar_comuna(datos$destino[bici])
comunas2$destino_moto   = contar_comuna(datos$destino[moto])
comunas2$destino_auto   = contar_comuna(datos$destino[auto])

head(comunas2@data)
##   OBJECTID gid comuna    nombre origen destino origen_bici origen_moto
## 1        1 107      2  Comuna 2   2968    4810         159        1414
## 2        2 108      1  Comuna 1    794     230          36         375
## 3        3 109      3  Comuna 3   2121    3859          99         970
## 4        4 110     19 Comuna 19   2850    3158         141        1280
## 5        5 103     15 Comuna 15   1171     579          70         536
## 6        6 104     17 Comuna 17   2377    2164         141        1136
##   origen_auto destino_bici destino_moto destino_auto
## 1        1121          218         2177         2006
## 2         301           12          112           86
## 3         854          189         1734         1557
## 4        1165          147         1421         1302
## 5         456           20          271          245
## 6         899          115          927          959

Mapas generales

Mapa 1: Origen de los viajes

mapa_comunas(comunas2$origen, "Viajes que salen", "YlOrRd")
knitr::kable(top5(comunas2$origen), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 2 2968 10.6
Comuna 19 2850 10.2
Comuna 17 2377 8.5
Comuna 3 2121 7.6
Comuna 18 1536 5.5

Resumen La mayoría de las personas salen de la Comuna 2 y la Comuna 19, seguidas de la 17 y la 3. Entre esas cuatro concentran más de la tercera parte de los viajes que se originan dentro de Cali. Las comunas con menos salidas son la 12, la 5 y la 14.

Mapa 2: Destino de los viajes

mapa_comunas(comunas2$destino, "Viajes que llegan", "Blues")
knitr::kable(top5(comunas2$destino), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 2 4810 17.3
Comuna 3 3859 13.8
Comuna 19 3158 11.3
Comuna 17 2164 7.8
Comuna 22 1860 6.7

Resumen Los destinos están mucho más concentrados que los orígenes: la Comuna 2 recibe la mayor cantidad de viajes, seguida de la Comuna 3 (el centro de la ciudad) y la Comuna 19. Esto tiene sentido porque allí se ubican muchas oficinas, comercio y servicios. Las comunas que menos viajes reciben son la 1, la 12 y la 20, que son principalmente residenciales.

Mapas de origen por tipo de vehículo

Mapa 3: Origen - Bicicleta

mapa_comunas(comunas2$origen_bici, "Salidas en bicicleta", "Greens")
knitr::kable(top5(comunas2$origen_bici), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 2 159 10.4
Comuna 19 141 9.2
Comuna 17 141 9.2
Comuna 18 111 7.2
Comuna 3 99 6.5

Resumen Los ciclistas salen principalmente de las comunas 2, 17 y 19, y también de la 18. La bicicleta es el modo con menos registros en la encuesta, así que los números son más pequeños, pero se nota una presencia importante en el sur de la ciudad.

Mapa 4: Origen - Moto

mapa_comunas(comunas2$origen_moto, "Salidas en moto", "Oranges")
knitr::kable(top5(comunas2$origen_moto), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 2 1414 10.8
Comuna 19 1280 9.8
Comuna 17 1136 8.7
Comuna 3 970 7.4
Comuna 18 746 5.7

Resumen del mapa La moto es el vehículo con más viajes registrados. Sus salidas siguen el mismo patrón general: Comuna 2, 19 y 17 a la cabeza. Se distribuyen de forma bastante amplia por toda la ciudad, lo que muestra que la moto es usada en casi todas las comunas.

Mapa 5: Origen - Automóvil

mapa_comunas(comunas2$origen_auto, "Salidas en automóvil", "Purples")
knitr::kable(top5(comunas2$origen_auto), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 19 1165 10.7
Comuna 2 1121 10.3
Comuna 17 899 8.3
Comuna 3 854 7.9
Comuna 18 559 5.1

Resumen del mapa En el automóvil hay un cambio interesante: la Comuna 19 pasa al primer lugar, por encima de la 2, y la 17 también aparece con fuerza. Son comunas del sur y del norte con estratos más altos, donde es más común tener carro particular.

Mapas de destino por tipo de vehículo

Mapa 6: Destino - Bicicleta

mapa_comunas(comunas2$destino_bici, "Llegadas en bicicleta", "Greens")
knitr::kable(top5(comunas2$destino_bici), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 2 218 15.8
Comuna 3 189 13.7
Comuna 19 147 10.7
Comuna 17 115 8.3
Comuna 22 100 7.2

Resumen del mapa Los ciclistas llegan sobre todo a la Comuna 2 y la Comuna 3, seguidas de la 19. Es decir, muchas personas usan la bicicleta para ir hacia el centro y el norte, donde están sus lugares de trabajo o estudio.

Mapa 7: Destino - Moto

mapa_comunas(comunas2$destino_moto, "Llegadas en moto", "Oranges")
knitr::kable(top5(comunas2$destino_moto), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 2 2177 17.1
Comuna 3 1734 13.6
Comuna 19 1421 11.2
Comuna 17 927 7.3
Comuna 22 911 7.2

Resumen del mapa Las motos llegan principalmente a la Comuna 2, la 3 y la 19. Igual que con el total de viajes, los destinos se concentran en el eje centro - norte de la ciudad.

Mapa 8: Destino - Automóvil

mapa_comunas(comunas2$destino_auto, "Llegadas en automóvil", "Purples")
knitr::kable(top5(comunas2$destino_auto), row.names = FALSE)
Comuna Viajes Porcentaje
Comuna 2 2006 17.8
Comuna 3 1557 13.8
Comuna 19 1302 11.5
Comuna 17 959 8.5
Comuna 4 757 6.7

Resumen del mapa Los carros también llegan mayormente a la Comuna 2 y la 3, luego a la 19 y la 17. Aparece además la Comuna 4 dentro de los cinco primeros destinos, algo que no pasa con los otros vehículos.

Conclusiones

  • Se sale desde muchas partes, pero se llega a pocas. Los orígenes de los viajes están repartidos por varias comunas, mientras que los destinos se concentran en las comunas 2 y 3 (norte y centro). Estas dos comunas funcionan como los grandes “imanes” de la ciudad por su actividad comercial, laboral y de servicios.
  • Las comunas 2, 19 y 17 son las que más viajes generan. Aparecen en los primeros lugares de origen para los tres tipos de vehículo.
  • La moto es el vehículo más común en la encuesta, seguida muy de cerca por el automóvil; la bicicleta tiene una participación mucho menor.
  • El carro marca una diferencia en el sur: la Comuna 19 es el principal origen de los viajes en automóvil, lo que coincide con zonas de mayor nivel socioeconómico.
  • Las comunas 12, 1, 5, 14 y 20 son las que menos viajes generan o reciben dentro de la muestra.
  • Una parte importante de los viajes viene de fuera de Cali (municipios como Yumbo, Palmira o Jamundí); esos registros no se muestran en los mapas porque no caen dentro de las comunas, pero confirman que Cali también atrae viajes de la región.
  • Hay que tener en cuenta que es una encuesta de interceptación en puntos específicos de la vía, por lo que los resultados dependen de dónde estaban ubicadas las estaciones de encuesta; aun así, dan una idea clara de cómo se mueve la gente en la ciudad.