Fundamentos de Macroeconomia

Author

Dinilson Pedroza Jr.

PIB per capita de países (WB)

Nesse exercício vamos trabalhar com dados de PIB per capita de países. Vamos pegar dados do site do Banco Mundial, usando o pacote WDI no R. Este pacote deve ser instalado com o comando install.packages(“WDI”) e depois carregado com o comando library(WDI).

Bibliotecas (ou packages) que serão usadas

Instalamos o pacote no RStudio com o comando:

install.packages(“nome_do_pacote”)

Instalamos os pacotes apenas uma vez. Mas sempre que abrimos o R precisamos carregá-los em nosso espaço de trabalho (o script):

library(nome_do_pacote)

Vamos usar o seguintes pacotes em nosso estudo:

WDI - serve para “raspar” dados do Banco Mundial, um dos melhores e mais completos do mundo. Esse pacote foi desenvolvido por Vincent Arel-Bundock professor de Economia Política Internacional da Universidade de Montreal. É, portanto, um pacote para web scraping.

ggplot2 - é usado para fazer gráficos, dos mais simples aos mais sofisticados. Foi desenvolvido por Hadley Wickham estatístico e cientista de dados neozelandês, reconhecido por seu papel fundamental no ecossistema da linguagem R. Ele é Cientista-Chefe na Posit (anteriormente RStudio) e membro da Fundação R, sendo amplamente conhecido por criar o tidyverse, um conjunto de pacotes que transformou a prática da ciência de dados.

tidyverse - poderosa suíte para se trabalhar com ciência de dados. A equipe na Posit que mantêm e desenvolve o tidyverse é liderada por Hadley Wickman.

No chunk abaixo, carregamos os pacotes.

library (WDI)
library(ggplot2)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.6
✔ forcats   1.0.0     ✔ stringr   1.6.0
✔ lubridate 1.9.4     ✔ tibble    3.3.0
✔ purrr     1.0.4     ✔ tidyr     1.3.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Fazendo web scraping dos dados que nos interessam:

pib_pc <- WDI(
  country = "all",
  indicator = "NY.GDP.PCAP.KD",
  start = 2000,
  end = 2024
)

Para visualizar os dados o comando é o seguinte:

head(pib_pc)
                      country iso2c iso3c year NY.GDP.PCAP.KD
1 Africa Eastern and Southern    ZH   AFE 2024       1435.356
2 Africa Eastern and Southern    ZH   AFE 2023       1431.722
3 Africa Eastern and Southern    ZH   AFE 2022       1440.430
4 Africa Eastern and Southern    ZH   AFE 2021       1425.209
5 Africa Eastern and Southern    ZH   AFE 2020       1399.398
6 Africa Eastern and Southern    ZH   AFE 2019       1479.372

Notem que a coluna com os valores do PIB per capita está nomeada com código. Vamos resolver isso da seguinte forma:

names(pib_pc)[5] <- "pib_pc"
head(pib_pc)
                      country iso2c iso3c year   pib_pc
1 Africa Eastern and Southern    ZH   AFE 2024 1435.356
2 Africa Eastern and Southern    ZH   AFE 2023 1431.722
3 Africa Eastern and Southern    ZH   AFE 2022 1440.430
4 Africa Eastern and Southern    ZH   AFE 2021 1425.209
5 Africa Eastern and Southern    ZH   AFE 2020 1399.398
6 Africa Eastern and Southern    ZH   AFE 2019 1479.372

Como podemos ver acima, trocamos o nome da quinta coluna de nossa tabela (data frame).

Vamos trabalhar com alguns países apenas. Sejam eles Brasil, Argentina, Chile, Peru.

Vamos fazer um gráfico com dados desses países.

pib_pc %>%
  filter(country %in% c("Brazil", "Argentina", "Chile", "Peru")) %>%
  ggplot(aes(year, pib_pc, color = country)) +
  geom_line(linewidth = 1) +
  labs(
    title = "PIB per capita (US$ constantes)",
    x = "Ano",
    y = "PIB per capita",
    color = "País"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    axis.title = element_text(face = "bold"),
    legend.title = element_text(face = "bold"),
    legend.text = element_text(face = "bold"),
    panel.grid.major = element_line(color = "grey80"),
    panel.grid.minor = element_line(color = "grey90")
  )

Explicando o código: Separando os países: iniciamos separando do banco de dados pib_pc os países (country) que nos interessam usando a função de filtragem por linhas (filter). Note a aplicação do operador pipe (%>%). Ele “canaliza” os dados inicias para uma organização que nos interessa. Já o operador %in% significa elementos contidos em c(…). O c() é uma função de concatenação ou ajuntamento de dados. A função filter está no pacote tidyverse.

Fazendo o gráfico: vou destacar apenas os itens mais importantes. Argumentos da função ggplot() são: aes, ou seja a forma ou estética do gráfico. No caso estamos dizendo que queremos os valores dos anos (year) no eixo horizontal e os valores do pib_pc no eixo vertical. O comando color=country diz ao R para fazer uma linha de cada cor. O ggplot trabalha em camadas, então vamos agora acrescentar uma função para desenhar linhas (note o sinal “+” separando essas camadas ou instruções). A função é a geom_line(), cujo argumento é a espessura da linha (linewidth = 1). Acrescentamos agora uma camada para tratar dos rótulos (labels) de nosso gráfico. Seus argumentos são bem evidentes. As duas últimas camadas são para tornar o gráfico mais elegante. Pesquisem sobre as funções empregadas.