Skip to content

Commit dc1583f

Browse files
wilsonfreitasclaude
andcommitted
docs: Translate README and examples to Portuguese
- Translate README.md: All sections including decision table ("Qual Módulo Devo Usar?") and FAQ ("Perguntas Frequentes") - Translate examples/sgs_time_series.py: docstring and all inline comments - Translate examples/currency_exchange.py: docstring and all inline comments - Translate examples/odata_query.py: docstring and all inline comments - Translate examples/async_usage.py: docstring and all inline comments All 4 example scripts now have full Portuguese documentation while maintaining code functionality. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 1436080 commit dc1583f

5 files changed

Lines changed: 170 additions & 187 deletions

File tree

README.md

Lines changed: 82 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ da API de dados abertos do [Banco Central do Brasil](https://www.bcb.gov.br).
99
![Lint workflow](https://github.com/wilsonfreitas/python-bcb/actions/workflows/lint.yml/badge.svg)
1010
![Sphinx workflow](https://github.com/wilsonfreitas/python-bcb/actions/workflows/sphinx.yml/badge.svg)
1111

12-
1312
O projeto de [Dados Abertos do Banco Central do Brasil](https://dadosabertos.bcb.gov.br/)
1413
disponibiliza diversas APIs provendo acesso direto a dados de:
1514

@@ -18,108 +17,96 @@ disponibiliza diversas APIs provendo acesso direto a dados de:
1817
* Índices de preços
1918
* Informações de Instituições Financeiras
2019
* Expectativas do Mercado (Expectativas do Boletim FOCUS)
21-
* E muito outros ...
20+
* E muito mais...
2221

23-
# Instalação
22+
## Instalação
2423

25-
**python-bcb** está disponível no [Python Package Index](https://pypi.org/project/python-bcb/) e pode ser instalado via `pip` usando.
24+
**python-bcb** está disponível no [Python Package Index](https://pypi.org/project/python-bcb/) e pode ser instalado via `pip`.
2625

2726
```shell
2827
pip install python-bcb
2928
```
3029

31-
# APIs
32-
33-
34-
## SGS
35-
Utiliza o webservice do SGS
36-
([Sistema Gerenciador de Séries Temporais](https://www3.bcb.gov.br/sgspub/))
37-
para obter os dados.
30+
## APIs
3831

39-
## Conversor de Moedas
32+
### SGS - Sistema Gerenciador de Séries Temporais
4033

41-
Implementado no módulo `currency`, um conjunto de funções que realiza webscraping
42-
no site do [Conversor de Moedas](https://www.bcb.gov.br/conversao)
43-
do Banco Central, possível obter séries temporais de frequência diária
44-
de diversas moedas.
34+
Utiliza o webservice do SGS ([Sistema Gerenciador de Séries Temporais](https://www3.bcb.gov.br/sgspub/)) para obter dados históricos de indicadores econômicos. Oferece a maior base de dados históricos com diversas séries temporais.
4535

46-
## Moedas OData
36+
### Conversor de Moedas
4737

48-
O Banco Central disponibiliza diversas informações em APIs que
49-
seguem o padrão [OData](https://odata.org).
50-
A classe `bcb.PTAX` implementa uma API OData que
51-
entrega os boletins diários de taxas de câmbio do Banco Central.
52-
Esta API entrega mais informações do que o que é obtido no
53-
`Conversor de Moedas`.
38+
Implementado no módulo `currency`, realiza webscraping no site do [Conversor de Moedas](https://www.bcb.gov.br/conversao) do Banco Central. Fornece séries temporais de frequência diária de taxas de câmbio (cotações de compra e venda).
5439

55-
## Expectativas
40+
### OData - APIs Estruturadas
5641

57-
A API de Expectativas de Mercado traz todas as estatísticas das variáveis
58-
macroeconômicas fornecidos por um conjuto de instituições do mercado
59-
financeiro.
60-
A classe `bcb.Expectativas` implementa essa interface no
61-
padrão OData.
42+
O Banco Central disponibiliza diversas informações em APIs que seguem o padrão [OData](https://odata.org). Inclui:
43+
- **PTAX**: Boletins diários de taxas de câmbio com dados institucionalmentedetalhados
44+
- **Expectativas**: Expectativas de mercado coletadas do Boletim FOCUS
45+
- **TaxaJuros**: Diversas taxas de juros (Selic, CDI, Cheque especial, etc.)
46+
- **MercadoImobiliario**: Dados de financiamento imobiliário
47+
- **IFDATA**: Informações de instituições financeiras
48+
- **SPI**: Sistema de Pagamentos Instantâneos
6249

63-
# Which Module Should I Use?
50+
## Qual Módulo Devo Usar?
6451

65-
Use this table to choose the right module for your use case:
52+
Use esta tabela para escolher o módulo certo para seu caso de uso:
6653

67-
| Use Case | Module | Key Features |
54+
| Caso de Uso | Módulo | Características Principais |
6855
|----------|--------|--------------|
69-
| Daily time series (inflation, interest rates) | `bcb.sgs` | Largest historical dataset, granular frequency control, multiple pre-defined series |
70-
| Daily foreign exchange rates (PTAX) | `bcb.currency` | Bid/ask spreads, quick implementation, daily frequency |
71-
| Market expectations (FOCUS survey) | `bcb.odata` (Expectativas) | Forward-looking economic indicators, consensus forecasts |
72-
| Interest rates (various types) | `bcb.odata` (TaxaJuros) | Detailed rate curves, real estate lending rates |
73-
| Real estate financing data | `bcb.odata` (MercadoImobiliario) | Mortgage originations, average rates, volumes |
74-
| Financial institution information | `bcb.odata` (IFDATA) | Bank balance sheet data, regulatory information |
75-
| Advanced data analysis with filters | `bcb.odata` (any service) | Chainable API, SQL-like filtering, sorting, selection |
76-
| Concurrent data fetching | Any module with `async_get()` | Non-blocking requests, improved performance for bulk operations |
56+
| Séries temporais diárias (inflação, taxas de juros) | `bcb.sgs` | Maior base histórica, controle granular de frequência, múltiplas séries pré-definidas |
57+
| Taxas de câmbio diárias (PTAX) | `bcb.currency` | Spreads de compra/venda, implementação rápida, frequência diária |
58+
| Expectativas de mercado (Boletim FOCUS) | `bcb.odata` (Expectativas) | Indicadores de expectativas, previsões de consenso |
59+
| Taxas de juros (diversos tipos) | `bcb.odata` (TaxaJuros) | Curvas detalhadas, taxas de financiamento imobiliário |
60+
| Dados de financiamento imobiliário | `bcb.odata` (MercadoImobiliario) | Originações, taxas médias, volumes |
61+
| Informações de instituições financeiras | `bcb.odata` (IFDATA) | Dados de balanço, informações regulatórias |
62+
| Análise de dados avançada com filtros | `bcb.odata` (qualquer serviço) | API encadeável, filtragem tipo SQL, ordenação, seleção |
63+
| Busca concorrente de dados | Qualquer módulo com `async_get()` | Requisições não-bloqueantes, melhor performance para operações em massa |
7764

78-
# Quick Start
65+
## Início Rápido
7966

80-
## Time Series with SGS
67+
### Séries Temporais com SGS
8168

8269
```python
8370
from bcb import sgs
8471

85-
# Fetch SELIC rate (code 1)
72+
# Buscar taxa Selic (código 1)
8673
df = sgs.get(1, start="2023-01-01", end="2024-12-31")
8774
```
8875

89-
## Exchange Rates with Currency
76+
### Taxas de Câmbio com Currency
9077

9178
```python
9279
from bcb import currency
9380

94-
# Fetch USD bid/ask prices
81+
# Buscar preços de compra/venda do USD
9582
usd = currency.get("USD", start="2023-01-01", end="2024-12-31")
9683
```
9784

98-
## Market Expectations with OData
85+
### Expectativas de Mercado com OData
9986

10087
```python
10188
from bcb import Expectativas
10289

10390
api = Expectativas()
10491
endpoint = api.get_endpoint("ExpectativasMercadoAnuais")
10592

106-
# Get IPCA forecasts
93+
# Obter previsões do IPCA
10794
df = endpoint.query().filter(endpoint.Indicador == "IPCA").limit(100).collect()
10895
```
10996

110-
# FAQ
97+
## Perguntas Frequentes
11198

112-
## Q: What's the difference between SGS and PTAX currency data?
113-
**A:** SGS contains mostly economic indicators. For currency exchange rates, use `bcb.currency` (PTAX data) for daily rates or `bcb.odata` PTAX service for detailed institutional data. The currency module is simpler for common use cases.
99+
### P: Qual é a diferença entre dados de moedas do SGS e PTAX?
100+
**R:** SGS contém principalmente indicadores econômicos. Para taxas de câmbio, use `bcb.currency` (dados PTAX) para cotações diárias ou o serviço `bcb.odata` PTAX para dados institucionais detalhados. O módulo currency é mais simples para casos comuns.
114101

115-
## Q: How far back does historical data go?
116-
**A:** It varies by series:
117-
- SGS: Most series go back to 1980s or 1990s (check specific code documentation)
118-
- Currency: Daily rates available from approximately 1980
119-
- OData services: Varies; check BCB documentation for specific endpoints
102+
### P: Quão longe no tempo os dados históricos vão?
103+
**R:** Varia por série:
104+
- SGS: Maioria das séries remontam aos anos 1980/1990 (verifique documentação específica do código)
105+
- Currency: Cotações diárias disponíveis desde aproximadamente 1980
106+
- Serviços OData: Varia; consulte documentação BCB para endpoints específicos
120107

121-
## Q: Can I fetch data asynchronously?
122-
**A:** Yes! All modules have `async_get()` or similar async methods. Use them for concurrent requests:
108+
### P: Posso buscar dados de forma assíncrona?
109+
**R:** Sim! Todos os módulos têm métodos `async_get()` ou similares. Use-os para requisições concorrentes:
123110
```python
124111
import asyncio
125112
from bcb import sgs
@@ -133,60 +120,60 @@ async def main():
133120
asyncio.run(main())
134121
```
135122

136-
## Q: How do I handle errors/missing data?
137-
**A:** The library raises specific exceptions:
138-
- `CurrencyNotFoundError`: Currency symbol not found
139-
- `SGSError`: SGS service error
140-
- `BCBRateLimitError`: Rate limit exceeded (HTTP 429)
141-
- `BCBAPIError`: Other API errors
123+
### P: Como trato erros e dados faltantes?
124+
**R:** A biblioteca lança exceções específicas:
125+
- `CurrencyNotFoundError`: Símbolo de moeda não encontrado
126+
- `SGSError`: Erro do serviço SGS
127+
- `BCBRateLimitError`: Limite de requisições excedido (HTTP 429)
128+
- `BCBAPIError`: Outros erros de API
142129

143130
```python
144131
from bcb import sgs
145132
from bcb.exceptions import SGSError, BCBRateLimitError
146133

147134
try:
148-
df = sgs.get(99999) # Invalid code
135+
df = sgs.get(99999) # Código inválido
149136
except SGSError as e:
150-
print(f"Data error: {e}")
137+
print(f"Erro de dados: {e}")
151138
except BCBRateLimitError:
152-
print("Rate limited - please try again later")
139+
print("Limite de requisições excedido - tente novamente mais tarde")
153140
```
154141

155-
## Q: How do I enable logging to debug requests?
156-
**A:** The library uses Python's standard logging module:
142+
### P: Como habilito logging para depurar requisições?
143+
**R:** A biblioteca usa o módulo logging padrão do Python:
157144
```python
158145
import logging
159146

160147
logging.basicConfig(level=logging.DEBUG)
161148
logger = logging.getLogger("bcb")
162149
logger.setLevel(logging.DEBUG)
163150

164-
# Now all HTTP requests/responses will be logged
151+
# Agora todas as requisições/respostas HTTP serão registradas
165152
```
166153

167-
## Q: Is there caching to avoid redundant requests?
168-
**A:** Yes:
169-
- `bcb.currency`: Automatic in-memory cache of currency lists
170-
- `bcb.odata`: OData metadata cached per service URL
171-
- Call `currency.clear_cache()` to reset if data changes
172-
173-
## Q: Can I use this in a long-running application?
174-
**A:** Yes, but be mindful of:
175-
- Rate limits: BCB APIs may have limits; implement backoff if needed
176-
- Caching: Currency cache persists in memory; clear it if data updates matter
177-
- Connection pooling: Uses httpx with connection pooling by default
178-
- Async API: Use async methods for truly non-blocking behavior
179-
180-
## Q: How do I contribute or report issues?
181-
**A:** Visit the [GitHub repository](https://github.com/wilsonfreitas/python-bcb) to:
182-
- Report bugs
183-
- Request features
184-
- Submit pull requests
185-
- View documentation
186-
187-
## Q: Where can I find more detailed documentation?
188-
**A:**
189-
- [API Documentation](https://bcb-python.readthedocs.io/)
190-
- [Examples Directory](./examples/)
191-
- Inline docstrings: `help(bcb.sgs.get)`, `help(bcb.currency.get)`, etc.
192-
- [BCB Open Data Portal](https://dadosabertos.bcb.gov.br/)
154+
### P: Existe cache para evitar requisições redundantes?
155+
**R:** Sim:
156+
- `bcb.currency`: Cache em memória automático de listas de moedas
157+
- `bcb.odata`: Metadados OData em cache por URL de serviço
158+
- Chame `currency.clear_cache()` para resetar se dados mudarem
159+
160+
### P: Posso usar isso em uma aplicação de longa duração?
161+
**R:** Sim, mas tenha cuidado com:
162+
- Limites de requisições: APIs BCB podem ter limites; implemente backoff se necessário
163+
- Cache: Cache de moedas persiste em memória; limpe se atualizações de dados importarem
164+
- Pool de conexões: Usa httpx com connection pooling por padrão
165+
- API Assíncrona: Use métodos async para comportamento verdadeiramente não-bloqueante
166+
167+
### P: Como contribuo ou reporto problemas?
168+
**R:** Visite o [repositório GitHub](https://github.com/wilsonfreitas/python-bcb) para:
169+
- Reportar bugs
170+
- Solicitar features
171+
- Enviar pull requests
172+
- Ver documentação
173+
174+
### P: Onde encontro documentação mais detalhada?
175+
**R:**
176+
- [Documentação de API](https://bcb-python.readthedocs.io/)
177+
- [Diretório de Exemplos](./examples/)
178+
- Docstrings inline: `help(bcb.sgs.get)`, `help(bcb.currency.get)`, etc.
179+
- [Portal de Dados Abertos BCB](https://dadosabertos.bcb.gov.br/)

examples/async_usage.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"""
2-
Example: Using Async APIs
2+
Exemplo: Usando APIs Assíncronas
33
4-
This example demonstrates how to use the async versions of the APIs
5-
for concurrent data fetching (useful for fetching multiple series).
4+
Este exemplo demonstra como usar as versões assíncronas das APIs
5+
para busca de dados concorrente (útil para buscar múltiplas séries).
66
"""
77

88
import asyncio
@@ -12,76 +12,76 @@
1212

1313

1414
async def fetch_multiple_sgs_series():
15-
"""Fetch multiple SGS time series concurrently."""
16-
print("Example 1: Fetching multiple SGS series concurrently")
15+
"""Buscar múltiplas séries temporais do SGS concorrentemente."""
16+
print("Exemplo 1: Buscando múltiplas séries do SGS concorrentemente")
1717

18-
# Fetch SELIC, CDI, and IPCA concurrently
18+
# Buscar SELIC, CDI e IPCA concorrentemente
1919
codes = [1, 12, 433] # SELIC, CDI, IPCA
2020

2121
df = await sgs.async_get(codes, start="2023-01-01", end="2024-12-31", multi=True)
22-
print("Concurrent SGS fetch completed")
22+
print("Busca concorrente do SGS concluída")
2323
print(df.head())
2424
print()
2525

2626

2727
async def fetch_multiple_currencies():
28-
"""Fetch currency rates concurrently."""
29-
print("Example 2: Fetching currency rates concurrently")
28+
"""Buscar taxas de câmbio concorrentemente."""
29+
print("Exemplo 2: Buscando taxas de câmbio concorrentemente")
3030

31-
# Fetch USD rate (note: you'd need to implement multi-symbol async
32-
# for this to truly be concurrent for different symbols)
31+
# Buscar taxa do USD (nota: você precisaria implementar async multi-símbolo
32+
# para isso ser verdadeiramente concorrente para diferentes símbolos)
3333
df = await currency.async_get("USD", start="2024-01-01", end="2024-12-31")
34-
print("Async currency fetch completed")
34+
print("Busca de câmbio assíncrona concluída")
3535
print(df.head())
3636
print()
3737

3838

3939
async def fetch_odata_async():
40-
"""Fetch OData results asynchronously."""
41-
print("Example 3: Fetching OData results asynchronously")
40+
"""Buscar resultados OData de forma assíncrona."""
41+
print("Exemplo 3: Buscando resultados OData de forma assíncrona")
4242

4343
api = Expectativas()
4444
endpoint = api.get_endpoint("ExpectativasMercadoAnuais")
4545

46-
# Build and execute query asynchronously
46+
# Construir e executar consulta de forma assíncrona
4747
query = endpoint.query().filter(endpoint.Indicador == "IPCA").limit(5)
4848
df = await query.async_collect()
49-
print("Async OData fetch completed")
49+
print("Busca OData assíncrona concluída")
5050
print(df)
5151
print()
5252

5353

5454
async def concurrent_operations():
55-
"""Execute multiple async operations concurrently."""
56-
print("Example 4: Multiple concurrent operations")
55+
"""Executar múltiplas operações assíncronas concorrentemente."""
56+
print("Exemplo 4: Múltiplas operações concorrentes")
5757

58-
# Create tasks for concurrent execution
58+
# Criar tarefas para execução concorrente
5959
tasks = [
6060
sgs.async_get(1, start="2024-01-01", end="2024-12-31"), # SELIC
6161
sgs.async_get(11, start="2024-01-01", end="2024-12-31"), # CDI
6262
sgs.async_get(433, start="2024-01-01", end="2024-12-31"), # IPCA
6363
]
6464

65-
# Wait for all tasks to complete
65+
# Aguardar conclusão de todas as tarefas
6666
results = await asyncio.gather(*tasks)
67-
print(f"Fetched {len(results)} concurrent series")
68-
print("First series sample:")
67+
print(f"Buscadas {len(results)} séries concorrentes")
68+
print("Amostra da primeira série:")
6969
print(results[0].head())
7070
print()
7171

7272

7373
async def main():
74-
"""Run all async examples."""
74+
"""Executar todos os exemplos assíncronos."""
7575
try:
7676
await fetch_multiple_sgs_series()
7777
await fetch_multiple_currencies()
7878
await fetch_odata_async()
7979
await concurrent_operations()
8080
except Exception as e:
81-
print(f"Error: {type(e).__name__}: {e}")
81+
print(f"Erro: {type(e).__name__}: {e}")
8282

8383

8484
if __name__ == "__main__":
85-
# Run the async examples
86-
# Note: This requires Python 3.7+ with asyncio
85+
# Executar os exemplos assíncronos
86+
# Nota: Isso requer Python 3.7+ com asyncio
8787
asyncio.run(main())

0 commit comments

Comments
 (0)