Melhores Práticas de Análise de Dados
Hábitos de análise reproduzíveis, vetorizados e com tipos bem definidos que evitam números silenciosamente incorretos em notebooks e jobs de produção.
Como Usar Esta Lista
- Percorra de A a D antes de enviar um relatório ou job agendado.
- Verifique os itens na revisão de PR para qualquer alteração que toque na ingestão, joins ou agregações.
- Revise após incidentes (KPI incorreto, OOM, linhas duplicadas) e adicione regras específicas da equipe.
A - Ingestão e Tipos
- Ler com dtypes explícitos. Passe
dtype,parse_dateseusecolspararead_csv- a inferência oculta colunas de objeto. - Contar linhas e nulos imediatamente.
len(df),df.isna().sum()edf.duplicated(subset=keys).sum()antes das transformações. - Armazenar timestamps em UTC.
pd.to_datetime(..., utc=True)ao carregar; converter apenas para exibição. - Preferir strings e categóricos Arrow.
string[pyarrow]ecategoryreduzem o uso de RAM em chaves de texto no pandas 2.2+. - Documentar imputação de NA. Médias/medianas são escolhas de modelagem - registre-as nos metadados do notebook ou job.
B - Transformações e Vetorização
- Usar
.locpara atribuições. Nunca encadeiedf[mask]["col"] = x- atribua em uma única chamada.loc. - Preferir agg embutido em vez de apply.
groupby.agge expressões Polars superam UDFs Python por linha. - Definir
observed=Trueem categóricos. Ignorar níveis de categoria não utilizados no groupby/pivot do pandas 2.x. - Normalizar chaves de string antes dos joins.
str.strip()e capitalização consistente evitam merges órfãos. - Recortar ou sinalizar outliers; não excluir silenciosamente. Limites de domínio precisam de aprovação do stakeholder.
C - Joins e Agregações
- Afirmar contagens de linhas em torno dos merges. Explosões de muitos para muitos são o principal bug de KPI.
- Usar
validate=em merges.many_to_oneeone_to_onedetectam erros de cardinalidade precocemente. - Adicionar
indicator=Trueem left joins. Quantificar linhas de dimensão não correspondentes antes de preencher NA com zero. - Ordenar o índice de tempo antes de resample/rolling. Timestamps não ordenados produzem janelas incorretas.
- Nomear agregações explicitamente.
agg(total=("revenue", "sum"))nomeado supera colunas MultiIndex misteriosas.
D - Desempenho e Reproducibilidade
- Medir memória com
deep=True.memory_usagesuperficial mente sobre colunas de objeto. - Fragmentar ou escanear arquivos que excedem a RAM.
chunksize, poda de colunas Parquet ouscan_parquetdo Polars. - Escrever Parquet intermediário com schema. Execuções mais rápidas do que re-parsear CSV.
- Fixar dependências com lockfiles uv. O comportamento do pandas 2.2+ e Polars 1.x não deve variar entre o laptop e o CI.
- Semear amostragem aleatória.
sample(random_state=42)enumpy.random.default_rngpara auditabilidade.
FAQs
Qual é o hábito de maior impacto?
- Verificações de contagem de linhas e unicidade de chaves na ingestão e após cada merge.
- A maioria dos bugs de KPI de produção são de cardinalidade, não de matemática.
Quando o apply do pandas é aceitável?
- Apenas para protótipos em amostras minúsculas.
- Substituir por operações vetorizadas antes de agendar o job.
Os notebooks devem ser a fonte da verdade?
- Notebooks exploram; scripts/módulos agendados com testes enviam KPIs.
- Extrair funções assim que a lógica estabilizar.
Como testar uma análise?
- Snippets CSV/Parquet de fixture em pytest com agregações esperadas.
- Afirmar o dicionário de dtypes e as contagens de linhas, não apenas os números finais.
Quando migrar para Polars?
- Depois que a otimização de dtype do pandas e a fragmentação ainda não atingem o SLA ou o orçamento de RAM.
- Benchmarking de um caminho crítico antes de uma reescrita completa.
Como compartilhar resultados com stakeholders?
- Exportar gráficos e tabelas com filtros documentados.
- Nunca editar manualmente o Excel após a exportação - altere o script.
E quanto ao SQL em vez de pandas?
- DuckDB/SQL se destaca quando os dados já residem em tabelas do data warehouse.
- pandas ainda vence para arquivos locais pequenos e o rico ecossistema Python.
Como lidar com PII?
- Remover ou hashear identificadores antes que os notebooks saiam de ambientes seguros.
- Registrar listas de colunas, não amostras de linhas, nos logs do job.
Devo usar float32?
- Para features de ML e matrizes numéricas grandes quando a troca de precisão é documentada.
- Usar float64 para totais financeiros, a menos que medido como seguro.
Como versionar datasets?
- Caminhos Parquet endereçados por conteúdo (
dt=2025-01-15/) mais JSON de manifesto. - Nunca sobrescrever entradas - escreva novas partições.
Relacionados
- Noções Básicas de Análise de Dados - tour introdutório
- Limpeza e Transformação de Dados - política de dtype e NA
- Joins e Merges - verificações de cardinalidade
- Desempenho e Memória - fragmentação e Arrow
- Validação e Qualidade de Dados - portões de schema
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.