Tag

dados no r Archives - Análise Macro

Como importar dados do Banco Central, IPEADATA e Sidra no R?

By | Data Science

Neste exercício mostramos como dar os primeiros passos para acessar dados brasileiros de fontes públicas, disponibilizados nas volumosas bases do BCB, IPEADATA e IBGE. Estas fontes constituem um ativo valiosíssimo para pesquisadores e profissionais de mercado - além de ser um "parquinho de diversões" para amantes de dados -, sendo fundamental o domínio de linguagens de programação como o R para coleta e automatização de rotinas.

Para reproduzir o exercício a seguir você precisará dos seguintes pacotes:

library(GetBCBData) # CRAN v0.6
library(ipeadatar) # CRAN v0.1.5
library(sidrar) # CRAN v0.2.7 
library(dplyr) # CRAN v1.0.7 
library(stringr) # CRAN v1.4.0

Dados do BCB

Existem diversas bases de dados que o Banco Central do Brasil (BCB) disponibiliza para acesso público, dentre elas:

  • Sistema Gerenciador de Séries Temporais (SGS): milhares de séries econômico-financeiras de diversas fontes;
  • Sistema Expectativas de Mercado: dados de expectativas de agentes de mercado para indicadores econômicos, compilados no Relatório Focus.

E para acessar estes dados pela linguagem R existem alguns pacotes que facilitam o trabalho:

  • {GetBCBData}: interface para acessar API de dados do SGS/BCB, possibilita a extração de uma ou diversas séries na mesma requisição, retorna objeto data frame em formato "long" ou "wide" e, opcionalmente, executa requisições com processamento paralelo e com sistema de cache de dados.
  • {rbcb}: interface para acessar API's do SGS, Sistema de Expectativas e dados de taxa de câmbio;
  • {meedr}: interface para acessar API do Sistema de Expectativas, com recursos de processamento paralelo e sistema de cache similar ao {GetBCBData}, disponível apenas no GitHub atualmente.

Vamos a um exemplo: suponha que você queira coletar uma série temporal do SGS/BCB (usaremos o código 432 da taxa SELIC no exemplo).

  • Passo 1: localize no site https://www3.bcb.gov.br/sgspub/ o código da série desejada;
  • Passo 2: utilizando o pacote {GetBCBData}, aponte na função gbcbd_get_series() o código e período desejado, observando a documentação dos argumentos desta função, conforme abaixo:

# Coletar dados da SELIC no SGS/BCB
dados_sgs <- GetBCBData::gbcbd_get_series(
id = 432,
first.date = "2020-01-01",
last.date = Sys.Date()
)
tail(dados_sgs)

# ref.date value id.num series.name
# 768 2022-02-06 10.75 432 id = 432
# 769 2022-02-07 10.75 432 id = 432
# 770 2022-02-08 10.75 432 id = 432
# 771 2022-02-09 10.75 432 id = 432
# 772 2022-02-10 10.75 432 id = 432
# 773 2022-02-11 10.75 432 id = 432

Para coletar múltiplas séries especifique um vetor numérico (nomeado ou não) com os códigos das séries. Perceba que também especificamos o formato desejado dos dados "wide", ou seja, uma coluna para cada variável.


dados_sgs <- GetBCBData::gbcbd_get_series(
id = c("Dólar" = 3698, "IBC-Br" = 24363, "Resultado Primário" = 5793),
first.date = "2020-01-01",
last.date = Sys.Date(),
format.data = "wide"
)
tail(dados_sgs)

# ref.date Dólar IBC-Br Resultado Primário
# 20 2021-08-01 5.2517 142.17 1.56
# 21 2021-09-01 5.2797 138.86 0.63
# 22 2021-10-01 5.5400 138.07 0.24
# 23 2021-11-01 5.5569 139.76 -0.15
# 24 2021-12-01 5.6514 141.46 -0.75
# 25 2022-01-01 5.5341 NA NA

Dessa forma simples conseguimos acesso rápido e fácil a diversas séries. Consulte os detalhes dos argumentos na documentação do pacote e, sobre as séries, no site do BCB.

Dados do IPEADATA

O IPEADATA oferece um grande volume de dados com acesso público, organizados nos seguintes temas:

  • Macroeconômico: dados econômicos e financeiros do Brasil em séries anuais, mensais e diárias na mesma unidade monetária;
  • Regional: dados econômicos, demográficos e geográficos para estados, municípios (e suas áreas mínimas comparáveis), regiões administrativas e bacias hidrográficas brasileiras;
  • Social: dados e indicadores sobre distribuição de renda, pobreza, educação, saúde, previdência social e segurança pública.

E para acessar estes dados no R existe o pacote {ipeadatar}1 que possibilita ler e pesquisar metadados e extrair variáveis de interesse.

Vamos a um exemplo: suponha que você queira coletar a série do saldo do Novo CAGED.

  • Passo 1: utilize a função available_series() para localizar a série desejada e obter o código da mesma (retorna um tibble);

# Extrair tabela com todas séries e códigos disponíveis
series_ipeadata <- ipeadatar::available_series()
# Filtrar séries com o termo "caged"
dplyr::filter(
series_ipeadata,
stringr::str_detect(source, stringr::regex("caged", ignore_case = TRUE))
)

# # A tibble: 10 x 7
# code name theme source freq lastupdate status
# <chr> <chr> <fct> <fct> <fct> <date> <fct>
# 1 CAGED12_ADMISN12 Empregados - admissõe~ Macr~ Min. ~ Mont~ 2022-02-02 "Acti~
# 2 CAGED12_DESLIGN12 Empregados - demissõe~ Macr~ Min. ~ Mont~ 2022-02-02 "Acti~
# 3 CAGED12_SALDON12 Empregados - saldo - ~ Macr~ Min. ~ Mont~ 2022-02-02 "Acti~
# 4 CAGED12_ADMIS Empregados - admissões Macr~ MTE/C~ Mont~ 2020-05-27 "Inac~
# 5 CAGED12_DESLIG Empregados - demissões Macr~ MTE/C~ Mont~ 2020-05-27 "Inac~
# 6 CAGED12_SALDO12 Empregados - saldo Macr~ MTE/C~ Mont~ 2020-05-27 "Inac~
# 7 ADMIS Total da evolução de ~ Regi~ MTE/C~ Mont~ 2020-07-07 ""
# 8 ADMISNC Total da evolução de ~ Regi~ MTE/C~ Mont~ 2022-02-04 ""
# 9 DESLIG Total da evolução de ~ Regi~ MTE/C~ Mont~ 2020-07-07 ""
# 10 DESLIGNC Total da evolução de ~ Regi~ MTE/C~ Mont~ 2022-02-04 ""

  • Passo 2: aponte na função ipeadata() o(s) código(s) da(s) séries(s), conforme abaixo:

dados_ipeadata <- ipeadatar::ipeadata("CAGED12_SALDON12")
tail(dados_ipeadata)

# # A tibble: 6 x 5
# code date value uname tcode
# <chr> <date> <dbl> <ord> <int>
# 1 CAGED12_SALDON12 2021-07-01 316725 "" NA
# 2 CAGED12_SALDON12 2021-08-01 373344 "" NA
# 3 CAGED12_SALDON12 2021-09-01 316993 "" NA
# 4 CAGED12_SALDON12 2021-10-01 253083 "" NA
# 5 CAGED12_SALDON12 2021-11-01 324112 "" NA
# 6 CAGED12_SALDON12 2021-12-01 -265811 "" NA

Dessa forma simples conseguimos acesso rápido e fácil a diversas séries. Consulte os detalhes dos argumentos na documentação do pacote e, sobre as séries, pela função metadata() ou no site da instituição.

Dados do Sidra/IBGE

O Sidra é um sistema disponibilizado pelo IBGE com bases de dados públicas dos mais variados temas, organizados em tabelas agregadas (não identificam o informante). Estes dados são oriundos das pesquisas e diversos trabalhos que a instituição realiza, podendo conter informações atreladas a nível territorial, a um período de tempo, a classificações ou a unidades de medida/cálculos estatísticos.

Para acessar estes dados no R existe o pacote {sidrar}, que possibilita pesquisar tabelas, obter informações de parâmetros de consulta e extrair dados de tabelas de interesse.

Vamos a um exemplo: suponha que você queira coletar dados de uma tabela do Sidra/IBGE (usaremos a tabela 7060 referente ao IPCA no exemplo). Você pode usar o próprio pacote para especificar uma consulta com filtros ou construir essa consulta diretamente no site do Sidra (mais fácil), obtendo um código de consulta.

  • Passo 1: localize no site https://sidra.ibge.gov.br/ a tabela de interesse e aplique os filtros desejados (neste caso marcamos "Variável" = "IPCA - Variação mensal (%)"; "Geral, grupo, subgrupo, item e subitem" = "Índice geral"; "Mês" = todos períodos disponíveis e "Unidade Territorial" = "Brasil");
  • Passo 2: clique no botão de compartilhar na parte inferior chamado “Links de compartilhar” e, na tela que se abre, copie o código a partir de "/t/" (inclusive) até o final;
  • Passo 3: aponte na função get_sidra(), usando o argumento api, o código de consulta obtido no passo anterior, conforme abaixo:

# Código de consulta com filtros na tabela 7060 (Sidra/IBGE)
cod_sidra <- "/t/7060/n1/all/v/63/p/all/c315/7169/d/v63%202"
# Coleta dos dados com o código
dados_sidra <- sidrar::get_sidra(api = cod_sidra)

tail(dplyr::as_tibble(dados_sidra))

# # A tibble: 6 x 13
# `Nível Territorial ~` `Nível Territo~` `Unidade de Me~` `Unidade de Me~` Valor
# <chr> <chr> <chr> <chr> <dbl>
# 1 1 Brasil 2 % 0.87
# 2 1 Brasil 2 % 1.16
# 3 1 Brasil 2 % 1.25
# 4 1 Brasil 2 % 0.95
# 5 1 Brasil 2 % 0.73
# 6 1 Brasil 2 % 0.54
# # ... with 8 more variables: `Brasil (Código)` <chr>, Brasil <chr>,
# # `Variável (Código)` <chr>, Variável <chr>, `Mês (Código)` <chr>, Mês <chr>,
# # `Geral, grupo, subgrupo, item e subitem (Código)` <chr>,
# # `Geral, grupo, subgrupo, item e subitem` <chr>

Dessa forma simples conseguimos acesso rápido e fácil aos dados de qualquer tabela do Sidra. Consulte os detalhes e mais opções na documentação do pacote e, sobre as tabelas, no site da instituição.

Ressalvas

Note que as fontes de dados aqui exploradas são públicas e, apesar de serem um ativo valiosíssimo para os amantes de dados, frequentemente podem apresentar instabilidades. Se você obteve um erro estranho ao tentar extrair dados destas fontes, verifique no site da instituição se está tudo ok e tente novamente em outro momento se for o caso.

Além disso, API's de dados públicos geralmente possuem limitações de requisição/acessos - como é o caso Sidra/IBGE -, portanto, utilize com cautela e responsabilidade, evitando realizar requisições de dados desnecessárias.

Para suporte personalizado e aprofundamento dê uma olhada nos cursos aplicados da Análise Macro, como o Análise de Conjuntura usando o R.

 


1 Em Python há uma biblioteca correspondente, o ipeadatapy.

Finanças Quantitativas: Como coletar dados de Criptomoedas no R

By | mercado financeiro

As criptomoedas tem tomado grande espaço dentro do mercado financeiro, tanto como forma de investimento, quanto em discussões sobre sua usabilidade como moeda. Apesar de todas essas questões, é um fato que as criptomoedas inovaram na forma de transacionar moedas, utilizando a tecnologia de blockchain e de criptografia. Vamos explicar neste post como podemos coletar seus preços no R.

As criptomoedas, mais conhecidas como moedas digitais, são ativos descentralizados, ou seja, não possuem o controle de nenhuma autoridade monetária. Em sua grande maioria, como não há emissão de novas moedas por algum órgão, possuem oferta limitada, sendo seu preço medido substancialmente pela demanda.

Além do advento de diferente tipos de moedas digitais, a consolidação e também a aceitação de sua tecnologia pela população mundial, sua demanda tem aumentado substancialmente na última década, elevando os preços de diversas moedas digitais. Iremos visualizar essa mudança ao longo do tempo utilizando a linguagem R.

A primeira forma de realizar a coleta dos preços diários das criptomoedas é através do pacote {quantmod}, utilizando como fonte o Yahoo Finance. Os tickers das criptomoedas podem ser encontradas dentro do site do Yahoo Finance.

Aqui utilizaremos como exemplo o Bitcoin (BTC-USD), Ethereum (ETH-USD) e Dogecoin (DOGE-USD).

library(quantmod)
library(tidyverse)



tickers <- c("BTC-USD", "ETH-USD", "DOGE-USD")

getSymbols(Symbols = tickers, # Os tickers dos ativos a serem coletados
           src = "yahoo", # A fonte da coleta dos dados
           auto.assign = TRUE, # Permitir que faça a auto atribuição
           warnings = FALSE
           )

A função getSymbols() permite que realizemos a coleta de dados direto do Yahoo Finance. É feito também uma auto atribuição dos dados coletados a objetos com o nomes dos tickers na forma OHLCVA (Open, High, Low, Close, Volume e Adjusted).

Podemos por fim realizar a visualização dos dados coletados. O próprio pacote fornece meios simplificados para gerar os gráficos.

chartSeries(`BTC-USD`)

Podemos também mudar as cores dos gráficos.

chartSeries(`ETH-USD`,
            theme = chartTheme('white',
                               up.col='blue',
                               dn.col='red')
            )

chartSeries(`DOGE-USD`,
            theme = chartTheme('white',
                               up.col='blue',
                               dn.col='red'),
            subset = "2021") # Filtra o período de tempo

Outro pacote que vale a menção é o {coinmarketcapr}, que nos dá informações além dos preços das criptomoedas, porém, com um limite de uso e de informações que podem ser coletadas através do plano de básico da API. Portanto, não iremos fazer sua avaliação aqui, somente deixando para quem queira se aprofundar neste campo.

________________________
(*) Para entender mais sobre Mercado Financeiro e aprender como realizar a coleta, tratamento e visualização de dados financeiros, confira nosso curso de R para o Mercado Financeiro.

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

Assinar Gratuitamente