Pular para o conteúdo
Todos os conceitos

Filtrar dados grandes

Com milhares de linhas, a resposta vem de filtrar, tirar repetidos e somar por grupo, nunca de ler no olho.

Um arquivo com dezenas de milhares de linhas não se lê no olho. A resposta sai de três operações, quase sempre nesta ordem:

  1. Tirar repetidos. Sistemas reais gravam a mesma coisa duas vezes. Se cada registro tem um identificador (id), conte cada um uma vez só.
  2. Filtrar. Fique só com as linhas que a pergunta pede: um período, um tipo, uma situação.
  3. Agrupar e somar. Some (ou conte) por categoria e ordene do maior para o menor.
dados.csv idnomesituacaovalor 1Anaaceito30 2Bentoaceito40 2Bentoaceito40 3Anarecusado50 4Anaaceito20 5Bentoaceito5 1 tirar repetidos 2 filtrar: só aceito 3 somar por nome Ana50 Bento45 sem o passo 1, Bento venceria com 85
Numa tabela pequena, tirar o id repetido e a linha recusada antes de somar por nome dá Ana 50 contra Bento 45; sem tirar o repetido, Bento venceria com 85.

As mesmas três operações em ferramentas diferentes:

Ferramenta Repetidos Filtro Soma por grupo
Planilha Remover duplicatas Filtro automático Tabela dinâmica
Terminal sort -u awk '$7=="aceito"' awk '{s[$4]+=$6}'
Python um set dos ids vistos um if um dict ou Counter

Em Python, com o módulo csv:

import csv, collections
vistos, total = set(), collections.Counter()
for linha in csv.DictReader(open("dados.csv")):
    if linha["id"] in vistos or linha["situacao"] != "aceito":
        continue
    vistos.add(linha["id"])
    total[linha["nome"]] += int(linha["valor"])
print(total.most_common(3))

O cuidado mais importante: quando o primeiro e o segundo colocados estão perto, cada regra esquecida pode mudar o vencedor. Teste ligando e desligando cada filtro e veja se o resultado muda; se muda, aquela regra é decisiva e precisa estar certa.

Isso importa porque é o dia a dia de quem analisa logs, vazamentos e planilhas de incidentes: dados reais vêm sujos, e a conclusão só vale depois da limpeza.

Aparece nestes desafios