Pipeline de ETL para dados de preços de combustíveis da pesquisa da ANP - Agência Nacional do Petróleo. Os dados são baixados de links fornecidos previamente no .env
, processados e carregados em um banco de dados PostgreSQL.
Por padrão, são usados os links com dados do intervalo abaixo:
- 2018 a 2021; e
- 2024 a 2025.
A pesquisa semanal da ANP inclui o preço dos seguintes combustíveis:
- gasolina comum, etanol hidratado, óleo diesel não aditivado, gás natural veicular (GNV) e gás GLP (gás de cozinha, 13kg).
main.py
: Script principal para executar o ETL.dags/dag.py
: DAG do Airflow para agendar e executar o ETL.docker-compose.yml
: Arquivo para configurar e executar o projeto usando Docker.extract.py
: Funções para baixar e deletar arquivos.transform.py
: Funções para processar os arquivos baixados.load.py
: Funções para carregar os dados processados no PostgreSQL..env.example
: Arquivo de configuração com variáveis de ambiente.
- Python 3.8+
- PostgreSQL
- Docker (opcional)
- Airflow (opcional)
-
Clone o repositório:
git clone https://github.com/savioribeiro/etl-anp-precos-combustiveis.git cd etl-anp-precos-combustiveis
-
Crie um ambiente virtual e instale as dependências:
python -m venv venv source venv/bin/activate pip install -r requirements.txt
-
Configure as variáveis de ambiente no arquivo
.env
:DB_URL=postgresql://user:password@localhost:5432/etl_combustiveis DB_SCHEMA=public HEADERS="DATA INICIAL,DATA FINAL,REGIÃO,ESTADO,MUNICÍPIO,PRODUTO,NÚMERO DE POSTOS PESQUISADOS,UNIDADE DE MEDIDA,PREÇO MÉDIO REVENDA,PREÇO MÍNIMO REVENDA,PREÇO MÁXIMO REVENDA" FILE_LINKS="https://www.gov.br/anp/pt-br/assuntos/precos-e-defesa-da-concorrencia/precos/precos-revenda-e-de-distribuicao-combustiveis/shlp/semanal/semanal-municipios-2018-a-2021.xlsb, https://www.gov.br/anp/pt-br/assuntos/precos-e-defesa-da-concorrencia/precos/precos-revenda-e-de-distribuicao-combustiveis/shlp/semanal/semanal-municipios-2024-2025.xlsx"
Você pode encontrar links com outros relatórios no site da ANP. ** Essa ETL está preparada para lidar somente com as séries históricas semanais. Ainda não é possível utilizar os microdados disponibilizados pela ANP.
- Execute o script principal:
python main.py
- Configure o Airflow e adicione a DAG
dags/dag.py
. - Inicie o Airflow e agende a DAG.
- Execute o Docker Compose:
docker-compose up --build
Após o build, a ETL será executada, o container app será pausado após a conclusão e o db seguirá ativo.
-
Acesse o banco de dados PostgreSQL:
docker exec -it etl_combustiveis_db psql -U user -d etl_combustiveis
-
Execute uma consulta simples:
SELECT * FROM public.precos_combustiveis LIMIT 10;
DB_URL
: URL de conexão com o banco de dados PostgreSQL.DB_SCHEMA
: Esquema do banco de dados PostgreSQL.HEADERS
: Cabeçalhos das colunas dos arquivos de dados.FILE_LINKS
: Links para download dos arquivos de dados.
Campo | Descrição |
---|---|
data_inicial |
Data de início do período de coleta dos preços. |
data_final |
Data de término do período de coleta dos preços. |
regiao |
Região geográfica (Norte, Sul, etc.). |
estado |
Estado da unidade federativa. |
municipio |
Nome do município. |
produto |
Tipo de produto (por exemplo, Etanol Hidratado, Gasolina). |
numero_de_postos_pesquisados |
Quantidade de postos de combustíveis pesquisados na localidade. |
unidade_de_medida |
Unidade de medida para o preço (ex.: R$/l). |
preco_medio_revenda |
Preço médio de revenda do combustível. |
preco_minimo_revenda |
Preço mínimo encontrado para o combustível. |
preco_maximo_revenda |
Preço máximo encontrado para o combustível. |
Embora não tenham sido adicionadas por padrão, as colunas abaixo também estão disponíveis:
- DESVIO PADRÃO REVENDA
- MARGEM MÉDIA REVENDA
- COEF DE VARIAÇÃO REVENDA
- Adicione os novos links no arquivo
.env
na variávelFILE_LINKS
, separados por vírgula:FILE_LINKS="link1, link2, link3"