Programación

En serio con Spark: instalación

Me he puesto en modo estoy serio con Spark. Lo instalé en mi ya manida máquina virtual (voy a subir una nueva versión de ella pronto), pero hoy la voy a instalar en mi portátil. Y con la idea de, en los próximos días, montar un clúster en condiciones.

Los pasos son los siguientes:

  1. Ir a la página de descargas y seleccionar una versión ya precompilada. Hay varias porque Spark se enlaza con librerías relacionadas con Hadoop (aunque uno puede utilizar Spark perfectamente sin él) y hay varias versiones mutuamente incompatibles de Hadoop. Como no tengo ninguna instalada en el portátil, cualquiera me vale.
  2. Descomprimir, mover el directorio a /opt y, opcionalmente, cambiar propietarios y grupos (a root).
  3. Crear un enlace blando para vagos: sudo ln -s /opt/spark-1.0.1-bin-hadoop1/ /opt/spark
  4. Arrancarlo (usando la interfaz para Python): /opt/spark/bin/pyspark

En la consola, ahora, se puede ejecutar:

Dos descomposiciones positivas de tablas de contingencia

Voy a seguir poco a poco con este tema mío tan recurrente de las factorizaciones (aproximadas) positivas de matrices (también positivas). No escribo más porque, como casi todo lo que llamamos trabajo es, simplemente ruido, las cosas que llevan a otras nunca pasan por el asunto en cuestión.

Pero hay dos descomposiciones positivas de matrices positivas bien conocidas de todos. La primera es esta: $latex X=IX$, donde $latex X$ es una matriz de dimensión nxm e $latex I$ es la cosa más parecida a la matriz identidad de dicha dimensión. No aporta gran cosa. En particular, no compresión y no comprensión de la estructura de la matriz.

Estrategias escalables (con R)

Hay quienes preguntan cómo cargar con R un csv de 8GB en un portátil de 4GB de RAM. La verdad, he leído respuestas la mar de extravagantes a este tipo de cuestiones: p.e., recomendar SQLite.

Yo recomendaría Scalable Strategies for Computing with Massive Data. Entre otras cosas, porque para eso lo escribieron sus autores: para que se lea. Y porque está cargado de razón y buenos consejos.

Una cosa con la que tropezará enseguida quien lo hojee es:

Vectorización en R: un contraejemplo

No hay regla sin excepción, dicen. Para la recomendación casi única para quienes se quejan de la lentitud de R, es decir, ¡vectoriza!, he encontrado hoy una.

Sí, el artículo deja R por los suelos. En el fondo, no tanto, porque viene a decir que R es malo para lo que la documentación de R dice que es malo: véase cómo en Writing R Extensions nos advierten que la convolución is hard to do fast in interpreted R code, but easy in C code. Y el problema que tratan de resolver los autores contiene una convolución (a través de una cadena de Markov, para pasar de un nivel de capital al del siguiente periodo). Es decir, en cierta medida solo viene a confirmar que la documentación de R es buena.

Dos citas de 1983 sobre estadística y métodos computacionales

Rescato aquí para mis lectores dos citas de un artículo de 1983, Computer Intensive Methods in Statistics, de Efron y Diaconis, por dos motivos: su valor intrínseco y que consideren leer el resto, particularmente el principio y el final.

La primera es (con mi traducción):

[…] el ordenador está cambiando la teoría de la estadística. Arriba hemos examinado nuevas teorías que han surgido a causa del ordenador. Otro cambio evidente es de los conjuntos de datos enormes que están disponibles a causa de la memoria de los ordenadores. Además, el ordenador permite usar métodos tradicionales para resolver problemas más grandes. El análisis de componentes principales es un buen ejemplo: fue inventado antes de que fuese realmente práctico.

Agrupación de grafos por topología

Anuncio algo que no he conseguido hacer: agrupar grafos por topología. Pero no me he quedado lejos. Y espero que si alguien tiene alguna idea al respecto, nos lo haga saber al resto en la coda.

Contexto (disfrazado). Hay usuarios que tienen correos electrónicos. La relación esperada es de uno a uno. Pero la realidad es, como siempre, mucho más compleja: hay usuarios que tienen varios correos y correos compartidos por varios usuarios.

Hoy he echado de menos Scala

Hoy he escrito

last.date <- max(Filter(function(x) format(x, "%m") == "03",
	all.filled.data$Date))

y he echado mucho de menos Scala.

Más sobre Scala:

  • Si yo fuera rey, todos los niños aprenderían Scala.
  • Al tipo que inventó Scala le gustan tanto o más los oneliners que a mí.
  • Todavía me llevo mal con el compilador.
  • La gente viene a Suiza y aprende el alemán malhablado de aquí; yo, ya véis, Scala. Soy así de sociable.
  • Detrás de Scala vendrá Spark.

Imágenes y magia

No sé si imagen y magia comparten la misma raíz. Lo que me consta es que la gente que procesa imágenes hace algo que me parece casi mágico. De mayor quiero ser como ellos.

Traigo aquí un ejemplo sobre técnicas para completar imágenes:

image_reconstruction

El artículo completo, Scene Completion Using Millions of Photographs, y mucho material auxiliar puede revisarse aquí.

Grid, Scala y arbolitos fractales

Inspirado por

  • los arbolitos que he visto esta mañana en mi semivuelta al lago de Zúrich,
  • las cosas que estoy leyendo últimamente sobre el paquete grid de R (p.e., grid graphics, de Murrell)
  • mi curso de scala y
  • este enlace

me he decidido a reescribirlo como Dios manda (y no como de primeras se le ocurriría a un neoingeniero al que solo le han enseñado MatLab y que, por lo tanto, tiene vetado el acceso a cualquier tipo de empresa tecnológica puntera). Me ha quedado así:

Todo el mundo habla de cadenas de Markov

Todo el mundo habla últimamente de cadenas de Markov. ¿No os habéis dado cuenta? ¿O seré yo el que saca a relucir el asunto venga o no al caso? Sea que se haya puesto de moda o que esté mi misma obsesión por el asunto sesgando mi impresión sobre sobre (me encanta escribir dos preposiciones seguidas) lo que la gente habla, es el caso que el otro día me comprometí a escribir sobre

¿Cinco años y salen sin programar?

Sí, hay gente que pasa cinco años en una de esas instituciones encopetadas que son las universidades y sale de ellas sin saber programar.

Aquí va un ejemplo. Es un fragmento de un currículo que me ha llegado recientemente. El tipo es economista, graduado en uno de los departamentos de la materia más reconocidos de Madrid. Dice así:

cv_informatica

Eso es todo lo que el tipo reconoce saber sobre algo parecido a la programación.

Colusión de anunciantes en perjuicio de navegantes

O algo así. Aunque alguno puede pensar que no es en su perjuicio sino en su beneficio. A saber.

Solo que con collusion (un plugin para el navegador) uno puede construir gráficos tales como

collusion

que significa lo que su leyenda dice y que aquí traduzco brevemente. Uno instala en plugin y comienza a navegar por internet. Al hacerlo, collusion detecta esos sitios con los que las páginas que uno visita comparte información a través de galletitas y similares. Algunos de esos sitios pueden ser inofensivos (al parecer, Renfe se ha enterado de que he entrado a marca.es) y otros, los marcados en rojo, pertecen a redes de anunciantes. Más propiamente, a redes de seguimiento de navegantes, que tratan de inferir su perfil para… proporcionarles anuncios a medida, supongo. Estos sitios no solo saben que uno ha aterrizado en una página determinada, sino que pueden seguirlo a través del resto de los sitios que comparten información con él. Por eso en la red que genera collusion aparecen nodos de centralidad elevada (¡hubs!) que corresponden a sitios que colocan sus galletitas por doquier (y previo pago).