Skip to content

Commit 8a09d1b

Browse files
committed
Docs updated
1 parent 370f120 commit 8a09d1b

4 files changed

Lines changed: 117 additions & 18 deletions

File tree

-12.1 KB
Loading

docs/odata.rst

Lines changed: 96 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ o nome do *endpoint*.
4242

4343
.. ipython:: python
4444
45-
pix.describe('PixLiquidadosAtual')
45+
pix.describe("PixLiquidadosAtual")
4646
4747
Vemos que o *endpoint* ``PixLiquidadosAtual`` retorna 4 propriedades:
4848

@@ -51,15 +51,19 @@ Vemos que o *endpoint* ``PixLiquidadosAtual`` retorna 4 propriedades:
5151
- ``Total<float>``: financeiro das operações realizdas na data
5252
- ``Media<float>``: média das operações realizadas na data
5353

54-
As propriedades são formatadas como colunas em um DataFrame.
54+
As propriedades são atributos de objetos da classe :py:class:`bcb.odata.api.Endpoint`, retornados pelo método
55+
``get_endpoint``.
5556

56-
Para acessar os dados deste *endpoint* é necessário obter um objeto com o *endpoint* e executar uma ``query`` nesse
57-
objeto.
58-
O método ``get_endpoint`` retorna um objeto da classe :py:class:`bcb.odata.api.Endpoint`.
57+
.. ipython:: python
58+
59+
ep = pix.get_endpoint("PixLiquidadosAtual")
60+
ep.Data
61+
ep.Media
62+
63+
Para acessar os dados deste *endpoint* é necessário executar uma ``query`` nesse objeto.
5964

6065
.. ipython:: python
6166
62-
ep = pix.get_endpoint('PixLiquidadosAtual')
6367
ep.query().limit(10).collect()
6468
6569
Ao realizar a ``query`` no *endpoint* limitamos a consulta a retornar 10 elementos, apenas para visualizar os dados
@@ -106,7 +110,7 @@ Sigamos com um exemplo:
106110
107111
select Data, Media
108112
from PIX
109-
where Data >= '2023-01-01'
113+
where Data >= "2023-01-01"
110114
order by Media desc
111115
limit 10
112116
@@ -130,6 +134,80 @@ Na última linha executo o método ``collect`` que executa a consulta e retorna
130134
.limit(10)
131135
.collect())
132136
137+
Visualizando a Consulta
138+
^^^^^^^^^^^^^^^^^^^^^^^
139+
140+
Algumas consultas podem ficar bastante complicadas, dependendo da quantidade de elementos que compõem a consulta.
141+
Para ajudar na construção e na depuração da *query*, criamos o método ``show`` imprime a query na tela,
142+
mas não a executa.
143+
144+
.. ipython:: python
145+
146+
(ep.query()
147+
.select(ep.Data, ep.Media)
148+
.filter(ep.Data >= datetime(2023, 1, 1))
149+
.orderby(ep.Media.desc())
150+
.limit(10)
151+
.show())
152+
153+
Tipos de *endpoints*
154+
^^^^^^^^^^^^^^^^^^^^
155+
156+
Como foi visto anteriormente, a API do PIX (``SPI``) possui 4 ``EntitySets`` e estes são os *endpoints* dessa API.
157+
Entretanto, há APIs que têm um outro tipo de *endpoint*, os ``FunctionImports``.
158+
A API do PTAX, por exemplo
159+
160+
.. ipython:: python
161+
162+
from bcb import PTAX
163+
164+
ptax = PTAX()
165+
ptax.describe()
166+
167+
Esta API tem 1 ``EntitySet`` e 6 ``FunctionImports`` e também utilizamos o método ``describe`` para visualizar a
168+
estrutura destes *endpoints*.
169+
Vamos ver o *endpoint* ``CotacaoMoedaPeriodo``
170+
171+
.. ipython:: python
172+
173+
ptax.describe("CotacaoMoedaPeriodo")
174+
175+
A principal diferença entre os ``FunctionImports`` e ``EntitySets`` é que estes possuem parâmetros.
176+
Neste exemplo o *endpoint* tem 3 parâmetros:
177+
178+
- codigoMoeda <str>
179+
- dataInicial <str>
180+
- dataFinalCotacao <str>
181+
182+
Para conhecer como os parâmetros devem ser definidos é necessário ler a documentação da API.
183+
Eventualmente a definição dos parâmetros não é óbvia.
184+
Por exemplo, neste *endpoint*, os parâmetros ``dataInicialCotacao`` e ``dataFinalCotacao`` são formatados com
185+
mês-dia-ano (formato americano), ao invés de ano-mês-dia (formato ISO), e como o tipo dos parâmetros é ``str``,
186+
uma formatação incorreta não retorna um erro, apenas retorna um DataFrame vazio.
187+
188+
Vamos realizar uma consulta para obter as cotações de dólar americano entre 2022-01-01 e 2022-01-05.
189+
190+
.. ipython:: python
191+
192+
ep = ptax.get_endpoint("CotacaoMoedaPeriodo")
193+
(ep.query()
194+
.parameters(moeda="USD",
195+
dataInicial="1/1/2022",
196+
dataFinalCotacao="1/5/2022")
197+
.collect())
198+
199+
Note que a primeira data é 2022-01-03, pois os primeiros dias do ano não são úteis.
200+
Podemos aplicar filtros nessa consulta utilizando o método ``filter``, da mesma forma que realizamos na consulta ao
201+
``EntitySet``.
202+
203+
.. ipython:: python
204+
205+
(ep.query()
206+
.parameters(moeda="USD",
207+
dataInicial="1/1/2022",
208+
dataFinalCotacao="1/5/2022")
209+
.filter(ep.tipoBoletim == "Fechamento")
210+
.collect())
133211
134212
Aplicações
135213
----------
@@ -170,7 +248,7 @@ Inspecionando o *endpoint* ``ExpectativaMercadoMensais``
170248

171249
.. ipython:: python
172250
173-
em.describe('ExpectativaMercadoMensais')
251+
em.describe("ExpectativaMercadoMensais")
174252
175253
176254
O *endpoint* ``ExpectativaMercadoMensais`` retorna um conjunto de dados
@@ -203,7 +281,7 @@ Vamos utilizar o *endpoint* ``ExpectativaMercadoMensais`` como exemplo.
203281

204282
.. ipython:: python
205283
206-
ep = em.get_endpoint('ExpectativasMercadoTop5Anuais')
284+
ep = em.get_endpoint("ExpectativasMercadoTop5Anuais")
207285
208286
Tendo o objeto com o *endpoint* basta executar a consulta com ``query`` e
209287
chamando ``collect`` ao fim para obter os dados.
@@ -232,7 +310,7 @@ Uma consulta mais elaborada com ``filter``.
232310

233311
.. ipython:: python
234312
235-
ep.query().filter(ep.Indicador == 'IPCA').limit(10).collect()
313+
ep.query().filter(ep.Indicador == "IPCA").limit(10).collect()
236314
237315
Note que o *endpoint* tem como atributo ``Indicador`` que é uma
238316
das colunas retornadas.
@@ -245,9 +323,9 @@ um conjunto de colunas.
245323
.. ipython:: python
246324
247325
(ep.query()
248-
.filter(ep.Indicador == 'IPCA', ep.DataReferencia >= 2023)
249-
.filter(ep.Data >= '2022-01-01')
250-
.filter(ep.tipoCalculo == 'C')
326+
.filter(ep.Indicador == "IPCA", ep.DataReferencia >= 2023)
327+
.filter(ep.Data >= "2022-01-01")
328+
.filter(ep.tipoCalculo == "C")
251329
.select(ep.Data, ep.DataReferencia, ep.Media, ep.Mediana)
252330
.orderby(ep.Data.desc(), ep.DataReferencia.asc())
253331
.limit(10)
@@ -277,7 +355,7 @@ Executando ``describe`` na função ``CotacaoMoedaPeriodo`` temos:
277355

278356
.. ipython:: python
279357
280-
ptax.describe('CotacaoMoedaPeriodo')
358+
ptax.describe("CotacaoMoedaPeriodo")
281359
282360
Vemos que a função recebe três parâmetros: ``moeda``, ``dataInicial``,
283361
``dataFinalCotacao``.
@@ -286,10 +364,10 @@ Estes parâmetros são passados para a consulta utilizando o método
286364

287365
.. ipython:: python
288366
289-
ep = ptax.get_endpoint('CotacaoMoedaPeriodo')
367+
ep = ptax.get_endpoint("CotacaoMoedaPeriodo")
290368
(ep.query()
291369
.limit(10)
292-
.parameters(moeda='USD', dataInicial='01/01/2022', dataFinalCotacao='01/10/2022')
370+
.parameters(moeda="USD", dataInicial="01/01/2022", dataFinalCotacao="01/10/2022")
293371
.collect())
294372
295373
@@ -300,8 +378,8 @@ Podemos filtrar apenas pelos dados de abertura.
300378
301379
(ep.query()
302380
.limit(10)
303-
.filter(ep.tipoBoletim == 'Abertura')
304-
.parameters(moeda='USD', dataInicial='01/01/2022', dataFinalCotacao='01/10/2022')
381+
.filter(ep.tipoBoletim == "Abertura")
382+
.parameters(moeda="USD", dataInicial="01/01/2022", dataFinalCotacao="01/10/2022")
305383
.collect())
306384
307385

notebooks/odata taxas de juros cheque especial.ipynb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2616,6 +2616,26 @@
26162616
"ep.query().select(ep.Data, ep.Media).filter(ep.Data >= datetime(2023, 1, 1)).orderby(ep.Media.desc()).limit(10).collect()"
26172617
]
26182618
},
2619+
{
2620+
"cell_type": "code",
2621+
"execution_count": 48,
2622+
"metadata": {},
2623+
"outputs": [
2624+
{
2625+
"data": {
2626+
"text/plain": [
2627+
"<Property Data>"
2628+
]
2629+
},
2630+
"execution_count": 48,
2631+
"metadata": {},
2632+
"output_type": "execute_result"
2633+
}
2634+
],
2635+
"source": [
2636+
"ep.Data"
2637+
]
2638+
},
26192639
{
26202640
"cell_type": "code",
26212641
"execution_count": 53,

notebooks/pix.odata

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
https://olinda.bcb.gov.br/olinda/servico/SPI/versao/v1/odata/PixLiquidadosAtual?$filter=Data gt 2023-01-01

0 commit comments

Comments
 (0)