Skip to content

Instantly share code, notes, and snippets.

@damianavila
Last active December 21, 2015 18:09
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 damianavila/6345426 to your computer and use it in GitHub Desktop.
Save damianavila/6345426 to your computer and use it in GitHub Desktop.
Example ipynb to test LIVE reveal extension.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:836c0b96ee567f974502c88a6f12c747b9756cd8462902920fa78287f990b1ef"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {
"internals": {
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"<span class=\"hgviolet\">IPython-fu</span>"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"<span class=\"hgpink\">El</span> <span class=\"hgblue\">camino</span> <span class=\"hgorange\">de la</span> <span class=\"hggreen\">\"nbconversi\u00f3n\"</span>"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"<p style=\"text-align: center;\"><i class=\"icon-user icon-2x\"> [Dami\u00e1n Avila](http://www.damian.oquanta.info)</i></p>\n",
"\n",
"<p style=\"text-align: center;\"><i class=\"icon-twitter icon-2x\"> [@damian_avila](http://twitter.com/damian_avila)</i></p>\n",
"\n",
"<p style=\"text-align: center;\"><i class=\"icon-github icon-2x\"> [damianavila](https://github.com/damianavila)</i></p>\n",
"\n",
"<p style=\"text-align: center;\"><i class=\"icon-envelope-alt icon-2x\"> <a href=\"mailto:info@oquanta.info\">info@oquanta.info</a></i></p>"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"<p style=\"text-align: center;\"><i class=\"icon-globe icon-2x\"> <a href=\"http://goo.gl/lwQtB0\">http://goo.gl/lwQtB0</a></i></p>"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"internals": {
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"1. El notebook the IPython. "
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"<img src=\"logo.png\" />"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"<p style=\"text-align: center;\"><i class=\"icon-globe icon-2x\"> <a href=\"http://ipython.org\">http://ipython.org</a></i></p>"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\u00bfQu\u00e9 es el notebook the IPython?"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {},
"slideshow": {
"slide_type": "-"
}
},
"source": [
">The goal of IPython is to create a comprehensive environment for interactive and exploratory computing."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {},
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Una herramienta para contar **historias**:"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"* metodolog\u00edas\n",
"* procedimientos\n",
"* an\u00e1lisis"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"T\u00e9cnicamente es una documento basado de JSON:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.nbformat import current\n",
"with open('test_slides.ipynb') as f:\n",
" nb = current.read(f,'json')\n",
" \n",
"nb.worksheets[0].cells[18:19]"
],
"language": "python",
"metadata": {
"internals": {
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": [
"[{u'cell_type': u'markdown',\n",
" u'metadata': {u'internals': {u'frag_helper': u'fragment_end',\n",
" u'frag_number': 18,\n",
" u'slide_helper': u'subslide_end'},\n",
" u'slide_helper': u'slide_end',\n",
" u'slideshow': {u'slide_type': u'fragment'}},\n",
" u'source': u'* Abierto'}]"
]
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Genera archivos con la extensi\u00f3n `.ipynb` que se guardan en el directorio local.\n",
"* En el notebook podemos almacenar:\n",
" * C\u00f3digo\n",
" * Texto (Markdown)\n",
" * Equaciones (LaTeX)\n",
" * Im\u00e1genes\n",
" * Videos\n",
" * HTML\n",
"* Puede ser controlado por versiones.\n",
"* Puede verse sin tener IPython instalado usando NBViewer: http://nbviewer.ipython.org/.\n",
"* Puede ser exportado a otros formatos: Slides, HTML, Markdown, reStructured Text, LaTeX y PDF."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\u00bfCu\u00e1les son sus caracter\u00edsticas principales?"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_number": 15
},
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Interactivo"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 16
},
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Exploratorio"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Colaborativo"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Abierto"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"2. Instalando el notebook de IPython."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\u00bfQu\u00e9 necesito para hacerlo andar?"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"* Tornado\n",
"* ZeroMQ/PyZMQ\n",
"* Jinja2\n",
"* Chrome, Firefox, Safari (WebSockets, Flexible Box Model)\n",
"* Matplotlib para hacer figuras\n",
"* En linux, mac `pip install ipython[all]` o desde el `source` en **github**.\n",
"* Instalaci\u00f3n f\u00e1cil (incluyendo instaladores para win): Canopy, Anaconda, Python XY, WinPython, Pyzo\n",
"* Online: Wakari"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\u00bfC\u00f3mo lo hago andar?"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"* `cd` en el directorio conteniendo los archivos `ipynb` y simplemente tipeamos:\n",
"\n",
"```bash\n",
"(ipython_dev)damian@damian-Inspiron-1110:~$ ipython notebook\n",
"\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": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Interfase de usuario"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"* Dashboard\n",
"* Menu\n",
"* Barra de herramientas\n",
"* \u00c1rea del notebook y celdas"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Tipo de celdas"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"* Code\n",
"* Markdown\n",
"* Raw text\n",
"* Heading"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\"Shortcuts\" del teclado"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"* `Shift-Enter` para ejecutar una celda\n",
"* `Ctrl-Enter` para ejecutar una celda y *quedarse* en esa misma celda.\n",
"* `Alt-Enter` para ejecutar una celda e insertar una nueva celda por debajo de la *ejecutada*.\n",
"* Todas las otras \"shortcuts\" tienen la forma: `Ctrl-m ?`\n",
"* Si quer\u00e9s ver las \"shortcuts\" disponibles: `Ctrl-m h`"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"3. Usando el notebook de IPython."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Trabajar con c\u00f3dido y correrlo:"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"source": [
"El cl\u00e1sico `hola mundo`:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"Hola Scipy...\""
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"La representaci\u00f3n de los objetos es m\u00e1s legible:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numpy.random import randn\n",
"data = {i : randn() for i in range(10)}\n",
"data"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"source": [
"y contrasten contra la siguiente representaci\u00f3n:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> from numpy.random import randn\n",
">>> data = {i : randn() for i in range(7)}\n",
">>> print data # peque\u00f1a trampa para verlo como se ver\u00eda en consola"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Puedo probar \"pedacitos\" de c\u00f3digo (por ejemplo de tutoriales):"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> the_world_is_flat = 1\n",
">>> if the_world_is_flat:\n",
"... print \"Hello Scipy Conference!\""
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for x in range(10):\n",
" print(x)"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"In [5]: [x*x for x in range(7)]"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Puedo ver los errores o *tracebacks* de una manera simple y visualmente informativa:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%run non_existent_file"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = 1\n",
"y = 4\n",
"z = y/(1-x)\n",
"z"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Otras ventajas a la hora de trabajar con c\u00f3digo:\n",
"\n",
"* Completado por Tab"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import scipy as sp"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sp."
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Ayuda integrada"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"?"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"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": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"suma?"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"suma??"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* \"Atajos\" interactivos (aliases, magics)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%magic"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%lsmagic"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%quickref"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Pero tambien tenemos *cell magics* (`%%`) a trav\u00e9s de las cuales el notebook soporta correr c\u00f3digo en otros lenguajes (entre otras tareas:\n",
"\n",
"* R\n",
"* Octave\n",
"* Cython\n",
"* Bash\n",
"* Perl\n",
"* Ruby\n",
"* etc."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"y combinando *magics* las tareas son muy simples:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%bash\n",
"mkdir temporal/\n",
"touch temporal/mi_programa.py\n",
"cat temporal/mi_programa.py"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%writefile 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": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%run temporal/mi_programa.py"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"resultado"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Puedo interaccionar f\u00e1cilmente con el sistema operativo:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!pwd"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"files = !ls\n",
"print \"My current directory's files:\"\n",
"print files"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!echo $files"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!echo {files[0].upper()}"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Por ejemplo, puedo generar figuras program\u00e1ticamente utilizando matplotlib:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"x = np.linspace(0, 3*np.pi, 500)\n",
"y = np.sin(x**2)\n",
"fig = plt.figure()\n",
"axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])\n",
"axes.plot(x, y, 'r')\n",
"axes.set_xlabel('x')\n",
"axes.set_ylabel('sin x^2')\n",
"axes.set_title('Una figura simple');"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Documentar el flujo de trabajo."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"El texto reendea v\u00eda `Markdown`, por ejemplo puedo tener *italica*, **enf\u00e1sis** o linkear a [google](http://www.google.com).\n",
"\n",
"Puedo hacer listas:\n",
"\n",
"1. primero\n",
"2. segundo\n",
"3. tercero\n",
"\n",
"\n",
"* auto\n",
"* biblicleta\n",
"* moto"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Puedo embeber c\u00f3digo para demostraci\u00f3n, por ejemplo, para Python:\n",
"```python\n",
" def f(x):\n",
" \"\"\"a docstring\"\"\"\n",
" return x**2\n",
"```\n",
"o para otros lenguajes:\n",
"```javascript\n",
" if (i=0; i<n; i++) {\n",
" printf(\"hello %d\\n\", i);\n",
" x += 4;\n",
" }\n",
"``` "
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Gracias a MathJax, se pueden incluir expresiones matem\u00e1ticas `inline`: \n",
"$e^{i\\pi} + 1 = 0$ o en `bloque`:\n",
"\n",
"$$e^x=\\sum_{i=0}^\\infty \\frac{1}{i!}x^i$$"
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Si el navegador puede mostrarlo..."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import display"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Im\u00e1genes:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Image\n",
"Image(filename='logo.png') "
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import SVG\n",
"SVG(filename='python-logo.svg')"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Video:"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Puedo cargar y mostrar videos de Youtube, Vimeo, etc..."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import YouTubeVideo\n",
"YouTubeVideo('MIAKOMzRl1I')"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* HTML"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import HTML\n",
"\n",
"s = \"\"\"<table>\n",
"<tr>\n",
"<th>Header 1</th>\n",
"<th>Header 2</th>\n",
"</tr>\n",
"<tr>\n",
"<td>row 1, cell 1</td>\n",
"<td>row 1, cell 2</td>\n",
"</tr>\n",
"<tr>\n",
"<td>row 2, cell 1</td>\n",
"<td>row 2, cell 2</td>\n",
"</tr>\n",
"</table>\"\"\""
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"h = HTML(s)\n",
"display(h)"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Sitios web:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import IFrame\n",
"IFrame('http://www.damian.oquanta.info', 800, 600)"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* M\u00fasica:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%load soln/soundcloud.py\n",
"\n",
"from IPython.display import HTML\n",
"h = HTML(\"\"\"<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F94543639\"></iframe>\"\"\")\n",
"display(h)"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Javascript"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Javascript\n",
"\n",
"# fetch d3 from cloudflare\n",
"Javascript(\"\"\"$.getScript('//cdnjs.cloudflare.com/ajax/libs/d3/3.2.2/d3.v3.min.js')\"\"\")"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%html\n",
"<style type=\"text/css\">\n",
"\n",
"circle {\n",
" fill: rgb(31, 119, 180);\n",
" fill-opacity: .25;\n",
" stroke: rgb(31, 119, 180);\n",
" stroke-width: 1px;\n",
"}\n",
"\n",
".leaf circle {\n",
" fill: #ff7f0e;\n",
" fill-opacity: 1;\n",
"}\n",
"\n",
"text {\n",
" font: 10px sans-serif;\n",
"}\n",
"\n",
"</style>"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%javascript\n",
"\n",
"// This unhides the output area\n",
"container.show();\n",
"\n",
"// element is the jQuery element we will append to\n",
"var e = element.get(0);\n",
" \n",
"var diameter = 600,\n",
" format = d3.format(\",d\");\n",
"\n",
"var pack = d3.layout.pack()\n",
" .size([diameter - 4, diameter - 4])\n",
" .value(function(d) { return d.size; });\n",
"\n",
"var svg = d3.select(e).append(\"svg\")\n",
" .attr(\"width\", diameter)\n",
" .attr(\"height\", diameter)\n",
" .append(\"g\")\n",
" .attr(\"transform\", \"translate(2,2)\");\n",
"\n",
"d3.json(\"flare.json\", function(error, root) {\n",
" var node = svg.datum(root).selectAll(\".node\")\n",
" .data(pack.nodes)\n",
" .enter().append(\"g\")\n",
" .attr(\"class\", function(d) { return d.children ? \"node\" : \"leaf node\"; })\n",
" .attr(\"transform\", function(d) { return \"translate(\" + d.x + \",\" + d.y + \")\"; });\n",
"\n",
" node.append(\"title\")\n",
" .text(function(d) { return d.name + (d.children ? \"\" : \": \" + format(d.size)); });\n",
"\n",
" node.append(\"circle\")\n",
" .attr(\"r\", function(d) { return d.r; });\n",
"\n",
" node.filter(function(d) { return !d.children; }).append(\"text\")\n",
" .attr(\"dy\", \".3em\")\n",
" .style(\"text-anchor\", \"middle\")\n",
" .text(function(d) { return d.name.substring(0, d.r / 3); });\n",
"});\n",
"\n",
"d3.select(self.frameElement).style(\"height\", diameter + \"px\");"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Cargar c\u00f3digo remoto"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%load http://matplotlib.sourceforge.net/mpl_examples/api/collections_demo.py"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#!/usr/bin/env python\n",
"'''Demonstration of LineCollection, PolyCollection, and\n",
"RegularPolyCollection with autoscaling.\n",
"\n",
"For the first two subplots, we will use spirals. Their\n",
"size will be set in plot units, not data units. Their positions\n",
"will be set in data units by using the \"offsets\" and \"transOffset\"\n",
"kwargs of the LineCollection and PolyCollection.\n",
"\n",
"The third subplot will make regular polygons, with the same\n",
"type of scaling and positioning as in the first two.\n",
"\n",
"The last subplot illustrates the use of \"offsets=(xo,yo)\",\n",
"that is, a single tuple instead of a list of tuples, to generate\n",
"successively offset curves, with the offset given in data\n",
"units. This behavior is available only for the LineCollection.\n",
"\n",
"'''\n",
"\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import collections, transforms\n",
"from matplotlib.colors import colorConverter\n",
"import numpy as np\n",
"\n",
"nverts = 50\n",
"npts = 100\n",
"\n",
"# Make some spirals\n",
"r = np.array(range(nverts))\n",
"theta = np.array(range(nverts)) * (2*np.pi)/(nverts-1)\n",
"xx = r * np.sin(theta)\n",
"yy = r * np.cos(theta)\n",
"spiral = list(zip(xx,yy))\n",
"\n",
"# Make some offsets\n",
"rs = np.random.RandomState([12345678])\n",
"xo = rs.randn(npts)\n",
"yo = rs.randn(npts)\n",
"xyo = list(zip(xo, yo))\n",
"\n",
"# Make a list of colors cycling through the rgbcmyk series.\n",
"colors = [colorConverter.to_rgba(c) for c in ('r','g','b','c','y','m','k')]\n",
"\n",
"fig, axes = plt.subplots(2,2)\n",
"((ax1, ax2), (ax3, ax4)) = axes # unpack the axes\n",
"\n",
"\n",
"col = collections.LineCollection([spiral], offsets=xyo,\n",
" transOffset=ax1.transData)\n",
"trans = fig.dpi_scale_trans + transforms.Affine2D().scale(1.0/72.0)\n",
"col.set_transform(trans) # the points to pixels transform\n",
" # Note: the first argument to the collection initializer\n",
" # must be a list of sequences of x,y tuples; we have only\n",
" # one sequence, but we still have to put it in a list.\n",
"ax1.add_collection(col, autolim=True)\n",
" # autolim=True enables autoscaling. For collections with\n",
" # offsets like this, it is neither efficient nor accurate,\n",
" # but it is good enough to generate a plot that you can use\n",
" # as a starting point. If you know beforehand the range of\n",
" # x and y that you want to show, it is better to set them\n",
" # explicitly, leave out the autolim kwarg (or set it to False),\n",
" # and omit the 'ax1.autoscale_view()' call below.\n",
"\n",
"# Make a transform for the line segments such that their size is\n",
"# given in points:\n",
"col.set_color(colors)\n",
"\n",
"ax1.autoscale_view() # See comment above, after ax1.add_collection.\n",
"ax1.set_title('LineCollection using offsets')\n",
"\n",
"\n",
"# The same data as above, but fill the curves.\n",
"col = collections.PolyCollection([spiral], offsets=xyo,\n",
" transOffset=ax2.transData)\n",
"trans = transforms.Affine2D().scale(fig.dpi/72.0)\n",
"col.set_transform(trans) # the points to pixels transform\n",
"ax2.add_collection(col, autolim=True)\n",
"col.set_color(colors)\n",
"\n",
"\n",
"ax2.autoscale_view()\n",
"ax2.set_title('PolyCollection using offsets')\n",
"\n",
"# 7-sided regular polygons\n",
"\n",
"col = collections.RegularPolyCollection(7,\n",
" sizes = np.fabs(xx)*10.0, offsets=xyo,\n",
" transOffset=ax3.transData)\n",
"trans = transforms.Affine2D().scale(fig.dpi/72.0)\n",
"col.set_transform(trans) # the points to pixels transform\n",
"ax3.add_collection(col, autolim=True)\n",
"col.set_color(colors)\n",
"ax3.autoscale_view()\n",
"ax3.set_title('RegularPolyCollection using offsets')\n",
"\n",
"\n",
"# Simulate a series of ocean current profiles, successively\n",
"# offset by 0.1 m/s so that they form what is sometimes called\n",
"# a \"waterfall\" plot or a \"stagger\" plot.\n",
"\n",
"nverts = 60\n",
"ncurves = 20\n",
"offs = (0.1, 0.0)\n",
"\n",
"yy = np.linspace(0, 2*np.pi, nverts)\n",
"ym = np.amax(yy)\n",
"xx = (0.2 + (ym-yy)/ym)**2 * np.cos(yy-0.4) * 0.5\n",
"segs = []\n",
"for i in range(ncurves):\n",
" xxx = xx + 0.02*rs.randn(nverts)\n",
" curve = list(zip(xxx, yy*100))\n",
" segs.append(curve)\n",
"\n",
"col = collections.LineCollection(segs, offsets=offs)\n",
"ax4.add_collection(col, autolim=True)\n",
"col.set_color(colors)\n",
"ax4.autoscale_view()\n",
"ax4.set_title('Successive data offsets')\n",
"ax4.set_xlabel('Zonal velocity component (m/s)')\n",
"ax4.set_ylabel('Depth (m)')\n",
"# Reverse the y-axis so depth increases downward\n",
"ax4.set_ylim(ax4.get_ylim()[::-1])\n",
"\n",
"\n",
"plt.show()\n",
"\n",
"\n"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Reendeo de LaTeX:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Latex\n",
"Latex(r\"\"\"\\begin{eqnarray}\n",
"\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \n",
"\\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
"\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
"\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \n",
"\\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
"\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
"\\end{eqnarray}\"\"\")"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Pandas"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas\n",
"pandas.set_option('display.notebook_repr_html', True)"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%writefile data.csv\n",
"Date,Open,High,Low,Close,Volume,Adj Close\n",
"2012-06-01,569.16,590.00,548.50,584.00,14077000,581.50\n",
"2012-05-01,584.90,596.76,522.18,577.73,18827900,575.26\n",
"2012-04-02,601.83,644.00,555.00,583.98,28759100,581.48\n",
"2012-03-01,548.17,621.45,516.22,599.55,26486000,596.99\n",
"2012-02-01,458.41,547.61,453.98,542.44,22001000,540.12\n",
"2012-01-03,409.40,458.24,409.00,456.48,12949100,454.53"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df = pandas.read_csv('data.csv')\n",
"df"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"The IPython kernel/client model"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%connect_info"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%qtconsole"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"4. `nbconvert`"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Intro..."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"* `NBConvert` es una biblioteca de *reciente* (`tech preview`) incorporaci\u00f3n al n\u00facleo de IPython, y que permite la *nbconversi\u00f3n* de los notebooks de IPython a otros formatos tales como: `html`, `latex`, `markdown`, `python`, `rst` y `slides`.\n",
"\n",
"* Esta biblioteca esta basada en el sistema de `templates` de Jinja, por lo que modificar los nbconversores (o escribir el propio) no deber\u00eda generar mayores dificultades."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Para utilizarlo desde la linea de comandos:\n",
"\n",
"`$ ipython nbconvert <optiones y argumentos>`\n",
"\n",
"y para solicitar ayuda: \n",
"\n",
"`$ ipython nbconvert --help` (y si quer\u00e9s m\u00e1s detalle: `--help-all`)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%bash\n",
"ipython nbconvert IPython_fu_talk.ipynb --to html"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Slides"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Este nbconversor genera una presentacion HTML basada en la popular bibloteca Reveal.js\n",
"\n",
"* Slides (horizontales).\n",
"* Subslides (verticales).\n",
"* Fragmentos.\n",
"* Transiciones.\n",
"* Temas.\n",
"* Notas.\n",
"* Exportacion a pdf."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import subprocess\n",
"\n",
"command = \"ipython nbconvert test_slides.ipynb --to slides --post serve\"\n",
"subprocess.Popen(command.split())"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"M\u00e1s info: [http://www.damian.oquanta.info/categories/reveal.html](http://www.damian.oquanta.info/categories/reveal.html)"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Usando la api de `nbconvert`... para bloguear con IPython y Nikola."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Podemos tomar como ejemplo el plugin `ipynb` presente en Nikola:\n",
"\n",
"```python\n",
"def compile_html(self, source, dest, is_two_file=True):\n",
" if flag is None:\n",
" req_missing(['ipython>=1.0.0'], 'build this site (compile ipynb)')\n",
" makedirs(os.path.dirname(dest))\n",
" HTMLExporter.default_template = 'basic'\n",
" c = Config(self.site.config['IPYNB_CONFIG'])\n",
" exportHtml = HTMLExporter(config=c)\n",
" with codecs.open(dest, \"w+\", \"utf8\") as out_file:\n",
" with codecs.open(source, \"r\", \"utf8\") as in_file:\n",
" nb = in_file.read()\n",
" nb_json = nbformat.reads_json(nb)\n",
" (body, resources) = exportHtml.from_notebook_node(nb_json)\n",
" out_file.write(body)\n",
"``` "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"IFrame('http://www.damian.oquanta.info/posts/blogging-with-nikola-and-ipython.html', 800, 600)"
],
"language": "python",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": []
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"5. Discusi\u00f3n."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 18
},
"slideshow": {
"slide_type": "-"
}
},
"source": [
"El notebook de IPython provee toda la infraestructura para:"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 119
},
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"1- Obtener **datos**."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 120
},
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"2- **Procesar** los datos obtenidos."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 121
},
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"3- **Visualizar** los datos procesados"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 122
},
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"4- **Elaborar** una **historia** que se **sustenta** en los datos analizados."
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 123,
"slide_helper": "subslide_end"
},
"slide_helper": "subslide_end",
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"5- **Comunicar** dicha **historia** (junto con los **datos** y las **visualizaciones** obtenidas)."
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 123,
"slide_type": "subslide"
},
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"6. El fututo del notebook the IPython"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 123,
"slide_helper": "subslide_end"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Para conocer en forma detallada lo lineamientos a futuro: \n",
"\n",
"[https://github.com/ipython/ipython/wiki/Roadmap:-IPython](https://github.com/ipython/ipython/wiki/Roadmap:-IPython)\n",
"\n",
"* Soporte para multiusuarios\n",
"* Soporte para m\u00faltiples directorios\n",
"* Widgets interactivos (js)\n",
"* Exportaci\u00f3n mejorada de los notebook a otros formatos\n",
"* Modo presentaci\u00f3n\n",
"\n",
"Y no se olviden de pasear por la galer\u00eda de notebooks de IPython disponible en: \n",
"\n",
"[https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)"
]
},
{
"cell_type": "markdown",
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 123,
"slide_helper": "subslide_end",
"slide_type": "subslide"
},
"slide_helper": "slide_end",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"<p style=\"text-align: center;\"><i class=\"icon-user icon-2x\"> [Dami\u00e1n Avila](http://www.damian.oquanta.info)</i></p>\n",
"\n",
"<p style=\"text-align: center;\"><i class=\"icon-twitter icon-2x\"> [@damian_avila](http://twitter.com/damian_avila)</i></p>\n",
"\n",
"<p style=\"text-align: center;\"><i class=\"icon-github icon-2x\"> [damianavila](https://github.com/damianavila)</i></p>\n",
"\n",
"<p style=\"text-align: center;\"><i class=\"icon-envelope-alt icon-2x\"> <a href=\"mailto:info@oquanta.info\">info@oquanta.info</a></i></p>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
@lmarti
Copy link

lmarti commented Jul 9, 2014

Hola, solo para comentarte que creo que se escribe interfaz y no interfase. Muy buen trabajo, un saludo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment