Mapas, mapas, mapas... ¿y?

No paro de decir para mis adentros “¿y?” según hojeo el recién publicado Atlas de mortalidad en municipios y unidades censales de España. En el prefacio del estudio se lee: En sus páginas encontrará los reflejos de las construcciones sociales que condicionan las oportunidades de salud y bienestar de las personas, mostrando que el espacio para políticas de reducción de desigualdades sociales en salud es amplio. Pues no, no encuentro reflejos de construcciones sociales. Lo que encuentro son áreas administrativas. Las construcciones sociales que ocurren dentro de dichas áreas administrativas brillan, si acaso, por su ausencia. ...

16 de agosto de 2013 · Carlos J. Gil Bellosta

Teruel, Orense, Palencia... y adenoidectomías

Quien haya recorrido Teruel, Orense, Palencia, la zona de Almadén y otras partes del interior de España abandonadas a su suerte desde hace siglos no habrá visto demasiado crío. Me acabo de enterar que a lo que se conoce como operar de vegetaciones recibe el nombre de adenoidectomía. Y he visto el mapa en Nada es Gratis. Me ha dado por pensar si los autores (del gráfico) estuvieron atentos a mi bitácora cuando escribí esto. ...

14 de junio de 2013 · Carlos J. Gil Bellosta

La cosa más friqui que he visto en...

Es la cosa más friqui que he visto en tiempos. “Esto va intravenoso al blog”, me he dicho. Es esto. Se trata de un paquete de R de Emilio Torres Manzanera con el que se pueden construir gráficos como al más puro estilo xkcd. Para probarlo, library(xkcd) vignette(“xkcd-intro”) ¡Disfrutad!

13 de junio de 2013 · Carlos J. Gil Bellosta

Mapa de los terremotos en la península ibérica

Me sorprendió hace un tiempo averiguar que en la península ibérica hubiese tantos terremotos (aunque mis amigos chilenos los llamarían de otra manera). En esta entrada voy a mostrar el siguiente mapa de actividad sísmica durante los últimos años, que he construido con el siguiente código en R: library(ggmap) url <- "http://comcat.cr.usgs.gov/earthquakes/feed/search.php?maxEventLatitude=45&minEventLatitude=35&minEventLongitude=-10&maxEventLongitude=5&minEventTime=953683200000&maxEventTime=1364688000000&minEventMagnitude=-1.0&maxEventMagnitude=10&minEventDepth=0.0&maxEventDepth=800.0&format=csv" terremotos <- read.csv(url) # obtengo un mapa pen.iber <- get_map( location = c(-9.5, 36, 3.5, 44), color = "color", maptype = "roadmap") # le añado puntos ggmap(pen.iber) + geom_point(aes(x = Longitude, y = Latitude, size = Magnitude), data = terremotos, colour = 'red', alpha = 0.2)

8 de abril de 2013 · Carlos J. Gil Bellosta

Mapas, ¿realmente necesarios?

Creo que no. Lo reitero a cuenta de la entrada Sencillo, espectacular, falso de malaprensa.com, en que se critica el gráfico aparecido en El Confidencial. Estoy de acuerdo con Josu Mezo en que es una chapuza. Pero discrepo con él en el diagnóstico. Creo que el problema no es tanto que no se estén representando las áreas proporcionalmente al fenómeno que se mide —y es ocioso reiterar aquí la discusión sobre cómo el ojo percibe o deja de percibir la proporcionalidad de áreas (o volúmenes) y las magnitudes que se intenta representar con ellas— como ese afán por pintarlo todo sobre un mapa. ...

19 de marzo de 2013 · Carlos J. Gil Bellosta

ggmap: mapas con R

Me mandó Alberto González Paje código para representar información en mapas usando R que hoy he dejado en su mínima expresión para que los lectores de esta bitácora puedan extender para crear sus propios mapas. Es el siguiente: library(ggmap) # ubico mi alma mater unizar <- geocode('Universidad de Zaragoza, Zaragoza, España') # obtengo un mapa map.unizar <- get_map( location = as.numeric(unizar), color = "color", maptype = "roadmap", scale = 2, zoom = 16) # lo represento ggmap(map.unizar) # le añado puntos ggmap(map.unizar) + geom_point( aes(x = lon, y = lat), data = unizar, colour = 'red', size = 4) Creo que es fácil de extender. ...

5 de marzo de 2013 · Carlos J. Gil Bellosta

Addenda: ¿qué ha pasado en el Ibex durante el último mes?

Abundando en el tema de ayer, ahora, los mismos datos representados con mapas de calor: Para obtenerlo, a lo que ya teníamos basta añadirle: library(gplots) heatmap.2( as.matrix(ibex.scaled), Rowv=F, Colv=T, key=F, trace="none", col=redgreen, xlab="valor", ylab="", margins=c(5,10))

28 de febrero de 2013 · Carlos J. Gil Bellosta

¿Qué ha pasado en el Ibex durante el último mes?

Pues esencialmente esto: Es decir, un grupo numeroso de valores ha bajado de precio mientras que otros dos grupos han tenido una evolución en U y ha recuperado, con creces incluso, el valor que tenían hace un mes. Y, como siempre, el código: library(tseries) library(zoo) library(XML) library(reshape) library(ggplot2) foo <- function(simbolo, final = Sys.time(), profundidad = 30 * 24 * 3600 ){ precios <- get.hist.quote( instrument= simbolo, start = final - profundidad, end = final, quote=c("AdjClose"), provider="yahoo", origin="1970-01-01", compression="d", retclass="zoo") colnames(precios) <- simbolo return(precios) } # lista de símbolos del ibex tmp <- readHTMLTable("http://finance.yahoo.com/q/cp?s=%5EIBEX+Components")[[5]] tmp <- as.character(tmp$V1[-(1:6)]) tmp <- gsub("-P", "", tmp) simbolos <- tmp[tmp != "ABG.MC"] ibex <- do.call(merge, sapply(simbolos, foo, simplify = F)) ibex.scaled <- scale(ibex) ibex.df <- data.frame(ibex.scaled, fecha = index(ibex.scaled)) ibex.df <- melt(ibex.df, id.vars = "fecha") ibex.df <- ibex.df[ order(ibex.df$fecha, ibex.df$variable), ] ibex.df$cluster <- kmeans(data.frame(t(ibex.scaled)), 4)$cluster ggplot(ibex.df, aes(x=fecha, y=value, group=variable)) + geom_line() + facet_wrap(~cluster)

27 de febrero de 2013 · Carlos J. Gil Bellosta

Arte con R: tres enlaces

Traigo hoy a mi bitácora tres enlaces sobre la creación de artefactos gráficos con R. En el primero (¡en japonés!) puede uno aprender a construir cosas como El segundo reproduce con R la siguiente obra de Bridget Riley: Y el tercero es una elaboración sobre el anterior que permite generar gráficos tales como

11 de enero de 2013 · Carlos J. Gil Bellosta

El Ibex 35 al estilo GapMinder

Quiero representar hoy la evolución del Ibex 35 a lo largo del año pasado al estilo GapMinder. En concreto, usando un MotionChart de Google. Primero, bajo los símbolos de los activos del Ibex de Yahoo! Finance: library(XML) simbolos <- readHTMLTable(htmlParse("http://finance.yahoo.com/q/cp?s=%5EIBEX+Components")) simbolos <- as.character(simbolos[[9]]$Symbol) simbolos <- gsub("-P", "", simbolos) Luego, creo una pequeña función y se la aplico a cada símbolo: library(tseries) foo <- function( simbolo, final = Sys.time(), profundidad = 365 * 24 * 3600 ){ tmp <- get.hist.quote( instrument= simbolo, start = final - profundidad, end= final, quote="AdjClose", provider="yahoo", origin="1970-01-01", compression="d", retclass="zoo") precios <- as.data.frame(tmp) precios$fecha <- index(tmp) rownames(precios) <- NULL precios$simbolo <- simbolo precios$AdjClose <- 100 * precios$AdjClose / precios$AdjClose[1] precios$x <- as.numeric(precios$fecha) precios$x <- 1 + precios$x - precios$x[1] colnames(precios) <- c("precio", "fecha", "simbolo", "dias") precios } res <- sapply(simbolos, foo, simplify = F) res <- do.call(rbind, res) Finalmente, creo el gráfico: ...

9 de enero de 2013 · Carlos J. Gil Bellosta