Coleta e tratamento de dados públicos do setor elétrico brasileiro (ONS, CCEE e ANEEL).
Project description
⚡ Dados Abertos do Setor Elétrico
Este projeto oferece uma interface simples em Python para acessar e baixar dados públicos do Setor Elétrico nos 3 principais órgãos: CCEE (Câmara de Comercialização de Energia Elétrica), ONS (Operador Nacional do Sistema) e ANEEL (Agência Nacional de Energia Elétrica).
Introdução
Através da classe dadosAbertosSetorEletrico, você pode listar produtos disponíveis e baixar os dados completos de forma paginada e organizada com pandas.
✅ Funcionalidades
- 🔍 Listagem de produtos disponíveis na API da CCEE
- ⬇️ Download completo e incremental dos datasets
- 📦 Conversão automática para
pandas.DataFrame
⚙️ Pré-requisitos
Antes de começar, certifique-se de ter os seguintes softwares instalados:
- Python 3.8 ou superior → Download Python
- pip (gerenciador de pacotes do Python)
- Git → Download Git
- Editor de código (sugestão: Visual Studio Code)
📦 Instalação
Clone este repositório e instale as dependências:
# Clone o repositório
git clone https://github.com/seu-usuario/seu-repositorio.git
cd seu-repositorio
# (Opcional) Crie e ative um ambiente virtual
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Instale as dependências
pip install -r requirements.txt
Exemplo de uso
from dadosAbertosSetorEletrico import dadosAbertosSetorEletrico
# Inicializa o cliente
cliente = dadosAbertosSetorEletrico("ccee")
# Lista os produtos disponíveis na API da CCEE
produtos = cliente.listar_produtos_disponiveis()
print(produtos)
# Baixa todos os dados do produto desejado como DataFrame
df = cliente.baixar_dados_produto_completo("parcela_carga_consumo")
print(df.head())
✅ Testes Automatizados
Este projeto já vem com uma suíte completa de testes automatizados que garante o funcionamento correto de cada parte do código. Mesmo que você nunca tenha usado testes em Python, aqui está como fazer funcionar.
🧪 O que está sendo testado?
- Inicialização correta da classe
dadosAbertosSetorEletrico - Comunicação com a API para listar produtos
- Extração de IDs de recursos (datasets)
- Download de dados completos de forma assíncrona
- Casos de erro simulados e retorno vazio
Os testes estão localizados na pasta:
tests/test_dadosAbertosSetorEletrico.py
Todos os testes estão comentados passo a passo para facilitar a leitura até mesmo para iniciantes.
⚙️ Como rodar os testes
- Instale os pacotes de teste (se ainda não tiver feito):
pip install pytest pytest-asyncio
- Execute os testes na raiz do projeto:
pytest -v
- O -v significa “modo verboso” e exibe o nome de cada teste sendo executado.
Se tudo estiver funcionando corretamente, você verá algo assim:
tests/test_dadosAbertosSetorEletrico.py::test_init_ccee PASSED
tests/test_dadosAbertosSetorEletrico.py::test_listar_produtos_disponiveis PASSED
tests/test_dadosAbertosSetorEletrico.py::test_baixar_dados_mockado PASSED
...
- ✅ Dica: Se você estiver usando Jupyter Notebook ou Google Colab, prefira usar o método await cliente.baixar_dados_produto_completo_async(...) para rodar de forma assíncrona.
Observações Importantes
-
Nem todos os datasets possuem dados acessíveis via API (
datastore_search). Quando não disponíveis, o script mostra a URL para download manual. -
Alguns datasets podem conter muitos registros — a paginação automática com
limiteoffsetevita estouro de memória. -
A classe trata de forma unificada três instituições distintas, facilitando reuso do código.
Contribuições
Contribuições são muito bem-vindas! Se você quiser sugerir melhorias, corrigir bugs ou adicionar novas funcionalidades, sinta-se à vontade para abrir uma issue ou pull request.
🚀 CI/CD e publicação no PyPI
O projeto usa GitHub Actions para automatizar validações e publicação de novas versões.
Validação contínua
A esteira CI é executada em pushes para main/master e em pull requests. Ela:
- executa a suíte de testes em Python 3.8, 3.9, 3.10, 3.11 e 3.12;
- gera as distribuições do pacote com
python -m build; - valida os metadados gerados com
twine check.
Publicação de uma nova versão
A esteira Publicar no PyPI é disparada somente quando uma GitHub Release é publicada. Antes de publicar, ela roda os testes novamente, gera os artefatos sdist e wheel e usa a action pypa/gh-action-pypi-publish para enviar esses arquivos ao PyPI.
Como a publicação no PyPI funciona
A publicação não usa senha nem token salvo no repositório. Ela usa PyPI Trusted Publishing, em que o PyPI confia no GitHub Actions deste repositório por OIDC.
O workflow não precisa saber o login/senha da sua conta PyPI. A ligação acontece em duas partes:
- Nome do projeto no PyPI: vem do metadata do pacote em
setup.cfg, no camponame = dados-abertos-setor-eletrico. É esse nome que define para qual projeto do PyPI os artefatos serão enviados. - Permissão para publicar: vem da configuração feita dentro do PyPI, na conta que administra o projeto. No PyPI, você cadastra este repositório GitHub como Trusted Publisher do projeto
dados-abertos-setor-eletrico. Quando a action roda, o PyPI valida via OIDC se a execução veio exatamente do repositório, workflow e environment configurados.
Para isso funcionar, é necessário configurar uma vez no projeto do PyPI dados-abertos-setor-eletrico um publicador confiável com estes dados:
- Owner/organization:
diegonerii - Repository name:
Dados-Abertos-Setor-Eletrico-Brasileiro - Workflow name:
publish-pypi.yml - Environment name:
pypi
Depois dessa configuração, o fluxo é:
- Atualize o campo
versionemsetup.cfg. - Faça commit e merge das alterações na branch principal.
- Crie uma Release no GitHub com uma tag no padrão
vX.Y.Z, por exemplov0.1.5. - Publique a Release.
- O GitHub Actions executa a action
Publicar no PyPI; se os testes passarem, o pacote é enviado automaticamente para o PyPI.
Para reduzir risco de publicação acidental, o workflow não possui disparo manual. Se quiser uma aprovação humana antes do envio, configure uma regra de proteção no ambiente
pypiem Settings > Environments no GitHub.
Se preferir usar token de API em vez de Trusted Publishing, configure um secret
PYPI_API_TOKENe adapte o passoPublicar no PyPIdo workflow para enviarpassword: ${{ secrets.PYPI_API_TOKEN }}.
Fontes oficiais
-
Portal de Dados Abertos da CCEE → Acessar Portal
-
Portal de Dados Abertos da ONS → Acessar Portal
-
Portal de Dados Abertos da ANEEL → Acessar Portal
-
CKAN API Reference (oficial) → Acessar Documentação (Inglês)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dados_abertos_setor_eletrico-0.1.6.tar.gz.
File metadata
- Download URL: dados_abertos_setor_eletrico-0.1.6.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea2baf17561ab9cdbc7ac5c6fd1ad3540181b32ff31bdd80c0d10025f7d29e6e
|
|
| MD5 |
257f3b696a709bb67673ffa5fc28f4ff
|
|
| BLAKE2b-256 |
4890ea63111c1476fd876e33547ad68fa94eb5edca12fea15e4afb4cdd208f04
|
Provenance
The following attestation bundles were made for dados_abertos_setor_eletrico-0.1.6.tar.gz:
Publisher:
publish-pypi.yml on diegonerii/Dados-Abertos-Setor-Eletrico-Brasileiro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dados_abertos_setor_eletrico-0.1.6.tar.gz -
Subject digest:
ea2baf17561ab9cdbc7ac5c6fd1ad3540181b32ff31bdd80c0d10025f7d29e6e - Sigstore transparency entry: 2278559517
- Sigstore integration time:
-
Permalink:
diegonerii/Dados-Abertos-Setor-Eletrico-Brasileiro@d1b139467f27e6c4402d39fb7abf35937bc929a3 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/diegonerii
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d1b139467f27e6c4402d39fb7abf35937bc929a3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file dados_abertos_setor_eletrico-0.1.6-py3-none-any.whl.
File metadata
- Download URL: dados_abertos_setor_eletrico-0.1.6-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a126d63bed5f11b7673675686a2c3ed96d00fa56d177b99a1fc17c7ac3a68051
|
|
| MD5 |
e1d0f843266284523e9508b64c820f4e
|
|
| BLAKE2b-256 |
231c37ce401681d24341aec75d236b61df10dff570fd918948edf1902dcda093
|
Provenance
The following attestation bundles were made for dados_abertos_setor_eletrico-0.1.6-py3-none-any.whl:
Publisher:
publish-pypi.yml on diegonerii/Dados-Abertos-Setor-Eletrico-Brasileiro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dados_abertos_setor_eletrico-0.1.6-py3-none-any.whl -
Subject digest:
a126d63bed5f11b7673675686a2c3ed96d00fa56d177b99a1fc17c7ac3a68051 - Sigstore transparency entry: 2278559628
- Sigstore integration time:
-
Permalink:
diegonerii/Dados-Abertos-Setor-Eletrico-Brasileiro@d1b139467f27e6c4402d39fb7abf35937bc929a3 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/diegonerii
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d1b139467f27e6c4402d39fb7abf35937bc929a3 -
Trigger Event:
release
-
Statement type: