El notebook cuenta con dos tipos de celdas:
En estas celdas se escribe el codigo a evaluar, y tienen coloreado de sintaxis de acuerdo al lenguaje usado en el notebook.
Las celdas se evaluan con dos atajos de teclado:
Shift+Enter
: Evalua la celda actual y se mueve a la siguiente, o crea una
nueva celda si se encuentra al final del notebook.Ctrl+Enter
: Evalua la celda actual y se mantiene en esa celda.
In [ ]:
# Esta es una celda de codigo.
# Se identifica por el texto del lado izquierdo que dice "In [ ]:"
#### Para editar esta celda, haz clic sobre la parte gris de la celda.
#### Se indica que la celda esta en modo de edicion por el marco verde que la rodea.
#### Para seleccionar toda la celda, haz clic a la izquierda de la celda, u oprime la tecla Esc
#### Se indica que la celda esta en modo de comando por el marco azul que la rodea.
#### En modo de comando no se puede editar el texto de la celda, pero se puede mover, borrar, pegar, etc. toda la celda
# Los renglones que no comienzan con un hash (#) se toman como comandos para python, por ejemplo:
print("Hola")
En estas celdas se puede escribir texto para aclarar, explicar o describir el
codigo que se esta desarrollando en el notebook. Esto se hace siguiendo ciertas
convenciones que son interpretadas por el notebook para generar titulos,
ecuaciones o links a partir de las mismas, al oprimir Shift+Enter
o
Ctrl+Enter
sobre la celda.
Esta es una celda de Markdown o texto. Se identifica porque del lado izquierdo no aparece "In [ ]:".
Para visualizar esta celda, entra en modo de edicion (haciendo clic sobre la parte gris de la celda) y oprime Shift+Enter
o Ctrl+Enter
.
Esta tambien es una celda de Markdown o texto. Para editarla (es decir, para ver el texto plano que genera el html de la visualizacion) haz doble clic sobre este texto.
Markdown es un lenguaje de marcado (markup) que convierte texto plano (con algunas convenciones) en html listo para visualizar. Algunas de las convenciones de markdown son:
Titulos con distintos niveles de jerarquia se definen de la siguiente forma:
# 1
: Titulos## 2
: Subtitulos### 3
: Sub-subtitulosEs posible escribir texto con distintos tipos de enfasis, siguiendo estas convenciones:
**hola**
, __hola__
: Texto en negritas*hola*
, _hola_
: Texto en cursivashola
: Texto en fuente mono-espaciada~~hola~~
: Texto tachadoPara crear links que referencien otras paginas web, se usa esta convencion:
[Buscar en Google](http://www.google.com)
Tambien es posible escribir codigo en una celda de texto, aunque este no se evalua al renderizar la celda, tal como ocurriria en una celda de codigo.
La convencion para hacer esto es
def f(x):
pass
Nota: Es posible elegir cualquier lenguaje de programacion para escribir codigo en celdas de texto, no solo Python o el lenguaje principal del notebook.
Para escribir ecuaciones matematicas en una celda de texto, se utiliza LaTeX rodeado de simbolos de pesos, asi:
$$\frac{a^5}{b^2}$$
Se ve así: $$\frac{a^5}{b^2}$$.
Imagenes locales o de internet se pueden incluir de la siguiente manera:
<img src="img/Lego_astronaut.png">
Estas son solo algunas de las convenciones usadas en Markdown. Para aprender sobre las demas convenciones disponibles, se debe dirigir a este sitio web.
El notebook cuenta con dos modos de interaccion a traves del teclado, cada uno con su propio conjunto de atajos. Es importante entender como funcionan estos modos, porque de ello depende un uso fluido y eficiente del notebook.
Nota: Para mirar los atajos disponibles, pueden dirigirse al menu
Help > Keyboard shortcuts
Este modo se activa cuando se esta escribiendo codigo o texto en una celda del tipo respectivo. Se identifica que se esta usando este modo porque la celda se encuentra resaltada en verde.
En este modo funcionan los atajos que normalmente tambien estan presentes en otros editores de texto (e.g. Word, TextMate, Atom, Sublime Text, etc), tales como:
Ctrl+C
: CopiarCtrl+V
: PegarCtrl+X
: CortarCtrl+Z
: DeshacerCtrl+Shift+Z
: RehacerCtrl+A
: Seleccionar todo el texto de la celdaEste modo se activa cuando se oprime Esc
en una celda de codigo o texto, y se
identifica porque la celda se resalta en azul en lugar de verde.
Este modo permite realizar distintas operaciones sobre las celdas en si, en lugar de hacerlo en el texto que contienen. Algunas de estas operaciones, con su atajo de teclado correspondiente, son:
B
: Para añadir una celda de codigo debajo (Below) de la celda actual.A
: Para añadir una celda de codigo sobre (Above) la celda actual.M
: Para convertir la celda actual en una celda de Markdown.Y
: Para convertir la celda actual en una celda de codigo.D-D
: Al oprimir dos veces la tecla D
en rapida sucesion, se elimina
(Delete) la celda actual.C
: Copia la celda actual.X
: Corta la celda actual.V
: Pega una celda que fue copiada o cortada anteriormente.El notebook cuenta con un modelo de evaluacion frontend/kernel. Este modelo separa la interfaz (frontend) en la que se escribe el codigo (en este caso la aplicacion web en la que funciona el notebook) del proceso o nucleo (kernel) en el cual se ejecuta dicho codigo.
Esto permite que la interfaz no se bloquee, y que se pueda seguir utilizando para escribir mas codigo o texto, mientras se esta evaluando algo en el kernel.
Por ejemplo, al correr el siguiente codigo:
while True:
a = 1
se genera un loop infinito. Sin embargo, se puede observar que mientras el
kernel se encuentra ocupado con el mismo, se puede seguir utilizando el notebook
sin problemas. La unica diferencia es que el indicador (o prompt) de la celda
actual aparecera como In [*]
, para mostrar que esta esperando respuesta del
kernel.
Para interrumpir dicho codigo, se puede ir al menu
Kernel > Interrupt
Tambien es posible evaluar otras celdas aunque el kernel se encuentre ocupado. Estas se ejecutaran secuencialmente en el orden en que fueron evaluadas, despues de que la ejecucion actual haya terminado.
Aunque el notebook es muy util y ha generado una revolucion en la forma en que se escribe y comparte codigo cientifico en los ultimos cinco años, muchos programadores han llegado al consenso de que el notebook deberia ser usado, en la medida de lo posible, solo para realizar actividades exploratorias (e.g. prototipos iniciales de codigo, entender los datos a analizar, hacer graficas que indiquen como podrian estudiarse esos datos, etc) o para escribir reportes que mezclen codigo, texto, ecuaciones y graficas.
Una vez que se haya pasado esta etapa exploratoria, lo ideal es mover el codigo
fuera del notebook hacia archivos de texto plano con la extension .py
, que
pueden evaluarse de la forma
python my_archivo.py
en una terminal. Algunas de las ventajas de este enfoque son:
git
para hacer versionado sobre esos
archivos. Aunque los notebooks tambien son archivos de texto plano bajo la
superficie, no son facilmente versionables.El notebook cuenta con todo un ecosistema de paquetes y aplicaciones construidas alrededor del mismo. Algunos de ellos son:
Ipywidgets: Permite a los usuarios crear animaciones o aplicaciones interactivas del codigo que esten desarrollando, las cuales se ejecutan directamente dentro del notebook.
Jupyterhub: Permite administrar un conjunto de usuarios, cada uno con su instancia particular del notebook, de forma unificada, i.e. utilizando un unico punto de acceso y una sola forma de autenticacion (e.g. cuentas de Unix o LDAP).
Nbgrader: Provee un sistema para asignar y calificar tareas creadas como notebooks.
Notebooks en Azure: Permite ejecutar notebooks en la plataforma en la nube Azure de Microsoft.
Binder: Permite correr notebooks en vivo desde repositorios de github utilizando maquinas virtuales en la nube.
El material de este notebook fue recopilado para Clubes de Ciencia Colombia 2017 por Luis Henry Quiroga (GitHub: lhquirogan) - Germán Chaparro (GitHub: saint-germain), y fue adaptado de https://github.com/PythonBootcampUniandes