Tag

dados do banco central Archives - Análise Macro

Coletando dados do Banco Central com Python

By | Indicadores

O ideal é que todo o processo da análise de dados econômicos e financeiros deve ser facilitado em todas as etapas, principalmente as iniciais, que constam como a coleta e tratamento de dados. Por sorte, existem pacotes e funções prontas que facilitam todo esse processo para os usuários, como é o caso do python-bcb, que nos ajuda a coletar dados do Banco Central. Neste post de hoje, mostramos como é fácil retirar esses dados.

O python-bcb é uma interface em Python estruturada para obter informações da API de dados abertos do Banco Central do Brasil. Criado por Wilson Freitas, professor dos cursos de Renda Fixa usando o R e Construindo um Banco de Dados Financeiro Automatizado com R aqui da Análise Macro.

A interface oferece diversas APIs que permitem acessar os dados de vários bancos de dados do BACEN. Sendo eles:

  •   Sistema Gerenciador de Séries Temporais (SGS);
  •   Conversor de moedas;
  •   Expectativas divulgadas pelo boletim FOCUS;
  •   Integração com o OData, fornecendo dados de Expectativas, Moedas, Taxas de Juros, IFdata e Mercado Imobiliário.

Sistema Gerenciador de Séries Temporais

O SGS consolida e divulga diversas séries econômico-financeiros mantidas pelo Banco Central e também por outras instituições. É nesse gerenciador que podemos encontrar as séries de diversos temas: Atividade Econômica, Preços, Mercado de Trabalho, Setor Externo, Finanças Públicas, Juros e etc.

São ofertadas as séries em diferentes periodicidades e formatos, portanto, somando todos os fatores, se torna um sistema ideal para coletar séries, ainda mais quando o próprio BCB oferece APIs que facilitam a extração.

Para buscar uma série do SGS com o python-bcb, seguiremos os seguintes passos:


Como exemplo, utilizamos a série da Taxa de juros - Meta Selic definida pelo Copom %a.a, identificada pelo código 432 no SGS. Vemos abaixo como é possível utilizar a função sgs.get().

Caso haja a necessidade em importar mais de uma série, também é possível. Abaixo, importamos as séries do IPCA Mensal em Var. % mensal e do IGP-M Var. % mensal.

Conversor de Moedas

O Conversor de Moedas realiza o Web Scrapping do sistema de mesmo nome do Banco Central. Permite que seja importado as cotações diárias de diversas moedas diante do real. Para saber as moedas que são possíveis de importar, e consequentemente seus respectivos símbolos, utiliza-se a função currency.get_currency_list().

A função retorna um data frame contendo as colunas com cada uma contendo os códigos numéricos da moeda, o nome completo da moeda, o símbolo de cada moeda, e o código do país, o nome do país, o tipo e a data de exclusão.

Após escolhido as moedas de interesse com base na lista do conversor, utiliza-se a função currency.get() para obter as moedas diante do real com base no seus respectivos símbolos e período.

Expectativas FOCUS

O python-bcb oferece a API Expectativas como forma de obter os dados divulgados pelo boletim FOCUS. Essa integração permite obter as expectativas de mercado de cerca de 130 instituições do mercado financeiros que participam do Sistema de Expectativa de Mercado. Para obter os dados, primeiro devemos instanciar com a classe bcb.Expectativas e obter as informações dos endpoints com o método bcb.Expectativas.describe()

Veja que é retornado os EntitySets, que são os endpoints do qual podemos importar os dados das Expectativas de Mercado, como exemplos, iremos buscar as Expectativas de Mercado Anuais.


É retornado todas as informações do endpoint escolhido, com suas respectivas colunas. Isto é útil devido ao fato de caso haja a necessidade de importações do dados já filtrados, desta forma, é possível saber quais colunas poderemos realizar os filtros.

Com todas as informações sobre o endpoint em mãos, iremos de fato importa-las com o python-bcb, utilizando a função expec.get_endpoint(), especificando o endpoint de interesse. Assim que conectamos com o endpoint, realizamos o query com  o método query(). No exemplo abaixo, realizamos esses dois procedimentos em conjunto com uma filtragem para o indicador da Selic.


OData

O OData do Banco Central permite acesso a mais dados do sistema, incluindo o API do Expectativas (bcb.Expectativas), também é possível retirar dados da PTAX (bcb.PTAX), que permite acesso a cotações de taxas de câmbio, Taxa de Juros dos bancos (bcb.TaxaJuros), dados de Instituições Financeiras (bcb.IFDATA) e dados do Mercado Imobiliário (bcb.MercadoImobiliario).

O processo de retirada de dados do OData segue o mesmo que realizamos com o bcb.Expectativas acima, sendo possível realizar com as outras APIs. Primeiro colhemos as informações da API e seus respectivos endpoints com describe(), e após, colhemos as informações de interesse com get_endpoint() e query(). Vemos um exemplo abaixo com a API TaxadeJuros.

A

No exemplo acima retiramos os dados das taxas de juros de diversas instituições bancárias do Brasil. Veja que limitamos o query para apenas 10 observações, apenas como exemplo para que não haja demoras na importação.

Quer saber mais sobre Python?

Veja nossos cursos de Python aplicado para as áreas de Análise de dados e Economia. R e Python para Economistas, Estatística usando R e Python  e  Econometria usando R e Python.

Juro Real vs. Juro Neutro

By | mercado financeiro

Nosso objetivo no Curso Mercado Financeiro e Gestão de Portfólios é o de proporcionar tanto uma introdução dos alunos ao mercado financeiro quanto o de munir os mesmos com ferramentas analíticas para gestão de portfólios e tratamento/visualização de dados. Para ilustrar, vamos ver como é possível construir o juro real e o juro neutro a partir de bases de dados disponíveis na internet e visualizar os mesmos com o pacote ggplot2 do R.

O juro real e o juro neutro têm importância fundamental para dizer a direção da política monetária operacionalizada pelo Banco Central. Em termos contemporâneos, inspirados no trabalho pioneiro de Knut Wicksell, dizemos que a política monetária é expansionista ou contracionista se, respectivamente, o juro real estiver abaixo ou acima da taxa de juros neutra. Taxa de juros neutra, por outro lado, é aquela consistente com a estabilidade da taxa de inflação ao longo do tempo. Variável não observável, que deve ser estimada e que depende de diversos fatores. Nesses termos, cabe ao Banco Central manter a taxa de juros real próxima à taxa de juros neutra, se o objetivo é controlar a inflação.

Pela equação de Fisher, sabemos que

(1)   \begin{align*} i = r + \pi \end{align*}

Onde, i é a taxa de juros nominal, r é a taxa de juros real e \pi é a taxa de inflação. Rearranjando os termos, definimos o juro real ex-post como:

(2)   \begin{align*} r = i - \pi \end{align*}

Para tornar a análise ex-ante, devemos substituir \pi pela expectativa de inflação, isto é, \pi^{e}, de modo que o juro real ex-ante será dado por:

(3)   \begin{align*} r = i - \pi^{e} \end{align*}

Em outras palavras, o juro real ex-ante será dado, de forma aproximada, pela diferença entre o juro nominal e a expectativa de inflação. Essa é, em geral, a forma como o mercado calcula a taxa de juros real no país. Em termos exatos, o cálculo se dá pela fórmula:

(4)   \begin{align*} (1+r_{t+1}) = (1+i_t)/(1+E_t\pi_{t+1}) \end{align*}

Na sequência, nós iremos construir o juro real e o juro neutro, com dados disponíveis na internet e colocar ambas as variáveis em um mesmo gráfico, de modo a visualizar a direção da política monetária sobre o ciclo econômico.

O script de R começa com alguns pacotes sendo carregados.


library(GetTDData)
library(readr)
library(xts)
library(forecast)
library(scales)
library(ggplot2)
library(mFilter)
library(grid)
library(png)
library(rbcb)
library(Quandl)

Na sequência, nós iremos pegar três séries: a taxa Selic, a expectativa de inflação e a taxa de juros associada à NTN-B 2050.


## Taxa de Juros
selic = Quandl('BCB/1178', order='asc', start_date='2012-06-01')

## Expectativa de Inflação 12 meses à frente
expinf = get_twelve_months_inflation_expectations('IPCA',
start_date = '2012-06-01')

## Taxa de Juros da NTN-B 2050
download.TD.data('NTN-B')
ntnb50 <- read.TD.files(dl.folder = 'TD Files',
maturity = '150850')

O juro real é então criado como abaixo.


selic = xts(selic$Value, order.by = selic$Date)
expinf12 = xts(expinf$mean[expinf$smoothed=='S'],
order.by = expinf$date[expinf$smoothed=='S'])
dataex = cbind(selic, expinf12)
dataex = dataex[complete.cases(dataex),]
juro_ex = (((1+(dataex[,1]/100))/(1+(dataex[,2]/100)))-1)*100

Na sequência, nós comparamos o juro real com o juro neutro extraído da taxa de juros associada à NTN-B.


juro_ntnb = xts(ntnb50$yield.bid*100, order.by = ntnb50$ref.date)
df = cbind(juro_ex, juro_ntnb)
df = df[complete.cases(df),]
df = data.frame(time=index(df), juroreal=df[,1],
ntnb=df[,2])

hp = hpfilter(df$juro_ntnb, fre=10000, type='lambda')
dfneutro = hptrend

Por fim, geramos um gráfico que compara as duas séries.

________________

(*) Isso e muito mais você irá aprender no nosso Novo Curso Mercado Financeiro e Gestão de Portfólios.

Como anda o juro neutro no Brasil?

By | Comentário de Conjuntura

No mês de dezembro, iremos lançar uma nova versão do Clube do Código. O projeto de compartilhamento de códigos da Análise Macro vai avançar para uma versão 2.0, que incluirá a existência de uma comunidade no Telegram/Whatsapp, de modo a reunir os membros do Novo Clube, compartilhando com eles todos os códigos dos nossos posts feitos aqui no Blog, exercícios de análise de dados de maior fôlego, bem como tirar dúvidas sobre todos os nossos projetos e Cursos Aplicados de R.

Para ilustrar o que vamos compartilhar lá nesse novo ambiente, vou publicar aqui nos próximos dias alguns dos nossos exercícios completos de análise de dados. Esses exercícios fazem parte do repositório atual do Clube, que irá migrar para o novo projeto. Além de todos os exercícios existentes, vamos adicionar novos exercícios e códigos toda semana, mantendo os membros atualizados sobre o que há de mais avançado em análise de dados, econometria, machine learning, forecasting e R.

Para ilustrar o que vamos fazer lá no Clube AM, nesse Comentário de Conjuntura vou atualizar um exercício que fizemos para construir uma proxy para o juro neutro da economia brasileira. O exercício foi baseado no Relatório Trimestral de Inflação de dezembro de 2019, onde o pessoal do Banco Central apresentou uma proxy para a taxa neutra de juros considerando as taxas de inflação e de juros três anos à frente disponibilizadas na pesquisa Focus.

A despeito da simplicidade do exercício, existe um trabalho de coleta e tratamento dos dados da pesquisa Focus para se chegar ao juro real três anos à frente, considerado como proxy para o juro neutro da economia. Isso dito, para mostrar como as coisas ficam mais fáceis com o R, eu resolvi replicar o exercício do Banco Central nesse Comentário de Conjuntura.

O script começa carregando alguns pacotes:


library(lubridate)
library(magrittr)
library(dplyr)
library(ggplot2)
library(scales)
library(ggrepel)
library(rbcb)
library(xts)
library(png)
library(grid)
library(gridExtra)

Na sequência, nós coletamos a inflação esperada.


ipcae = get_annual_market_expectations('IPCA',
start_date = '2010-03-01')

ipca_esperado = ipcae$median[ipcae$reference_year==year(ipcae$date)+3
&ipcae$base==0]

ipca_esp_min = ipcae$min[ipcae$reference_year==year(ipcae$date)+3
&ipcae$base==0]

ipca_esp_max = ipcae$max[ipcae$reference_year==year(ipcae$date)+3
&ipcae$base==0]

dates = ipcae$date[ipcae$reference_year==year(ipcae$date)+3
&ipcae$base==0]

data = data.frame(dates=dates, min=ipca_esp_min,
ipca=ipca_esperado,
max=ipca_esp_max)

Também coletamos a taxa Selic esperada.


selice = get_annual_market_expectations('Meta para taxa over-selic',
start_date = '2010-03-01')

selic_esperado = selice$median[selice$indic_detail=='Fim do ano'&selice$reference_year==year(selice$date)+3]

selic_esp_min = selice$min[selice$indic_detail=='Fim do ano'&selice$reference_year==year(selice$date)+3]

selic_esp_max = selice$max[selice$indic_detail=='Fim do ano'&selice$reference_year==year(selice$date)+3]

dates = selice$date[selice$indic_detail=='Fim do ano'&selice$reference_year==year(selice$date)+3]

data2 = data.frame(dates=dates, min=selic_esp_min,
selic=selic_esperado,
max=selic_esp_max)

Com as duas séries disponíveis, nós podemos construir nossa proxy para o juro neutro.


ipca_min = xts(ipca_esp_min, order.by = dates)
ipca_tmais3 = xts(ipca_esperado, order.by = dates)
ipca_max = xts(ipca_esp_max, order.by = dates)

selic_min = xts(selic_esp_min, order.by = dates)
selic_tmais3 = xts(selic_esperado, order.by = dates)
selic_max = xts(selic_esp_max, order.by = dates)

neutro_min = (((1+(selic_min/100))/(1+(ipca_min/100)))-1)*100
neutro = (((1+(selic_tmais3/100))/(1+(ipca_tmais3/100)))-1)*100
neutro_max = (((1+(selic_max/100))/(1+(ipca_max/100)))-1)*100

df = data.frame(dates=as.Date(time(neutro)), neutro=neutro,
min=neutro_min, max=neutro_max)

Por fim, visualizamos a nossa série.

 

__________________

(*) Cadastre-se aqui na nossa Lista VIP para receber um super desconto na abertura das Turmas 2021.

Boletim Focus: o que esperar de 2021?

By | Indicadores

Vai chegando ao fim um dos piores anos do último século. A pandemia do coronavírus destruiu famílias, empresas e expectativas. Com a iminência de uma vacina, contudo, e a proximidade do final do ano, só nos resta pensar na recuperação que virá no próximo ano. De modo a vislumbrar a mesma, uma boa base de dados para isso é o boletim Focus do Banco Central, que reúne as expectativas de mais de uma centena de instituições econômicas e financeiras. A análise completa da pesquisa faz parte do nosso Curso de Análise de Conjuntura usando o R.

O script começa, como de praxe, com os pacotes que utilizo.


library(rbcb)
library(scales)
library(tstools)
library(tidyverse)

Na sequência, pegamos alguns dos indicadores disponíveis na base de dados do Focus.

data = get_annual_market_expectations(c('PIB Total', 'IPCA',
'Taxa de câmbio',
'Meta para taxa over-selic',
'Fiscal'),
start_date = '2019-01-01') %>%
replace_na(replace = list(indic_detail = 'Média'))

data$indic = ifelse(data$indic == 'Taxa de câmbio', 'Taxa de Câmbio',
data$indic)

data$indic_detail = ifelse(data$indic_detail == "Resultado Primário",
'Resultado Primário',
data$indic_detail)

Uma vez que os dados foram coletados, podemos gerar um gráfico como abaixo, que contém as expectativas para esses indicadores em 2021.

A mediana das projeções aponta para um crescimento de 3,3% no próximo ano, nada muito excepcional se comparado ao tombo verificado em 2020. Ademais, espera-se uma inflação comportada, próximo a 3,5%, algum aumento marginal na taxa básica de juros e câmbio ainda acima dos 5 R$/US$.
_______________

(*) A análise completa está disponível no nosso Curso de Análise de Conjuntura usando o R.

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente