O Produto Interno Bruto é o principal indicador para acompanhamento do nível de atividade no Brasil, medindo a soma final de todos os bens e serviços produzidos no país. Os dados do PIB podem ser acessados através do SIDRA, sendo importados facilmente no R através do pacote {sidrar}. No Relatório AM de hoje, trazemos uma parte do código que ensinamos no Curso de Análise de Conjuntura de como automatizar o processo de coleta, tratamento e visualização dos dados do PIB.
library(tidyverse) library(sidrar) library(flextable)
## Funções e objetos úteis
# Acumular valores percentuais em 'n' janelas móveis
acum_i <- function(data, n){
data_ma_n <- RcppRoll::roll_meanr(data, n)
data_lag_n <- dplyr::lag(data_ma_n, n)
data_acum_n = (((data_ma_n/data_lag_n)-1)*100)
return(data_acum_n)
}
# Cores para gráficos e tabelas
colors <- c(
blue = "#282f6b",
red = "#b22200",
yellow = "#eace3f",
green = "#224f20",
purple = "#5f487c",
orange = "#b35c1e",
turquoise = "#419391",
green_two = "#839c56",
light_blue = "#3b89bc",
gray = "#666666"
)
# Fonte para gráficos e tabelas
foot_ibge <- "Fonte: analisemacro.com.br com dados do Sidra/IBGE."
# Definir padrão de tabelas
flextable::set_flextable_defaults(
big.mark = " ",
font.size = 10,
theme_fun = theme_vanilla,
padding.bottom = 6,
padding.top = 6,
padding.left = 6,
padding.right = 6,
decimal.mark = ",",
digits = 2L
)
Definimos a chave do API que coletaremos através do {sidrar}.
## Parâmetros e códigos para coleta de dados parametros <- list( # PIB com ajuste sazonal api_pib_sa = "/t/1621/n1/all/v/all/p/all/c11255/90707/d/v584%202", # PIB sem ajuste api_pib = "/t/1620/n1/all/v/all/p/all/c11255/90707/d/v583%202" )
Retiramos os dados com a função get_sidra do pacote {sidrar}.
## Coleta dos dados # PIB com ajuste sazonal raw_pib_sa <- sidrar::get_sidra(api = parametros$api_pib_sa) # PIB sem ajuste raw_pib <- sidrar::get_sidra(api = parametros$api_pib)
Tratamos os dados, realizando a limpeza e o cálculo das variações do índice do PIB.
## Tratamento dos dados # PIB com ajuste sazonal pib_sa <- raw_pib_sa %>% dplyr::mutate( date = zoo::as.yearqtr(`Trimestre (Código)`, format = "%Y%q"), var_marginal = (Valor / dplyr::lag(Valor, 1) - 1) * 100 ) %>% dplyr::select(date, "pib_sa" = Valor, var_marginal) %>% dplyr::as_tibble() # PIB sem ajuste pib <- raw_pib %>% dplyr::mutate( date = zoo::as.yearqtr(`Trimestre (Código)`, format = "%Y%q"), var_interanual = (Valor / dplyr::lag(Valor, 4) - 1) * 100, var_anual = acum_i(Valor, 4) ) %>% dplyr::select(date, "pib" = Valor, var_interanual, var_anual) %>% dplyr::as_tibble() # Juntar os dados do PIB df_pib <- dplyr::inner_join(pib_sa, pib, by = "date") %>% tidyr::drop_na() %>% dplyr::filter(date >= "2007 Q1")
Índice do PIB
Vemos que é possível visualizar através do pacote ggplo2 o índice do PIB ao longo do tempo, comparando o PIB sem e com ajuste sazonal.
# Gerar gráfico
df_pib %>%
dplyr::filter(date > "2000 Q1") %>%
ggplot2::ggplot(ggplot2::aes(x = date)) +
ggplot2::geom_line(ggplot2::aes(y = pib, color = "PIB"), size = 0.8) +
ggplot2::geom_line(ggplot2::aes(y = pib_sa, color = "PIB s.a."), size = 0.8) +
ggplot2::scale_color_manual(
NULL,
values = c("PIB" = unname(colors[1]), "PIB s.a." = unname(colors[2]))
) +
zoo::scale_x_yearqtr(
breaks = scales::pretty_breaks(n = 8),
format = "%Y T%q"
) +
ggplot2::theme(
plot.title = ggplot2::element_text(size = 12, face = "bold"),
legend.position = "bottom"
) +
ggplot2::labs(
x = NULL,
y = "Número Índice",
title = "Produto Interno Bruto",
caption = foot_ibge
)
Realizamos o calculo das variações marginais, interanuais e anuais do PIB, através do índice, dentro do R e podemos visualizar através da construção de um tabela.
# Filtrar últimos 8 trimestres
df_pib_tbl <- df_pib %>%
dplyr::slice_tail(n = 8) %>%
dplyr::select(var_marginal, var_interanual, var_anual)
# Tabela com variações e número índice do PIB
df_pib %>%
dplyr::slice_tail(n = 8) %>%
flextable::flextable() %>%
flextable::set_header_labels(
date = "Trimestre", pib_sa = "PIB s.a.", var_marginal = "Var. Marginal", pib = "PIB",
var_interanual = "Var. Interanual", var_anual = "Var. Anual"
) %>%
flextable::add_header_row(
colwidths = c(3, 3),
values = c("Sazonalmente ajustado", "Sem ajuste sazonal")
) %>%
flextable::colformat_double(j = 2:6, digits = 2) %>%
flextable::align(i = 1, part = "header", align = "center") %>%
flextable::add_footer_lines(foot_ibge) %>%
flextable::color(part = "footer", color = colors["gray"]) %>%
flextable::bg(
j = c("var_marginal", "var_interanual", "var_anual"),
bg = scales::col_numeric(
palette = colorspace::diverge_hcl(n = 20, palette = "Blue-Red 2"),
reverse = TRUE,
domain = c(-max(abs(df_pib_tbl)), max(abs(df_pib_tbl)))
),
part = "body"
) %>%
flextable::theme_vanilla() %>%
flextable::width(width = .95)
____________________
Quer conferir o código completo e aprender a como criar uma análise do PIB utilizando o R? Veja nosso Curso de Análise de Conjuntura.
____________________


