Para aproveitarmos completamente o pacote comtradr (), é necessário a instalação de alguns outros pacotes, de modo a podermos analisar também do ponto de vista gráfico as relações comerciais estabelecidas entre os países. É sugerido a instalação dos seguintes pacotes:

library(tidyverse)
library(comtradr)
library(visNetwork)
library(grid)
library(png)
library(RCurl)
library(scales)
library(dplyr)
library(plotly)
library(ggbump)
library(ggplot2)
library(cowplot)
library(hrbrthemes)

Também fica a sugestão para a leitura dos respectivos pacotes, uma vez que o objetivo é apenas uma introduação ao pacote comtradr (). O pacote ggplot2 () já é carregado automaticamente com o pacote tidyverse (), enquanto os demais pacotes servem de apoio a uma melhor exposição gráfica dos dados extraídos do UN Comtrade. Para uma excelente exposição da gramática dos gráficos fica a sugestão de leitura do livro R graphics cookbook, disponível gratuitamente. A visualização de dados é hoje um dos principais ramos da ciência de dados e como poderemos perceber ao longo dessa introdução, a organização dos dados é um passo prévio fundamental no R para uma correta exposição gráfica dos dados.

Você poderia perguntar qual a vantagem em exrtair os dados diretamente do pacote comtradr (), se podemos ir diretamente no site da Comtrade e extrairmos de forma bastante intuitiva os dados que necessitamos à nossa análise? Em primeiro lugar, evitamos o custo de tempo de ir no site, selecionarmos todas as variáveis, países, anos, produtos que gostaríamos para realizar a nossa análise e, em seguida, realizarmos a importação dos dados para o R. Ao importarmos os dados para o R ainda deveremos realizar os procedimentos de organização dos dados. Em segundo lugar, a extração direta pelo pacote permite a rápida integração aos demais pacotes do R e a manipulação mais fácil dos dados.

A principal função é do pacote é ct_search (), que aceita os seguintes argumentos:

O primeiro procedimento que podemos fazer é utilizar uma function () para mudar a escala dos valores que vamos extrair do pacote.

billion <- function(value) {
  value/1000000000
}
q <- ct_search(reporters = "Brazil", 
               partners = c("Germany", "France", "China", "USA"), 
               trade_direction = "imports")

Podemos utilizar a função glimpse () para mostrar todos os dados presentes em nossa extração. Ela funciona de forma similar à função str ().

q %>% glimpse()
## Observations: 118
## Variables: 35
## $ classification         <chr> "H5", "H5", "H5", "H5", "H5", "H5", "H5...
## $ year                   <int> 2017, 2017, 2017, 2017, 2018, 2018, 201...
## $ period                 <int> 2017, 2017, 2017, 2017, 2018, 2018, 201...
## $ period_desc            <chr> "2017", "2017", "2017", "2017", "2018",...
## $ aggregate_level        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
## $ is_leaf_code           <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
## $ trade_flow_code        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
## $ trade_flow             <chr> "Import", "Import", "Import", "Import",...
## $ reporter_code          <int> 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,...
## $ reporter               <chr> "Brazil", "Brazil", "Brazil", "Brazil",...
## $ reporter_iso           <chr> "BRA", "BRA", "BRA", "BRA", "BRA", "BRA...
## $ partner_code           <int> 156, 251, 276, 842, 156, 251, 276, 842,...
## $ partner                <chr> "China", "France", "Germany", "USA", "C...
## $ partner_iso            <chr> "CHN", "FRA", "DEU", "USA", "CHN", "FRA...
## $ second_partner_code    <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ second_partner         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ second_partner_iso     <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ customs_proc_code      <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ customs                <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ mode_of_transport_code <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ mode_of_transport      <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ commodity_code         <chr> "TOTAL", "TOTAL", "TOTAL", "TOTAL", "TO...
## $ commodity              <chr> "All Commodities", "All Commodities", "...
## $ qty_unit_code          <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
## $ qty_unit               <chr> "No Quantity", "No Quantity", "No Quant...
## $ alt_qty_unit_code      <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ alt_qty_unit           <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ qty                    <int> 0, 0, 0, 0, 0, 0, 0, 0, NA, NA, NA, NA,...
## $ alt_qty                <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ netweight_kg           <int> 0, 0, 0, 0, 0, 0, 0, 0, NA, NA, NA, NA,...
## $ gross_weight_kg        <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ trade_value_usd        <dbl> 27321495233, 3726937477, 9227153320, 25...
## $ cif_trade_value_usd    <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ fob_trade_value_usd    <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ flag                   <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...

Agora podemos utilizar nossos pacotes para realizarmos uma primeira análise gráfica das relações do Brasil com seus parceiros comerciais:

q %>% 
  as_tibble() %>% 
  filter(reporter == "Brazil", partner %in% c("China", "USA")) %>% 
  select(trade_value_usd, reporter, partner, everything()) %>% 
  ggplot(aes(x = year, y = trade_value_usd/1000000000, fill = partner)) +
  geom_col(alpha = 0.6, position = "dodge") +
  scale_y_continuous(labels = scales::number) +
  scale_x_continuous(breaks = seq(1990, 2018, 2)) +
  labs(title = "Importações do Brasil da China e dos EUA", y = "billion USD") +
  theme_bw()

Comércio internacional do Brasil

Br1 <- ct_search(reporters = "Brazil", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (2018-4),
                 end_date = 2018)

Br2 <- ct_search(reporters = "Brazil", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (2013-4),
                 end_date = 2013)

Br3 <- ct_search(reporters = "Brazil", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (2008-4),
                 end_date = 2008)

Brazil <- bind_rows(Br1, Br2, Br3) %>% distinct()

De posse desses dados podemos analisar a Balança comercial do Brasil com parceiros comerciais que são de interesse para os respectivos estudos:

dados1 <- Brazil %>% #distinct() %>% 
  filter(partner_iso != "WLD") %>% 
  mutate(trade_value_usd_bn = billion(trade_value_usd)) %>% 
  group_by(trade_flow, year) %>% 
  summarise(trade_value_usd_bn = sum(trade_value_usd_bn, na.rm = T))

dados1 %>% 
  ggplot(aes(x = year, y = trade_value_usd_bn, color = trade_flow)) +
  # geom_area(alpha = 0.1, position = "identity") +
  geom_line() +
  geom_point() +
  scale_y_continuous(labels = scales::number) +
  scale_color_manual(values = c("#88be3f", "#02a7eb")) +
  scale_x_continuous(breaks = seq(1990, 2018, 1), expand = c(0.01, 0.01)) +
  labs(title = "Exportaçoes e importações do Brasil (1990-2018)",
       x = "", y = "Valores em bilhões de US$", caption = "Data: UN Comtrade", color = "", fill = "")

Aqui estão as importações dos 5 principais parceiros comerciais do Brasil na atualidade:

top_5 <- Brazil %>% 
  filter(partner_iso != "WLD", year == 2018) %>% 
  group_by(partner_iso) %>% 
  tally(trade_value_usd, sort = T) %>% 
  top_n(5) %>% 
  pull(partner_iso)
## Selecting by n
Brazil %>% 
  filter(partner_iso %in% top_5, trade_flow == "Import") %>% 
  ggplot(aes(x = year, y = billion(trade_value_usd), color = partner_iso)) +
  geom_line() +
  scale_x_continuous(breaks = seq(1992, 2018, 2)) +
  labs(title = "Cinco princpais parceiros comerciais do Brasil",
       x = "", y = "Valores em bilhões de US$", color = "",
       caption = "Date: UN Comtrade")

Também é interessante vê-lo a partir da participação dos países nas importações realizadas pela economia brasileira

top_5 <- Brazil %>% 
  filter(partner_iso != "WLD", year == 2018) %>% 
  group_by(partner_iso) %>% 
  tally(trade_value_usd, sort = T) %>% 
  top_n(5) %>% 
  pull(partner_iso) 
## Selecting by n
top_5
## [1] "CHN" "USA" "ARG" "DEU" "NLD"
Brazil %>% 
  filter(partner_iso != "WLD", trade_flow == "Import") %>% 
  group_by(year) %>% 
  mutate(share_of_total = trade_value_usd/sum(trade_value_usd)) %>% #
  ungroup() %>% 
  filter(partner_iso %in% top_5, trade_flow == "Import") %>% 
  ggplot(aes(x = year, y = share_of_total, color = partner_iso)) +
  geom_line() +
  scale_x_continuous(breaks = seq(1992, 2018, 2)) +
  scale_y_continuous(labels = scales::percent, breaks = seq(0.04, 0.5, by = 0.02)) +
  labs(title = "Importações dos atuais 5 principais parceiros comerciais (em % do total) do Brasil",
       x = "", y = "% no total improtado", color = "",
       caption = "Date: UN Comtrade")

Com esses dados também podemos construir um mapa mostrando as participações dos cinco principais parceiros comerciais do Brasil.

Brazil %>% 
  filter(partner_iso != "WLD", trade_flow == "Import") %>% 
  group_by(year) %>% 
  mutate(share_of_total = trade_value_usd/sum(trade_value_usd)) %>% 
  ungroup() %>% 
  filter(partner_iso %in% top_5, trade_flow == "Import") %>% 
  plot_geo(locations = ~partner_iso,
           color = ~share_of_total,
           z = ~share_of_total,
           text = ~partner_iso) %>% 
  layout(title = "Importações dos atuais 5 principais parceiros comerciais do Brasil", 
         geo = list(showland = FALSE,
                    showcountries = TRUE)) %>%
  colorbar(title = '% total importado')
Brazil1 <- Brazil %>% 
  group_by(year) %>% 
  filter(partner_iso %in% top_5, trade_flow == "Import") %>%
  mutate(share_of_total = trade_value_usd/sum(trade_value_usd)) %>%
  mutate(rank = rank(share_of_total, ties.method = "last")) %>% 
  ungroup()

ggplot(Brazil1, aes(year, rank, color = partner_iso)) +
    geom_bump()

Quem são os principais parceiros comerciais do Brasil?

Prepare uma função trade_plot () para plotar os dados:

# função semelhante a annotation_custom (), mas especificando dados

annotation_custom2 <- function (grob, xmin = -Inf, xmax = Inf, 
                            ymin = -Inf, ymax = Inf, 
                            data) {
  layer(data = data, 
        stat = StatIdentity, 
        position = PositionIdentity,
        geom = ggplot2:::GeomCustomAnn,
        inherit.aes = TRUE, params = list(grob = grob, 
                                          xmin = xmin, xmax = xmax, 
                                          ymin = ymin, ymax = ymax))
}

percent2 <- function(input) {
  if (is.numeric(input)) {
    output <- percent(input)
  } else {
    output <- input
  }
  return(output)
}

number2 <- function(input) {
  if (is.numeric(input)) {
    output <- number(input)
  } else {
    output <- input
  }
  return(output)
}

trade_plot <- function(data, yr = 2018, top_n = 8, include_others = T, include_flags = T, include_share = T, title = "Exportações e importações do Brasil") {
  
  if (top_n) {
    o <- "Outros"
  } else {
    o <- "Resto do mundo"
  }
  
  top_partners <- data %>% 
    filter(partner_iso != "WLD", year == year) %>% 
    group_by(partner_iso) %>% 
    tally(trade_value_usd, sort = T) %>% 
    top_n(top_n) %>% 
    pull(partner_iso)
  
  if (include_others) {
      others <- data %>% 
      filter(year == yr, !(partner_iso %in% top_partners), partner_iso != "WLD") %>% 
      group_by(trade_flow) %>% 
      summarise(trade_value_usd = sum(trade_value_usd)) %>% 
      mutate(partner_iso = o, partner = o, year = yr)
    
    toplot <- data %>% 
      filter(year == yr, partner_iso %in% top_partners) %>% 
      bind_rows(others) %>% 
      mutate(partner_iso_fac = factor(partner_iso, levels = c(top_partners, o)))

  } else {
      toplot <- data %>% 
      filter(year == yr, partner_iso %in% top_partners) %>% 
      mutate(partner_iso_fac = factor(partner_iso, levels = c(top_partners)))
  }
    
  toplot <- toplot %>% 
    ungroup() %>% 
    mutate(trade_value_usd_bn = billion(trade_value_usd))
  
  if (include_share) {
      toplot <- toplot %>% 
      group_by(trade_flow) %>% 
      mutate(share_of_total = trade_value_usd_bn/sum(trade_value_usd_bn)) %>% 
      ungroup()
  } else {
      toplot <- toplot %>% 
      mutate(share_of_total = "")
  }
    
  
  p <- toplot %>% 
    group_by(partner_iso, trade_flow) %>% 
    mutate(label_pos = max(trade_value_usd_bn/2, 100)) %>%
    ungroup() %>% 
    ggplot(aes(y = trade_value_usd_bn, x = trade_flow, fill = trade_flow)) +
    geom_col() +
    geom_text(aes(label = number(trade_value_usd_bn, big.mark = "'"), y = label_pos), size = 3) +
    geom_text(aes(label = percent2(share_of_total), 
                  y = max(trade_value_usd_bn)*0.9), size = 2.5, hjust = -0.2) +
    facet_wrap(~partner_iso_fac, dir = "h", 
               nrow = max(1, ceiling(sqrt(top_n)), na.rm = T), 
               # ncol = max(1, ceiling((top_n+include_others)/ceiling(sqrt(top_n))), na.rm = T)
               ) +
    scale_fill_manual(values = c("#88be3f", "#02a7eb"))
  
  if (include_flags) {
    countries_annotate <- toplot %>% 
      select(partner_iso, partner) %>% 
      distinct() %>% 
      mutate(path = paste0("./postdata/china-us-trade/flags/", str_replace_all(partner, " ", "_"), ".png"))
    
    max_y <- max(toplot$trade_value_usd_bn, na.rm = T)
    
    for (i in 1:top_n) {
      if (!top_n) { next() }
      data_annotate <- tibble(partner_iso_fac = factor(countries_annotate[i, "partner_iso"], levels = c(top_partners, o)), 
                              trade_flow = "Export", trade_value_usd_bn = 1)
      if (file.exists(pull(countries_annotate[i, "path"]))) {
        # print(paste0(pull(countries_annotate[i, "path"]), " exists and should be plotted"))
        img <- readPNG(pull(countries_annotate[i, "path"]))
        
        p <- p + 
          annotation_custom2(rasterGrob(img, interpolate=TRUE), 
                             ymax = max_y, ymin = max_y*0.8, 
                             xmin = -1, data = data_annotate)
      } else {
          next()
        }
    }
  }
  p <- p + 
    labs(x = "", y = "",
         title = title, subtitle = paste0("trade value in goods in billion USD, year: ", yr),
         caption = "Data: UN Comtrade") +
    theme(legend.position = "none") #+
    # theme_bw()
  
  return(p)
}

Novamente, aqui está o total de importações e exportações para o ano de 2018.

trade_plot(Brazil, top_n = 0, include_others = T, include_flags = T, include_share = F)
## Selecting by n

Vamos ver os 24 principais parceiros comerciais

# trade_plot(Brazil, top_n = 25, include_others = F, include_flags = T)

trade_plot(Brazil, top_n = 24, include_others = T, include_flags = T, include_share = T)
## Selecting by n

O aumento das importações da China é um fenômeno recente, que ocorreu ao longo dos anos 2000.

Aqui estão as importações dos 5 principais parceiros comerciais:

top_5 <- Brazil %>% 
  filter(partner_iso != "WLD", year == 2018) %>% 
  group_by(partner_iso) %>% 
  tally(trade_value_usd, sort = T) %>% 
  top_n(5) %>% 
  pull(partner_iso)

Brazil %>% 
  filter(partner_iso %in% top_5, trade_flow == "Import") %>% 
  ggplot(aes(x = year, y = billion(trade_value_usd), color = partner_iso)) +
  geom_line() +
  scale_x_continuous(breaks = seq(1992, 2018, 2)) +
  labs(title = "Importações do Brasil dos 5 principais parceiros comerciais",
       x = "", y = "trade value in billion USD", color = "",
       caption = "Date: UN Comtrade")

Também é interessante vê-lo como parte do total de importações.

# O top 5 inicial é para o fluxo de comércio, X + M

top_5 <- Brazil %>% 
  filter(partner_iso != "WLD", year == 2018) %>% 
  group_by(partner_iso) %>% 
  tally(trade_value_usd, sort = T) %>% # número de observações encontradas para cada fator ou combinação de fatores, ordenado pelos valores (sort=TRUE)
  top_n(5) %>% # podemos usar a função top_n, que nos informa automaticamente os valores mais frequentes ou por ordem de grandeza
  pull(partner_iso) # extrai as variáveis selecionadas

## Utilizamos o filter () para selecionar apenas as importações
Brazil %>% 
  filter(partner_iso != "WLD", trade_flow == "Import") %>% 
  group_by(year) %>% 
  mutate(share_of_total = trade_value_usd/sum(trade_value_usd)) %>% 
  ungroup() %>% 
  filter(partner_iso %in% top_5, trade_flow == "Import") %>% 
  ggplot(aes(x = year, y = share_of_total, color = partner_iso)) +
  geom_line() +
  scale_x_continuous(breaks = seq(1992, 2018, 2)) +
  scale_y_continuous(labels = scales::percent, breaks = seq(0.04, 0.5, by = 0.02)) +
  labs(title = "Importações do Brasil dos 5 principais parceiros comerciais",
       x = "", y = "Em % do total importado", color = "",
       caption = "Date: UN Comtrade")

Os comandos abaixo podem ser utilizados para construir um gráfico em movimento, a partir dos mesmos dados do gráfico acima.

 p0 <- ggplot(Brazil1,
       aes(x = year,
           y = share_of_total,
           color = partner_iso,
           size = share_of_total,
           frame = year)) + 
  geom_point() +
  labs(title = "Importações dos atuais 5 principais parceiros comerciais do Brasil",
       x = "Ano",
       y = "% em relação ao total") +
  scale_color_discrete(name = "Participação")

ggplotly(p0)  

Também é interessante analisar a evolução do comércio internacional da China, tendo em vista que essa economia é a principal parceira comercial do Brasil e de outras economias em desenvolvimento e desenvolvidas. Como está a situação do ponto de vista da China? Qual o nível de dependência comercial da China relativamente ao Brasil?

ch1 <- ct_search(reporters = "China", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (2018-4),
                 end_date = 2018)

ch2 <- ct_search(reporters = "China", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (2013-4),
                 end_date = 2013)

ch3 <- ct_search(reporters = "China", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (2008-4),
                 end_date = 2008)

ch4 <- ct_search(reporters = "China", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (2003-4),
                 end_date = 2003)

ch5 <- ct_search(reporters = "China", 
                 partners = "All", 
                 trade_direction = c("imports", "exports"),
                 freq = "annual",
                 start_date = (1998-4),
                 end_date = 1998)

ch <- bind_rows(ch1, ch2, ch3, ch4, ch5) %>% distinct()

Evolução temporal do comércio chinês

data1 <- Brazil %>% #distinct() %>% 
  filter(partner_iso == "WLD") %>% 
  mutate(trade_value_usd_bn = billion(trade_value_usd)) %>% 
  group_by(trade_flow, year) %>% 
  summarise(trade_value_usd_bn = sum(trade_value_usd_bn, na.rm = T))

data2 <- ch %>% #distinct() %>% 
  filter(partner_iso != "WLD") %>% 
  mutate(trade_value_usd_bn = billion(trade_value_usd)) %>% 
  group_by(trade_flow, year) %>% 
  summarise(trade_value_usd_bn = sum(trade_value_usd_bn, na.rm = T))

bind_rows(
  data1 %>% mutate(reporter = "Brazil"),
  data2 %>% mutate(reporter = "China")
) %>% 
  ggplot(aes(x = year, y = trade_value_usd_bn, color = interaction(trade_flow, reporter), fill = interaction(trade_flow, reporter))) +
  geom_line() +
  # geom_area(alpha = 0.1, position = "identity") +
  geom_point(aes(shape = reporter)) +
  geom_vline(xintercept = 2007, alpha = 0.3) +
  geom_text(label = "X China > X Brasil", x = 2007, y = 0, inherit.aes = F, color = "grey",
            angle = 90, vjust = 1, hjust = -0.05) +
  scale_y_continuous(labels = scales::number, breaks = seq(0, 2500, 500)) +
  scale_color_manual(values = c("#ca0020", "#f4a582", "#0571b0", "#92c5de")) +
  scale_x_continuous(breaks = seq(1990, 2018, 2), expand = c(0.01, 0.01)) +
  scale_shape(guide = "none") +
  labs(title = "Comercial mundial do Brasil e da China",
       x = "", y = "Em bilhões de US$", caption = "Fonte: UN Comtrade", color = "", fill = "")

Extra

data <- Brazil %>% filter(year == 2018, partner != "World")

edges <- bind_rows(
  # exports
  data %>% 
    filter(trade_flow == "Export") %>% 
    select(from = reporter, to = partner, value = trade_value_usd) %>% 
    arrange(desc(value)),
  
  # imports
  data %>% 
    filter(trade_flow == "Import") %>% 
    select(from = partner, to = reporter, value = trade_value_usd) %>% 
    arrange(desc(value))
) %>% 
  mutate(title = paste0("bn$", number(value/1000000000)))

cutoff <- 8000000000

nodes <- bind_rows(
  edges %>% 
    filter(value >= cutoff) %>% 
    select(id = from),
  edges %>% 
    filter(value >= cutoff) %>% 
    select(id = to)
) %>% 
  unique() %>% 
  left_join(data %>% filter(year == 2018) %>% select(id = partner, label = partner_iso) %>% unique()) 
## Joining, by = "id"
 visNetwork(nodes, edges, width = "100%") %>% 
  visEdges(arrows = "from")