Capítulo 6 — Qualidade de dados na prática
Mapa da aula
Aula 06 publicada. Mapa, exemplo, EX026.
flowchart TD
N0["6.1 Doadores duplicados"]
N1["6.2 Resultados"]
N2["6.3 Corrigindo e prevenindo"]
N3["6.4 Hábitos de qualidade"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX026"]
Desenho lógico
flowchart LR
N0["6.1 Doadores duplicados"]
N1["6.2 Resultados"]
N2["6.3 Corrigindo e prevenindo"]
N3["6.4 Hábitos de qualidade"]
N0 --> N1 --> N2 --> N3 --> Q["EX026"]
[6.1 Doadores duplicados]
|
v
[6.2 Resultados]
|
v
[6.3 Corrigindo e prevenindo]
|
v
[6.4 Hábitos de qualidade]
|
v
[Exemplo resolvido] --> [Exercício EX026]
Objetivos de aprendizagem
Você vai (1) encontrar registros duplicados de doadores; (2) normalizar campos simples; (3) criar hábitos de qualidade para uma equipe pequena.
6.1 Doadores duplicados
A gerente de captação conta que alguns doadores recebem duas cópias de cada boletim e reclamam. Grace suspeita de endereços de e-mail duplicados, digitados de maneiras diferentes. Ela exporta e-mails sintéticos de doadores e verifica quantos são, na verdade, o mesmo endereço escrito de outro jeito, com letras maiúsculas ou espaços a mais. Explica que as duplicatas desperdiçam dinheiro, irritam os doadores e fazem parecer que a Northbank tem mais apoiadores do que realmente tem. A gerente de captação concorda em exportar a lista de e-mails dos doadores e conferi-la com a ajuda de Grace.
"""Count duplicate synthetic donor emails before and after normalising case and spaces (stdlib only)."""
import random
random.seed(2)
base = [f"donor{i}@example.org" for i in range(1500)]
emails = []
for e in base:
emails.append(e)
if random.random() < 0.08: emails.append(e.upper())
if random.random() < 0.05: emails.append(" " + e + " ")
print(f"records {len(emails)}; distinct as written {len(set(emails))}; distinct normalised {len({e.strip().lower() for e in emails})}")
print(f"duplicate records found by normalising {len(emails) - len({e.strip().lower() for e in emails})}")
Execute com python3 lab_emails.py. Saída verificada:
records 1684; distinct as written 1684; distinct normalised 1500
duplicate records found by normalising 184
6.2 Resultados
O laboratório confere 1.684 registros sintéticos de e-mail. Como foram escritos, os 1.684 são todos distintos, de modo que uma verificação simples de duplicatas não encontra nada. Depois de converter para minúsculas e remover os espaços das pontas, restam apenas 1.500 endereços distintos. A normalização revela 184 registros duplicados. Grace observa que as duplicatas eram invisíveis até a normalização, e por isso os boletins saíam em dobro sem que ninguém entendesse o motivo. Ela explica a constatação à gerente de captação com três exemplos do mesmo endereço escrito de formas diferentes, o que torna o problema fácil de entender sem conhecimento técnico.
6.3 Corrigindo e prevenindo
A gerente de captação funde os doadores duplicados no banco de dados, mantendo o histórico completo de doações em um único registro. Grace pergunta ao fornecedor do banco de dados se os e-mails podem ser guardados automaticamente em minúsculas, e ele confirma que sim. Ela também pede à equipe que procure o doador antes de cadastrar um novo. O Sr. Nowak observa que é preciso corrigir as duplicatas existentes e também prevenir as novas, senão o problema volta. Depois das mudanças, as reclamações sobre boletins em dobro param, e a gerente de captação apresenta ao conselho uma contagem mais exata de apoiadores.
6.4 Hábitos de qualidade
Grace cria hábitos simples: uma verificação mensal de duplicatas, uma verificação trimestral de CEPs ausentes e uma verificação anual de que a definição de família é usada de forma consistente. Cada verificação tem um dono e leva menos de uma hora. Ela registra os resultados em um log curto. Observa que verificações pequenas e regulares combinam melhor com uma organização de equipe reduzida do que grandes mutirões de limpeza que competem com o trabalho diário. O log é revisado em cada reunião mensal dos líderes, para que os problemas sejam percebidos cedo e os donos vejam que suas verificações fazem diferença.
Exemplo resolvido
Grace encontra 184 e-mails de doadores duplicados, invisíveis até que 1.684 registros fossem normalizados em 1.500 endereços, funde-os mantendo o histórico de doações, ativa o armazenamento em minúsculas e a busca antes do cadastro e cria verificações mensais.
Caso sintético. Os e-mails são sintéticos; as saídas vêm de lab_emails.py.
Erros e limites
Verificações de duplicatas por correspondência exata deixam passar diferenças de maiúsculas e espaços.
Exercícios
- EX026 — Distintos após normalizar. Quantos endereços distintos restam após a normalização? Rubrica: 3 = 1.500;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
- EX027 — Duplicatas reveladas. Quantos registros duplicados a normalização revelou? Rubrica: 3 = 184;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
- EX028 — Resultado da verificação exata. O que uma verificação exata de duplicatas encontrou? Rubrica: 3 = nada; os 1.684 eram distintos como foram escritos;; 2 = nada, sem o motivo;; 1 = vago;; 0 = sem resposta.
- EX029 — Mudança do fornecedor. O que o fornecedor ativou? Rubrica: 3 = o armazenamento automático dos e-mails em minúsculas;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
- EX030 — Duração das verificações. Quanto tempo cada verificação deve levar? Rubrica: 3 = menos de uma hora;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
Continue estudando — aula 06 (capítulo 06 de 12)
← Capítulo 05 · Índice das aulas · Capítulo 07 →
Continue para a próxima aula já escrita.