Você sabe quanto sua empresa vendeu ontem? Se precisar de mais de 3 segundos para responder, o workshop de hoje é ideal para você!
Nosso objetivo é desenvolver um Data Warehouse (DW) que armazene e analise dados de commodities, empregando uma arquitetura moderna de ETL (Extract, Transform, Load). Este projeto abrange várias etapas essenciais:
-
Documentação do DBT:
- Criação de uma documentação completa e detalhada para facilitar o entendimento e a manutenção do processo de ETL, garantindo a transparência e a rastreabilidade dos dados.
-
Dashboard Interativo:
- Desenvolvimento de um painel interativo usando Streamlit, que permite a visualização dinâmica dos dados de commodities, facilitando a tomada de decisões baseada em dados precisos e atualizados.
-
Parte de Extract_Load:
- Implementação de um processo de extração de dados diretamente de uma API. Esses dados são então carregados diretamente em um banco de dados PostgreSQL, garantindo que a informação seja centralizada e facilmente acessível para análise.
-
Parte de Seed:
- Utilização de seeds do DBT para carregar dados históricos e transacionais de commodities a partir de arquivos CSV. Esse processo garante que todos os dados relevantes sejam incluídos e estruturados corretamente no Data Warehouse.
-
Models:
- Definição das transformações de dados utilizando o DBT. Isso inclui a criação de tabelas de staging, que servem como intermediárias, e de datamarts, que são específicas para análises detalhadas e relatórios. Estas transformações garantem que os dados estejam limpos, consolidados e prontos para análise.
-
Implementação do Dashboard em Streamlit:
- Desenvolvimento de um dashboard com Streamlit que apresenta os dados de commodities de forma clara e interativa. Este dashboard permite aos usuários visualizar tendências, realizar comparações e obter insights valiosos para o negócio.
Este projeto é fundamental para qualquer empresa que precise de uma análise precisa e rápida de seus dados de vendas e movimentações de commodities, promovendo uma cultura de decisões orientadas por dados.
Com essa abordagem, sua empresa poderá responder perguntas críticas sobre vendas e movimentações de commodities de forma rápida e eficaz, aumentando a eficiência operacional e a competitividade no mercado.
-
Extração:
- Importação das bibliotecas necessárias: Importamos as bibliotecas
yfinance
,pandas
esqlalchemy
. - Definição da função buscar_dados_commodities: Definimos uma função para buscar os dados de um símbolo específico de commodities.
- Busca de dados das commodities: Utilizamos a função
buscar_dados_commodities
para obter os dados de cada commodity.
- Importação das bibliotecas necessárias: Importamos as bibliotecas
-
Transformação:
- Definição da função buscar_todos_dados_commodities: Definimos uma função para buscar os dados de todos os símbolos de commodities e concatená-los em um único DataFrame.
- Concatenar dados de todas as commodities: Utilizamos a função
buscar_todos_dados_commodities
para concatenar todos os dados em um único DataFrame.
-
Carga:
- Definição da função salvar_no_postgres: Definimos uma função para salvar o DataFrame resultante no banco de dados PostgreSQL.
- Salvar dados no banco de dados PostgreSQL: Utilizamos a função
salvar_no_postgres
para salvar o DataFrame final no banco de dados PostgreSQL.
Este diagrama segue o estilo ETL, destacando claramente as etapas de Extração, Transformação e Carga.
graph TD;
subgraph Extract_Load
A1[buscar_dados_commodities] --> B1[buscar_todos_dados_commodities]
B1 --> C1[carregar_dados_no_postgres]
end
subgraph Transform
D1[stg_commodities.sql] --> E1[stg_movimentacao_commodities.sql]
E1 --> F1[dm_commodities.sql]
end
A[API de Commodities] -->|Extrai Dados| Extract_Load
Extract_Load -->|Carrega Dados| C[PostgreSQL]
C -->|Armazena Dados| D[Data Warehouse]
Data_Warehouse -->|Transforma Dados| Transform
Transform -->|Cria Views| F[Dashboard Streamlit]
Para usar o projeto você deve criar um ambiente virtual do Python, para isso você deve ter instalado em seu computador o pyenv, virtualenv ou poetry.
Obs: Copie apenas o texto, sem o simbolo ❯
.
# Ativando a virtual env
❯ poetry shell
# instalando as dependências
❯ poetry install
❯ python -m venv .venv
# Ativando o ambiente no Windows
❯ source .venv/bin/activate
# Ativando o ambiente no Linux e Mac
❯ source .venv/bin/activate
❯ pip install -r requirements.txt
Agora é necessário usar um banco de dados Postgres, uma boa forma de iniciar seus trabalhos com banco de dados é usando o Render, com ele você cria um banco de dados postgres em alguns clicque, para criar o seu banco de dados usando essa plataforma assista a esse Tutorial
Após criar o banco de dados postgres você deve criar um arquivo .env
que conterar o seguintes campos:
DB_HOST_PROD=dpg-cpke84q0si5c73cp9uog-a.virginia-postgres.render.com
DB_PORT_PROD=5432
DB_NAME_PROD=nome_banco_de_dados_criado
DB_USER_PROD=nome_do_usuario_do_banco_de_dados_criado
DB_PASS_PROD=senha_do_banco_de_dados
DB_SCHEMA_PROD=public
DB_THREADS_PROD=1
DB_TYPE_PROD=postgres
DBT_PROFILES_DIR=../
mude apenas os campos, DB_NAME_PROD
, DB_USER_PROD
, DB_PASS_PROD
.
Após os procedimentos acima terem sido feitos, o proximo passo é executar o projeto, para isso inicia-se executando o Extract
e Load
que que foi desenvolvido no código extract_load.py
que está dentro da pasta src
, para executa-lo, basta roda o seguinte comando no terminal.
❯ python src/extract_load.py
Com isso, o banco de dados postgres deve está com as seguintes tabelas criadas:
Tables | campos |
---|---|
commodities | date, symbol, action, quantity |
movimentacao_commodities | Date, Close, simbolo |
Caso não tenha ocorrido nenhum erro anteriormente, agora deve-se executar o comando que vai realizar o transform
, para isso vamos usar o dbt
para rodar as transformações contidas nos arquivos sql
do projeto:
Antes de realizar o transformação, você pode verificar se o dbt
consegue se comunicar com o banco de dados postgres, para isso entre para dentro da pasta datawarehouse
pelo terminal e rodo o seguinte comando:
❯ dbt debug
caso tenha a seguinte mensagem no terminal, seguinifica que o dbt
está se conectando ao banco de dados postgres:
.
.
.
23:25:46 retries: 1
23:25:46 Registered adapter: postgres=1.8.1
23:25:47 Connection test: [OK connection ok]
23:25:47 All checks passed!
Com isso é possivel realizar a transformação dos dados, basta executar o seguinte comando dentro da pasta datawarehouse
pelo termianl:
❯ dbt run
Ao acessar o banco de dados, em views
deve ter os seguintes views, dm_commodities
, stg_commodities
, stg_movimentacao_commodities
.
Views | campos |
---|---|
dm_commodities | data,simbolo,valor_fechamento, acao, quantidade,valor, ganho |
stg_commodities | data, valor_fechamento, simbolo |
stg_movimentacao_commodities | data, simbolo, acao, quantidade |
Para implementar o Dashboard foi usando o streamlit
, foi criando um simples Dashboard com o intuito de mostrar as informações dos dados já tratados no ETL. Para executar o dashboard basta roda o comando abaixo em seu terminal com o ambiente virtual do projeto ativado.
❯ streamlit run app/app.py