
Escribir sobre el BDT de Madrid me ha hecho recordar mi trabajo con spatial data de R. Los mapas de spatial data los podemos obtener de forma gratuita de http://www.gadm.org/country y, en este caso, vamos a descargarnos para España un SpatialPolygonsDataFrame específico para R de nivel 4, que está a nivel municipal. El archivo que os debéis descargar se llamará ESP_adm4.RData. Si buscáis un poco en Google encontraréis documentación acerca de este tipo de archivos de R y veréis que se pueden hacer maravillas. En este caso, quiero hacer un ejemplo lo más sencillo posible, muy artesanal y casero. Con un poco de imaginación podréis complicarlo o incluso hacer una herramienta en Excel que hiciera mapas con R.
Descargado el archivo, vamos a comenzar nuestro trabajo con R. Sólo será necesaria la librería sp y RColorBrewer para que el mapa obtenido sea más vistoso:
# install.packages("sp")
library(sp)
ub_espania = "C:\\TEMP\\00 raul\\ESP_adm4.RData"
# Creamos los objetos de R
load(ub_espania)
espania = gadm
Con 5 líneas de código ya disponemos del objeto con los mapas municipales de España. Para ilustrar el ejemplo, deseamos realizar un mapa de población por municipios de Extremadura. Los datos que vamos a utilizar nos los podemos descargar del anuario económico de “la Caixa”, que no tiene todos los municipios, sólo aquellos con más de 1000 habitantes. Podéis emplear datos del INE. Esta es la parte más artesanal: en mi caso dispongo de los datos en Excel y es necesario añadir los datos del anuario económico. ¿Qué es lo que se me ha ocurrido hacer? Con código R lo entenderéis mejor:
unique(espania@data$NAME_1)
extremadura = espania[espania$NAME_1 == "Extremadura", ]
pueblos <- unique(extremadura@data$NAME_4)
write.table(pueblos, "c:/temp/borra.txt", sep = "\t")
# En este punto trabajamos con Excel
Primero vemos cuál es el nombre que le asigna a Extremadura (nivel 1); con ello creamos un objeto sólo con datos de Extremadura. Después otro objeto con el nombre de los municipios (nivel 4); podéis imaginar que el nivel 2 es la provincia y el nivel 3 es… ¡no sé qué es el nivel 3! No lo entiendo. Imagino que será necesario para otros países. Por cierto, para los lectores de América del Sur, esto es perfectamente válido. No hago un ejemplo porque desconozco la división territorial. Si alguien me ayuda puedo ilustrarlo. Los pueblos los llevamos a Excel y allí realizamos el cruce de datos. Esto es demasiado casero, no queda muy profesional. Si trabajáis con los ID de los objetos spatial data conseguiréis mejorar este paso. En mi caso particular tengo archivos de Excel que directamente rellenan la información en R y mi objetivo final es que sea Excel el que maneje R, no que todo quede en R. A partir de tener los datos cocinados, todo es más fácil:
# Es necesario que leas con cabeceras
datos = read.delim("clipboard")
mapa = extremadura[1] # Seleccionamos una columna base para mantener la estructura
mapa@data = data.frame(datos)
library(RColorBrewer)
spplot(mapa, "poblacion", col.regions = brewer.pal(9, "Blues")) # Suponiendo 'poblacion' es el nombre de la columna en Excel
Leemos de Excel, con una cabecera (esto es importante), creamos el objeto con la información necesaria del objeto S4 extremadura para pintar el mapa, a excepción de los datos que necesita representar, que esos serán los que vienen precisamente de Excel. Por último sólo pintamos el mapa y le añadimos más vistosidad con una paleta de colores de RColorBrewer, la “Blues”, que particularmente me gusta mucho.
Todo el proceso puede parecer un poco lioso pero sentaros y, con unos datos en Excel por municipios, empezad a seguir los pasos que indico; en 30 minutos podéis hacer maravillas. Y me reitero: POR FAVOR, PARA AQUELLOS LECTORES DE MÉXICO, COLOMBIA, CHILE… AYÚDENME Y REALIZAMOS EL EJEMPLO.
En mi caso particular, esto va a derivar en un complemento de Excel que espero presentar en el grupo de usuarios de R de Madrid. Grupo en el que somos uno menos y por esto quería dedicarle esta entrada a Gregorio que, allá donde esté, seguro que sigue compartiendo sus conocimientos.