Análise de vendas
Lê CSV e produz relatório com estatística e gráficos de terminal.
bash
dataforge run src/main.df -- dados/vendas.csvbash
┌───────────────┬──────────────┐
│ Indicador │ Valor │
├───────────────┼──────────────┤
│ Total │ R$ 35.300,00 │
│ Ticket médio │ R$ 2.353,33 │
│ Mediana │ R$ 1.200,00 │
│ Desvio padrão │ R$ 1.991,27 │
└───────────────┴──────────────┘
⚠ dispersão alta: o ticket médio não representa bem as vendas.
Por região
Nordeste █████████░░░░░░░░░░░░░ R$ 7.200,00
Sudeste ██████████████████████ R$ 17.240,00
Sul ██████████████░░░░░░░░ R$ 10.860,00
Evolução mensal
▄▁█
Tendência: subindo R$ 345,00 por mês (r² = 0.269)
(ajuste fraco — a tendência não é confiável com estes dados)Centavos inteiros#
O CSV traz 4500.00; a leitura converte para 450000 centavos. Somar quinze floats acumula erro; somar inteiros não.
Falhar cedo#
dataforge
vendas := []
numero := 1
cycle linha in linhas[1:]:
numero += 1
given linha.trim() is "":
skip
campos := linha.split(",")
given len(campos) isnt len(cabecalho):
trigger $"linha {numero}: esperava {len(cabecalho)} colunas, veio {len(campos)}"
monitor:
vendas.append(Venda(
campos[0].trim(), campos[1].trim(), campos[2].trim(),
campos[3].trim(), M.de_texto(campos[4]).centavos))
handle e:
trigger $"linha {numero}: valor invalido ({campos[4]})"Uma linha com valor inválido aborta a leitura dizendo o número da linha — melhor que um void chegar a uma soma e produzir um total errado em silêncio.
O relatório desconfia de si mesmo#
Quando o desvio passa de metade da média, avisa que o ticket médio não descreve as vendas. Quando o r² é baixo, avisa que a tendência não é confiável.
Um relatório que só apresenta números convida a conclusões que os dados não sustentam. Dizer onde a estatística é fraca faz parte de apresentá-la.