Kiko Correoso

Un 2012 de Python científico

Primero de todo, lo más importante, ¡¡¡ha nacido Pybonacci!!!! Un blog dedicado a hablar del uso de Python en el ámbito científico y en español. Si no lo conocéis aún, podéis visitarlo en http://pybonacci.org 🙂

  • Blog (+Twitter, +Fb, +G+) nacido en marzo de 2012
  • Más de 60 artículos publicados
  • Más de 30.000 visitas recibidas
  • Tres autores (esperamos que aumenten en el 2013)
  • Más de 2000 tuits

Venga, hablando en serio, os resumo lo que ha sido este año. Primero veamos las novedades de la base de lo que es Python en el entorno científico, la trinidad: NumPy, matplotlib y SciPy:
NUMPY

MATPLOTLIB

SCIPY

  • Ha salido la versión 0.11 que también es compatible con Python 3.2. Se ha incluido un submódulo dentro de scipy.sparse, se han introducido mejoras en scipy.optimize, scipy.linalg, scipy.interpolate, …

Los tres proyectos se han movido a GitHub, junto con otros, y el desarrollo ha crecido exponencialmente. ¡¡Esto son buenas noticias!!
Leer más »Un 2012 de Python científico

Creando una animación con matplotlib y ffmpeg

En esta nueva entrada vamos a ver una revisión rápida al módulo animation en matplotlib, disponible desde la versión 1.1 de matplotlib.
[Para esta entrada se ha usado matplotlib 1.1.1, numpy 1.6.1, ipython 0.13 sobre python 2.7.3 y ffmpeg como librería externa que usará matplotlib para crear el video de la animación (aunque también puede usar mencoder)] todo ello corriendo en linux. Puede que los usuarios de windows tengan problemas al guardar el video si ffmpeg no está instalado y/o correctamente configurado para que matplotlib pueda trabajar con ffmpeg.
Hay varias formas de hacer una animación usando FuncAnimation, ArtistAnimation y/o TimedAnimation. Las dos primeras formas son clases que heredan de la tercera mientras que la tercera hereda de la clase base Animation.
Para este ejemplo de como hacer una animación con matplotlib y ffmpeg vamos a usar FuncAnimation y vamos a representar la evolución de un atractor de Lorenz en 3D.
Leer más »Creando una animación con matplotlib y ffmpeg

Trabajando con recarray

En el artículo de hoy vamos a ver el uso de numpy.recarray (o arrays estructurados) y las posibilidades que tiene usar record arrays, que no son más que arrays numpy a los que se puede acceder usando atributos y donde podemos usar diferente tipo de dato (int, float, string,…) en cada uno de los campos como si fuera una tabla de una hoja de cálculo.
[En esta entrada se ha usado numpy 1.6, ipython 0.13 sobre python 2.7]
Primero de todo importamos lo necesario:
[sourcecode language=”python”]
import numpy as np[/sourcecode]
Creamos una serie de vectores que serán los que usaremos a posteriori para ‘poblar’ nuestro recarray.
[sourcecode language=”python”]
persona = [‘juanlu’, ‘dapid’,
‘kiko’, ‘eugenia’,
‘fernando’, ‘maria’,
‘lorena’, ‘angel’,
‘tomas’, ‘susana’]
sexo = [‘v’, ‘v’, ‘v’, ‘m’, ‘v’, ## ‘v’ para varon y ‘m’ para mujer
‘m’, ‘m’, ‘v’, ‘v’, ‘m’]
altura = [185, 170, 175, 168, 183, 159, 152, 191, 179, 178][/sourcecode]
Ahora imaginad que queremos esos tres vectores de datos en un array y queremos conservar el tipo de dato de cada vector (string para persona, string para sexo y entero para la altura en centímetros) y queremos ‘titular’ cada uno de esos vectores en nuestro nuevo array y queremos acceder a cada uno de esos vectores mediante un atributo. Esto lo podremos hacer de varias maneras creando un recarray:
Leer más »Trabajando con recarray

¿Por qué usar netCDF?

Primero de todo empezaremos por el principio
¿Qué es netCDF?
Es un conjunto de librerías (o bibliotecas) y un formato de datos que son:

  • auto-descriptivo ya que incluye información acerca de los datos contenidos en el fichero netCDF
  • independiente de la plataforma
  • podemos acceder a un subconjunto de datos del fichero de forma eficiente
  • permite agregar datos a un fichero ya existente sin necesidad de copiar los datos ya existentes en el fichero
  • puede ser fácilmente compartido ya que una persona puede escribir mientras varias personas pueden leer el mismo fichero.
  • puede ser archivado ya que las versiones previas siempre estarán soportadas por las nuevas versiones

Su actual versión es la 4 y permite leer los ficheros creados con versiones anteriores de netCDF, como se ha comentado anteriormente.
Además es compatible con un subconjunto de HDF5 (del que hablaremos otro día, Francesc, ¿te animas como firma invitada?) pudiendo leer gran cantidad de ficheros en formato HDF5 pero no todos. HDF5 es capaz de abrir cualquier fichero creado con netCDF-4 (que es el modelo mejorado de datos que veremos a continuación). Es decir, un fichero netCDF-4 es un fichero HDF5 pero no a la inversa.
Es además un estándar para varias instituciones como la Open Geospatial Consortium.
¿Cuál es el formato de un fichero netCDF?
El formato no es único, existe un modelo clásico, más sencillo, y el modelo mejorado (llamado netCDF4), más complejo y completo.
Leer más »¿Por qué usar netCDF?

Publicando directamente en wordpress.com con python

Este es un notebook de prueba publicado directamente en http://pybonacci.org (aunque se puede publicar en cualquier plataforma wordpress que tenga habilitado xml-rpc) desde un ipython notebook (ipynb de ahora en adelante). Este ipynb consta de celdas con código python, celdas con texto formateado con markdown, con output de celdas con… Leer más »Publicando directamente en wordpress.com con python

Análisis Cluster (II): Clasificación no supervisada mediante clasificación jerárquica aglomerativa

(Este es el segundo capítulo de la mini-serie de artículos sobre análisis cluster que estamos haciendo en pybonacci, si todavía no has leído el artículo inicial échale un ojo ahora).
Como vimos anteriormente, existen diferentes formas de hacer clustering y, como también comentamos anteriormente, una de las más habituales es el clustering jerárquico.
El clustering jerárquico asociativo pretende, partiendo de m observaciones, ir encontrado agrupaciones de forma jerarquizada. Para ello, primero busca similitudes entre las observaciones y después procura asociar en grupos o ‘clusters’ las observaciones que se encuentran ‘más cercanas’ o presentan mayor similitud.
Si os acordáis, en el primer capítulo de esta mini-serie, entrecomillamos la palabra ‘similitud’. Vamos a ver qué significa esto de similitud en general y en nuestro ejemplo concreto (ver capítulo anterior de la serie para conocer el ejemplo). Dependiendo del problema concreto necesitaremos asociar las variables para poder medir como son de similares o a qué distancia se encuentran entre sí. Estas medidas de asociación (similitud o distancia) dependerán del problema concreto con el que nos encontremos y no se usaría lo mismo para variables booleanas, binarias, reales,… Gracias al módulo scipy.spatial.distance podemos ver muchas de estas medidas de asociación en las que no voy a entrar en detalle. Un resumen de la mayoría de ellas lo podéis ver en el siguiente enlace del profesor José Ángel Gallardo San Salvador, nuevamente. En el ejemplo propuesto usaremos la correlación como medida de asociación ya que es una medida invariante aunque las variables se escalen y/o se les sumen/resten parámetros (algo muy útil para el caso que nos ocupa).
Leer más »Análisis Cluster (II): Clasificación no supervisada mediante clasificación jerárquica aglomerativa

Análisis cluster (I): Introducción

Vamos a empezar una mini-serie de artículos sobre clasificación no supervisada que dividiré, en principio, en tres capítulos. En este primer capítulo no vamos a ver nada de python (oooooohhhhh) pero creo que es necesario dividirlo así para no hacerlos excesivamente pesados y largos y para introducir un poco la teoría de forma muy somera. ¿Vamos al lío?
Una de las actividades más propias del ser humano consiste en clasificar ‘cosas’ en clases o categorías (¡¡nos encanta etiquetar!!). Esto nos permite simplificar la inmensa cantidad de información que nos está llegando en todo momento:

  • clase baja, media y alta
  • Líquido, sólido, gaseoso (y plasma, y condensado de Bosé-Einstein, y…)
  • Friki, flipado, raro, geek, normal,…

A lo largo de todo el texto de esta mini-serie usaré términos tanto en español como en inglés puesto que, normalmente, la terminología anglosajona es también la más habitual en los textos en español.
Brevísima introducción teórica
El análisis cluster es el nombre genérico que recibe un tipo de procedimientos de aprendizaje NO supervisado (unsupervised learning) usados para crear clasificaciones o agrupaciones. De forma más detallada, se podría decir que consiste en procedimientos de clasificación no supervisada (no existe una información previa) sobre una muestra de ‘individuos’ que intenta reorganizarlos en grupos que pretenden ser homogéneos. Estos grupos son los que se conocen como ‘clusters’ y esta es la palabra que usaremos a lo largo del presente texto puesto que es la más ampliamente usada en la literatura tanto en inglés, obviamente, como en español.
Leer más »Análisis cluster (I): Introducción

Videos interesantes de la PyConCa 2012

A pure python genetic algorithms framework [youtube https://www.youtube.com/watch?v=YYDdBv430sU] Dancing with big data: Disco + inferno [youtube https://www.youtube.com/watch?v=D3VFq97NhEk] Integrating geocode data with python [youtube https://www.youtube.com/watch?v=MhsbivEDTds] Science and python: retrospective of a (mostly) successful decade [youtube https://www.youtube.com/watch?v=F4rFuIb1Ie4] Server log analysis with pandas [youtube https://www.youtube.com/watch?v=ZOpR3P-jAno] Writing self-documenting scientific code using physical quantities [youtube… Leer más »Videos interesantes de la PyConCa 2012

Recopilación del PyData NYC 2012

Francesc Alted: PyTables: An on-disk binary data container, query engine and computational kernel. Stefan van der Walt: An introduction to numpy: the notebook version. Jake Vanderplas: Matplotlib tutorial. Jake Vanderplas: Tutorial: Machine learning for astrophysics with scikit-learn. Thomas Wiecki: Simulated Algorithmic Trading with Zipline: Backtesting, Statistics, and Optimization. Thomas Wiecki:… Leer más »Recopilación del PyData NYC 2012