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:
reporters: relatando os países, pode ser All (required). Podemos utilizar ct_country_lookup () para pesquisar o nome do país, isto é, ct_country_lookup ("Brazil").
partners: parceiros comerciais, pode ser All (required).
trade_direction: “imports”, “exports”, “re_imports”, “re_exports”. Por default vem “all”.
freq: “annual” ou “monthly”. Por definição vem “annual”.
start_date: “yyyy” se freq = “annual”, ou “yyyy-mm” se freq = “monthly”, pode ser “all” (default).
end_date: a mesma coisa.
commod_codes: um “character vector” dos códigos das commodities, ou “TOTAL” (default). Use ct_commodity_lookup () para verificar os códigos, isto é, tomatoes <- t_commodity_lookup ("tomato"). tomatoes pode ser utilizado agora como uma variável para o argumento.
max_rec: número máximo de registros, 50’000 sem token de API, 250’000 com o API (ver também ct_register_token()).
type: “goods” ou “services”. Por default vem “goods”.
url: não é necessário.
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()
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 = "")
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")