Engenharia de Software para Cientistas de Dados

De Notebooks a Sistemas Escaláveis

Engenharia de Software para Cientistas de Dados
× Engenharia de Software para Cientistas de Dados

Engenharia de Software para Cientistas de Dados

VER AMOSTRA

Autor:

ISBN impresso: 978-85-7522-917-0
ISBN ebook: 978-85-7522-918-7
Ano: 2024
Páginas: 288
Preço impresso: R$ 93,00 O ebook deste livro está disponível na Amazon.

Opine sobre este livro

Descrição do livro

A ciência de dados se materializa no código. A habilidade de escrever código reproduzível, robusto e escalável é imprescindível para o sucesso de um projeto de ciência de dados – e é absolutamente crucial para quem trabalha com código de produção. Este livro prático preenche a lacuna entre a ciência de dados e a engenharia de software e explica de forma clara como aplicar as melhores práticas da engenharia de software à ciência de dados.

Exemplos são fornecidos em Python, extraídos de pacotes populares como o NumPy e o pandas. Caso queira escrever um código de ciência de dados melhor, este guia apresenta os tópicos essenciais que, muitas vezes, não são abordados nas aulas introdutórias de ciência de dados ou de programação, incluindo como:

• Compreender estruturas de dados e programação orientada a objetos

• Documentar seu código de forma clara e habilidosa

• Empacotar e compartilhar seu código

• Integrar código de ciência de dados a uma base de código maior

• Aprender a escrever APIs

• Criar código seguro

• Aplicar práticas recomendadas a tarefas comuns, como testes, tratamento de erros e registro em logs

• Trabalhar de modo mais eficaz com engenheiros de software

• Escrever código mais eficiente, de fácil manutenção e robusto em Python

• Implantar seus projetos de ciência de dados em produção

• E muito mais.

Ver menos ▲

Sumário

Sumário

  • Prefácio
  • Capítulo 1 O que é um bom código?
  • Por que um bom código é importante
  • Adaptando-se aos requisitos em constante mudança
  • Simplicidade
    • Princípio DRY
    • Evite código verboso
  • Modularidade
  • Legibilidade
    • Padrões e convenções
    • Nomes
    • Limpando o código
    • Documentação
  • Desempenho
  • Robustez
    • Erros e registro em logs
    • Testando o código
  • Aspectos fundamentais
  • Capítulo 2 Analisando o desempenho do código
  • Métodos para melhorar o desempenho
  • Cronometrando a execução do código
  • Criando o perfilamento do código
    • cProfile
    • line_profiler
    • Perfilamento de memória com Memray
  • Complexidade de tempo
    • Como estimar a complexidade de tempo
    • Notação Big O
  • Aspectos fundamentais
  • Capítulo 3 Usando estruturas de dados de modo eficaz
  • Estruturas nativas de dados do Python
    • Listas
    • Tuplas
    • Dicionários
    • Conjuntos
  • Arrays do NumPy
    • Funcionalidades dos arrays do NumPy
    • Considerações sobre o desempenho dos arrays do NumPy
    • Operações de arrays com a biblioteca Dask
    • Arrays em machine learning
  • DataFrames do pandas
    • Funcionalidades dos DataFrames do pandas
    • Considerações sobre o desempenho dos DataFrames do pandas
  • Aspectos fundamentais
  • Capítulo 4 Programação orientada a objetos e programação funcional
  • Programação orientada a objetos
    • Classes, métodos e atributos
    • Definindo as próprias classes
    • Princípios de POO
  • Programação funcional
    • Funções lambda e map()
    • Aplicando funções a DataFrames
  • Qual paradigma devo usar?
  • Aspectos fundamentais
  • Capítulo 5 Erros, registro em logs e depuração
  • Erros em Python
    • Interpretando mensagens de erro do Python
    • Tratamento de erros
    • Gerando erros com raise
  • Registro em logs
    • O que registrar em logs
    • Configuração do módulo logging
    • Como registrar em logs
  • Depuração
    • Estratégias para depuração
    • Ferramentas para depuração
  • Aspectos fundamentais
  • Capítulo 6 Formatação de código, linting e verificação de tipo
  • Formatação de código e guias de estilo
    • PEP8
    • Formatação de importação
    • Formatação automática de código com o Black
  • Linting
    • Ferramentas de linting
    • Linting em seu IDE
  • Verificação de tipo
    • Anotações de tipo
    • Verificação de tipo com o mypy
  • Aspectos fundamentais
  • Capítulo 7 Testando seu código
  • Por que devemos escrever testes
  • Quando testar
  • Como escrever e executar testes
    • Um teste básico
    • Testando entradas inesperadas
    • Executando testes automatizados com o Pytest
  • Tipos de testes
    • Testes unitários
    • Testes de integração
  • Validação de dados
    • Exemplos de validação de dados
    • Usando o Pandera para validação de dados
    • Validação de dados com o Pydantic
  • Testes para machine learning
    • Testando o treinamento de modelo
    • Testando a inferência do modelo
  • Aspectos fundamentais
  • Capítulo 8 Design e refatoração
  • Design e estrutura do projeto
    • Considerações sobre o design do projeto
    • Um exemplo de projeto de machine learning
  • Design de código
    • Código modular
    • Um framework para design de código
    • Interfaces e contratos
    • Acoplamento
  • De notebooks a scripts escaláveis
    • Por que usar scripts em vez de notebooks?
    • Criando scripts a partir de notebooks
  • Refatoração
    • Estratégias para refatoração
    • Um exemplo de fluxo de trabalho de refatoração
  • Aspectos fundamentais
  • Capítulo 9 Documentação
  • Documentação na base de código
    • Nomes
    • Comentários
    • Docstrings
    • Readmes, tutoriais e outros documentos mais extensos
  • Documentação em notebooks do Jupyter
  • Documentando experimentos de machine learning
  • Aspectos fundamentais
  • Controle de versão usando o Git
    • Como o Git funciona?
    • Acompanhando mudanças e commit
    • Remoto e Local
    • Branches e pull requests
  • Dependências e ambientes virtuais
    • Ambientes virtuais
    • Gerenciando dependências com o pip
    • Gerenciando dependências com o Poetry
  • Empacotamento do Python
    • Conceitos básicos de empacotamento
    • pyproject toml
    • Criando e fazendo upload de pacotes
  • Aspectos fundamentais
  • Capítulo 11 APIs
  • Chamando uma API
    • Métodos HTTP e códigos de status
    • Obtendo dados da API SDG
  • Criando sua API usando o FastAPI
    • Configurando a API
    • Adicionando funcionalidade à sua API
    • Criando requisições para sua API
  • Aspectos fundamentais
  • Capítulo 12 Automação e implantação
  • Implantação do código
  • Exemplos de automação
    • Hooks de pré-commit
    • GitHub Actions
  • Implantações em nuvem
    • Contêineres e Docker
    • Criando um contêiner do Docker
    • Implantando uma API no Google Cloud
    • Implantando uma API em outros provedores de nuvem
  • Aspectos fundamentais
  • Capítulo 13 Segurança
  • O que é segurança?
  • Riscos de segurança
    • Credenciais, segurança física e engenharia social
    • Pacotes de terceiros
    • O módulo pickle do Python
    • Riscos de controle de versão
    • Riscos de segurança de APIs
  • Práticas de segurança
    • Análises e políticas de segurança
    • Ferramentas para programação segura
    • Varredura simplificada de código
  • Segurança para machine learning
    • Ataques a sistemas de ML
    • Práticas de segurança para sistemas de ML
  • Aspectos fundamentais
  • Capítulo 14 Trabalhando em software
  • Princípios e práticas de desenvolvimento
    • O ciclo de vida de desenvolvimento de software
    • Modelo de desenvolvimento de software em cascata
    • Desenvolvimento ágil de software
    • Ciência ágil de dados
  • Funções na indústria de software
    • Engenheiro de software
    • Engenheiro de QA ou de testes
    • Engenheiro de dados
    • Analista de dados
    • Gerente de produto
    • Pesquisador de UX
    • Designer
  • Comunidade
    • Open-source
    • Palestrando em eventos
    • Comunidade Python
  • Aspectos fundamentais
  • Capítulo 15 Próximos passos
  • Futuro do código
  • Seu futuro no código
  • Obrigada
  • Índice remissivo
Ver sumário completo ▼