Primero, instalamos los paquetes necesarios para esta sesiรณn:
install.packages("leaflet")
install.packages("sp")
install.packages("chilemapas")
Cargamos los paquetes necesarios
Limpiamos el environment
rm(list=ls())
Leaflet
Leaflet
es una de las librerรญas abiertas mรกs populares y reconocidas de JavaScript
. El paquete de R con el mismo nombre nos permite crear mapas interactivos. Probablemente ya han visto mapas de leaflet
antes, porque muchรญsimas pรกginas web las utilizan, como por ejemplo http://openstreetmap.org.
leaflet
funciona por capas, y al igual que en ggplot
existen muchรญsimas capas disponibles para mejorar el aspecto de nuestros mapas. Hoy veremos:
addTiles
, addProviderTiles
)addMarkers
(lat= lng=), addAwesomeMarkers
)Para hacer nuestro primer mapa simple, vayamos a Google Maps para encontrar las coordenadas de la unviersidad. Aquรญ hacemos mapas con diferentes Provider Tiles
mapa <- leaflet() %>%
addProviderTiles(providers$Stamen.Toner) %>%
addAwesomeMarkers(lat=-33.486454, lng=-70.518628)
mapa
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addMarkers(lat=-33.486454, lng=-70.518628)
leaflet() %>%
addTiles() %>% # Por defecto
addMarkers(lat=-33.486454, lng=-70.518628)
Ahora, vamos a aprender a agregar layers
como marcadores o polรญgonos.
Abrir la base de datos Rendimiento_2018.csv
. Esta representa el rendimiento escolar de alumnos de octavo bรกsico de la Regiรณn Metropolitana, para el aรฑo 2018.
rend_2018 <- fread("Rendimiento_2018.csv")
Ahora podemos empezar a explorar nuestros datos. Primero hagamos un grรกfico simple para ver la distribuciรณn de las notas en la muestra completa:
ggplot(rend_2018[prom_gral>=50 & prom_gral<=70], aes(x=prom_gral)) +
geom_bar()
Podemos hacer un anรกlisis mรกs profundo y separar los datos por gรฉnero. Con esto, podemos ver diferencias entre el rendimiento de niรฑos y niรฑas. (Hombres gen_alu=1
y mujeres gen_alu=2
)
ggplot(rend_2018[prom_gral>=50 & prom_gral<=70], aes(x=prom_gral)) +
geom_bar(fill = "dark green") +
labs(x="Promedio General", y="Nรบmero de alumnos", title="Distribuciรณn de notas por gรฉnero", caption="Fuente: MINEDUC") +
facet_wrap(facets = "gen_alu", ncol=1)
Ahora vamos a los mapas:
Primero, vamos a abrir los datos georeferenciales de las comunas de Santiago, desde el paquete de CRAN chilemapas
. Este paquete tiene informaciรณn para generar mapas de las divisiones polรญticas y adminsitrativas de Chile. Incluye informaciรณn a nivel comunal, provincial y regional (entre otros). Es muy รบtil ya que nos entrega la geometrรญa de cada unidad geogrรกfica que quedamos mapear. En este caso, vamos a hacer un mapa de la RM por comuna. Una vez que cargamos el paquete, podemos crear objetos con los datos que necesitamos. En este caso, vamos a usar la funciรณn filter
del paquete dplyr
para quedarnos solo con las comunas de la Regiรณn Metropolitana. (si van a ??chilemapas
encontrarรกn informaciรณn de todos los datos que contiene este paquete)
comunas <- mapa_comunas %>%
filter(codigo_region==13)
Juntamos las comunas de los alumnos con las comunas del mapa.
rend_2018_geo <- merge(comunas, rend_2018, by.x="codigo_comuna", by.y="cod_com_alu")
Para identificar diferencias entre las comunas de Santiago, vamos a mapear el promedio general de los alumnos, por comuna (esta base de datos, por simplicidad, solo tiene a los alumnos que aprobaron). Esto nos mostrarรก una representaciรณn del promedio general promedio en cada comuna, en un mapa del Gran Santiago. Primero, creamos la variable de promedio general:
rend_2018_geo <- as.data.table(rend_2018_geo)
notas_geo <- rend_2018_geo[, nota:=mean(prom_gral), by=codigo_comuna]
Luego, con distinct
nos quedamos solo con una observaciรณn por comuna, y seleccionamos solo las variables relevantes para crear el mapa en un nuevo objeto. Luego lo transformamos a formato sf
para poder trabajar con leaflet
notas_geo <- distinct(notas_geo) %>%
select(codigo_comuna, geometry, nota)
notas_geo <- st_sf(notas_geo)
Ahora, creemos un mapa. Con el paquete RColorBrewer
podemos elegir muchas paletas de colores preexistentes. Con display.brewer.all()
podemos verlas y elegir otra.
pal <- colorNumeric( # definimos la paleta de colores
palette = "YlOrBr",
domain = rend_2018_geo$nota
)
mapa <- leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(data = notas_geo,
fillColor = ~pal(nota),
color = "#b2aeae", # usamos cรณdigo Hex para los colores
fillOpacity = 0.7, # rellenamos con color los polรญgonos
smoothFactor = 0.2,
weight = 1) %>% # para el grosor de la lรญnea
addLegend(pal = pal, # paleta de colores
values = notas_geo$nota,
position = "bottomright",
title = "Promedio General") %>%
addScaleBar(position = "topright") # Agregar escala arriba a la derecha
mapa