Pular para o conteúdo

Processamento de CSV

Ler, limpar, validar e agregar dados tabulares.

Este é o código completo do exercício 105_dados_tabulares.df, que roda e verifica a si mesmo.

105_dados_tabulares.df
adopt Arcane.Analytics as An

registros := [
    {"setor": "TI", "salario": 8000},
    {"setor": "RH", "salario": 5000},
    {"setor": "TI", "salario": 9500},
    {"setor": "RH", "salario": 5500},
    {"setor": "TI", "salario": 7000}
]

grupos := An.group_by(registros, "setor")
out "setores:", grupos.keys()

cycle setor in grupos.keys():
    salarios := grupos[setor] >> morph r: r["salario"]
    out "  " + setor.pad_end(4) + "n=" + str(len(salarios)) + " media=" + str(round(mean(salarios), 2))

assert len(grupos.keys()) is 2, "dois setores"
assert len(grupos["TI"]) is 3, "3 registros de TI"

contagem := An.value_counts(registros >> morph r: r["setor"])
out "contagem:", contagem
assert contagem["TI"] is 3, "TI aparece 3x"

O fluxo#

Ler o CSV, converter cada linha num record tipado, validar, agregar e reportar. Para arquivos grandes, o mesmo desenho vira um pipeline de streams.

Serialização#

dataforge
adopt Arcane.Serialization as Serde

registros := Serde.csv_to_records(IO.read("dados.csv"))
IO.write("saida.csv", Serde.records_to_csv(processados))

csv_to_records assume que a primeira linha é cabeçalho e transforma cada linha num vault — o formato natural para dados tabulares.