Una de las cosas que me irritan de R

R

R (y su comunidad) es en ocasiones irritante. Os cuento por qué.

El otro día quise pintar un grafo sobre un mapa. No quería usar ninguno de los layouts al uso porque cada nodo estaba georeferenciado. Me interesaba, además, pintar el grafo sobre una capa (de Google Maps u OSM) para contextualizarlo (¿conterrenizarlo?) mejor.

No es demasiado complicado escribir una función que haga lo anterior. Pero es razonable pensar que alguien pudiera haberlo hecho antes. Et voilá. Después de mucho buscar, di con las funciones geom_edgeset y geom_nodeset del paquete popgraph que resolvían el problema.

Herramientas (y consejos) para avanzar en tu carrera

Escribo hoy para invitar a leer esto, una entrada en otra bitácora que recoge y resume ideas que ya han aparecido en la mía, como por ejemplo:

  • Usa herramientas para las que no tengas que pedir permiso (típicamente, abiertas)
  • Considera el tiempo que pases trabajando en una empresa grande aprendizaje subsidiado
  • Especialízate un conjunto de cosas que sepas hacer mejor que la mayoría
  • Aprende a plantear preguntas
  • Aprende (cuando menos) un lenguaje de programación

Y algunas otras.

El lenguaje de los gráficos en las Jornadas de Periodismo de Datos

Este sábado (2015-06-06), dentro de las Jornadas de Periodismo de Datos, hablaré sobre el lenguaje de los gráficos (véase el programa).

Para variar, nada de R y, aunque parezca lo contrario, nada de ggplot2. Ni tan siquiera respuestas a nada: solo preguntas que cada cual tendrá, si le place, que contestar. Y si se me hace caso, a la luz de la literatura relevante.

¿Por qué una cuestión tan abstracta? Porque sobran herramientas y recetarios sobre cómo hacer esto y aquello. Pero falta teoría. No seré yo quien pretenda enseñarla: ni siquiera la domino. Solo que soy consciente de que existe y mucha otra gente no.

Charla de José A. Guerrero

El 9 de julio de 2015, José A. Guerrero dará una charla con título “Machine learning como nuevo deporte intelectual” y programa:

  • Origen y situación actual de las competiciones de Análisis de Datos

  • Análisis predictivo de datos de Alta Competición vs Proyectos en el Mundo Real:

    • Objetivos
    • Estrategias
    • Herramientas
  • Tips and tricks:

    • ¿Qué haría en una competición de datos que nunca haría en un proyecto real?
    • ¿Qué haría en un proyecto real que nunca haría en una competición de datos?

De hecho, el contenido de la última sección es un tema del que he hablado ya sobradamente pero sobre el que me gustaría conocer la opinión del ponente.

Grafos por vecindad en mapas

R

Dando vueltas (infructuosas) al asunto de los cartogramas he dado con un subproducto con el que, por hoy, me conformo: crear un grafo a partir de relaciones de vecindad entre polígonos. La magia, obra de [spdep::poly2nb](http://www.inside-r.org/packages/cran/spdep/docs/poly2nb); el código,

library(maptools)
library(spdep)
library(igraph)

# fichero descargado del INE
aragon <- readShapePoly("ccaa00c02.shp")
plot(aragon)

aragon_ine

aragon.nb <- poly2nb(aragon)

# vértices
vertices <- aragon@data
vertices$id <- 1:nrow(aragon@data)
vertices <- vertices[, c("id", setdiff(colnames(vertices), "id"))]

# coordenadas aproximadas de los vértices
my.layout.orig <- do.call(rbind,
    lapply(vertices$id,
            function(i)
              aragon@polygons[[i]]@Polygons[[1]]@labpt))

# aristas

aristas <- do.call(rbind,
    lapply(1:length(aragon.nb),
          function(x)
            data.frame(from = x,
                        to = aragon.nb[[x]])))
aristas <- aristas[aristas$from < aristas$to,]
aristas <- aristas[aristas$from %in% vertices$id,]
aristas <- aristas[aristas$to   %in% vertices$id,]

# grafo
g <- graph.data.frame(aristas, directed = FALSE, vertices)

plot(g,
      layout = my.layout.orig,
      vertex.label = NA,
      vertex.size = 0.1)

grafo_vecinos_aragon

Ya que estamos de resaca electoral, ¡Hacking elections!

Un pelo del perro que te mordió, decían, curaba la rabia. Un vaso de vino, la resaca de lo mismo. Si te has levantado hoy con dolor de cabeza de resaca electoral, estás de enhorabuena: tienes a mano participar en Hacking Elections.

Los detalles, mucho mejor contados que podría hacerlo yo, en el enlace anterior.

Nota: no podré asistir por compromisos laborales y personales; pero no me lo habría perdido. Tengo un par de ideas sobre cómo podría montar un cartograma combinando los paquetes sp e igraph de R y pocos sitios como Hacking Elections para tratar de ponerlas en negro sobre blanco.

Cartogramas vs huertogramas

Esto es un huertograma:

huertograma_es

Tiene la propiedad de que casi todos los pixels están encima de un huerto (o un erial, o en un cerro,…).

Este es otro huertograma:

huertograma_uk

Y esta es la misma información (resultados de las elecciones de 2015 en el RU) sobre un fabuloso cartograma:

cartograma_uk

¿Os habéis fijado cómo esa casi indistinguible mancha roja en la zona de Londres del huertograma adquiere su debida relevancia en el cartograma?

Sumar 18: un problema fácil y otro que lo es menos

En una página que no mencionaré (solo porque creo que en los comentarios hay soluciones) se propuso el siguiente problema: combinar los números 2, 3, 4 y 5 con las operaciones aritméticas (+, -, *, /) para obtener 18 como resultado.

Tal es el problema fácil.

El menos fácil: encontrar todas (¡ya sabemos que la suma conmuta!) las soluciones.

Banzhaf y las elecciones que se nos vienen

Es pertinente rescatar una entrada de hace tres años sobre D’Hondt y Banzhaf. En el enlace, los detalles.

Me limitaré a actualizar el código de la función para que muestre las alianzas (algunas enteramente esperpénticas) posibles, que queda de la forma

banzhaf <- function(x){
  x <- -sort(-x)
  x <- x/sum(x)

  foo <- function(a,b,p){
    if(p>1/2)
      return(list(a))

    if (length(b)==0)
      return(NULL)

    b.prima <- b[-1]
    delta <- b[1]
    p.delta <- x[delta]

    return(c(foo(c(a,delta), b.prima, p+p.delta), foo(a,b.prima,p)))
  }

  res <- foo( NULL, names(x), 0)
  print(res)
  sort( table(unlist(res)) / length(res) )
}

y a aplicarlo sobre algunos casos de la más rabiosa actualidad que Leda Duelo ha tenido la gentileza de preparar para mí y, a través de esta página, para ti también. Son los que siguen.