Python

Los sospechosos habituales y Python

Llamo sospechosos habituales a esos programas y lenguajes para el análisis de datos distintos de R cuya decreciente popularidad nos parece tan natural a los partidarios de este último. Abundan los análisis de cuotas de mercado tales como What Analytic Software are People Discussing? ¿Cuáles son estos sospechosos habituales? Pues SAS, SPSS y algún otro: Stata, Statistica, Minitab,… Sin embargo, R tiene competidores más serios a medio plazo. Uno de ellos, el más importante, es Python.

¿Cuánta gente usará R (vs Python vs otros) dentro de 1000 años?

R
Pues no lo sé. Seguramente, nadie. Pero como he visto esto (que no es otra forma que una representación palabrera de una matriz de transiciones de Markov) y el debate R vs Python para el análisis de datos ha resonado estos últimos días con cierta fuerza, voy a ensayar un pequeño divertimento matemático que me traslada a una clase práctica de Álgebra I en mis años de estudiante. Es el siguiente:

rPython, ya en Windows

R
Aprovechando que por un lado las circunstancias han querido que ahora disfrute de más tiempo libre; que, por otro, mi paquete rPython parece ir ganando aceptación y, finalmente, que tengo varios correos pendientes clamando por una versión en Windows, he pasado unos ratos tratando de hacer el proceso de instalación lo menos pesado y manual que me ha sido posible. Y el resultado ha sido este. Así que si alguien todavía sigue usando Windows y tiene interés en interactuar con Python desde R (aunque solo sea por aburrimiento), que lo pruebe.

rPython ya está en CRAN

R
Después de bastante trabajo, rPython ya está disponible en CRAN, ya es un paquete oficial de R. Se trata de un paquete del que ya nos hemos ocupado antes (véase esto y esto) y que permite llamar a Python desde R. Por el momento, está disponible únicamente para plataformas UNIX (Linux, Mac) aunque estoy tratando de crear una versión que funcione en Windows. Además, estoy buscando aplicaciones de rPython (al estilo de esta).

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.

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 $latex a_i$ de la forma $$ \sum_i a_i x_i = 0$$ donde, obviamente, no todos los $latex 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!

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.

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