O que é o IPython?

IPython é um ambiente para computação interativa e exploratória.

  • Shell iterativo poderosos(Console, QtBased, WebBased)
  • Arquitetura desacoplada com um Kernel que permite conexão com múltiplos clientes
  • Arquitetura que permite programação paralela interativa
  • Multi-linguagem de programção(Python, Ruby, R, Julia e Haskell)
  • Opensource
pip install "ipython[notebook]"

IPython Notebook

IPython Notebook é um cliente do IPython com opções de interface rica acessível no navegor.

ipython notebook

Ao executar o comando um servidor do IPython Notebook será ativado e abrirá o dashboard.

O dashboard

Running

A aba running mostra todos os notebooks que estão em execução

O notebook

Toolbar

Cells

Um notebook é composto por um conjunto de células que possuem dois modos: edição e comando

Modo de edição

Atalhos

Modo de comando

Atalhos

E o Python?

Cada célula do notebook pode ser uma execução de código Python

In [ ]:
print "Hello, Pylestras!"

Tem dúvida sobre o código?

In [ ]:
?
In [ ]:
import collections
collections.namedtuple?

Além das docstrings você pode ver o código.

In [ ]:
collections.Counter??

Lembra vagamente de uma função ou módulo Python?

In [ ]:
*int*?
In [ ]:
a = 1 + 2
In [ ]:
print a
In [ ]:
a

Você pode recuperar os Ins e Outs do histórico.

In [ ]:
print In
In [ ]:
print Out

Magic!

São um conjunto de funções para auxiliar em diversas tarefas. Os magics commands são prefixados por %

In [ ]:
%magic

Magic podem ser de linha ou de Cell

In [ ]:
%timeit range(100)
In [ ]:
%%timeit
s = 0
for i in range(10):
    s += i ** 2
In [ ]:
%%bash
echo "Meu path:"
pwd

[troll_mode] Ou você ainda pode extragar a brincadeira

In [ ]:
%%ruby
6.times { puts 'Não faça isso em casa.' }

[/troll_mode]

In [ ]:
%%javascript
alert("Hello, Pylestras");
In [ ]:
%lsmagic

Acessando comandos do OS

In [ ]:
!ls
In [ ]:
files = !ls
for f in files:
    if f.endswith('.ipynb'):
        print f
In [ ]:
python_variable = 42
In [ ]:
!echo $python_variable
In [ ]:
!echo {"{0:#b}".format(python_variable)}

Informações de conexão com o Kernel do IPython

In [ ]:
%connect_info
In [ ]:
%qtconsole

Plotando gráficos

In [ ]:
%matplotlib inline
In [ ]:
"""
Demo of the fill function with a few features.

In addition to the basic fill plot, this demo shows a few optional features:

    * Multiple curves with a single command.
    * Setting the fill color.
    * Setting the opacity (alpha value).
"""
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.sin(3 * x)
plt.fill(x, y1, 'b', x, y2, 'r', alpha=0.3)
fig = plt.gcf()
In [ ]:
%qtconsole

Suport a Markdown

Você pode usar markdown ou HTML.

| This | is   |
|------|------|
|   a  | table| 

A tabela será renderizada em HTML

This is
a table

Suporte a LaTeX

O IPython Notebook usa MathJax para rederizar expressões matemáticas usando LaTeX. Pode ser em linha: $e^{i\pi} + 1 = 0$ ou em bloco:

$$e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i$$

Elementos ricos com Python

Imagens
In [ ]:
from IPython.display import Image
In [ ]:
Image(url='http://python.org/images/python-logo.gif')
In [ ]:
Image('http://ipython.org/_static/IPy_header.png')
Vídeos do Youtube
In [ ]:
from IPython.display import YouTubeVideo
YouTubeVideo('kkwiQmGWK4c')
Audio
In [ ]:
from IPython.display import Audio
In [ ]:
import numpy as np
import matplotlib.pyplot as plt
max_time = 3
f1 = 220.0
f2 = 224.0
rate = 44100.0
L = 3
times = np.linspace(0,L,rate*L)
signal = np.sin(2*np.pi*f1*times) + np.sin(2*np.pi*f2*times)

Audio(data=signal, rate=rate)
In [ ]:
audio_plt = plt.plot(times, signal)

Usando sympy para símbolos matemáticos

In [ ]:
from sympy import *
init_printing()
In [ ]:
x = Symbol('x')
In [ ]:
(pi + x)**2
In [ ]:
(x+1)*(x+2)*(x+3)
In [ ]:
expand((x+1)*(x+2)*(x+3))

Widgets interativos

In [ ]:
from IPython.html.widgets import interact, interactive, fixed
In [ ]:
def f(x):
    print x
In [ ]:
interact(f, x=10);
In [ ]:
interact(f, x=True);
In [ ]:
interact(f, x='Hi there!');
In [ ]:
@interact(x=True, y=1.0)
def g(x, y):
    print(x, y)

Exemplo completo com o scikit-image

In [ ]:
import skimage
from skimage import data, filter, io

from IPython.display import display
In [ ]:
i = data.coffee()
In [ ]:
lims = (0.0,1.0,0.01)

def edit_image(image, sigma=0.1, r=1.0, g=1.0, b=1.0):
    new_image = filter.gaussian_filter(image, sigma=sigma, multichannel=True)
    new_image[:,:,0] = r*new_image[:,:,0]
    new_image[:,:,1] = g*new_image[:,:,1]
    new_image[:,:,2] = b*new_image[:,:,2]
    new_image = io.Image(new_image)
    display(new_image)
    return new_image

w = interactive(edit_image, image=fixed(i), sigma=(0.0,10.0,0.1), r=lims, g=lims, b=lims)
In [ ]:
display(w)

Integração com Pandas para manipulação de dados

In [ ]:
import pandas as pd
In [ ]:
ts = pd.Series(np.random.randn(10), index=pd.date_range('1/1/2014', periods=10))
In [ ]:
df = pd.DataFrame(np.random.randn(10, 4), index=ts.index,
                  columns=['A', 'B', 'C', 'D'])
 
df = df.cumsum()
In [ ]:
df
In [ ]:
plt.figure()
df.plot()
plt.legend(loc='best')

Disponiblizando seus notebooks no nbviewer

In [ ]:
from IPython.display import IFrame
In [ ]:
IFrame('http://nbviewer.ipython.org/', 800, 600)

Referência