Pular para o conteúdo

O mapa do ecossistema de dados

As 32 áreas de dados, cruzadas com o que a linguagem tem: o que é nativo, o que atravessa a ponte, e o que não existe por decisão.

Este documento é o mapa, e não a lista. Cada área do ciclo de vida do dado — ingestão, limpeza, transformação, validação, armazenamento, análise, visualização, aprendizado, governança — cruzada com o que existe, medido pelos símbolos dos módulos e não pela memória de quem escreveu.

Três estados, e a diferença entre eles importa mais que a lista:

EstadoSignifica
nativoestá na linguagem ou na biblioteca padrão, sem dependência nenhuma
ponteexiste através de adopt Python.x — a biblioteca é do Python, o código é seu
foranão existe, e a decisão está tomada: o motivo está escrito

1 — Fundamentos e estatística descritiva#

O que se pedeOnde está
média, mediana, moda, variância, desvionativoQuadro.descrever, Arcane.Analytics
mínimo, máximo, amplitude, percentis, quartisnativodescrever traz q1, mediana e q3
assimetria, curtosenativoAnalytics.skewness, kurtosis
correlação e covariâncianativoQuadro.correlacao, Analytics.covariance
outliersnativoQuadro.fora_da_curva (1,5 × IQR)
amostragem, amostra estratificadanativoQuadro.amostra, Analytics.stratified_sample
regressão, séries temporaisnativoAnalytics.linear_regression, moving_average, seasonality, trend
testes de hipótese, p-value, intervalo de confiançaponteadopt Python.scipy; implementar a família inteira de testes sem dependência seria meio caminho

2 — Manipulação de dados#

É a área que o `Quadro` cobre por inteiro, e a razão de ele existir:

O que se pedeO verbo
DataFrame, Series, indexaçãoQuadro, coluna, linha, q["col"], q[0], q[0:10]
seleção de colunas e linhas, filtros, ordenaçãopegar, sem, onde, ordenar
agrupamento e agregação, group_byagrupar + resumir, com 14 agregações
join, merge, concatjuntar (dentro/esquerda/direita/fora), empilhar
pivot tablespivotar, despivotar, tabela_cruzada
transformação de colunas, aplicar funçãocom, mapear
dados ausentes, duplicatasnulos, sem_nulos, preencher, distintas, duplicadas
conversão de tiposconverter, inferir_tipos
normalização, padronização, encodingnormalizar, padronizar, codificar, discretizar
operações vetorizadasparcial — colunar por dentro; o laço ainda é do interpretador. Para vetorização de verdade, a ponte para o numpy

3 e 4 — ETL e ELT#

Extrair deEstado
CSV, JSON, Excel, ParquetnativoQuadro.de_csv, de_json, Arcane.Excel, Arcane.Lago
SQLitenativoArcane.Database, 64 símbolos
API REST, GraphQLnativoArcane.Http, Arcane.Malha, Arcane.Lavra
arquivos locais, logs, streamsnativoArcane.IO, Arcane.Stream
XML, Avro, ORCfora — formatos de um ecossistema que a linguagem não fala; via ponte quando preciso
PostgreSQL, MySQL, Oracle, MongoDB, Redisponte — exigem driver de rede próprio, e a promessa aqui é zero dependência
FTP, SFTP, Cloud Storageponte — mesma razão

Do lado da transformação, tudo é nativo: limpeza, deduplicação, normalização, conversão de tipo, tratamento de nulo, enriquecimento por juntar, agregação, filtro, ordenação, validação e regra de negócio — ver ETL e qualidade.

5 — Engenharia de dados#

O que se pedeOnde está
data pipelines, orquestração, DAGnativoArcane.Pipeline: etapa, ordem, retry, incremental, histórico
batch e stream processingnativoparallel, map_processos, Arcane.Stream
validação e qualidadenativoArcane.Qualidade
linhagem, catálogo, observabilidadenativoArcane.Observar: origem, derivar, impacto, árvore, grafo
contratos de dados, evolução de esquemaparcialArcane.Lago.esquema e Arcane.Qualidade.conferir; o registro de esquema versionado não existe
event-driven pipelinesnativoArcane.Eventos (em memória); a fila com persistência é o item aberto do roadmap

6, 7 e 19 — SQL, Data Warehouse, Data Lake e Lakehouse#

O que se pedeOnde está
SELECT, INSERT, UPDATE, DELETE, JOIN, índicenativo`Arcane.Database`
transação, savepoint, upsert, migraçãonativo
busca textual, explain, estatística de tabelanativo — FTS5, DB.explain, DB.stats
ORM, modelos, relaçõesnativoArcane.Forge
Parquet, partições, camadas bronze/prata/ouronativo`Arcane.Lago`
compactação, vácuo, promoção entre camadasnativoLago.compactar, vacuo, promover
modelagem dimensional, SCD, data martspadrão, não módulo — são formas de modelar, e a linguagem tem o que elas exigem (junção, upsert, versão por data)
Snowflake, BigQuery, Redshiftfora — são serviços; o caminho é a API deles por Arcane.Http

8 e 9 — Big Data e tempo real#

O que se pedeOnde está
processamento paralelo de verdadenativoP.map_processos, medido 4,71× em 10 núcleos
processamento por partes, streaming de arquivonativostream action + emit, O(1) de espaço
particionamento, poda de partiçãonativoArcane.Lago.particoes
filas, tópicos, offset, janelasnativoArcane.Stream: topico, publicar, consumir, offset, janela, confirmar
Spark, Hadoop, Flink, Kafkafora — são sistemas distribuídos, não bibliotecas. O que a linguagem oferece é o modelo deles numa máquina
dados maiores que a memóriaparcial — por partes, sim; o motor distribuído, não

10 e 25 — Visualização e BI#

O que se pedeOnde está
gráfico de barras, linhas, dispersão, histogramanativoArcane.Analytics em ASCII, Arcane.Vitrine em SVG
painel interativo, filtros, abas, métricasnativoVitrine: 40 componentes, sete gráficos, ~4 KB de cliente
mapa de calor, sparkline, box plotnativoAnalytics.heatmap, sparkline, box_plot
relatório e exportaçãonativopara_csv, para_json, Arcane.Excel
KPI, drill-down, self-service BIpadrão — a Vitrine tem as peças; o produto é seu
Power BI, Tableau, Lookerfora — são produtos

11, 12 e 21 — Data Science, IA e séries temporais#

O que se pedeOnde está
regressão linear e logística, árvore, florestanativoArcane.Cortex
k-médias, k-vizinhos, PCA, BayesnativoCortex.kmedias, vizinhos, pca, bayes_texto
treino, teste, validação cruzada, matriz de confusãonativodividir, validacao_cruzada, matriz
escalonamento, categórico, importância de feiçãonativoescalonar, categorico, importancia
média móvel, defasagem, sazonalidade, tendêncianativoAnalytics.moving_average, lag, seasonality, trend
rede neural, aprendizado profundo, LLMponteadopt Python.torch. Uma rede neural sem BLAS é um brinquedo, e prometê-la seria mentir

15, 23, 24, 26 e 27 — Qualidade, perfil, limpeza, observabilidade e governança#

O que se pedeOnde está
perfil de dados, tipos, distribuição, cardinalidadenativoQuadro.perfil, Arcane.Qualidade.perfil
completude, unicidade, validade, atualidadenativoQualidade.completude, unicidade, so_validas, atualidade
duplicatas, valores fora da faixa, formatonativoduplicadas, fora_da_faixa, formatos
limpeza: nulo, tipo, texto, datanativopreencher, converter, Arcane.Text, Arcane.Time
linhagem, impacto, catálogonativoObservar.origem, derivar, impacto, arvore, grafo
métricas, alerta, painel, PrometheusnativoObservar.medir, alertar, painel, prometheus
contrato de dados, política, auditoriaparcialQualidade.conferir e esperar dão o contrato; a política e a auditoria são processo, não biblioteca
mascaramento, anonimização, LGPDparcialArcane.Crypto tem o hash e a cifra; a classificação de dado pessoal é decisão de quem modela

28 e 29 — Testes e desempenho#

O que se pedeOnde está
teste unitário, de integração, de dadosnativoCrucible, com banco isolado por teste
instantâneo de saída grandenativoexpect … matches snapshot
teste por propriedadenativoCrucible
análise de complexidade antes de rodarnativodataforge big-o, único entre linguagens
lazy evaluation, processamento por partesnativostream action + emit
cache, memoizaçãonativoArcane.Functional.memoize, Vitrine.cache
armazenamento colunarnativo — o Quadro é colunar por dentro; o Parquet, no Lago
predicate pushdown, otimização de consultaparcial — o SQLite otimiza a consulta; o Quadro não reordena o pipeline

30 — A sintaxe que o documento esboçou#

O esboço propunha um operador |> e blocos pipeline { }. A linguagem já tinha o >>, e o que faltava era o vocabulário — não um segundo operador:

dataforge
// o esboço                          // em DataForge
// dados |> filtrar(idade > 18)       >> onde idade bigger 18
// |> agrupar.por("cidade")           >> agrupar cidade
// |> agregar.media("salario")        >> resumir {"salario": "media"}
// |> ordenar.desc("valor")           >> ordenar valor desc
dataforge
resumo := vendas
    >> onde valor bigger 50
    >> agrupar produto
    >> resumir {"valor": "soma"}
    >> ordenar valor desc

Inventar |> ao lado de >> daria dois operadores para a mesma ideia — e a primeira pergunta de quem chega seria qual usar. Os seis verbos são contextuais, como as onze palavras do Kiln: valem depois de um >> e continuam livres como nome em todo o resto.

31 — Os módulos propostos, e onde eles foram parar#

PropostoOnde está
DataFrame`Arcane.Quadro`
Data, StatisticsArcane.Analytics, Arcane.Data
ETL, ELT, PipelinesArcane.Pipeline + os verbos do quadro
SQL, WarehouseArcane.Database, Arcane.Forge
Lake, LakehouseArcane.Lago
Streaming, BigDataArcane.Stream, Arcane.Concurrent
Visualization, BIArcane.Vitrine, Arcane.Analytics
MachineLearning, AIArcane.Cortex + a ponte
Quality, Governance, ObservabilityArcane.Qualidade, Arcane.Observar
TimeSeriesArcane.Analytics + Arcane.Time
Cloudfora — serviços, alcançáveis por Arcane.Http

Vinte e um módulos propostos couberam em doze que já existiam mais um novo. Criar um módulo por tópico daria vinte e uma portas para o que é um assunto só — e a regra aqui é que a tabela de módulos não divirja da realidade.

O que este mapa recusa a prometer#

  • Driver de banco em rede — PostgreSQL, MySQL, Oracle, MongoDB, Redis. Cada um é um protocolo de rede, e a promessa da linguagem é zero dependência no runtime.
  • Motor distribuído — Spark, Flink, Hadoop. São sistemas, não bibliotecas; reimplementá-los em Python daria um subconjunto pior amarrado à linguagem.
  • Aprendizado profundo — uma rede neural sem BLAS é um brinquedo. A ponte para o torch é honesta; uma implementação própria não seria.
  • Conectores de nuvem — S3, GCS, Azure. São APIs HTTP, e Arcane.Http fala com elas; um cliente oficial de cada uma é manutenção sem fim.
  • Avro e ORC — formatos de um ecossistema que a linguagem não fala. Parquet existe porque ele é a fronteira que um lago de dados realmente usa.

Por onde seguir#