IPython é um ambiente de computação interativa que enriquece os recursos originais do console Python padrão. Na computação interativa, fragmentos de código podem ser inseridos pelo pesquisador, executados imediatamente e seus resultados se tornam prontamente disponíveis. O sistema mantém seu estado em memória, isto é, seu conjunto de variáveis em sua configuração atual é acessível ao usuário. Perez e Granger (2007) argumentam sobre as vantagens de um ambiente interativo ao pesquisador:
"Este estilo flexível casa bem com o espírito da computação em um contexto científico, no qual a determinação de quais computações devem ser realizadas em seguida geralmente requer um esforço significativo [por parte do pesquisador]. Um ambiente interativo permite aos cientistas examinar os dados, testar novas ideias, combinar algoritmos e avaliar os resultados diretamente."
IPython provê ainda recursos para paralelizar a execução do código, com pouco esforço adicional, permitindo ao pesquisador tirar proveito de processadores multi-core e clusters de computação¹.
¹ O leitor interessado pode visitar Using IPython for parallel computing para maiores detalhes sobre computação paralela com IPython.
$ ipython
Python 2.7.5+ (default, Feb 27 2014, 19:37:08)
Type "copyright", "credits" or "license" for more information.
IPython 0.13.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]:
$ ipython qtconsole
$ ipython qtconsole --pylab
Explore os containers da linguagem Python utilizando um console IPython. Utilize os recursos de auto-completar do console IPython para explorar a funcionalidade dessas estruturas de dados.
In [1]:
a = range(1,10000,1)
pi = 2.
for i in a:
pi = pi * 4*i**2/(4*i**2-1)
pi
Out[1]:
Um Jupyter Notebook é uma aplicação web que permite a mesma computação interativa dos consoles, mas oferece funcionalidade adicional. Utilizando um navegador web, o pesquisador pode organizar trechos de anotações e código de maneira flexível. Texto e código são organizados em células que podem ser inseridas, apagadas, reorganizadas e executadas conforme necessário.
Uma notebook Jupyter pode apresentar gráficos, fórmulas matemáticas e resultados de execução de código (Julia, Python ou R), tudo organizado em um único documento. Notebooks vêm sendo utilizados em anotações de pesquisa, redação de artigos científicos, análises de dados e na produção de livros (DAVIDSON-PILON, 2014).
Um servidor de notebooks iniciado com o comando:
$ jupyter notebook
Notebooks são compostos por células de dois tipo: céulas de texto e células de código. Células de código contém trechos de código Python a ser executado. Já as células de texto podem conter anotações formatadas utilizando as convenções Markdown.
Células de texto suportam também expressões matemáticas, utilizando a sintaxe do LaTeX. Por exemplo, a expressão:
y = 3 x^2 + \epsilon
produz a fórmula $y = 3 x^2 + \epsilon$
A seguir estão alguns exemplos de fórmulas matemáticas produzidas através da notação LaTeX¹.
$\lim_{x \to \infty} \exp(-x) = 0$ produzido por $\lim_{x \to \infty} \exp(-x) = 0$
$\sqrt[n]{1+x+x^2+x^3+\ldots}$ produzido por $\sqrt[n]{1+x+x^2+x^3+\ldots}$
$\int_0^\infty \mathrm{e}^{-x} \mathrm{d}x$ produzido por $\int_0^\infty \mathrm{e}^{-x} \mathrm{d}x$
$\sum_{i=1}^{10} t_i$ produzido por $\sum_{i=1}^{10} t_i$
¹ Para mais detalhes sobre como escrever fórmulas matemáticas na sintaxe do LaTeX, o leitor pode considerar este guia no Wikibooks.
Notebooks são armazenados como arquivos JSON que guardam o conteúdo das células, incluindo os resultados das computações realizadas. Tais arquivos possuem a extensão .ipynb
e podem ser convertidos em programas Python regulares e em documentos HTML ou PDF. O que faz dos notebooks uma excelente ferramenta para pesquisa reprodutível é que eles são documentos executáveis que armazenam não só descrições textuais e matemáticas de um procedimento, mas também o código necessário para replicar as computações.
Esses arquivos podem ser convertidos para outros formatos:
Para mais detalhes, execute:
$ ipython nbconvert --help
IPython (console ou na forma de notebooks Jupyter) integra-se facilmente à Matplotlib, permitindo a exibição de gráficos diretamente no navegador Web ou no console Qt. A criação de gráficos será introduzida posteriormente, na Seção Matplotlib.
In [2]:
%pylab inline
In [3]:
data = random.rand(100)
bp = boxplot(data)
In [4]:
plot(data, 'r-')
plot(data, 'ro')
title('Data, data, data')
xlabel('x')
ylabel('y = f(x)')
Out[4]:
In [5]:
ls
Utilizando !
antes do comando, podemos armazenar o resultado em uma variável Python:
In [6]:
l = !ls figs
In [7]:
l
Out[7]:
In [8]:
figs = [f for f in l if f.endswith('.png')]
In [9]:
figs
Out[9]:
Comandos do sistema podem ser executados utilizando parâmetros armazenados em variáveis Python. O exemplo abaixo copia arquivos entre diretórios utilizando o comando de sistema cp
. Os arquivos de interesse são lidos da lista figs
e passados como argumento para o comando:
In [10]:
for f in figs:
!cp figs/$f /tmp/
In [11]:
ls /tmp/*.png
Explore o uso das células de texto (Markdown).
code
, etc.).