Ambientes de desenvolvimento e computação interativa¶
Objetivos¶
Compreender os conceitos de IDE e computação interativa;
Ter uma visão geral sobre IDEs mais populares;
Compreender a estrutura e a extensibilidade de um Jupyter Notebook.
IDEs para ciência de dados¶
Um IDE (Integrated Development Environment), ambiente de desenvolvimento integrado, é um software que facilita programadores para o desenvolvimento de softwares. Em geral, as funcionalidades básicas de um IDE são:
edição de texto;
interpretação/compilação automatizada;
depuração.
A proposta deste texto é apenas apresentar os IDEs mais frequentes para ciência de dados com suporte a Python sem fazer análises detalhadas, embora alguns sejam também adequados para outras linguagens. Há diversos posts na internet que discutem os prós e contras de cada um.
É importante dizer que não existe “o melhor IDE”. A escolha depende do gosto pessoal, da necessidade e dos objetivos. Qualquer que seja a sua opção, algum tempo deve ser gasto no entendimento das funcionalidades de cada um e na organização do workflow individual.
A lista a seguir contém os IDEs mais comumente usados atualmente:
Completação de código inteligente¶
Ferramentas de completação de código ajudam a aumentar a produtividade de todo programador. A maioria dos IDEs acima já possuem capacidades de completação de código. Porém, com o passar dos tempos, este nicho tem se tornado bem específico. Há empresas, por exemplo, que vendem soluçÕes para completação de código que contam com o auxílio de algoritmos de inteligência artificial. Abaixo, listamos alguns exemplos de ferramentas para completação de código de menor e maior complexidade. A escolha entre uma e outra também deve ser feita de modo particular pelo programador.
Cadernos interativos¶
A computação interativa é responsável por tornar a interação entre pessoas inteligentes e máquinas inteligentes cada vez mais dialógica e fácil. Atualmente, o desenvolvimento de códigos através de cadernos interativos é quase indispensável para um cientista de dados que deseja investigar e reportar descobertas.
O projeto [Jupyter], iniciado em 2014, lançou a proposta dos chamados notebooks, que permite que textos, códigos e elementos gráficos sejam integrados em uma espécie de caderno “vivo”.
Jupyter notebooks são interfaces baseadas em web onde podemos executar códigos em diferentes linguagens desde que alteremos os kernels. Para Python, ele dispõe do tradicional kernel IPython.
Neste curso, usaremos os cadernos interativos para aprendizagem e prática de novos conceitos, visto que são relativamente fáceis de instalar e utilizar. Além disso, eles possuem alto poder didático.
Nesta seção, discutiremos alguns aspectos do JupyterLab, uma interface de nova geração para o Jupyter. Assim como muitos dos IDEs citados anteriormente, o JupyterLab tem capacidade para editar texto, avaliar sentenças de código por interpretação, além de permitir a pré-visualização de gráficos, figuras, tabelas e muito mais. Depuração ou funcionalidades específicas podem ser alcançadas por meio de extensões.
Instalação¶
Usando conda
, o JupyterLab pode ser instalado pelo comando:
conda install -c conda-forge jupyterlab
Inicialização¶
Inicialize pelo Anaconda Navigator ou pela linha de comando usando:
jupyter-lab
O ambiente será aberto em seu navegador web padrão em um endereço similar a:
http(s)://<server:port>/<lab-location>/lab
Para lançar o Jupyter Notebook padrão, use menu Help > Launch Classic Notebook.
Elementos da interface¶
Área de trabalho principal
Barra lateral esquerda
Navegador de arquivos
Lista de kernels em execução
Paleta de comandos
Inspetor
Lista de abas
Barra de menus
Workspace¶
Cada sessão do JupyterLab reside em um workspace, cujas variáveis podem ser dinamicamente alteradas.
Funções de URL úteis¶
Reset do workspace: adicione
?reset
na URL.
Exemplo:
http://127.0.0.1:8889/lab/tree/ICD/teste.ipynb?reset
Clonar o workspace atual para outro chamado copia: adicione
?clone=copia
http://127.0.0.1:8889/lab/tree/ICD/teste.ipynb?clone=copia
Estrutura de um arquivo .ipynb¶
O formato oficial de um Jupyter Notebook, com extensão .ipynb é construído sobre uma estrutura JSON.
Note
[JSON] - JavaScript Object Notation, é um formato de intercâmbio de dados baseado em um subconjunto da linguagem JavaScript.
Em seu maior nível, o arquivo é um dicionário que contém algumas chaves, tais como:
metadata
(dict)nbformat
(int)nbformat_minor
(int)cells
(list)
Abaixo, temos um exemplo da estrutura JSON de um arquivo .ipynb.
{
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Uma célula de texto deste material por exemplo é, no formato JSON, exibida como:
{
"cell_type": "markdown",
"id": "93e25ab1-2a8a-4baf-9bcf-a72057aa908f",
"metadata": {},
"source": [
"### Estrutura de um arquivo `.ipynb`\n",
"\n",
"O formato oficial de um _Jupyter Notebook_, com extensão `.ipynb` é construído sobre uma estrutura JSON.\n",
"\n",
"```{note}\n",
"[[JSON]](https://www.json.org/json-en.html) - JavaScript Object Notation, é um formato de intercâmbio de dado baseado em um subconjunto da linguagem JavaScript.\n",
"```"
]
}
Os principais elementos são:
cell_type
: tipo de célula.id
: identificador (único) de uma célula. É um objetostr
de comprimento 1-64.metadata
: opções que controlam o comportamento da célula.source
: conteúdo da célula.
Entretanto, outros elementos podem estar presentes. Um exemplo de célula de código que retorna um erro é dado a seguir:
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "unexpected EOF while parsing (<ipython-input-5-ef2d20508391>, line 1)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-5-ef2d20508391>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 2 - 98*( 7/3\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m unexpected EOF while parsing\n"
]
}
],
"source": [
"2 - 98*( 7/3"
]
},
Formatos de saída de células¶
Diferentes tipos de arquivo podem ter uma saída renderizada de modo enriquecido.
Por exemplo:
Visualizando código HTML
import IPython.display as dpl
dpl.display(dpl.HTML('<h4>Isto</h4> <hr> é <sup>H</sup>TML</h1>'))
Isto
é HTML
Visualizando código JSON
dpl.display(dpl.JSON({"a":'b',"meta":[1,2]}))
<IPython.core.display.JSON object>
Visualizando vídeo do YouTube
dpl.display(dpl.YouTubeVideo("fn3KWM1kuAw",width=300,height=200))
Visualizando áudio
# teste descomentando
#dpl.Audio(url="https://www.bands.army.mil/music/play.asp?TheArmySong2013_BandAndChorus.mp3",autoplay=False)
Visualizando imagem
dpl.Image('http://www.google.fr/images/srpr/logo3w.png')
Depuração¶
A partir da versão 3.0, o JupyterLab vem munido de um depurador. Entretanto, é necessário um kernel que suporte o depurador. Alguns conhecidos são:
A melhor maneira de ter suporte à depuração é criar um ambiente novo, chamado, digamos jb
, contendo JupyterLab 3.0 e um desses kernels. Por exemplo:
conda create -n jd -c conda-forge jupyterlab=3 xeus-python
conda activate jd
Em seguida, o kernel pode ser habilitado via navegador ou seletor de núcleo. Experimente um ambiente com depuração aqui.
Extensões¶
O JupyterLab é um ambiente extensível. Isto significa que ele pode ser customizado ou melhorado. Extensões incluem temas, visualizadores, editores e renderizadores. Extensões podem adicionar itens ao menu, à paleta de comandos ou configurações.
Instalação de extensões¶
Extensões podem ser de dois tipos: originais e pré-construídas. Extensões pré-construídas são mais fáceis de gerenciar e podem ser instaladas usando o gerenciador de extensões, a saber, o comando jupyter-labextension install
.
Para instalar extensões, é necessário que o pacote node-js
, versão > 12.0.0, esteja instalado. Isto pode ser executado como:
conda install nodejs -c conda-forge --repodata-fn=repodata.json
Adicionalmente, elas podem ser instaladas usando o painel lateral esquerdo.
Extensões recomendadas para cientistas de dados¶
JupyterLab drawio:
jupyterlab-drawio
JupyterLab plotly:
@jupyterlab/plotly-extension
JupyterLab Github:
@jupyterlab/github
JupyterLab bokeh:
jupyterlab_bokeh
JupyterLab chart editor:
jupyterlab-chart-editor
Para instalar use: jupyter-labextension install EXT
, substituindo EXT por um dos nomes acima.
Exercícios¶
Configure seu ambiente de trabalho com IDE ou Jupyter Notebook, com seus temas e extensões de preferência.