Acesso simplificado aos dados do Banco Central do Brasil
Project description
BacenData
Acesso simplificado aos dados do Banco Central do Brasil.
Resolve automaticamente a limitacao de 10 anos por consulta imposta pelo BACEN em marco/2025, com paginacao transparente, retry inteligente e cache local.
Instalacao
pip install bacendata
Uso rapido
from bacendata import sgs
# Buscar a taxa Selic (por codigo ou nome)
selic = sgs.get(11, start="2020-01-01")
selic = sgs.get("selic", start="2020-01-01")
# Buscar multiplas series de uma vez
df = sgs.get({"Selic": 11, "IPCA": 433, "Dolar": 1}, start="2010-01-01")
# Ultimos N valores
ipca = sgs.get(433, last=12)
# Buscar mais de 10 anos (paginacao automatica!)
selic_longa = sgs.get(11, start="2000-01-01", end="2024-12-31")
Funcionalidades
- Paginacao automatica — consultas >10 anos sao divididas em chunks e feitas em paralelo
- Multiplas series — busque varias series de uma vez com
dict - Catalogo integrado — use nomes em vez de codigos:
sgs.get("selic") - Cache local — evite chamadas repetidas a API do BACEN
- Retry com backoff — trata automaticamente erros 429, 500 e timeouts
- Formato flexivel — aceita datas ISO (
2024-01-01), brasileiro (01/01/2024) e objetosdate - Retorno pandas — dados prontos para analise como
DataFrame - Async nativo — interface sync (
get) e async (aget) para FastAPI
Catalogo de series
Voce pode usar nomes em vez de codigos numericos:
sgs.get("selic") # Taxa Selic diaria (codigo 11)
sgs.get("ipca") # IPCA mensal (codigo 433)
sgs.get("dolar") # Dolar PTAX compra (codigo 1)
sgs.get("euro") # Euro compra (codigo 10813)
sgs.get("focus_ipca") # Expectativa IPCA 12m (codigo 27574)
sgs.get("focus_selic") # Expectativa Selic (codigo 27575)
sgs.get("inadimplencia_pf") # Inadimplencia PF (codigo 21112)
Para listar todas as series disponiveis:
from bacendata.wrapper.catalogo import listar
for serie in listar():
print(f"{serie.codigo:>6} | {serie.nome} ({serie.periodicidade})")
Cache local
Ative o cache para evitar chamadas repetidas:
from bacendata import sgs
sgs.cache.ativar() # Salva em ~/.bacendata/cache.db
selic = sgs.get(11, start="2020-01-01") # Primeira vez: busca na API
selic = sgs.get(11, start="2020-01-01") # Segunda vez: le do cache
# Caminho customizado
sgs.cache.ativar("/tmp/meu_cache.db")
# Limpar cache
sgs.cache.limpar()
# Desativar
sgs.cache.desativar()
TTL padrao por periodicidade:
- Series diarias: 1 hora
- Series semanais: 6 horas
- Series mensais: 24 horas
Metadados
info = sgs.metadata(433)
# {'codigo': 433, 'nome': 'IPCA - Variacao mensal', 'periodicidade': 'Mensal', ...}
Interface async
Para uso em FastAPI ou outros frameworks async:
import asyncio
from bacendata import sgs
async def main():
df = await sgs.aget(11, start="2020-01-01")
print(df)
asyncio.run(main())
Series disponiveis no catalogo
| Codigo | Nome | Periodicidade | Aliases |
|---|---|---|---|
| 1 | Dolar (compra) | Diaria | dolar, usd, ptax, cambio |
| 11 | Selic diaria | Diaria | selic, selic_diaria |
| 12 | Selic acumulada no mes | Mensal | selic_mensal, selic_acumulada |
| 433 | IPCA | Mensal | ipca, inflacao |
| 4189 | Juros PF | Mensal | juros_pf, taxa_pf |
| 4390 | Selic acumulada anualizada | Mensal | selic_anual, selic_anualizada |
| 7326 | Reservas Internacionais | Diaria | reservas |
| 10813 | Euro (compra) | Diaria | euro, eur |
| 20542 | Saldo Credito Livre | Mensal | saldo_credito, carteira_credito |
| 21082 | Inadimplencia PJ | Mensal | inadimplencia_pj, default_pj |
| 21112 | Inadimplencia PF | Mensal | inadimplencia_pf, default_pf |
| 25434 | Juros Credito Livre | Mensal | juros_credito, credito_livre |
| 27574 | Expectativa IPCA 12m | Semanal | focus_ipca, expectativa_ipca |
| 27575 | Expectativa Selic | Semanal | focus_selic, expectativa_selic |
Qualquer codigo SGS funciona mesmo fora do catalogo: sgs.get(99999, last=10).
Tratamento de erros
from bacendata.wrapper.exceptions import (
SerieNaoEncontrada,
BacenAPIError,
BacenTimeoutError,
ParametrosInvalidos,
)
try:
df = sgs.get(99999, start="2024-01-01")
except SerieNaoEncontrada:
print("Serie nao existe")
except BacenTimeoutError:
print("API do BACEN nao respondeu")
except BacenAPIError as e:
print(f"Erro {e.status_code}: {e.mensagem}")
Desenvolvimento
git clone https://github.com/fmaignacio/bacendata.git
cd bacendata
python -m venv .venv
source .venv/bin/activate # Linux/Mac
pip install -e ".[dev]"
# Testes
python -m pytest tests/ -v --cov=src/bacendata
# Lint
ruff check src/ tests/
black src/ tests/
Licenca
MIT
Project details
Release history Release notifications | RSS feed
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 bacendata-0.1.0.tar.gz.
File metadata
- Download URL: bacendata-0.1.0.tar.gz
- Upload date:
- Size: 19.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0279d89ae5167eee2334d357b2a57f8174006928100d102f12b782618638472
|
|
| MD5 |
f2020dca034e6c4d177da760422063e0
|
|
| BLAKE2b-256 |
2bd9a59f4b12c646ea73982b6dedfb72f8276cfd9490c8f2b90a1d403898ccb3
|
File details
Details for the file bacendata-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bacendata-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f195b5a3659ab60c13e611f67c64afa43457b2d612c13f4f5d3b13a852df6b3
|
|
| MD5 |
49a67bde007e6916a9a34a128a8962da
|
|
| BLAKE2b-256 |
c73322cfb3bff64446f6672a4553bdfd0fb50fe5656c4b3657ffd9832c5127f6
|