{ "metadata": { "name": "SciPyConAr_IPython" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "2. IPython." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* NBViewer: http://goo.gl/xkXHp\n", "* Repo: https://github.com/damianavila/SciPyConAr_Python_Cientifico\n", "\n", "\n", "* Twitter: **@damian_avila**\n", "* Blog: http://www.damian.oquanta.info" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.1. Descripci\u00f3n." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Es una poderosa herramienta para la computaci\u00f3n cient\u00edfica interactiva y exploratoria.**\n", "\n", "* Int\u00e9rpretes interactivos *poderosos* (terminal y basado en Qt).\n", "* Un web-notebook con las mismas funcionalidades b\u00e1sicas que los interpretes interactivos pero con soporte para video, texto, c\u00f3digo, expresiones matematicas y plot embebidos.\n", "* Soporte para la visualizaci\u00f3n interactiva de datos y uso de bibliotecas GUI.\n", "* Herramientas de alta performance para la cumputaci\u00f3n en paralelo." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.2. Clientes de IPython" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.2.1. Consola." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.2.2. Consola Qt." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.2.3. Web-notebook." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3. IPython b\u00e1sico (parte 1)." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3.1. Encendiendo motores..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "(ipython_dev)damian@damian-Inspiron-1110:~$ ipython notebook --pylab=inline\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "2013-05-10 12:11:26.912 [NotebookApp] Using existing profile dir: u'/home/damian/.config/ipython/profile_default'\n", "2013-05-10 12:11:26.937 [NotebookApp] Using MathJax from CDN: http://cdn.mathjax.org/mathjax/latest/MathJax.js\n", "2013-05-10 12:11:26.984 [NotebookApp] The port 8888 is already in use, trying another random port.\n", "2013-05-10 12:11:26.985 [NotebookApp] Serving notebooks from local directory: /home/damian\n", "2013-05-10 12:11:26.985 [NotebookApp] The IPython Notebook is running at: http://127.0.0.1:8888/\n", "2013-05-10 12:11:26.986 [NotebookApp] Use Control-C to stop this server and shut down all kernels.\n", "Se ha abierto una nueva ventana en la sesi\u00f3n actual del navegador.\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "y ejecutando un *hola mundo*:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print \"Hola SciPyConAr\"" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Hola SciPyConAr\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "a = 1" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "1" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "La representaci\u00f3n de los objetos es m\u00e1s legible:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = {i : randn() for i in range(7)}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "{0: -0.08057896750097586,\n", " 1: -0.6802589019979545,\n", " 2: 0.22168682127462605,\n", " 3: -1.067514067534686,\n", " 4: 0.6134211871726604,\n", " 5: 0.8228547005819703,\n", " 6: -0.76406633821424}" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ ">>> from numpy.random import randn\n", ">>> data = {i : randn() for i in range(7)}\n", ">>> print data\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{0: -1.3788695837223246, 1: 0.3432611139093174, 2: -0.832721033326183, 3: 0.5240879360829318, 4: 1.8363136524671757, 5: -1.3419464857663135, 6: -0.3929985586677686}\n" ] } ], "prompt_number": 6 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3.2. Completado por < TAB >." ] }, { "cell_type": "code", "collapsed": false, "input": [ "Facundo = 1" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "Facultad = 8" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "Fa = 4" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Busqueda de variables en el espacio de nombres: variable_de_inter\u00e9s**``**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Fa" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Acceso a m\u00e9todos y atributos, por ejemplo, objeto_de_inter\u00e9s**.``**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lista = [1, 2, 3, 4, 5]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "lista." ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lo mismo para los m\u00f3dulos, por ejemplo, modulo_de_inter\u00e9s**.``**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import datetime" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "datetime." ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "datetime._" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Incluso para directorios, por ejemplo, carpeta_de_inter\u00e9s**/``**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!ls # peque\u00f1o truco para pasar comandos a consola..." ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "images\t\t\t SciPyConAr_NumPy.ipynb\r\n", "nbconvert\t\t SciPyConAr_Python_Cientifico.ipynb\r\n", "SciPyConAr_Final.ipynb\t SciPyConAr_SciPy.ipynb\r\n", "SciPyConAr_Herramientas.ipynb scripts\r\n", "SciPyConAr_IPython.ipynb stockholm_td_adj.dat\r\n", "SciPyConAr_Matplotlib.ipynb\r\n" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "scripts/" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3.3. Introspecci\u00f3n de objetos." ] }, { "cell_type": "code", "collapsed": false, "input": [ "lista?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apliquemoslo a una funci\u00f3n propia:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def suma(a, b):\n", " \"\"\"\n", " Demo de una funci\u00f3n que suma cosas...\n", " \"\"\"\n", " return a + b" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "suma?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "suma??" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "El **\"?\"** Tambi\u00e9n puede servirnos para la busqueda en el espacio de nombres de IPython:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.*lin*?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3.4. %run, Forest... %run." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Con el comando `%run` podemos ejecutar cualquier archivo `.py` en un espacio de nombres **limpio**, sin `imports` ni `variables` definidas (a menos que corramos `%run -i`).\n", "\n", "Demo:\n", "\n", "```\n", "!mkdir temporal/\n", "!touch temporal/mi_programa.py\n", "!ls temporal/\n", "!cat temporal/mi_programa.py\n", "```" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%bash\n", "mkdir temporal/\n", "touch temporal/mi_programa.py\n", "ls temporal/" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "mi_programa.py\n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "!cat temporal/mi_programa.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "%%file temporal/mi_programa.py\n", "def mi_funcion(x, y):\n", " \"\"\"\n", " Demo\n", " \"\"\"\n", " return x / y\n", "\n", "x = 4\n", "y = 2\n", "\n", "resultado = mi_funcion(x, y)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Overwriting temporal/mi_programa.py\n" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "!cat temporal/mi_programa.py" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "def mi_funcion(x, y):\r\n", " \"\"\"\r\n", " Demo\r\n", " \"\"\"\r\n", " return x / y\r\n", "\r\n", "x = 4\r\n", "y = 2\r\n", "\r\n", "resultado = mi_funcion(x, y)" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "%run temporal/mi_programa.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "resultado" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "2" ] } ], "prompt_number": 22 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3.5. Excepciones y Tracebacks." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%file temporal/mi_programa.py\n", "def mi_funcion(x, y):\n", " \"\"\"\n", " Demo\n", " \"\"\"\n", " return x / y\n", "\n", "x = 4\n", "y = 0\n", "\n", "resultado = mi_funcion(x, y)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Overwriting temporal/mi_programa.py\n" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "%run temporal/mi_programa.py" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "ZeroDivisionError", "evalue": "integer division or modulo by zero", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m/home/damian/Desarrollos/To_PR/CONTRIBUTING/ipython/IPython/utils/py3compat.pyc\u001b[0m in \u001b[0;36mexecfile\u001b[1;34m(fname, *where)\u001b[0m\n\u001b[0;32m 181\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 182\u001b[0m \u001b[0mfilename\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfname\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 183\u001b[1;33m \u001b[0m__builtin__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexecfile\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0mwhere\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m/home/damian/Python Conferences/ScipyConAr/tutorial/temporal/mi_programa.py\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 10\u001b[1;33m \u001b[0mresultado\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmi_funcion\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m/home/damian/Python Conferences/ScipyConAr/tutorial/temporal/mi_programa.py\u001b[0m in \u001b[0;36mmi_funcion\u001b[1;34m(x, y)\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mDemo\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \"\"\"\n\u001b[1;32m----> 5\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero" ] } ], "prompt_number": 24 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3.6. \"It a kind of Magic...\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los *magics* son comandos que facilitan las tareas m\u00e1s comunes y/o permiten interaccionar y controlar IPython. \n", "\n", "Se reconocen por estar precedidos por **`%`** (*line-magics*) o **`%%`** (*cell-magics*).\n", "\n", "Explicaci\u00f3n detallada, tenemos un *magic* para ello: **`%magic`**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%magic" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "%lsmagic # si queremos listar todas las magics disponibles" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Available line magics:\n", "%alias %alias_magic %autocall %automagic %autosave %bookmark %cd %clear %colors %config %connect_info %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %install_default_config %install_ext %install_profiles %killbgscripts %less %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %lsmagic %macro %magic %man %more %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %run %save %sc %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode\n", "\n", "Available cell magics:\n", "%%! %%HTML %%SVG %%bash %%capture %%file %%html %%javascript %%latex %%perl %%prun %%pypy %%python %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit\n", "\n", "Automagic is ON, % prefix IS NOT needed for line magics.\n" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "%quickref # referencia r\u00e1pida" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "quickref # si %automagic est\u00e1 ON" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "OK, usemos una *magic* (**`%timeit`**) a modo de ejemplo:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 155 }, { "cell_type": "code", "collapsed": false, "input": [ "m = np.random.randn(100, 100) # matriz de n\u00fameros aleatorios de 100 x 100" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "m" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "array([[-0.06020434, -0.32094883, -2.8624218 , ..., 0.57308841,\n", " -1.16990583, 0.678494 ],\n", " [ 0.5683235 , 1.410277 , -0.6028256 , ..., 1.75015083,\n", " 0.77766807, -0.32679313],\n", " [-0.92895948, -0.47488372, 0.21802094, ..., 1.29741317,\n", " -0.43273401, -0.25958936],\n", " ..., \n", " [-1.40861355, 0.413932 , -1.04962884, ..., 1.33899788,\n", " 0.7225967 , -1.60642745],\n", " [ 0.44397859, -0.65452681, -1.15851033, ..., 0.51260205,\n", " -0.6491627 , -0.07737892],\n", " [-0.91616426, -1.14552903, -0.52188168, ..., 1.76185015,\n", " 0.19011891, -0.37910311]])" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit np.dot(m, m) # multiplicaci\u00f3n vectorial de matrices" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100 loops, best of 3: 2.87 ms per loop\n" ] } ], "prompt_number": 156 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit -n 1000 -r 10 np.dot(m, m) # las magics aceptan par\u00e1metros" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000 loops, best of 10: 2.89 ms per loop\n" ] } ], "prompt_number": 157 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Algunas **`magics`** de uso frecuente que aun no hemos comentado:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%who" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Fa\tFacultad\tFacundo\ta\tdata\tlista\tm\tmi_funcion\tresultado\t\n", "x\ty\t\n" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "%who_ls" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "['Fa',\n", " 'Facultad',\n", " 'Facundo',\n", " 'a',\n", " 'data',\n", " 'lista',\n", " 'm',\n", " 'mi_funcion',\n", " 'resultado',\n", " 'x',\n", " 'y']" ] } ], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "%whos" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Variable Type Data/Info\n", "----------------------------------\n", "Fa int 4\n", "Facultad int 8\n", "Facundo int 1\n", "a int 1\n", "data dict n=7\n", "lista list n=5\n", "m ndarray 100x100: 10000 elems, type `float64`, 80000 bytes\n", "mi_funcion function \n", "resultado int 2\n", "x int 4\n", "y int 0\n" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "%xdel resultado\n", "%who" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "NameError: name 'resultado' is not defined\n", "Fa\tFacultad\tFacundo\ta\tdata\tlista\tm\tmi_funcion\tx\t\n", "y\t\n" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "%reset" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Once deleted, variables cannot be recovered. Proceed (y/[n])? y\n" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "m" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'm' is not defined", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mm\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mNameError\u001b[0m: name 'm' is not defined" ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nota: `%paste` y `%cpaste` son `magics` con uso frecuente en la consola de IPython." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.3.7. Dos `magics` muy \u00fatiles." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%qtconsole" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n", "For more information, type 'help(pylab)'.\n" ] } ], "prompt_number": 161 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.4. IPython b\u00e1sico (parte 2)." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.4.1. Haciendo uso de la historia..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Inputs` y `Outputs`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "2**4" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 74, "text": [ "16" ] } ], "prompt_number": 74 }, { "cell_type": "code", "collapsed": false, "input": [ "_" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 75, "text": [ "16" ] } ], "prompt_number": 75 }, { "cell_type": "code", "collapsed": false, "input": [ "foo = \"bar\"\n", "foo" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 76, "text": [ "'bar'" ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "_i65" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 77, "text": [ "u'foo = \"bar\"\\nfoo'" ] } ], "prompt_number": 77 }, { "cell_type": "code", "collapsed": false, "input": [ "_65" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 78, "text": [ "'bar'" ] } ], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "foo = \"baz\"\n", "foo" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 80, "text": [ "'baz'" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "exec _i76" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "foo" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "'bar'" ] } ], "prompt_number": 82 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: Logging `magics` (`%logstart`, `%logstate`, `%logstop`, `%logon` y `%logoff`) son \u00fatiles en la consola de IPython." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.4.2. Interacci\u00f3n con el OS." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Usamos el signo de exclamaci\u00f3n (**`!`**) para enviar el comando a la consola del sistema:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!pwd " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "/home/damian/Python Conferences/ScipyConAr/tutorial\r\n" ] } ], "prompt_number": 83 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Incluso podemos capturar el output en una variable (en forma de una lista)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mes = !cal" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 84 }, { "cell_type": "code", "collapsed": false, "input": [ "este_mes = mes[0]\n", "este_mes" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 85, "text": [ "' Mayo 2013 '" ] } ], "prompt_number": 85 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pueden utilizarse variables definidas en el espacio de nombres actual, precedi\u00e9ndolas con el signo **`$`**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "ipy_notebooks = '*.ipynb'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 86 }, { "cell_type": "code", "collapsed": false, "input": [ "!ls" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "images\t\t\t SciPyConAr_NumPy.ipynb\r\n", "nbconvert\t\t SciPyConAr_Python_Cientifico.ipynb\r\n", "SciPyConAr_Final.ipynb\t SciPyConAr_SciPy.ipynb\r\n", "SciPyConAr_Herramientas.ipynb scripts\r\n", "SciPyConAr_IPython.ipynb stockholm_td_adj.dat\r\n", "SciPyConAr_Matplotlib.ipynb temporal\r\n" ] } ], "prompt_number": 87 }, { "cell_type": "code", "collapsed": false, "input": [ "!ls $ipy_notebooks" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "SciPyConAr_Final.ipynb\t SciPyConAr_NumPy.ipynb\r\n", "SciPyConAr_Herramientas.ipynb SciPyConAr_Python_Cientifico.ipynb\r\n", "SciPyConAr_IPython.ipynb SciPyConAr_SciPy.ipynb\r\n", "SciPyConAr_Matplotlib.ipynb\r\n" ] } ], "prompt_number": 88 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Asimismo puedo establecer \"apodos\" o **`%alias`** de la siguiente forma:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%alias ld ls -l" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "ld" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "total 6164\r\n", "drwxrwxr-x 2 damian damian 4096 may 14 21:23 \u001b[0m\u001b[01;34mimages\u001b[0m/\r\n", "drwxrwxr-x 11 damian damian 4096 may 15 18:58 \u001b[01;34mnbconvert\u001b[0m/\r\n", "-rw-rw-r-- 1 damian damian 3204 may 16 10:52 SciPyConAr_Final.ipynb\r\n", "-rw-rw-r-- 1 damian damian 670721 may 15 00:14 SciPyConAr_Herramientas.ipynb\r\n", "-rw-rw-r-- 1 damian damian 40040 may 16 11:54 SciPyConAr_IPython.ipynb\r\n", "-rw-rw-r-- 1 damian damian 1515011 may 16 10:45 SciPyConAr_Matplotlib.ipynb\r\n", "-rw-rw-r-- 1 damian damian 66141 may 13 16:23 SciPyConAr_NumPy.ipynb\r\n", "-rw-rw-r-- 1 damian damian 20162 may 16 10:52 SciPyConAr_Python_Cientifico.ipynb\r\n", "-rw-rw-r-- 1 damian damian 1103360 may 16 10:48 SciPyConAr_SciPy.ipynb\r\n", "drwxrwxr-x 2 damian damian 4096 may 16 11:03 \u001b[01;34mscripts\u001b[0m/\r\n", "-rw-rw-r-- 1 damian damian 2864946 may 10 08:35 stockholm_td_adj.dat\r\n", "drwxrwxr-x 2 damian damian 4096 may 16 11:23 \u001b[01;34mtemporal\u001b[0m/\r\n" ] } ], "prompt_number": 90 }, { "cell_type": "markdown", "metadata": {}, "source": [ "El **`%alias`** puede incluso contener varios comandos separados por (**`;`**):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%alias l_clases (cd /home/damian/Bioestadistica/Clases; ls)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "l_clases" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Bioestadistica - Clase 10.pdf Bioestadistica - Clase 4.pdf\r\n", "Bioestadistica - Clase 11.pdf Bioestadistica - Clase 5.pdf\r\n", "Bioestadistica - Clase 12.pdf Bioestadistica - Clase 6.pdf\r\n", "Bioestadistica - Clase 1.pdf Bioestadistica - Clase 7.pdf\r\n", "Bioestadistica - Clase 2.pdf Bioestadistica - Clase 8.pdf\r\n", "Bioestadistica - Clase 3.pdf Bioestadistica - Clase 9.pdf\r\n" ] } ], "prompt_number": 96 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Puedo usar marcadores para directorios de uso recurrente:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%bookmark clases /home/damian/Bioestadistica/Clases/" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 97 }, { "cell_type": "code", "collapsed": false, "input": [ "%cd clases" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(bookmark:clases) -> /home/damian/Bioestadistica/Clases/\n", "/home/damian/Bioestadistica/Clases\n" ] } ], "prompt_number": 98 }, { "cell_type": "code", "collapsed": false, "input": [ "!ls" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Bioestadistica - Clase 10.pdf Bioestadistica - Clase 4.pdf\r\n", "Bioestadistica - Clase 11.pdf Bioestadistica - Clase 5.pdf\r\n", "Bioestadistica - Clase 12.pdf Bioestadistica - Clase 6.pdf\r\n", "Bioestadistica - Clase 1.pdf Bioestadistica - Clase 7.pdf\r\n", "Bioestadistica - Clase 2.pdf Bioestadistica - Clase 8.pdf\r\n", "Bioestadistica - Clase 3.pdf Bioestadistica - Clase 9.pdf\r\n" ] } ], "prompt_number": 99 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.4.3. Debugging. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* `%debug` (post-mortem debugger, lo inicializ\u00e1s despu\u00e9s de la aparici\u00f3n de una excepci\u00f3n).\n", "* `%pdb` (inicializa el debugger despu\u00e9s de cada excepci\u00f3n)." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.4.4. Profiling." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* `%prun` o `%run -p` (profiling en general).\n", "* `%lprun` (profiling por linea, necesita de line-profiler)." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2.4.5. Configuraci\u00f3n." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Intro:\n", " * http://ipython.org/ipython-doc/dev/config/overview.html\n", "* Perfiles:\n", " * http://ipython.org/ipython-doc/dev/config/overview.html#profiles\n", "* Extensiones:\n", " * http://ipython.org/ipython-doc/dev/config/extensions/index.\n", " * https://github.com/ipython/ipython/wiki/Extensions-Index" ] } ], "metadata": {} } ] }