Este script foi desenvolvido como material de apoio para a aula de introdução à análise de dados macroeconômicos com R. Passaremos por todas as etapas do processo, desde a importação e manipulação de dados até a coleta de séries de fontes oficiais brasileiras e a visualização final.
Vetores são a estrutura de dados mais fundamental do R. Eles armazenam elementos do mesmo tipo.
Vetor numérico
## [1] 10.5 5.0 -3.0 8.2
## [1] "numeric"
Vetor de caracteres (texto)
## [1] "PIB" "IPCA" "Selic"
## [1] "character"
Vetor lógico (Booleano)
## [1] TRUE FALSE TRUE TRUE
## [1] "logical"
Data frames são a estrutura mais comum para armazenar dados tabulares no R. São como tabelas, onde as colunas podem ter tipos de dados diferentes.
df_exemplo <- data.frame(
Ano = c(2022, 2023, 2024),
PIB_nominal = c(9.9, 10.9, 11.5), # em trilhões de R$ (hipotético)
Pais = c("Brasil", "Brasil", "Brasil")
)
print(df_exemplo)
## Ano PIB_nominal Pais
## 1 2022 9.9 Brasil
## 2 2023 10.9 Brasil
## 3 2024 11.5 Brasil
## 'data.frame': 3 obs. of 3 variables:
## $ Ano : num 2022 2023 2024
## $ PIB_nominal: num 9.9 10.9 11.5
## $ Pais : chr "Brasil" "Brasil" "Brasil"
## Ano PIB_nominal Pais
## Min. :2022 Min. : 9.90 Length:3
## 1st Qu.:2022 1st Qu.:10.40 Class :character
## Median :2023 Median :10.90 Mode :character
## Mean :2023 Mean :10.77
## 3rd Qu.:2024 3rd Qu.:11.20
## Max. :2024 Max. :11.50
Tibbles são a versão moderna de data frames, parte do
tidyverse
. Eles possuem uma impressão (print) mais amigável
e algumas regras mais estritas que evitam erros comuns.
tibble_exemplo <- tibble(
Ano = c(2022, 2023, 2024),
PIB_nominal = c(9.9, 10.9, 11.5),
Pais = c("Brasil", "Brasil", "Brasil")
)
print(tibble_exemplo)
## # A tibble: 3 × 3
## Ano PIB_nominal Pais
## <dbl> <dbl> <chr>
## 1 2022 9.9 Brasil
## 2 2023 10.9 Brasil
## 3 2024 11.5 Brasil
Vamos criar um data frame e salvá-lo como CSV e Excel para simular a importação de arquivos externos.
dados_para_exportar <- data.frame(
Data = seq(as.Date("2023-01-01"), by = "month", length.out = 12),
Vendas = round(runif(12, 100, 500)),
Produto = rep(c("A", "B"), each = 6)
)
Exportando para CSV
O readr
(parte do tidyverse) usa a função
write_csv()
Exportando para Excel
Usaremos o pacote writexl
A função read_csv()
do pacote readr
é
rápida e eficiente.
## Rows: 12 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Produto
## dbl (1): Vendas
## date (1): Data
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 6 × 3
## Data Vendas Produto
## <date> <dbl> <chr>
## 1 2023-01-01 260 A
## 2 2023-02-01 402 A
## 3 2023-03-01 245 A
## 4 2023-04-01 421 A
## 5 2023-05-01 473 A
## 6 2023-06-01 248 A
A função read_excel()
do pacote readxl
lê
arquivos .xls e .xlsx.
## # A tibble: 6 × 3
## Data Vendas Produto
## <dttm> <dbl> <chr>
## 1 2023-01-01 00:00:00 260 A
## 2 2023-02-01 00:00:00 402 A
## 3 2023-03-01 00:00:00 245 A
## 4 2023-04-01 00:00:00 421 A
## 5 2023-05-01 00:00:00 473 A
## 6 2023-06-01 00:00:00 248 A
O dplyr
oferece um conjunto de “verbos” para manipulação
de dados. Vamos usar o tibble
criado na seção 1.3 e o
dados_csv
importado.
%>%
)O pipe permite encadear múltiplas operações de forma legível, passando o resultado da operação anterior como o primeiro argumento da próxima. Lê-se como “e então”.
filter()
: Filtrando linhasSeleciona linhas com base em condições lógicas. Exemplo: pegar apenas os dados do Produto “A”
## # A tibble: 6 × 3
## Data Vendas Produto
## <date> <dbl> <chr>
## 1 2023-01-01 260 A
## 2 2023-02-01 402 A
## 3 2023-03-01 245 A
## 4 2023-04-01 421 A
## 5 2023-05-01 473 A
## 6 2023-06-01 248 A
select()
: Selecionando colunasSeleciona colunas pelo nome. Exemplo: selecionar apenas as colunas Data e Vendas
## # A tibble: 6 × 2
## Data Vendas
## <date> <dbl>
## 1 2023-01-01 260
## 2 2023-02-01 402
## 3 2023-03-01 245
## 4 2023-04-01 421
## 5 2023-05-01 473
## 6 2023-06-01 248
Podemos remover uma coluna usando o sinal de menos (-)
## # A tibble: 6 × 2
## Data Vendas
## <date> <dbl>
## 1 2023-01-01 260
## 2 2023-02-01 402
## 3 2023-03-01 245
## 4 2023-04-01 421
## 5 2023-05-01 473
## 6 2023-06-01 248
arrange()
: Ordenando linhasOrdena as linhas do data frame com base nos valores de uma ou mais colunas. Exemplo: ordenar por vendas, da maior para a menor
## # A tibble: 6 × 3
## Data Vendas Produto
## <date> <dbl> <chr>
## 1 2023-05-01 473 A
## 2 2023-09-01 431 B
## 3 2023-04-01 421 A
## 4 2023-10-01 403 B
## 5 2023-02-01 402 A
## 6 2023-12-01 383 B
mutate()
: Criando novas colunasCria novas colunas (ou modifica existentes) a partir de outras. Exemplo: criar uma coluna com as vendas em milhares
vendas_com_meta <- dados_csv %>%
mutate(
Vendas_milhares = Vendas / 1000,
Atingiu_meta = ifelse(Vendas > 300, "Sim", "Não")
)
head(vendas_com_meta)
## # A tibble: 6 × 5
## Data Vendas Produto Vendas_milhares Atingiu_meta
## <date> <dbl> <chr> <dbl> <chr>
## 1 2023-01-01 260 A 0.26 Não
## 2 2023-02-01 402 A 0.402 Sim
## 3 2023-03-01 245 A 0.245 Não
## 4 2023-04-01 421 A 0.421 Sim
## 5 2023-05-01 473 A 0.473 Sim
## 6 2023-06-01 248 A 0.248 Não
summarise()
e group_by()
: Agregando
dadossummarise()
resume os dados em um único valor (e.g.,
média, soma). group_by()
permite que a sumarização seja
feita por grupos. Exemplo: calcular a venda total e a venda média por
produto
vendas_por_produto <- dados_csv %>%
group_by(Produto) %>%
summarise(
Venda_Total = sum(Vendas),
Venda_Media = mean(Vendas),
Numero_Meses = n() # n() conta o número de observações no grupo
)
print(vendas_por_produto)
## # A tibble: 2 × 4
## Produto Venda_Total Venda_Media Numero_Meses
## <chr> <dbl> <dbl> <int>
## 1 A 2049 342. 6
## 2 B 1825 304. 6
APIs (Application Programming Interfaces) são formas de sistemas computacionais conversarem entre si. O Banco Central do Brasil (BCB) oferece uma API para acesso ao seu vasto banco de dados de séries temporais (SGS).
rbcb
Este pacote facilita enormemente a busca por dados no SGS do BCB.
Precisamos saber os códigos das séries no sistema SGS.
PIB Mensal (IBC-Br, índice): 24363
IPCA (Variação % mensal): 433
Criando um vetor nomeado com os códigos. Os nomes serão usados nas colunas.
Usando a função get_series
para baixar os dados Vamos
buscar os dados a partir de 01/01/2003
dados_pib <- get_series(codigos_bcb[1], start_date = "2003-01-01")
dados_ipca <- get_series(codigos_bcb[2], start_date = "2003-01-01")
dados_macro <- full_join(dados_pib, dados_ipca, by = "date")
# Inspecionando os dados baixados
head(dados_macro)
## # A tibble: 6 × 3
## date PIB_IBCBr IPCA
## <date> <dbl> <dbl>
## 1 2003-01-01 67.5 2.25
## 2 2003-02-01 69.3 1.57
## 3 2003-03-01 72.6 1.23
## 4 2003-04-01 71.7 0.97
## 5 2003-05-01 70.4 0.61
## 6 2003-06-01 69.2 -0.15
## # A tibble: 6 × 3
## date PIB_IBCBr IPCA
## <date> <dbl> <dbl>
## 1 2025-02-01 107. 1.31
## 2 2025-03-01 114. 0.56
## 3 2025-04-01 112. 0.43
## 4 2025-05-01 108. 0.26
## 5 2025-06-01 107. 0.24
## 6 2025-07-01 NA 0.26
Vamos renomear as colunas para português e ajustar o formato da data.
dados_macro <- dados_macro %>%
rename(
Data = date
) %>%
mutate(
Data = as.Date(Data) # Garantindo que a coluna Data é do tipo Date
)
head(dados_macro)
## # A tibble: 6 × 3
## Data PIB_IBCBr IPCA
## <date> <dbl> <dbl>
## 1 2003-01-01 67.5 2.25
## 2 2003-02-01 69.3 1.57
## 3 2003-03-01 72.6 1.23
## 4 2003-04-01 71.7 0.97
## 5 2003-05-01 70.4 0.61
## 6 2003-06-01 69.2 -0.15
O ggplot2
é baseado na “Gramática dos Gráficos”,
permitindo a construção de gráficos complexos de forma intuitiva, camada
por camada.
A estrutura básica é:
Vamos criar um gráfico de linhas para uma das séries que baixamos.
# Código para plotar no formato "largo"
ggplot(dados_macro, aes(x = Data, y = PIB_IBCBr)) +
geom_line() + # Adiciona a camada de linha para criar o gráfico de série temporal
labs(
title = "Série Temporal do PIB IBC-Br",
x = "Data",
y = "PIB IBC-Br"
) +
theme_minimal() # Um tema limpo para o gráfico (opcional)