Boas-vindas ao nosso primeiro Notebook IPython/Jupyter. O objetivo deste documento é apresentar alguns conceitos fundamentais para abrirmos as práticas da disciplina.
Embora seja possível ler este e outros notebooks no site da disciplina, a minha recomendação é que o arquivo .ipynb seja baixado e executado na sua máquina (ou em algum serviço como o Colab) para que a experiência seja realmente interativa. No site, você deve encontrar uma versão, compilada em HTML pela ferramenta Quarto,1 na qual várias formatações em Markdown,2 específicas dessa ferramenta, são usadas pra melhorar a experiência de leitura, mas que não fazem muita diferença pra quem for executar o notebook interativamente.
Notebooks
Primeiramente, um notebook nada mais é do que um arquivo de texto em formato JSON3 que guarda uma lista de objetos. Cada objeto dessa lista representa uma célula de conteúdo do notebook. Por exemplo, estas presentes letrinhas, que com a luz dos olhos teus resolvem se encontrar, estão dentro de uma célula de texto em formato Markdown, como podemos ver abaixo.
withopen("notebooks/14_introducao.ipynb") as nb_file:import json nb = json.load(nb_file)print(nb["cells"][1])
{'cell_type': 'markdown', 'metadata': {}, 'source': ['## Notebooks\n', '\n', 'Primeiramente, um _notebook_ nada mais é do que um arquivo de texto em formato JSON^[<https://en.wikipedia.org/wiki/JSON>] que guarda uma lista de objetos.\n', 'Cada objeto dessa lista representa uma célula de conteúdo do *notebook*.\n', 'Por exemplo, estas presentes letrinhas, que com a luz dos olhos teus resolvem se encontrar, estão dentro de uma célula de texto em formato Markdown, como podemos ver abaixo.']}
E como você pode ver, a célula acima (e a logo abaixo) contém textos na sintaxe de Python. O legal sobre essas células com Python é que elas são executáveis quando o notebook é aberto por um programa que saiba interpretá-lo.
print("Você deve ver o resultado desta chamada ""a print num espaço pra saídas logo abaixo.")
Você deve ver o resultado desta chamada a print num espaço pra saídas logo abaixo.
Quem já conhece a função print de Python deve lembrar que ela redireciona seus argumentos de entrada como um texto a ser exibido na saída padrão do processo Python em execução. No entanto, aqui podemos ver essa saída diretamente no notebook. Isso é possível graças a uma mágica desse programa que executa os notebooks e, em geral, essa mágica leva o nome de IPython.4
IPython
De forma resumida, o IPython é uma versão melhorada e mais interativa da shell5 do Python. Originalmente, o projeto IPython tinha como objetivo prover um ambiente interativo para computação científica usando a linguagem Python (Pérez e Granger 2007). Ou seja, os notebooks IPython são uma combinação de células em linguagem de marcação com células em Python que são executadas pela shell do IPython.
Com o tempo, a popularidade e o escopo do projeto cresceram, os notebooks evoluíram para serem agnósticos em linguagem de programação, o que resultou no projeto Jupyter.6 No Jupyter, o que determina se a linguagem de programação pode ser executada no notebook é um processo independente chamado de kernel.7 Hoje em dia, é possível escrever notebooks Jupyter que usem diversas outras linguagens como Julia, R, Scala, etc, e quando a linguagem escolhida for Python, provavelmente se usará um kernel IPython.
Para uma visão prática das melhorias implementadas pelo IPython, indico o primeiro capítulo de VanderPlas (2016).
Computação científica
Mas o que significa “computação científica”?8 Segundo Golub e Ortega (1992), trata-se da coleção de ferramentas, técnicas e teorias necessárias para resolver, por meio de computadores, modelos matemáticos de problemas das ciências e engenharias. Ou seja, uma aplicação da ciência da computação a problemas científicos e que tem muito a ver com ciência de dados.
Pérez, Fernando, e Brian E. Granger. 2007. “IPython: a System for Interactive Scientific Computing”. Computing in Science and Engineering 9 (3): 21–29. https://doi.org/10.1109/MCSE.2007.53.