Jupyter Notebook: o que é, boas práticas para estruturação de projetos e mais

Neste artigo você vai ver:

Essa é a hora de deixar suas dúvidas com Jupyter Notebook para trás! Para isso, vamos apresentar e discutir resultados levantados da literatura sobre boas práticas quanto ao desenvolvimento de projetos nesse ambiente computacional. Vale a pena acompanhar!

O que é Jupyter Notebook?

Bom, Jupyter é um projeto de código aberto, sem fins lucrativos e voltado para a computação interativa em dezenas de linguagens de programação, como Python, R, Julia e Scala. 

Jupyter Notebook é um ambiente computacional que pode ser utilizado localmente (sem acesso à internet) ou via web para a criação, edição e execução de documentos notebook (com extensão .ipynb).

Mas, atenção, “Jupyter Notebook” é uma expressão que pode ter dois significados bem distintos. Ela é tanto utilizada para a plataforma de desenvolvimento quanto para o formato do arquivo. Então se ligue nisso! 

Para uma fácil compreensão, imagine que documentos notebook podem ser entendidos como verdadeiros blocos de notas, onde é possível mesclar trechos de código com anotações em texto possibilitando um ambiente dinâmico, experimental e documental.

Estas características possibilitam que o Jupyter Notebook atue como uma IDE estratégica no contexto da ciência de dados, possibilitando mesclar trechos de código que geram insights, tabelas e gráficos com blocos textuais que possibilitam a explicação dos resultados gerados. 

Isso facilita a construção de storytellings no projeto, possibilitando a compreensão dos resultados e das análises até por pessoas que não são da área de ciência de dados.

Também vale lembrar que o desenvolvimento de projetos em Jupyter Notebooks é uma prática popular em cenários de ciência de dados, aprendizagem de máquina e na  computação científica – mesmo não sendo um ambiente de produção, é muito utilizado por profissionais e estudantes de diferentes senioridades. 

Desafios do Jupyter Notebook

Por outro lado, esses benefícios e flexibilidades de uso podem atuar como gatilhos para a construção de projetos confusos, desestruturados, despadronizados e, no geral, de difícil compreensão. 

O Jupyter Notebook é uma ferramenta de Literate Computing, extremamente eficiente, pois permite unir código e texto, mas se você não faz isso bem (algo comum de acontecer principalmente em projetos menores), pode gerar problemas para futuras manutenções e compreensões do projeto.

Se ele é tão legal, onde devemos ter atenção?

Realizando uma pesquisa rápida na internet, provavelmente você encontrará alguns motivos para amar o Jupyter. Ainda acho que é uma  ferramenta incrível para a ciência de dados, mas vamos começar nossa discussão pelo: será que é tudo perfeito?

Como qualquer ferramenta de software, o Jupyter também têm as suas desvantagens, dentre elas:

É complicado manter um bom versionamento do projeto

Aparentemente o ponto mais recorrente destacado é quanto a complexidade para se manter um controle de versão de código de qualidade neste tipo de projeto. 

O problema é que Jupyter Notebooks são armazenados como arquivos JSON, que são basicamente apenas um monte de dicionários aninhados. Isso faz com que as alterações realizadas em linhas de arquivos Jupyter Notebook não fiquem claras na hora do versionamento.

Fluxo de trabalho não linear pode gerar confusão

Para muitos essa é a melhor e a pior parte dos projetos Jupyter Notebooks. Nestes projetos, é possível executar células fora de ordem, o que gera uma liberdade para se criar e testar implementações no projeto.

Por outro lado, isso é apontado como um dos principais fatores para a inserção de erros e projetos confusos, principalmente quando esses blocos de código possuem dependências entre si.

Você pode ter problemas para executar tarefas longas e assíncronas

O Jupyter não é adequado para executar tarefas deste tipo, isso ocorre porque ele foi projetado para manter todas as células em um notebook rodando no mesmo kernel. 

Isso significa que se uma célula estiver executando uma tarefa longa e assíncrona, ela bloqueará a execução de outras células. Isso também é um dos principais motivos para que projetos desenvolvidos com Jupyter tenham mais cara de provas de conceito.

Se você precisa de performance, pode não ser um bom caminho

O Jupyter pode ser lento para inicializar um novo projeto e para executar códigos já implementados. Isso ocorre porque o Jupyter é uma ferramenta interativa e precisa carregar todo o notebook na memória para fornecer os recursos interativos.

Mas e as vantagens do Jupyter Notebook?

Se formos analisar as vantagens de uso do Jupyter Notebooks, temos várias, inclusive utilizadas como forma de divulgação da plataforma. Podemos citar:

  • Facilidade para criar protótipos de forma rápida;
  • Execução e visualização da saída do código em cada célula;
  • Interface amigável;
  • Possibilidade de escrita de textos com Markdown (os notebooks também interpretam LaTeX, o que é muito bom para escrita científica.);
  • Ótima ferramenta para exploração de dados;
  • É possível atualizar o notebook (ou partes dele) com novos dados, executando novamente as células. Você também pode copiar a célula e executar a cópia novamente apenas se desejar manter um registro da tentativa anterior;
  • Facilita o fluxo de trabalho desde o teste das ideias até a primeira implementação do código.

Código Limpo

Vimos que o  Jupyter Notebook é uma ferramenta muito útil para explorar dados de forma simples, mas uma ferramenta tão flexível pode se tornar difícil de gerenciar rapidamente. 

A mesma capacidade de interagir rapidamente com dados (possibilitando a modificação de células de código, execução e repetição de ações) é a que possibilita que um notebook se torne um emaranhado de variáveis ​​difíceis de se entender, mesmo para a própria pessoa que está desenvolvendo o projeto.

Mas não precisa ser assim! O Jupyter Notebook é um ambiente de desenvolvimento, logo, todas as características voltadas para a escrita de bons códigos devem ser consideradas por aqui.

Para isso, pegando o clean code como referência, temos algumas dicas clássicas para que você tenha atenção em seu projeto. Você deve garantir que ele:

  • Seja legível;
  • Seja testável;
  • Seja funcional;
  • Seja simples;
  • Seja escalável;
  • Seja reutilizável.

Inclusive, aprofunde seus estudos sobre o que é um bom código no artigo do blog da Zup!

Todas essas boas práticas convencionais de um processo de desenvolvimento de software fazem sentido no contexto de ciência de dados. 

Afinal, continua existindo a necessidade de ter outras pessoas trabalhando no mesmo projeto, existe a possibilidade de reuso e compartilhamento do código, ou até da apresentação do projeto pelo próprio colab para o time. 

Boas práticas e recomendações para projetos em Jupyter Notebook

Pode-se listar, de forma geral, algumas boas práticas para se trabalhar com projetos em Jupyter Notebooks:

  1. Mantenha seu código limpo e organizado, dividindo-o em pequenos blocos reutilizáveis ​​e usando nomes claros e descritivos para variáveis, funções e células;
  2. Tenha atenção ao criar nomes para seus notebooks. Utilize algum tipo de padrão que entregue significado do seu conteúdo e que facilite futuras buscas;
  3. Documente seu código à medida que avança com o projeto. Utilize células de marcação para explicar o propósito e a lógica do seu código, a não documentação pode dificultar a compreensão e a reutilização do seu projeto por outras pessoas (e até mesmo por você);
  4. Procure organizar seu projeto notebook em seções. Sempre que possível procure escrever notebooks curtos;
  5. Tenha atenção com blocos de importação. Procure deixá-los em linhas separadas. Dê preferência a bibliotecas preexistentes e cuidado para não reimportá-las. Tenha atenção com dependências e módulos externos que podem deixar de existir e impactar no funcionamento do seu projeto;
  6. Sempre que possível procure utilizar gráficos gerados a partir de implementações, ou seja, procure utilizar gráficos dinâmicos e não imagens estáticas ao longo do projeto;
  7. Teste seu código minuciosamente para garantir que ele esteja correto e confiável de ter todas as células executadas em sequência. Sempre que possível implemente testes unitários. Tenha atenção com estruturas de dados mutáveis;
  8. Tenha atenção ao versionar o projeto, mas use sistemas de controle de versão, como o Git, para rastrear alterações em seus notebooks e colaborar com outras pessoas. Vimos que as alterações em notebooks são armazenadas em formato JSON deixando o versionamento confuso. Com isso, é comum a conversão de arquivos notebooks para scripts em python, porém essa conversão é trabalhosa e perde-se a vantagem do uso da divisão por células do notebook. Você não precisa escolher, pois há uma maneira bem simples de “trocar este formato” sem perder tal vantagem. Existe um pacote chamado jupytext que pode lhe ajudar nesse ponto. Outros plugins também podem ser úteis;
  9. Evite a execução de código desnecessário, especialmente células com execuções muito longas e complexas, para manter seus notebooks funcionando sem problemas e com eficiência. Atenção também para “prints” e comentários soltos e sem contexto ao longo do projeto;
  10. Salve e verifique seus notebooks com frequência para evitar a perda de trabalho. Crie um novo notebook para cada versão importante de seu projeto. Assim é possível entender a sua evolução como um todo;
  11. Tenha muito cuidado com aspectos de segurança para não expor chaves, tokens e senhas em seu projeto;
  12. Use ambientes virtuais ou contêineres, como Anaconda ou Docker, para gerenciar dependências e isolar seu ambiente de desenvolvimento. Não usar ambientes virtuais ou contêineres para gerenciar dependências pode levar a conflitos entre diferentes versões de bibliotecas e pacotes;
  13. Use um linter, como Pylint ou flake8, para detectar erros de sintaxe e estilo antes de executar seu código;
  14. Considere o uso de extensões do Jupyter, como nbextensions, para personalizar e aprimorar seus notebooks;
  15. Certifique-se de desligar seus kernels e fechar seus notebooks quando terminar de trabalhar nos projetos, assim irá liberar recursos, evitando desperdícios.

Conclusões

Projetos em Jupyter Notebooks são ótimas ferramentas para ações cotidianas em análise de dados e computação científica, mas pela sua flexibilidade de uso, também podem se tornar confusos e desorganizados se não forem utilizados ​​corretamente. 

Levantamos um conjunto de boas práticas para o desenvolvimento de projetos em Jupyter Notebooks procurando deixar essas implementações mais limpas, eficientes e reproduzíveis. 

Esperamos que esse conjunto de boas práticas possa ajudar pessoas desenvolvedoras a evitarem cair em armadilhas comuns deste tipo de projeto, tornando seus notebooks mais fáceis de ler, entender e trabalhar. 

Ficou com alguma dúvida? Tem alguma sugestão? Quer falar com a gente? Então é só me procurar no Linkedin ou comentar abaixo 😉.

Referências

  • Effective Computation in Physics” by Anthony Scopatz and Kathryn D. Huff (O’Reilly, 2015)
  • The Hitchhiker’s Guide to Python” by Kenneth Reitz and Tanya Schlusser (O’Reilly, 2016)
  • Python Data Science Handbook” by Jake VanderPlas (O’Reilly, 2016)
Imagem capa do conteúdo sobre "Jupyter notebook", onde exibe uma vista traseira do codificador altamente profissional olhando para relógio de pulso enquanto está sentado na frente do computador e trabalhando no interior do escritório.
Foto de Geraldo Gomes da Cruz Júnior
Researcher & Data Analytics Specialist
Geraldo é pesquisador na Zup Innovation na área educacional, com foco em análise de dados e Inteligência artificial. É mestre em modelagem e inteligência computacional e está cursando o doutorado.

Artigos relacionados

Imagem capa do conteúdo "Débito técnico", onde podemos ver Engenheira de software feminina escrevendo código no computador desktop com configuração de várias telas no elegante espaço de escritório de coworking.
Pesquisa Acadêmica
Postado em:
Imagem capa, referente ao conteúdo sobre "escrita de código de testes", em que contém uma mulher branca, sentada de frente dois computadores e um notebook que possuem diversos códigos.
Testes
Postado em:

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.