Skip to content

Instantly share code, notes, and snippets.

@vencejo
Created July 1, 2014 16:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vencejo/7ff53583a39e419dc18b to your computer and use it in GitHub Desktop.
Save vencejo/7ff53583a39e419dc18b to your computer and use it in GitHub Desktop.
Charla introductoria al IPython
{
"metadata": {
"name": "",
"signature": "sha256:9b24304c71dc74c149ca0a501477f9c555da0a5e39ed55b1f2612ffe54faeece"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Introducci\u00f3n a la introducci\u00f3n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Los padres f\u00edsicos y virtuales de la criatura: Fernando P\u00e9rez y John Hunter, Numpy y Matplotlib\n",
"\n",
"http://2013.es.pycon.org/media/python-ciencia-amor.pdf by @pybonacci"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Primer contacto con el ecosistema ipython: github e instalaci\u00f3n (o no)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Proyecto muy activo en Github https://github.com/ipython/ipython desde donde lo clonaremos para instalarlo o correremos inmediatamente"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pr\u00e1ctica con los atajos del teclado (Esc-h) mientras vemos las posibilidades de edici\u00f3n de texto con Markdown en ipython http://127.0.0.1:8888/notebooks/Dia%20Pythonista%20en%20Sorbas%20/Markdown%20Cells.ipynb\n",
"\n",
"Veremos tambi\u00e9n el autocompletado con tab , el uso de comandos del terminal de linux (ls, cd, pwd, cat, etc ...) , las magias y las ayudas con ?"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Numpy: Base de la programaci\u00f3n cient\u00edfica en python"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En el siguiente minitutorial nos podremos hacer una idea de lo que va: \n",
"http://127.0.0.1:8888/notebooks/Dia%20Pythonista%20en%20Sorbas%20/Clase%203.ipynb"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Un ejemplo sencillo de visualizaci\u00f3n y tratamiento de datos con ipython: Liebres y linces"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"El archivo populations.txt muestra las poblaciones de liebres , linces y zanahorias en el norte de Canada durante los veinte primeros a\u00f1os del siglo pasado"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cat populations.txt"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"# year\thare\tlynx\tcarrot\r\n",
"1900\t30e3\t4e3\t48300\r\n",
"1901\t47.2e3\t6.1e3\t48200\r\n",
"1902\t70.2e3\t9.8e3\t41500\r\n",
"1903\t77.4e3\t35.2e3\t38200\r\n",
"1904\t36.3e3\t59.4e3\t40600\r\n",
"1905\t20.6e3\t41.7e3\t39800\r\n",
"1906\t18.1e3\t19e3\t38600\r\n",
"1907\t21.4e3\t13e3\t42300\r\n",
"1908\t22e3\t8.3e3\t44500\r\n",
"1909\t25.4e3\t9.1e3\t42100\r\n",
"1910\t27.1e3\t7.4e3\t46000\r\n",
"1911\t40.3e3\t8e3\t46800\r\n",
"1912\t57e3\t12.3e3\t43800\r\n",
"1913\t76.6e3\t19.5e3\t40900\r\n",
"1914\t52.3e3\t45.7e3\t39400\r\n",
"1915\t19.5e3\t51.1e3\t39000\r\n",
"1916\t11.2e3\t29.7e3\t36700\r\n",
"1917\t7.6e3\t15.8e3\t41800\r\n",
"1918\t14.6e3\t9.7e3\t43300\r\n",
"1919\t16.2e3\t10.1e3\t41300\r\n",
"1920\t24.7e3\t8.6e3\t47300\r\n"
]
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Cargamos los m\u00f3dulos que vamos a necesitar\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Metemos los datos del txt en un array de numpy\n",
"data = np.loadtxt('populations.txt') # Convierte data en un array bidimensional, en una matriz vamos ...\n",
"print data\n",
"year, hares, lynxes, carrots = data.T # Traspuesta\n",
"print year\n",
"print carrots"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[ 1900. 30000. 4000. 48300.]\n",
" [ 1901. 47200. 6100. 48200.]\n",
" [ 1902. 70200. 9800. 41500.]\n",
" [ 1903. 77400. 35200. 38200.]\n",
" [ 1904. 36300. 59400. 40600.]\n",
" [ 1905. 20600. 41700. 39800.]\n",
" [ 1906. 18100. 19000. 38600.]\n",
" [ 1907. 21400. 13000. 42300.]\n",
" [ 1908. 22000. 8300. 44500.]\n",
" [ 1909. 25400. 9100. 42100.]\n",
" [ 1910. 27100. 7400. 46000.]\n",
" [ 1911. 40300. 8000. 46800.]\n",
" [ 1912. 57000. 12300. 43800.]\n",
" [ 1913. 76600. 19500. 40900.]\n",
" [ 1914. 52300. 45700. 39400.]\n",
" [ 1915. 19500. 51100. 39000.]\n",
" [ 1916. 11200. 29700. 36700.]\n",
" [ 1917. 7600. 15800. 41800.]\n",
" [ 1918. 14600. 9700. 43300.]\n",
" [ 1919. 16200. 10100. 41300.]\n",
" [ 1920. 24700. 8600. 47300.]]\n",
"[ 1900. 1901. 1902. 1903. 1904. 1905. 1906. 1907. 1908. 1909.\n",
" 1910. 1911. 1912. 1913. 1914. 1915. 1916. 1917. 1918. 1919.\n",
" 1920.]\n",
"[ 48300. 48200. 41500. 38200. 40600. 39800. 38600. 42300. 44500.\n",
" 42100. 46000. 46800. 43800. 40900. 39400. 39000. 36700. 41800.\n",
" 43300. 41300. 47300.]\n"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Dibujo el gr\u00e1fico\n",
"plt.plot(year,hares, year, lynxes, year,carrots)\n",
"plt.legend(('Hare', 'Lynx', 'Carrot'))\n",
"\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"<matplotlib.legend.Legend at 0xa03f5ac>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n6vRlVlaW6vcpU6agV69eWL58uW4D1nOv689Kf50CnpmZyWPzDdTtz0o8Pl9WVV8CQHh4OHr3ovaa\nkgAAAhdJREFU7g2pVFrjsalXyWL79u0ICQmBi4sLCgsL0ahRI7FDMlg16cs9e/YgOTkZsbGxiI2N\nxa5du3QQqWHgsalZPD41p6q+vHbtGhYvXozQ0NBatSP6bKjnOTg4ICoqCgDw559/4tixYwBeXouR\nkZEBa2tryGQyZGRkvHBcJpPpNmg9pU5fVvaZlZUVAMDExASBgYG4ePEiJk2apOPI9dPr+vN1eGy+\nmbr9CfD4fJ039WVGRgZGjx6NXbt2oWPHjgBqPjb16szi/v37AAClUonly5dj1qxZAIDhw4cjLCwM\nZWVlSEtLw82bN+Hm5gYLCwuYmpoiLi4ORIRdu3Zh5MiRYr4FvaFuXyoUCtXskvLycvz0008vzLio\n717Xn5X+ei3d0tKSx+YbqNufPD5f73V9mZ+fDz8/PwQHB8Pd3V31+BqPzdrfn6+ZCRMmkKWlJUml\nUrK2tqZt27bRunXrqHPnztS5c2f65z//+cLjV6xYQba2tuTg4ECRkZGq4/Hx8eTk5ES2trY0b948\nXb8NvaCJviwsLKTevXtT9+7dqVu3bvSPf/xDNUuqvlG3Pzt06ECtW7cmExMTsra2phs3bhARj81K\nmujPoqIiHp+kXl9+/fXX1KxZM+rZs6fq6/79+0RUs7EpeiFBxhhj+k+vLkMxxhjTT5wsGGOMVYmT\nBWOMsSpxsmCMMVYlThaMMcaqxMmCMcZYlf4flolK8tkNDOcAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0xa03f3ec>"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Recorto la matriz de datos para quedarme solo con las poblaciones (slicing)\n",
"populations = data[:, 1:]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Valores estad\u00edsticos de las poblaciones: Media y desviaci\u00f3n t\u00edpica\n",
"print populations.mean(axis=0)\n",
"print populations.std(axis=0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 34080.95238095 20166.66666667 42400. ]\n",
"[ 20897.90645809 16254.59153691 3322.50622558]\n"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# \u00bfQue especies tienen la poblaci\u00f3n m\u00e1s alta cada a\u00f1o?\n",
"np.argmax(populations, axis=1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 18,
"text": [
"array([2, 2, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 2, 2, 2, 2, 2])"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# \u00bfQue a\u00f1os son superados los 50000 elementos por alguna poblaci\u00f3n?\n",
"print populations > 50000\n",
"print \"\"\n",
"print populations[populations > 50000]\n",
"print \"\"\n",
"above_50000 = np.any(populations > 50000, axis=1) # np.any devuelve un array con True donde se cumpla alguna de las condiciones\n",
"print above_50000\n",
"print \"\"\n",
"print \"Any above 50000: \", year[above_50000]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[False False False]\n",
" [False False False]\n",
" [ True False False]\n",
" [ True False False]\n",
" [False True False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]\n",
" [ True False False]\n",
" [ True False False]\n",
" [ True False False]\n",
" [False True False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]\n",
" [False False False]]\n",
"\n",
"[ 70200. 77400. 59400. 57000. 76600. 52300. 51100.]\n",
"\n",
"[False False True True True False False False False False False False\n",
" True True True True False False False False False]\n",
"\n",
"Any above 50000: [ 1902. 1903. 1904. 1912. 1913. 1914. 1915.]\n"
]
}
],
"prompt_number": 23
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"El paquete cient\u00edfico Scipy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Un ejemplo sencillo para el an\u00e1lisis de se\u00f1ales\n",
"http://glowingpython.blogspot.com.es/2011/08/how-to-plot-frequency-spectrum-with.html\n",
"\n",
"Para algo mas riguroso, seguir la documentaci\u00f3n:\n",
"http://docs.scipy.org/doc/scipy/reference/tutorial/signal.html"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Mas ejemplos con el ipython notebook"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Visor de notebooks online: \n",
"http://nbviewer.ipython.org/\n",
"\n",
"Ejemplos del procesado de se\u00f1ales: \n",
"http://nbviewer.ipython.org/github/unpingco/Python-for-Signal-Processing/tree/master/\n",
"\n",
"Tipos de gr\u00e1ficos http://nbviewer.ipython.org/github/Pybonacci/Tutorial-de-matplotlib.pyplot-en-pybonacci/blob/master/tutorial_de_matplotlib.pyplot.ipynb\n",
"\n",
"Guia de choque de Python cient\u00edfico\n",
"http://nbviewer.ipython.org/gist/rpmuller/5920182\n",
"\n",
"Localizador de machismo made by python\n",
"http://nbviewer.ipython.org/gist/nealcaren/5105037"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Referencias"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para quien quiera saber m\u00e1s de Python cient\u00edfico\n",
"http://scipy-lectures.github.io/index.html\n",
"\n",
"@pybonacci\n",
"https://twitter.com/Pybonacci\n",
"\n",
"github\n",
"https://github.com/ipython\n",
"\n",
"\u00bf Por qu\u00e9 tanto revuelo con ipython?\n",
"http://www.reddit.com/r/Python/comments/1q9tq7/what_is_the_big_deal_about_ipython_notebooks/\n",
"\n",
"Mas Python en general\n",
"http://2013.es.pycon.org/\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment