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.