Pipeline ETL completo integrado a Dashboard interativo e detecção de anomalias para análise de commodities agrícolas.
Monitoramento contínuo com arquitetura escalável, estruturando dados brutos para rápida tomada de decisão macroeconômica.
Problema
Alta volatilidade e descentralização dos dados das commodities agrícolas, dificultando a análise de tendências de preços de insumos fundamentais.
Solução
Pipeline de ETL completo que consome APIs e processa dados estruturando-os em um Star Schema PostgreSQL em nuvem para análise fluída.
Resultado
Acesso unificado e rápido a métricas através de um dashboard em Streamlit com análises estatísticas aprofundadas e detecção de anomalias automatizadas.
ETL
Pipeline Automatizado
3-σ
Detecção de Anomalias
Cloud
Deploy Escalonável
100%
Modelado em Star Schema
┌────────────────────────┐ ┌──────────────────────────┐ ┌──────────────────────────┐ │ Data Sources │ │ Python ETL │ │ Data Warehouse │ │ APIs Econômicas │──────▶│ (Pandas / Requests) │──────▶│ PostgreSQL Local/Cloud │ │ (Dados Brutos - RAW) │ │ 1. Limpeza │ │ (Star Schema) │ │ │ │ 2. Transformação │ │ Fatos & Dimensões │ └────────────────────────┘ └──────────────────────────┘ └──────────────────────────┘ │ ┌───────────────┴───────────────┐ │ Front-End application │ │ Streamlit Cloud (Views) │ └───────────────────────────────┘
Conexão a fontes públicas usando a biblioteca yfinance para obter séries históricas de preços e volumes de futuros agrícolas (CBOT).
Validação e tratamento de nulos, conversão de datas, padronização de categorias, detecção de anomalias via 3-sigma e estruturação em Star Schema para banco analítico.
Inserção através de consultas SQL otimizadas com tratamento de duplicidade e mapeamento em tabelas Fato e sub-dimensões.
O projeto pode rodar via container Docker localmente ou ser visualizado online escalável através do deploy no Streamlit Community Cloud.
Uma visão estruturada de como os dados brutos são extraídos, tratados, modelados e analisados em escala.
Extração — Scraper (yfinance)
O pipeline coleta dados financeiros diretamente do mercado (CBOT via Yahoo Finance), capturando o histórico bruto de preços e volumes.
# Coleta de histórico de 2 anos com granularidade diária df = yf.download(ticker, period='2y', interval='1d') # Estruturação inicial do DataFrame RAW df_clean = pd.DataFrame({ 'data_ref': df['Date'], 'commodity': nome, 'preco_raw': df['Close'], 'volume': df['Volume'], })
Transformação — ETL
Camada onde o dado vira ativo analítico através de padronização, limpeza de nulos e o cálculo do desvio padrão para detecção estatística de anomalias (3-sigma).
# Padronização e tipagem df['commodity'] = df['commodity'].str.lower() df['preco'] = pd.to_numeric(df['preco_raw']) # Cálculo estatístico e flag de anomalia (3-sigma) df['media'] = df['preco'].rolling(window=30).mean() df['desvio'] = df['preco'].rolling(window=30).std() # Identificação de outliers baseada na variação histórica df['anomalia'] = df['preco'] > (df['media'] + 3 * df['desvio'])
Modelagem — Data Warehouse
Estruturação no banco de dados em modelo Star Schema, separando o histórico transacional dinâmico (Fato) das características descritivas constantes (Dimensões).
-- Dimensão de Informações das Commodities CREATE TABLE dim_commodity ( id_commodity SERIAL PRIMARY KEY, nome VARCHAR(50) NOT NULL, categoria VARCHAR(50) ); -- Fato Analítica de Preços e Transações CREATE TABLE fato_preco ( id_fato SERIAL PRIMARY KEY, id_commodity INT REFERENCES dim_commodity(id_commodity), data_ref DATE NOT NULL, preco DECIMAL(10,2), volume BIGINT, is_anomalia BOOLEAN );
Análise — SQL Avançado
Utilização do SQL como motor analítico principal (não apenas armazenamento), processando dinamicamente a variação percentual mensal via Window Functions (LAG).
WITH cte_variacao AS ( SELECT c.nome, DATE_TRUNC('month', f.data_ref) AS mes, AVG(f.preco) AS preco_medio, LAG(AVG(f.preco)) OVER ( PARTITION BY c.nome ORDER BY DATE_TRUNC('month', f.data_ref) ) AS preco_mes_anterior FROM fato_preco f JOIN dim_commodity c ON f.id_commodity = c.id_commodity GROUP BY 1, 2 ) SELECT nome, mes, preco_medio, ROUND(((preco_medio / preco_mes_anterior) - 1) * 100, 2) AS variacao_pct FROM cte_variacao;
Processamento
Python 3
ETL & automação estrutural
Pandas
Manipulação dos dados RAW
Data Layer / Storage
PostgreSQL
Data Warehouse - Star Schema
SQL Analítico
Queries Avançadas, LAG/LEAD
Apresentação / Infra
Streamlit
Aplicação Web Responsiva
Plotly
Gráficos interativos
Não se limita apenas ao dashboard. O processo cobre todas as etapas vitais (Extract, Transform e Load).
Bases estruturadas em Fato e Dimensões garantem que banco forneça uma performance robusta na hora de entregar dados ao front.
Engenharia apurada em SQL nativo explorando LAG, LEAD e partições de dados para traçar cenários reais.
Integra via script o método minucioso do "3-sigma" garantindo a melhor avaliação ao apontar anomalias fora da curva.
O Dashboard reage rapidamente através do motor flexível com cruzamentos visuais sofisticados construídos pelo Plotly.
O código Python (ETL e Streamlit) além da infra via scripts SQL e automações estão disponíveis publicamente no repositório.