R

rPython & Anaconda

R

Nota: publico hoy en inglés en atención al público potencial de la entrada.

rPython lets R users call Python code. Anaconda is a completely free enterprise-ready Python distribution for large-scale data processing, predictive analytics, and scientific computing. Not surprisingly, some users want to call Anaconda Python rather than their system’s default Python.

However, Anaconda is a very particular package: unlike most other packages, whose files are scattered in a diversity of locations, it is self contained in a single directory. This helps Anaconda solve some problems, like the library hell. It is intended to provide the same experience regardless of the specifics of the host system.

La encuesta de presupuestos familiares, en MicroDatosEs

R

Hoy he subido una nueva versión del paquete MicroDatosEs a r-forge que incluye herramientas para cargar los datos de la Encuesta de Presupuestos Familiares.

Aún no está en CRAN, pero estáis invitados a probarla instalando la versión de desarrollo mediante

install.packages("MicroDatosEs", repos="http://R-Forge.R-project.org")

La parte del paquete que se encarga de la EPF es obra de Diego Paniagua, que es uno de los estudiantes del Experto en Data Science de la UTAD. La aportación a este paquete es, de hecho, parte de su proyecto final.

Liberado Spark 1.4

R

El anuncio de la liberación de la versión 1.4 de Spark se ha materializado. Está aquí.

¿Qué trae de novedad la versión 1.4? La integración con SparkR —antes había que instalarlo con algo de dolor independientemente— y, aparentemente, data.frames distribuidos y, cuentan, una sintaxis similar a la de dplyr —honestamente, hubiera preferido otra— para manipularlos.

Iré desgranando por aquí novedades. Y estoy pensando organizar una install & tutorial party un día de estos en Madrid. ¿Alguien se animaría?

Paralelismo en R: memo[rándum]

R

Esta es una nota que me dejo a mí mismo sobre paralelización en R para no tener que ir buscándola en otras partes:

library(parallel)

foo <- function(i){
  Sys.sleep(i)
}

cl <- makeCluster(4)

system.time(parSapply(cl, 1:4, foo))
# user  system elapsed
# 0.025   0.006   4.007

system.time(sapply(1:4, foo))
# user  system elapsed
# 0.039   0.033  10.001

stopCluster(cl)

Ver 53000 filas

Me preguntaban cómo ver con R una tabla con 53000 filas. Mi yo menos diplomático quiso contestar: define ver. Lo reformulé más amablemente y se me contestó: como en Excel.

La pregunta es: ¿permite Excel ver 53000 registros? De hecho, ¿se pueden ver 53000 registros? Impresos a razón de línea por centímetro, ocuparían 530 metros y andar a paso vivo del primero al último costaría cinco minutos.

Con 53000 registros, ver (como trasunto de entender) es una cosa distinta de tener delante. Lo siento, pero ver otra cosa que la facturación de los últimos quince días o los movimientos de la cuenta del último mes es algo distinto de lo que vacuamente promete Excel.

Oh, no, ¡datastepr!

R

Hoy no estoy de humor. He tratado de completar mi primer anillo en dos años y ha resultado un total fracaso. Mi bici buena estaba pinchada: me he enterado a un kilómetro de casa. He tenido que salir en otra, una de esas viejas de Decathlon, que no sé bien cómo apareció una vez en mi casa, que pesa un quintal y que cambia de marchas cuando y como quiere.

No solo me he quedado a la mitad del recorrido sino que, además, he podido constatar cómo el paisanaje de Madrid ha descompuesto todas las fuentes que en el proyecto original jalonaban el recorrido. Supongo que con la inestimable ayuda, por omisión, de nuestros munícipes. Aquello, más que un anillo ciclista, parecía Mad Max I.

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.

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

Grafos sobre mapas

R

He escrito de grafos, he escrito de mapas; hoy hablaré de la combinación de ambas cosas.

Tengo un grafo cuyos nodos están geoposicionados. Lo quiero estudiar utilizando herramientas de grafos (vía igraph) pero después representarlos sobre una capa con información geográfica (una foto satelital de Google Maps, vamos).

La red va a ser la de guifi.net en los derredores de Barcelona. guifi.net es un proyecto para crear una red de telecomunicaciones mancomunada, abierta, libre y neutral. Quienes forman parte de ella colocan antenas que se conectan con otras de la red y comienzan en enviar bits. Las antenas y sus conexiones conforman una red que se puede estudiar como cualquier otra: ¿qué nodos/enlaces son más centrales/críticos? Etc.

Premio al mejor trabajo presentado por un joven en las VII Jornadas de Usuarios de R

Ha pasado un poco desapercibido pero estamos organizando un premio para el mejor trabajo presentado por un ponente nacido después del 1 de enero de 1985 dentro de las VII Jornadas de Usuarios de R.

Las bases están aquí.

Finalmente, si alguien conoce a alguien que pueda conocer a alguien que quiera dotar el premio, ¡que avise! (Y que lea previamente esto también).