{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\"AeroPython\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Introducción a IPython y Jupyter Notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*En esta clase haremos una rápida introducción al lenguaje Python y al intérprete IPython, así como a su Notebook. Veremos como ejecutar un script y cuáles son los tipos y estructuras básicas de este lenguaje. Seguro que ya has oído hablar mucho sobre las bondades de Python frente a otros lenguajes. Si no es así, échale un vistazo a [esto](http://nbviewer.ipython.org/github/AeroPython/Python_HA/blob/master/razones_python.ipynb).\n", "¿Estás preparado? ¡Pues Empezamos!*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ¿Qué es Python? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Lenguaje de programación dinámico, interpretado y fácil de aprender\n", "* Creado por Guido van Rossum en 1991\n", "* Ampliamente utilizado en ciencia e ingeniería\n", "* Multitud de bibliotecas para realizar diferentes tareas." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### El zen de Python" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Zen of Python, by Tim Peters\n", "\n", "Beautiful is better than ugly.\n", "Explicit is better than implicit.\n", "Simple is better than complex.\n", "Complex is better than complicated.\n", "Flat is better than nested.\n", "Sparse is better than dense.\n", "Readability counts.\n", "Special cases aren't special enough to break the rules.\n", "Although practicality beats purity.\n", "Errors should never pass silently.\n", "Unless explicitly silenced.\n", "In the face of ambiguity, refuse the temptation to guess.\n", "There should be one-- and preferably only one --obvious way to do it.\n", "Although that way may not be obvious at first unless you're Dutch.\n", "Now is better than never.\n", "Although never is often better than *right* now.\n", "If the implementation is hard to explain, it's a bad idea.\n", "If the implementation is easy to explain, it may be a good idea.\n", "Namespaces are one honking great idea -- let's do more of those!\n" ] } ], "source": [ "import this" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ¿Qué pinta tiene un programa en Python y cómo lo ejecuto?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos a ver `mi_primer_script.py` que está en la carpeta `scripts`. __De momento no te preocupes por el código,__ ya habrá tiempo para eso..." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "import math\r\n", " \r\n", "print(\"Hola gente del curso de AeroPython\")\r\n", "print(\"¿Cuántos sois hoy en clase?\")\r\n", "\r\n", "number = input()\r\n", "number = int(number)\r\n", "root = math.sqrt(number)\r\n", "\r\n", "print(\"Ufff! eso es un montón! espero que aprendáis mucho\")\r\n", "print(\"Por cierto, la raiz de %i es %f\" %(number, root))\r\n" ] } ], "source": [ "!cat ../scripts/mi_primer_script.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Tip de IPython:\n", "`cat` es un comando de la línea de comandos, no propio de Python. Anteponiendo `!` a comandos de la terminal como `cd`, `ls`, `cat`... se pueden ejecutar desde aquí.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Si estás usando Windows y acabas de obtener un error, susituye la línea anterior por:
\n", " `!type ..\\static\\mi_primer_script.py`\n", "\n", "

\n", "`type` es un comando similar en Windows a `cat`. De nuevo, podemos ejecutar comandos como `cd`, `dir`, `type`, `find`... desde aquí anteponiendo `!` y utilizando `\\` en lugar de `/` para la ruta donde se encuentra el archivo.\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hola gente del curso de AeroPython\n", "¿Cuántos sois hoy en clase?\n", "45\n", "Ufff! eso es un montón! espero que aprendáis mucho\n", "Por cierto, la raiz de 45 es 6.708204\n" ] } ], "source": [ "%run ../scripts/mi_primer_script.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Tip de IPython:\n", "`%run` es un _comando mágico_ del notebook que te permite ejecutar un archivo.\n", "\n", "Si quieres hacerlo desde una línea de comandos podrías hacer:\n", "\n", "`$ python3 ../scripts/mi_primer_script.py`\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El método más simple es usar un editor (tu preferido) y ejecutar el script desde la línea de comandos. Pero existen también __IDE__s (_integrated development environment_ pensados para facilitar la escritura de código y tener al alcance de la mano otras herramientas como _profilers_, _debuggers_, _explorador de variables_... Entre los más adecuados para la programación científica se encuentran [IEP](http://www.iep-project.org/) y [Spyder](http://code.google.com/p/spyderlib/) (instalado con Anaconda)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Spyder\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ¿Qué es IPython?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[IPython](http://ipython.org/) no es más que un [intérprete](https://es.wikipedia.org/wiki/Int%C3%A9rprete_(inform%C3%A1tica) de Python con algunas mejoras sustanciales, pero además su interfaz notebook es más cómoda de manejar que la línea de comandos y nos da un poco más de flexibilidad." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Notebook de IPython" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Será nuestra herramienta de trabajo durante el curso__. Esto que estás leyendo ahora no es más que un notebook de IPython, que como diremos luego además de código puede contener texto e imágenes. Pero veamos primero cómo funciona.\n", "\n", "__Al iniciar el notebook de IPython, en la pantalla principal podemos ver una ruta y una lista de notebooks__. Cada notebook es un archivo que está almacenado en el ordenador en la ruta que aparece. Si en esa carpeta no hay notebooks, veremos un mensaje indicando que la lista de notebooks está vacía.\n", "\n", "Al crear un notebook o al abrir uno nuevo se abre la interfaz de IPython propiamente dicha donde ya podemos empezar a trabajar. Es similar a un intérprete, pero está dividida en **celdas**. Las celdas pueden contener, código, texto, imágenes...\n", "\n", "Cada celda de código está marcada por la palabra `In []` y están **numeradas**. Tan solo tenemos que escribir el código en ella y hacer click arriba en Cell -> Run, el triángulo (\"Run cell\") o usar el atajo `shift + Enter`. El resultado de la celda se muestra en el campo `Out []`, también numerado y coincidiendo con la celda que acabamos de ejecutar. Esto es importante, como ya veremos luego.\n", "\n", "Si en la barra superior seleccionas Markdown (o usas el atajo `Shift-M`) en lugar de Code puedes escribir texto:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(url=\"../images/markdown_cell.gif\")\n", "# Fuente Practical Numerical Methods with Python \n", "# http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También ecuaciones en latex y mucho más. Esto es una herramienta muy potente para explicar a alguien o a ti mismo lo que tu código hace, para hacer un informe, un trabajo, escribir en un blog...\n", "\n", "Markdown es un lenguaje aparte, no te preocupes por él demasiado ahora, irás aprendiendo sobre la marcha... Para cuando lo vayas necesitando, aquí tienes una [chuleta](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url=\"../images/markdown_math.gif\")\n", "# Fuente Practical Numerical Methods with Python \n", "# http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Puedes mover las celdas de un lugar a otro de este modo:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url=\"../images/cell_move.gif\")\n", "# Fuente: Practical Numerical Methods with Python \n", "# http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El Notebook tiene además numerosos atajos que irás aprendiendo sobre la marcha, puedes consultarlos en `Help > Keyboard Shortcourts`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "
\n", "####

¡Síguenos en Twitter!\n", "
\n", "###### Follow @AeroPython \n", "
\n", "###### Este notebook ha sido realizado por: Juan Luis Cano, y Álex Sáez \n", "
\n", "##### \"Licencia
Curso AeroPython por Juan Luis Cano Rodriguez y Alejandro Sáez Mollejo se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "_Las siguientes celdas contienen configuración del Notebook_\n", "\n", "_Para visualizar y utlizar los enlaces a Twitter el notebook debe ejecutarse como [seguro](http://ipython.org/ipython-doc/dev/notebook/security.html)_\n", "\n", " File > Trusted Notebook" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "/* This template is inspired in the one used by Lorena Barba\n", "in the numerical-mooc repository: https://github.com/numerical-mooc/numerical-mooc\n", "We thank her work and hope you also enjoy the look of the notobooks with this style */\n", "\n", "\n", "\n", "El estilo se ha aplicado =)\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Esta celda da el estilo al notebook\n", "from IPython.core.display import HTML\n", "css_file = '../styles/aeropython.css'\n", "HTML(open(css_file, \"r\").read())" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }