Tutoriales

Estadística en Python con SciPy (I)

Introducción

Hoy vamos a ver cómo trabajar con variable aleatoria con el módulo stats de la biblioteca Scipy. Scipy viene con numerosas distribuciones de probabilidad, tanto discretas como continuas, y además pone a nuestra disposición herramientas para crear nuestras propias distribuciones y multitud de herramientas para hacer cálculos estadísticos. En esta primera parte nos centraremos en cómo manejar esas distribuciones y sus funciones de distribución, cómo representarlas con matplotlib y cómo definir nuevas distribuciones.
En esta entrada se ha usado python 2.7.3, numpy 1.6.1, matplotlib 1.1.0 y scipy 0.10.1.
Leer más »Estadística en Python con SciPy (I)

Ecuaciones no lineales: método de bisección y método de Newton en Python

En este artículo vamos a ver cómo implementar en Python el método de bisección y el método de Newton, dos métodos iterativos clásicos para hallar raíces de ecuaciones no lineales de la forma $latex f(x) = 0$, con $latex f: [a, b] \longrightarrow \mathbb{R}$ y $latex f \in C^1([a, b])$. Estos métodos y muchos otros más refinados están ya implementados en multitud de bibliotecas muy utilizadas, sin ir más lejos en el módulo optimize del paquete Scipy (referencia).
Crearemos un módulo ceros.py en el que incluiremos los dos métodos que vamos a desarrollar aquí, y así veremos un ejemplo de código limpio y fácilmente reutilizable.

Módulo ceros.py

Vamos a ver la anatomía de un módulo en Python. Este es el código del archivo:
Leer más »Ecuaciones no lineales: método de bisección y método de Newton en Python

Ejemplo de uso de Basemap y NetCDF4

Continuando lo que enseñó Juanlu en la anterior entrada vamos a mostrar líneas de nivel y temperatura del aire en la superficie, en este caso la presión al nivel del mar del día 01 de enero de 2012 a las 00.00 UTC según los datos extraídos del reanálisis NCEP/NCAR, sobre un mapa con la ayuda de la librería Basemap.
Como los datos del reanálisis NCEP/NCAR vienen en formato netCDF usaremos la librería netcdf4-python. El formato netCDF es un estándar abierto y es ampliamente usado en temas de ciencias de la tierra, atmósfera, climatología, meteorología,… No es estrictamente necesario usar netcdf4-python para acceder a ficheros netCDF puesto que desde scipy tenéis esta funcionalidad. Pero bueno, yo uso esta por una serie de ventajas que veremos otro día.
En la presente entrada se ha usado python 2.7.2, numpy 1.6.1, matplotlib 1.1.0, netCDF4 0.9.7 y Basemap 1.0.2.
Primero de todo vamos a importar todo lo que necesitamos:
[sourcecode language=”python”]
## Importamos las librerías que nos hacen falta
import numpy as np
import netCDF4 as nc
import matplotlib.pyplot as plt
from mpl_toolkits import basemap as bm
[/sourcecode]
Los ficheros netCDF de presión al nivel del mar y de Temperatura del aire de la superficie los podéis descargar de aquí y aquí, respectivamente. Veréis un enlace que pone ‘FTP a copy of the file’, lo pincháis y guardáis en el mismo sitio donde tengáis el script que estamos haciendo en la presente entrada.
Una vez que tenemos los ficheros los podemos abrir usando la librería netCDF4-python:
[sourcecode language=”python”]
## Abrimos los ficheros de datos,
## el nombre de los ficheros lo tendréis que cambiar
## con el nombre de los ficheros que os habéis descargado
slp = nc.Dataset(‘X83.34.8.250.104.4.18.19.nc’) #slp por ‘sea level pressure’
tsfc = nc.Dataset(‘X83.34.8.250.104.4.15.31.nc’) #tsfc ‘por temperature at surface’
[/sourcecode]
Leer más »Ejemplo de uso de Basemap y NetCDF4

Dibujando líneas de nivel en Python con matplotlib

Introducción

En este artículo vamos a ver cómo representar en Python un mapa de curvas de nivel o de isolíneas, esto es, curvas que conectan los puntos en los que una función tiene un mismo valor constante, utilizando NumPy y matplotlib. Los mapas de curvas de nivel («contour lines» en inglés) son muy útiles, porque ayudan a ver la información de una manera mucho más cómoda que las representaciones de superficies en tres dimensiones, por muy espectaculares que estas últimas puedan quedar. Un ejemplo muy cotidiano es el mapa de isobaras que nos dan en la predicción del tiempo como el que se ve en la imagen: los puntos que están sobre la misma línea están todos a la misma presión.

Mapa de isobaras

Mapa HIRLAM-AEMET 0.16° de Superficie (Presión). Válido para el viernes, 13 abril 2012 a las 08:00. © Agencia Estatal de Meteorología.


Leer más »Dibujando líneas de nivel en Python con matplotlib

Introducción al Cálculo Simbólico en Python con SymPy

Introducción

En este artículo voy a hacer una introducción a SymPy, una biblioteca para hacer Cálculo Simbólico en Python a la vez que un sistema de álgebra computacional (o CAS en inglés) muy prometedor. Si alguna vez te has preguntado cómo hacer derivadas y resolver ecuaciones con Python o conoces ya sistemas como Mathematica o Maple pero prefieres utilizar una solución libre, has venido al sitio correcto.
Actualmente el desarrollo de SymPy está muy activo: a pesar de ser un CAS bastante completo, todavía tiene algunas cosas que sus desarrolladores piensan pulir a lo largo de los próximos meses y están trabajando duro para ello. Personalmente es uno de mis proyectos de software libre favoritos, por la buenísima documentación que escriben, por lo elegante que queda el código y por lo bonita que es su web 😛
SymPy tiene una característica que no tienen ninguno de sus competidores, tanto libres como no libres: se puede utilizar de manera interactiva como los CAS a los que estamos acostumbrados, pero también se puede integrar con nuestro código Python como una biblioteca más.
Se puede probar online, y también se puede descargar e instalar fácilmente. Para lanzar la consola interactiva (basada en IPython) sólo tendremos que escribir
[crayon-5dd86a7f7c3ba338305312/]
Para este tutorial se asumirá que estamos trabajando con la consola interactiva de SymPy 0.7.1. Para que el código funcione también en modo no interactivo solamente habrá que incluir los oportunos import y sustituir las variables dinámicas de IPython (_, _n, etc.) por variables reales. Podéis encontrar en Internet la documentación de SymPy 0.7.1. ¡Vamos allá!
Leer más »Introducción al Cálculo Simbólico en Python con SymPy

Integrando ecuaciones diferenciales: método leapfrog en Python

Introducción

En Python tenemos numerosas herramientas listas para que podamos integrar ecuaciones diferenciales ordinarias sin tener que preocuparnos en implementar un esquema numérico. Sin ir más lejos, en el módulo integrate de SciPy existen varias funciones a tal efecto. La función odeint es una interfraz en Python a la biblioteca ODEPACK, escrita en Fortran. Sin embargo, con un propósito didáctico vamos a estudiar cómo programaríamos la solución a un problema de ecuaciones diferenciales, en este caso utilizando la regla del punto medio o método leapfrog[1].
Para esta entrada se ha utilizado python 2.7.2, numpy 1.6.1 y matplotlib 1.1.0.

Enunciado

Problema de Cauchy: integrar la siguiente ecuación diferencial
$latex \frac{d^2 x}{d t^2} + x = 0$
Con las condiciones iniciales $latex x(0) = 1, \dot{x}(0) = 0$.

Leer más »Integrando ecuaciones diferenciales: método leapfrog en Python