Introducción a Jupyter

Guillem Borrell

NFQ Solutions. 9 de septiembre de 2016

Hola

  • Guillem Borrell Nogueras

  • Doctor en Ingenieria Aeroespacial.

  • Antes de esto machacaba números para intentar entender el orden en el caos.


In [2]:
from IPython.display import YouTubeVideo
YouTubeVideo('L9LD5eZicAg')


Out[2]:

Jupyter Notebook

  • Un notebook es un formato de documento avanzado

  • Soporta texto, código ejecutable y representaciones de resultados (tablas, figuras, enlaces externos...).

  • Es un metadocumento que puede traducirse a muchos otros formatos. Por ejemplo, estas slides son un notebook.

  • Permite distribuir algoritmo, documentación, código y datos a la vez para permitir resultados reproducibles

Muy populares en entornos científicos

Es un documento con todas las capacidades de un procesador de texto, con

Cabeceras

listas de puntos:

  • Uno

  • Dos

listas numeradas...

  1. Primer nivel

    a. Segundo nivel

Utiliza un lenguaje intermedio de texto llamado Markdown, un formato de metadocumentación cada vez más común.

Tablas

Tables Are Cool
col 3 is right-aligned €1600
col 2 is centered €12
zebra stripes are neat €1

¡Y ecuaciones!

$$\frac{\partial \vec u}{\partial t} + \vec u\cdot \nabla \vec u = -\nabla p + \nu \nabla^2 \vec u $$$$ i \hbar \frac{\partial}{\partial t} \Psi (\mathbf r, t) = \hat H \Psi (\mathbf r, t) $$

Porque viene con un intérprete casi completo de $LaTeX$, un formato muy frecuente para textos científicos. Cualquier ecuación entre signos de $ queda embebida como $\vec F = \frac{\mbox{d}}{\mbox{d}t} m \vec v$, mientras las ecuaciones centradas se introducen con dobles signos de $$

Pero lo más importante es la posibilidad de adjuntar código.

Jupyter está dividido en dos componentes:

  1. El frontend que sirve la aplicación web y se comunica con el navegador (preferentemente Chrome o Chromium).

  2. El kernel (backend) que evalúa los comandos en el lenguaje de programación que le pidamos.

Jupyter viene de Julia + Python + R, como los tres primeros lenguajes que tuvieron un kernel, pero hoy hay muchos mas.

Éstos son los kernels soportados el 16 de agosto de 2016

Name Jupyter/IPython Version Language(s) Version 3rd party dependencies Example Notebooks Notes
sas_kernel Jupyter 4.0 python >= 3.3 SAS 9.4 or higher
IPyKernel Jupyter 4.0 python 2.7, >= 3.3 pyzmq
IJulia julia >= 0.3
IHaskell ghc >= 7.6
IRuby ruby >= 2.1
IJavascript nodejs >= 0.10
jpCoffeescript coffeescript >= 1.7
ICSharp Jupyter 4.0 C# 4.0+ scriptcs
IRKernel IPython 3.0 R 3.2 rzmq
SageMath Jupyter 4 Any many
pari_jupyter Jupyter 4 2.8 Cython
IFSharp IPython 2.0 F# Features
gopherlab Jupyter 4.1, JupyterLab Go >= 1.6 ZeroMQ (4.x) examples
Gophernotes Jupyter 4 Go >= 1.4 zeromq 2.2.x examples docker image
IGo Go >= 1.4
IScala Scala
Jupyter-scala IPython>=3.0 Scala>=2.10 example
IErlang IPython 2.3 Erlang rebar
ITorch IPython >= 2.2 Torch 7 (LuaJIT)
IElixir Jupyter Elixir
IAldor IPython >= 1 Aldor
IOCaml IPython >= 1.1 OCaml >= 4.01 opam
IForth IPython >= 3 Forth
IPerl Perl 5
IPerl6 Perl 6
IPHP IPython >= 2 PHP >= 5.4 composer
Jupyter-PHP Jupyter 4.0 PHP >= 5.5.9 composer
IOctave Jupyter Octave Example MetaKernel
IScilab Jupyter Scilab Example MetaKernel
IMatlab Jupyter Matlab pymatbridge Example MetaKernel
Bash IPython >= 3 bash Wrapper
PowerShell IPython >= 3 Windows Wrapper, Based on Bash Kernel
CloJupyter Jupyter Clojure >= 1.7
Hy Kernel Jupyter Hy Tutorial
Redis Kernel IPython >= 3 redis Wrapper
jove io.js
jp-babel Jupyter Babel
ICalico IPython >= 2 multiple Index
IMathics Mathics
Lua Kernel Lua
IPyLua Lua Fork of Lua Kernel
Calysto Scheme Scheme MetaKernel
Calysto Processing Processing.js >= 2 MetaKernel
idl_kernel IDL IDL seem to have a built-in kernel starting with version 8.5
Mochi Kernel Mochi
Lua (used in Splash) Lua
Apache Toree (formerly Spark Kernel) Jupyter Scala, Python, R Spark >= 1.5 Example
Skulpt Python Kernel Skulpt Python Examples MetaKernel
MetaKernel Bash bash MetaKernel
MetaKernel Python python MetaKernel
IVisual VPython Ball-in-Box
IBrainfuck Brainfuck Demo Wrapper
KDB+/Q Kernel (IKdbQ) IPython >= 3.1 Q qzmq, qcrypt
ICryptol Cryptol CVC4
cling Jupyter 4 C++ Example
Xonsh Xonsh Example MetaKernel
Prolog Prolog MetaKernel
cl-jupyter Jupyter Common Lisp Quicklisp About
Maxima-Jupyter Jupyter Maxima Quicklisp
Calysto LC3 Assembly Language for the Little Computer 3
Java 9 Kernel Java >= 9 [Broken :-(]
Yacas YACAS
IJython Jython 2.5
ROOT Jupyter C++/python ROOT >= 6.05
Gnuplot Kernel Gnuplot Example MetaKernel
Tcl Jupyter Tcl 8.5 Based on Bash Kernel
J Jupyter J 804 Examples
Jython Jupyter>=4.0 Jython>=2.7.0 Java>=7 Java based JSR223 compliant
Clojure Jupyter>=4.0 Clojure 1.8 clojure-jrs223, Java>=7 Java based JSR223 compliant
C Jupyter C gcc
TaQL Jupyter TaQL python-casacore TaQL tutorial
Coconut Jupyter Coconut
SPARQL Jupyter 4 Python 2.7 or >=3.4 rdflib, SPARQLWrapper Examples Optional GraphViz dependency
AIML chatbot Jupyter 4 Python 2.7 pyAIML Examples

In [1]:
from matplotlib import pylab as plt
import numpy as np
plt.style.use('bmh')
%matplotlib notebook

fig = plt.figure(1)
ax = fig.add_subplot(1,1,1)
ax.plot(np.cumsum(np.random.randn(1000)))
plt.title('Example of Brownian motion')


Out[1]:
<matplotlib.text.Text at 0x7fec4eece940>

In [2]:
import pandas as pd
iris = pd.read_csv('data/iris.csv')
iris.head()


Out[2]:
SepalLength SepalWidth PetalLength PetalWidth Name
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa

In [3]:
fig = plt.figure(2)
ax = fig.add_subplot(1,1,1)
for s, c in zip(iris.groupby('Name'), ['r', 'y', 'b']):
    s[1].plot.scatter(x='SepalWidth', y='SepalLength', c=c, s=50*s[1]['PetalLength'], ax=ax, label=s[0])
    
plt.xlabel('Sepal width')
plt.ylabel('Sepal length')


Out[3]:
<matplotlib.text.Text at 0x7fc8b972fb00>