Los padres físicos y virtuales de la criatura: Fernando Pérez y John Hunter, Numpy y Matplotlib
http://2013.es.pycon.org/media/python-ciencia-amor.pdf by @pybonacci
Proyecto muy activo en Github https://github.com/ipython/ipython desde donde lo clonaremos para instalarlo o correremos inmediatamente
Práctica con los atajos del teclado (Esc-h) mientras vemos las posibilidades de edición de texto con Markdown en ipython http://127.0.0.1:8888/notebooks/Dia%20Pythonista%20en%20Sorbas%20/Markdown%20Cells.ipynb
Veremos también el autocompletado con tab , el uso de comandos del terminal de linux (ls, cd, pwd, cat, etc ...) , las magias y las ayudas con ?
En el siguiente minitutorial nos podremos hacer una idea de lo que va: http://127.0.0.1:8888/notebooks/Dia%20Pythonista%20en%20Sorbas%20/Clase%203.ipynb
El archivo populations.txt muestra las poblaciones de liebres , linces y zanahorias en el norte de Canada durante los veinte primeros años del siglo pasado
cat populations.txt
# year hare lynx carrot 1900 30e3 4e3 48300 1901 47.2e3 6.1e3 48200 1902 70.2e3 9.8e3 41500 1903 77.4e3 35.2e3 38200 1904 36.3e3 59.4e3 40600 1905 20.6e3 41.7e3 39800 1906 18.1e3 19e3 38600 1907 21.4e3 13e3 42300 1908 22e3 8.3e3 44500 1909 25.4e3 9.1e3 42100 1910 27.1e3 7.4e3 46000 1911 40.3e3 8e3 46800 1912 57e3 12.3e3 43800 1913 76.6e3 19.5e3 40900 1914 52.3e3 45.7e3 39400 1915 19.5e3 51.1e3 39000 1916 11.2e3 29.7e3 36700 1917 7.6e3 15.8e3 41800 1918 14.6e3 9.7e3 43300 1919 16.2e3 10.1e3 41300 1920 24.7e3 8.6e3 47300
#Cargamos los módulos que vamos a necesitar
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
#Metemos los datos del txt en un array de numpy
data = np.loadtxt('populations.txt') # Convierte data en un array bidimensional, en una matriz vamos ...
print data
year, hares, lynxes, carrots = data.T # Traspuesta
print year
print carrots
[[ 1900. 30000. 4000. 48300.] [ 1901. 47200. 6100. 48200.] [ 1902. 70200. 9800. 41500.] [ 1903. 77400. 35200. 38200.] [ 1904. 36300. 59400. 40600.] [ 1905. 20600. 41700. 39800.] [ 1906. 18100. 19000. 38600.] [ 1907. 21400. 13000. 42300.] [ 1908. 22000. 8300. 44500.] [ 1909. 25400. 9100. 42100.] [ 1910. 27100. 7400. 46000.] [ 1911. 40300. 8000. 46800.] [ 1912. 57000. 12300. 43800.] [ 1913. 76600. 19500. 40900.] [ 1914. 52300. 45700. 39400.] [ 1915. 19500. 51100. 39000.] [ 1916. 11200. 29700. 36700.] [ 1917. 7600. 15800. 41800.] [ 1918. 14600. 9700. 43300.] [ 1919. 16200. 10100. 41300.] [ 1920. 24700. 8600. 47300.]] [ 1900. 1901. 1902. 1903. 1904. 1905. 1906. 1907. 1908. 1909. 1910. 1911. 1912. 1913. 1914. 1915. 1916. 1917. 1918. 1919. 1920.] [ 48300. 48200. 41500. 38200. 40600. 39800. 38600. 42300. 44500. 42100. 46000. 46800. 43800. 40900. 39400. 39000. 36700. 41800. 43300. 41300. 47300.]
#Dibujo el gráfico
plt.plot(year,hares, year, lynxes, year,carrots)
plt.legend(('Hare', 'Lynx', 'Carrot'))
<matplotlib.legend.Legend at 0xa03f5ac>
# Recorto la matriz de datos para quedarme solo con las poblaciones (slicing)
populations = data[:, 1:]
# Valores estadísticos de las poblaciones: Media y desviación típica
print populations.mean(axis=0)
print populations.std(axis=0)
[ 34080.95238095 20166.66666667 42400. ] [ 20897.90645809 16254.59153691 3322.50622558]
# ¿Que especies tienen la población más alta cada año?
np.argmax(populations, axis=1)
array([2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 2, 2, 2, 2, 2])
# ¿Que años son superados los 50000 elementos por alguna población?
print populations > 50000
print ""
print populations[populations > 50000]
print ""
above_50000 = np.any(populations > 50000, axis=1) # np.any devuelve un array con True donde se cumpla alguna de las condiciones
print above_50000
print ""
print "Any above 50000: ", year[above_50000]
[[False False False] [False False False] [ True False False] [ True False False] [False True False] [False False False] [False False False] [False False False] [False False False] [False False False] [False False False] [False False False] [ True False False] [ True False False] [ True False False] [False True False] [False False False] [False False False] [False False False] [False False False] [False False False]] [ 70200. 77400. 59400. 57000. 76600. 52300. 51100.] [False False True True True False False False False False False False True True True True False False False False False] Any above 50000: [ 1902. 1903. 1904. 1912. 1913. 1914. 1915.]
Un ejemplo sencillo para el análisis de señales http://glowingpython.blogspot.com.es/2011/08/how-to-plot-frequency-spectrum-with.html
Para algo mas riguroso, seguir la documentación: http://docs.scipy.org/doc/scipy/reference/tutorial/signal.html
Visor de notebooks online: http://nbviewer.ipython.org/
Ejemplos del procesado de señales: http://nbviewer.ipython.org/github/unpingco/Python-for-Signal-Processing/tree/master/
Tipos de gráficos http://nbviewer.ipython.org/github/Pybonacci/Tutorial-de-matplotlib.pyplot-en-pybonacci/blob/master/tutorial_de_matplotlib.pyplot.ipynb
Guia de choque de Python científico http://nbviewer.ipython.org/gist/rpmuller/5920182
Localizador de machismo made by python http://nbviewer.ipython.org/gist/nealcaren/5105037
Para quien quiera saber más de Python científico http://scipy-lectures.github.io/index.html
@pybonacci https://twitter.com/Pybonacci
github https://github.com/ipython
¿ Por qué tanto revuelo con ipython? http://www.reddit.com/r/Python/comments/1q9tq7/what_is_the_big_deal_about_ipython_notebooks/
Mas Python en general http://2013.es.pycon.org/