Introducción a Jupyter Notebook

¿Qué es Jupyter Notebook?

El IPython Notebook es ahora conocido como el Jupyter Notebook. Es un entorno computacional interactivo, en el que se pueden combinar ejecución de código, texto enriquecido, matemáticas, gráficos y contenidos multimedia [1].

¿Qué es un notebook science?

El Open Notebook Science es la práctica de hacer que el registro primario completo de un proyecto de investigación este disponible públicamente, en línea y tal como está registrado. Esto consiste en colocar el notebook personal, de laboratorio o del investigador en línea junto con todos los datos crudos y procesados así como cualquier material asociado, tal como se genera este material. El enfoque puede resumirse por el lema "ninguna información privilegiada". Este es el extremo lógico de enfoques transparentes a la investigación e incluye explícitamente la puesta a disposición de experimentos inéditos fallidos, menos importantes y de otra índole; llamados "datos oscuros". La práctica de la ciencia del cuaderno abierto, aunque no es la norma de la comunidad académica, ha ganado considerable atención en la investigación reciente general, and peer-reviewed y de medios de comunicación revisados como parte de una tendencia general hacia enfoques más abiertos en la práctica de la investigación y publicación. La Ciencia del cuaderno abierto, por tanto, puede ser descrito como parte de un más amplio movimiento de ciencia abierta que incluye la promoción y adopción de la publicación de acceso abierto, datos abiertos, datos de crowdsourcing y ciencia ciudadana. Está inspirado en parte por el éxito del software de código abierto y se basa en muchas de sus ideas [2].

Estructura del notebook science

Una manera sencilla de probar Jupyter sin tenerlo instalado en la computadora es por medio de un servicio web gratuito:

https://try.jupyter.org/

Basicamente el notebook está compuesto por celdas [3]. Hay algunos tipos de celdas:

  • texto;
  • código;
  • resultado;

En la celda de texto podemos utilizar formatación con Markdown. Ej:

**negrito**;
*itálico*;
***negrito y itálico***;

A parte de formatación de texto, con Markdown podemos inserir imágenes:

![Jupyter Logo](http://jupyter.org/assets/nav_logo.svg)
print(a+b)

Comando mágicos

Los comando mágicos de Jupyter son comando própios del entorno Jupyter, y empiezan por % o %%.

Ejemplo de algunos comandos mágicos [4]:

  • Ejecutar códigos python (%run)
  • Inserir código desde archivo (%load)
  • Listar todas variables del escopo global (%who)
  • Visualizar tiempo de ejecución (%%time)
  • Visualizar tiempo de ejecución (%%timeit)
  • Profile (%prun)
  • Depuración (%pdb)
  • Comandos shell (!)*

In [2]:
a = 1
b = 2.2
c = 3
d = 'a'

In [3]:
%who


a	 b	 c	 d	 

In [4]:
def f1(n):
    for x in range(n):
        pass

In [5]:
%%time 
f1(100)


CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 26 µs

In [6]:
%%timeit
f1(100)


100000 loops, best of 3: 3.65 µs per loop

Ejecutar códigos con otros kernels

En la celda de código también es posible ejecutar códigos de otras lenguajes. A continuación, algunas comandos mágicos para ejecutar comandos de otros lenguajes:

  • %%bash
  • %%HTML
  • %%python2
  • %%python3
  • %%ruby
  • %%perl

In [7]:
%%bash

ls -lah


total 80K
drwxr-xr-x  4 xmn xmn 4,0K ago 12 10:36 .
drwxr-xr-x 13 xmn xmn 4,0K ago 10 15:49 ..
drwxr-xr-x  2 xmn xmn 4,0K ago  9 18:38 data
-rw-r--r--  1 xmn xmn  57K ago 12 10:36 Introducción.ipynb
drwxr-xr-x  2 xmn xmn 4,0K ago 12 10:36 .ipynb_checkpoints
-rw-r--r--  1 xmn xmn   72 ago 12 10:36 Untitled.ipynb

Cargar datos


In [8]:
import pandas as pd

df = pd.read_csv('data/kaggle-titanic.csv')

In [9]:
df.head()


Out[9]:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

In [10]:
df.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

In [11]:
df.describe()


Out[11]:
PassengerId Survived Pclass Age SibSp Parch Fare
count 891.000000 891.000000 891.000000 714.000000 891.000000 891.000000 891.000000
mean 446.000000 0.383838 2.308642 29.699118 0.523008 0.381594 32.204208
std 257.353842 0.486592 0.836071 14.526497 1.102743 0.806057 49.693429
min 1.000000 0.000000 1.000000 0.420000 0.000000 0.000000 0.000000
25% 223.500000 0.000000 2.000000 20.125000 0.000000 0.000000 7.910400
50% 446.000000 0.000000 3.000000 28.000000 0.000000 0.000000 14.454200
75% 668.500000 1.000000 3.000000 38.000000 1.000000 0.000000 31.000000
max 891.000000 1.000000 3.000000 80.000000 8.000000 6.000000 512.329200

Gráficos


In [13]:
from matplotlib import pyplot as plt

In [15]:
df.Survived.value_counts().plot(kind='bar')
plt.show()



In [16]:
import pixiedust


Pixiedust database opened successfully
Pixiedust version 1.0.9
Unable to check latest version <urlopen error [Errno -2] Name or service not known>

In [18]:
display(df)


Hey, there's something awesome here! To see it, open this notebook outside GitHub, in a viewer like Jupyter

Widgets


In [19]:
import numpy as np

In [20]:
π = np.pi

In [21]:
def show_wave(A, f, φ):
    ω = 2*π*f
    t = np.linspace(0, 1, 10000)
    f = A*np.sin(ω*t+φ)
    
    plt.grid(True)
    plt.plot(t, f)
    plt.show()

In [23]:
show_wave(A=5, f=5, φ=2)


/home/xmn/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

In [24]:
import ipywidgets as widgets
from IPython.display import display

In [25]:
params = dict(value=1, min=1, max=100, step=1, continuous_update=False)

wA = widgets.IntSlider(**params)
wf = widgets.IntSlider(**params)
 = widgets.IntSlider(value=0, min=0, max=10, step=1, continuous_update=False)

widgets.interact(show_wave, A=wA, f=wf, φ=);


Para más informaciones sobre ipywidgets, consulte el manual de usuario [6].

Help

Para ver la documentación de una determinada función o clase puedes ejecutar el comando:

?str.replace()

Este comando abrirá una sección en la página con la documentación deseada.

Otro modo de ver la documentación es usando la función help, ej.:

help(str.replace)

In [26]:
?str.replace()

In [27]:
help(str.replace)


Help on method_descriptor:

replace(...)
    S.replace(old, new[, count]) -> str
    
    Return a copy of S with all occurrences of substring
    old replaced by new.  If the optional argument count is
    given, only the first count occurrences are replaced.

LaTeX

Con Jupyter Notebook, también se puede escribir en las celdas de texto en formato LaTeX.

Por ejemplo:

$$
\begin{equation}
\omega = \alpha + \beta + \sum_{n=1}^{\infty} 2^{-n}
\end{equation}
$$

Y su resutado es:

$$ \begin{equation} \omega = \alpha + \beta + \sum_{n=1}^{\infty} 2^{-n} \end{equation} $$

Para más informaciones sobre el uso de LaTeX en Jupyter, pueden ver en [6].

Instalación

Para utilizar Jupyter notebook, necesitamos instalarlo. La mejor manera para instalar librerías es hacerlo en un entorno separado (del entorno python del sistema operativo). Una distribución Python que está enfocada en temas científicos es Anaconda y se puede bajar su instalador en https://www.continuum.io/downloads [7].

En el entorno principal (root) de Anaconda, Jupyter ya viene instalado. Caso empiecemos un entorno nuevo, podemos instalar Jupyter con el comando:

conda install jupyter

Referencias