Python

Datos LIDAR en R

R

En la reunión del grupo de interés local (GIL) de R de Madrid, Francisco Mauro habló de aplicaciones de R a conjuntos de datos LIDAR.

En efecto, uno quiere estimar la cantidad de madera que hay en un monte. Uno entonces la calcula en unas pequeñas zonas y luego, barriendo el monte con pulsos de láser desde un avión toma medidas (x,y,z) (es decir, longitud, latitud y altura) en una malla fina de puntos. Esa malla permite identificar, por ejemplo, la densidad y altura de los árboles. Correlacionando estas variables proxy con la cantidad de madera, se puede, por ejemplo, estimar por extrapolación la cantidad total de madera que contiene el monte entero.

MapReduce con mincedmeat

Hace unos días implementé un proceso MapReduce usando mincedmeat, un pequeño entorno en Python para desarrollar este tipo de procesos distribuidos. El código y los datos pueden descargarse de este enlace.

Los datos de partida están en 249 ficheros de unos 25kb que contienen filas del tipo

journals/algorithmica/HarelS98:::David Harel::Meir Sardas:::An Algorithm for Straight-Line of Planar Graphs

es decir, publicación, autor (o autores) separados por :: y título de la publicación. Los tres campos están separados por :::.

HHH, HHT y el comando "yield" de Python

Variable aleatoria X: tiramos una moneda al aire sucesivamente y contamos el número de veces que lo hacemos hasta obtener el patrón HHH (tres caras) en las tres últimas tiradas.

Variable aleatoria Y: lo mismo, pero hasta que salga el patrón HHT.

Entonces las medias de X e Y son iguales, ¿verdad? Pues no. (¿Alguien sabría decirme cuál de las combinaciones, HHH o HHT, tiende, en promedio, a aparecer antes? Pueden darse explicaciones muy complejas, pero existe una muy simple e intuitiva).

El algoritmo PSLQ e identificación de números

El algoritmo PSLQ se usa para resolver aproximadamente ecuaciones con coeficientes enteros $a_i$ de la forma

$$ \sum_i a_i x_i = 0$$

donde, obviamente, no todos los $a_i$ son cero. Aproximadamente significa que la solución se busca dentro de un cierto nivel de tolerancia.

No existe, que yo sepa, una implementación en R. Pero sí en Python, usando librerías que permiten utilizar números de precisión arbitraria, como [mpmath](https://code.google.com/p/mpmath/). Veamos un ejemplo:

R en el Software Developer's Journal

R

El Software Developer’s Journal ha publicado estos días un número dedicado exclusivamente a R. Dicen que sus 260 páginas hacen de este número el más extenso que ha publicado jamás la revista.

Incluye, además, un artículo mío, Rpython, a package for calling Python from R.

Creo que es necesario registrarse (y probablemente de forma no gratuita) para hojear el volumen. De todos modos tal vez sería posible que pudiese pasarle el número completo a aquellos que deseen echarle un vistazo…

¿Siete lenguajes de programación emergentes?

R

Hace un par de días apareció un artículo en InfoWorld en el que se enumeraban siete lenguajes de programación emergentes. Parece que por emergentes ha de entenderse cada vez más extendidos en la empresa. Como R hacía parte del rol, comencé alegrándome. Después me surgieron dos elementos de sospecha.

Véase la lista de los siete lenguajes seleccionados:

  • Python, un viejo conocido.
  • Ruby
  • Matlab
  • JavaScript, que está gozando de una segunda primavera gracias a AJAX y demás
  • R, ¡cómo no!
  • Erlang (vale la pena echarle un vistazo: tiene cosas la mar de interesantes)
  • Cobol (¡ufa!)
  • Extensiones CUDA

Los elementos de sospecha son dos (ni tres ni siete):

Un ilustrador problema de compatibilidad de licencias libres

R

This whole thing is such a nuisance. It seems one can’t even give something away these days!

Así de infeliz se mostraba G. Grothendieck hace unos días. Y es que habíamos enviado una primera versión del paquete rJython que subir a CRAN y nos encontramos con problemas de licencias.

Eso de las licencias de software es un tema enojoso. Importante, pero enojoso.

Además, da la impresión, que totalmente exótico a la ética y costumbres de este país desde el que escribo: algún día, como divertimento, contaré alguna historieta. Y cuando haya vencido la fecha de prescripción, la más divertida, la más ilustradora del fenómeno, la sin par: la del código con copyright de EverisWaterhouseCoopers.

rJython: un nuevo paquete para llamar a Python desde R

R

Ya está disponible el paquete rJython que permite llamar a Python desde R. Aunque todavía no se ha subido a CRAN, puede instalarse así:

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

Una vez instalado puede probarse el paquete ejecutando, por ejemplo,

rJython <- rJython()
a <- 1:4
jython.assign(rJython, "a", a)
jython.exec(rJython, "b = len( a )")
jython.get(rJython, "b")
rJython$exec("import math")
jython.get(rJython, "math.pi")
jython.call(rJython, "len", 1:3)
b <- 5:8
rJython$exec("def concat(a,b): return a+b")
jython.call(rJython, "concat", a, b)

Arquitectura: Jython y rJava

El paquete no está basado en el habitual Cpython sino en Jython, un intérprete de Python desarrollado en Java. El motivo es doble: