Primero que nada, ¡bienvenidos a mi primer post en el blog de mi página personal! Instalé WordPress en un subdirectorio de mi servidor principal, por lo mismo no se ve tan bonito como la página original. Con el tiempo iré puliendo cómo se va viendo 🙂
Ahora, a lo que vinimos. Hace un par de fin de semanas, e inspirando en esta noticia, me nació el interés de crear mapas dinámicos que pudieran, usando código, visualizar Chile. Más de alguna vez he tenido ganas de mostrar algo que pase en el país a través de mapas, pero la sola idea de lanzarme a utilizar Illustrator u otra herramienta para diseñadores me daba náuseas. Me gusta programar, no dibujar, así que ¡¿cómo uso código dammit?!
Partamos. Primero que nada, los créditos. Este post está basado casi enteramente en el tutorial escrito, para Alemania, por Mark Heckman. Pueden ir a leer sus instrucciones allí si lo desean, yo adapté todo para el caso chileno.
¿Qué es un mapa? Para nosotros un mapa es simplemente una colección de coordenadas que, graficadas en un plano, representan una región geográfica real. Nosotros buscamos un mapa político, pues queremos la división regional.
Para el caso chileno tenemos dos grandes recursos: los Mapas Vectoriales de la Biblioteca del Congreso Nacional, en formato shapefile y utilizados en la parte dos de este tutorial, y el proyecto Global Administrative Areas. Este último tiene como objetivo obtener todos los mapas políticos del mundo al mayor de nivel de detalle posible en diversos formatos y están disponible los chilenos inmediatamente en R. En el caso que quieran mapas geográficos, las Generic Mapping Tools entregan recursos excelentes, pero escapa a los alcances de este post.
Ahora a generar el mapa. Para este ejemplo generaremos un mapa sencillo con la tasa de default en créditos por región, y asumiré que se manejan con el software R, que a mi gusto entrega la mayor cantidad de recursos estadísticos de forma gratuita.
Paso 1: Instalar los paquetes necesarios y cargarlos.
install.packages('sp') #Permite leer los mapas. install.packages('RColorBrewer') #Paletas de colores para mapas. load(sp) load(RColorBrewer)
Paso 2: Descargar el mapa de Chile:
con <- url('http://biogeo.ucdavis.edu/data/gadm2.8/rds/CHL_adm1.rds') print(load(con)) close(con)
Este archivo contiene los datos de Chile a nivel de provincia actualizados al año 2007, por lo tanto figuran solamente 13 regiones.
Paso 3: Corregir las regiones faltantes: El objeto «gadm» posee una serie de variables que describen al país. NAME_1 incluye el nombre de las regiones, y NAME_2 el de las provincias. Para obtener las 15 regiones simplemente debemos asignar las provincias de Arica y Parinacota a la región XV y la provincia de Valdivia a la región de Los Ríos. Por simpleza esto lo realicé a mano. Una vez arreglado, debemos transformar a factores las dos variables.
gadm$NAME_1[gadm$NAME_2 == "Valdivia"] <- "Los Ríos" gadm$NAME_1[gadm$NAME_2 == "Arica"] <- "Arica y Parinacota" gadm$NAME_1[gadm$NAME_2 == "Parinacota"] <- "Arica y Parinacota" gadm$NAME_1 <- as.factor(gadm$NAME_1) gadm$NAME_2 <- as.factor(gadm$NAME_2)
Paso 4: Cargar los datos a corregir
Como estamos usando los datos por provincia, necesitamos una variable adicional (que puede estar dentro o no de gadm) tal que a cada elemento de NAME_1 (las regiones) le asocie un valor que será el que graficaremos. Este archivo posee los datos por default por región, extraído a partir de las colocaciones por región e institución a Marzo 2013 disponibles en la página web de la Superintendencia de Bancos e Instituciones Financieras.
El siguiente código carga el archivo .csv a la variable default
, luego asigna cada valor a la región correcta en el objeto gadm
, segmenta la variable en cortes, y finalmente asigna las etiquetas apropiadas para que se visualice mejor.
default <- read.csv(file='default.csv', sep = ';', header = TRUE) gadm$Default <- sapply(gadm$NAME_1, function(x){default$Default[x == default$Region]}) gadm$Default_Cut <- as.factor(cut(gadm$Default, seq(from = 0.02, to = 0.075, by = 0.011))) levels(gadm$Default_Cut) <- c("<3,1%", "3,1-4,2%", "4,2-5,3%", "5,3-6,4%", "6,4-7,5%")
Paso 5: ¡Graficar!
Ahora graficamos. Lo primero es crear una paleta de colores. El paquete RColorBrewer
tiene muchas paletas distintas, de acuerdo a lo que se desee hacer. El paquete distingue tres tipos de paletas de colores: Secuenciales, como una escala de grises, que permiten mostrar escalas de valores; divergentes, como una que parta del rojo, pase por el morado y termine en el azul, resaltando tanto los valores extremos como los intermedios; y las cualitativas, que poseen muchos colores distintos y sirven para mostrar datos que no tienen ninguna estructura.
Nosotros usaremos una paleta secuencial que va del rojo al verde, y lo invertiremos para que corresponda con nuestros valores (rojo para default alto y verde para default bajo).
Colores <- brewer.pal(5, "RdYlGn") # Cinco colores, uno para cada nivel. Colores <- rev(Colores) # Invierte paleta.
Con esto terminado, podemos graficar. Un único comando genera el gráfico buscado.
spplot(gadm, "Default_Cut", col.regions = Colores, main = 'Porcentaje de Stock en Default por Región (SBIF)')
El gráfico final queda así:
¡Y listo! Hemos creado un mapa de Chile con datos propios en R. En el siguiente post mostraré cómo realizar esto usando Shapefiles y los archivos oficiales de la Biblioteca del Congreso Nacional.
Edit: Actualizados los links al archivo de Default y al shapefile con los mapas en R. ¡Gracias @gonzacisternas!