O que é o comexTL?
O comexTL
é um pacote R avançado que facilita o acesso
aos dados oficiais de comércio exterior brasileiro do ComexStat (MDIC).
Com uma arquitetura moderna baseada em Apache Arrow e sistema de cache
inteligente, o pacote oferece interface unificada para análises desde o
nível geral (NCM detalhado) até municipal (SH4).
O Brasil possui uma das bases de dados de comércio exterior mais robustas do mundo através do ComexStat. No entanto, enquanto a interface gráfica é intuitiva, a API permanece subutilizada devido à complexidade de implementação.
Principais vantagens:
# Instalar devtools se necessário
if (!require(devtools)) {
install.packages("devtools")
}
# Instalar comexTL do GitHub
devtools::install_github("alanleal-econ/comexTL")
# Carregar o pacote
library(comexTL)
# Carregar bibliotecas para este tutorial
library(dplyr)
library(ggplot2)
library(plotly)
library(DT)
# Configurar tema laranja para gráficos
theme_orange <- theme_minimal() +
theme(
plot.title = element_text(color = "#d35400", size = 16, face = "bold"),
plot.subtitle = element_text(color = "#e67e22", size = 12),
axis.title = element_text(color = "#b8860b", face = "bold"),
panel.grid.major = element_line(color = "#fdf6e3"),
panel.grid.minor = element_line(color = "#fef9e7"),
legend.title = element_text(color = "#d35400", face = "bold"),
legend.text = element_text(color = "#e67e22")
)
# Paleta de cores laranja
cores_laranja <- c("#e67e22", "#f39c12", "#d35400", "#ff7675", "#fd79a8","orange")
O primeiro passo é conhecer as tabelas de referência que facilitarão nossas análises.
## === TABELAS DE REFERÊNCIA DISPONÍVEIS ===
##
## Código: 1
## Arquivo: NCM.csv
## Descrição: Nomenclatura Comum do Mercosul
## Uso: load_reference_tables("1")
##
## Código: 2
## Arquivo: NCM_SH.csv
## Descrição: NCM com códigos SH
## Uso: load_reference_tables("2")
##
## Código: 3
## Arquivo: PAIS.csv
## Descrição: Países
## Uso: load_reference_tables("3")
##
## Código: 4
## Arquivo: UF.csv
## Descrição: Unidades Federativas
## Uso: load_reference_tables("4")
##
## Código: 5
## Arquivo: UF_MUN.csv
## Descrição: UF e Municípios
## Uso: load_reference_tables("5")
Códigos das Tabelas de Referência:
## Carregando 1 tabela(s): 3
##
## === Processando tabela 3 ===
## Descrição: Países
## Baixando tabela: PAIS.csv
## Tabela baixada com sucesso. Linhas: 281 Colunas: 6
## Tabela salva no cache.
## Colunas disponíveis: CO_PAIS, CO_PAIS_ISON3, CO_PAIS_ISOA3, NO_PAIS, NO_PAIS_ING, NO_PAIS_ESP
## Primeiras linhas:
## # A tibble: 3 × 6
## CO_PAIS CO_PAIS_ISON3 CO_PAIS_ISOA3 NO_PAIS NO_PAIS_ING NO_PAIS_ESP
## <int> <int> <chr> <chr> <chr> <chr>
## 1 0 898 ZZZ Não Definido Not defined No definido
## 2 13 4 AFG Afeganistão Afghanistan Afganistan
## 3 15 248 ALA Aland, Ilhas Aland Islands Alans, Islas
##
## Retornando tabela única.
## # A tibble: 6 × 6
## CO_PAIS CO_PAIS_ISON3 CO_PAIS_ISOA3 NO_PAIS NO_PAIS_ING NO_PAIS_ESP
## <int> <int> <chr> <chr> <chr> <chr>
## 1 0 898 ZZZ Não Definido Not defined No definido
## 2 13 4 AFG Afeganistão Afghanistan Afganistan
## 3 15 248 ALA Aland, Ilhas Aland Isla… Alans, Isl…
## 4 17 8 ALB Albânia Albania Albania
## 5 20 724 ESP Alboran-Perejil, … Alboran-Pe… Alboran-Pe…
## 6 23 276 DEU Alemanha Germany Alemania
## Carregando 2 tabela(s): 3, 4
##
## === Processando tabela 3 ===
## Descrição: Países
## Usando tabela em cache: PAIS.csv
## Colunas disponíveis: CO_PAIS, CO_PAIS_ISON3, CO_PAIS_ISOA3, NO_PAIS, NO_PAIS_ING, NO_PAIS_ESP
## Primeiras linhas:
## # A tibble: 3 × 6
## CO_PAIS CO_PAIS_ISON3 CO_PAIS_ISOA3 NO_PAIS NO_PAIS_ING NO_PAIS_ESP
## <int> <int> <chr> <chr> <chr> <chr>
## 1 0 898 ZZZ Não Definido Not defined No definido
## 2 13 4 AFG Afeganistão Afghanistan Afganistan
## 3 15 248 ALA Aland, Ilhas Aland Islands Alans, Islas
##
## === Processando tabela 4 ===
## Descrição: Unidades Federativas
## Baixando tabela: UF.csv
## Tabela baixada com sucesso. Linhas: 34 Colunas: 4
## Tabela salva no cache.
## Colunas disponíveis: CO_UF, SG_UF, NO_UF, NO_REGIAO
## Primeiras linhas:
## # A tibble: 3 × 4
## CO_UF SG_UF NO_UF NO_REGIAO
## <int> <chr> <chr> <chr>
## 1 11 RO Rondônia REGIAO NORTE
## 2 12 AC Acre REGIAO NORTE
## 3 13 AM Amazonas REGIAO NORTE
##
## Retornando lista com 2 tabelas.
## Nomes das tabelas na lista: tabela_3_pais, tabela_4_uf
## [1] "tabela_3_pais" "tabela_4_uf"
## Baixando tabela: NCM.csv
## Tabela baixada com sucesso. Linhas: 13722 Colunas: 14
## Tabela salva no cache.
## Encontrados 16 registros para o termo ' soja '
## # A tibble: 16 × 14
## CO_NCM CO_UNID CO_SH6 CO_PPE CO_PPI CO_FAT_AGREG CO_CUCI_ITEM CO_CGCE_N3
## <int> <int> <int> <int> <int> <int> <chr> <int>
## 1 12081000 10 120810 3990 3990 3 2239 220
## 2 21031090 10 210310 3990 3990 3 09841 324
## 3 23099050 10 230990 3755 3755 3 08199 324
## 4 23040010 21 230400 1180 1180 1 08131 240
## 5 23040090 21 230400 1180 1180 1 08131 240
## 6 15071000 21 150710 2180 2180 2 42111 220
## 7 15079010 21 150790 3536 3990 3 42119 324
## 8 15079011 21 150790 3536 3990 3 42119 324
## 9 15079019 21 150790 3536 3990 3 42119 324
## 10 15079090 21 150790 3540 3990 3 42119 324
## 11 12010010 10 120100 1315 1315 1 2222 230
## 12 12010090 21 120100 1315 1315 1 2222 210
## 13 12011000 10 120110 1315 1315 1 2222 230
## 14 12019000 21 120190 1315 1315 1 2222 210
## 15 21031010 10 210310 3990 3990 3 09841 324
## 16 35040020 10 350400 3648 3990 3 59225 240
## # ℹ 6 more variables: CO_SIIT <int>, CO_ISIC_CLASSE <int>, CO_EXP_SUBSET <int>,
## # NO_NCM_POR <chr>, NO_NCM_ESP <chr>, NO_NCM_ING <chr>
## Usando tabela em cache: PAIS.csv
## Encontrados 4 registros para o termo ' Unidos '
## # A tibble: 4 × 6
## CO_PAIS CO_PAIS_ISON3 CO_PAIS_ISOA3 NO_PAIS NO_PAIS_ING NO_PAIS_ESP
## <int> <int> <chr> <chr> <chr> <chr>
## 1 244 784 ARE Emirados Árabes U… United Ara… Emiratos Á…
## 2 249 840 USA Estados Unidos United Sta… Estados Un…
## 3 566 581 UMI Pacífico, Ilhas d… Pacific Is… Pacífico, …
## 4 866 850 VIR Virgens, Ilhas (A… Virgin Isl… Vírgenes d…
Vamos começar analisando as exportações brasileiras de soja em 2024:
# Exportações de soja (SH2 = 12) por UF em 2024
exp_soja_2024 <- comex_stat_geral_exps(
anos = 2024,
sh2 = 12,
agregar_por = c("SG_UF_NCM"),
metricas = c("VL_FOB", "KG_LIQUIDO")
)
## Processando 1 ano(s): 2024
## Arquivos necessários: exportacao/EXP_2024.parquet
##
## === Processando ano 2024 ===
## Baixando arquivo: exportacao/EXP_2024.parquet
## Arquivo baixado com sucesso. Linhas: 1603796
## Arquivo salvo no cache.
##
## === Combinando dados de todos os anos ===
## Total de linhas combinadas: 1603796
##
## === Aplicando filtros ===
## Filtrado por SH2: 12
## Linhas após filtros: 8407
##
## === Agregando dados ===
## Agregando por: sh2, SG_UF_NCM
## Calculando métricas: VL_FOB, KG_LIQUIDO
## Resultado final: 26 linhas
# Visualizar resultados
head(exp_soja_2024) %>%
datatable(
caption = "Exportações de Soja por UF - 2024",
options = list(pageLength = 10)
)
# Gráfico das principais UFs exportadoras de soja
exp_soja_2024 %>%
arrange(desc(VL_FOB)) %>%
slice_head(n = 10) %>%
ggplot(aes(x = reorder(SG_UF_NCM, VL_FOB), y = VL_FOB/1e9)) +
geom_col(fill = "#e67e22", alpha = 0.8) +
coord_flip() +
labs(
title = "Top 10 UFs Exportadoras de Soja",
subtitle = "Valores em US$ bilhões - 2024",
x = "Unidade Federativa",
y = "Valor FOB (US$ bilhões)"
) +
theme_orange
# Exportações para China e EUA (2023-2024)
exp_china_eua <- comex_stat_geral_exps(
anos = c(2023, 2024),
sh2 = 12, # Soja
co_pais = c(160, 249), # China e EUA
agregar_por = c("CO_ANO", "CO_PAIS", "CO_MES")
)
## Processando 2 ano(s): 2023, 2024
## Arquivos necessários: exportacao/EXP_2023.parquet, exportacao/EXP_2024.parquet
##
## === Processando ano 2023 ===
## Baixando arquivo: exportacao/EXP_2023.parquet
## Arquivo baixado com sucesso. Linhas: 1563659
## Arquivo salvo no cache.
## === Processando ano 2024 ===
## Usando arquivo em cache: exportacao/EXP_2024.parquet
##
## === Combinando dados de todos os anos ===
## Total de linhas combinadas: 3167455
##
## === Aplicando filtros ===
## Filtrado por SH2: 12
## Filtrado por países: 160, 249
## Linhas após filtros: 1914
##
## === Agregando dados ===
## Agregando por: sh2, CO_ANO, CO_PAIS, CO_MES
## Calculando métricas: VL_FOB, KG_LIQUIDO, QT_ESTAT
## Resultado final: 48 linhas
# Preparar dados para visualização
exp_plot_data <- exp_china_eua %>%
mutate(
PAIS = case_when(
CO_PAIS == 160 ~ "China",
CO_PAIS == 249 ~ "Estados Unidos",
TRUE ~ "Outros"
),
DATA = as.Date(paste(CO_ANO, CO_MES, "01", sep = "-"))
)
# Gráfico temporal
p_temporal <- exp_plot_data %>%
ggplot(aes(x = DATA, y = VL_FOB/1e6, color = PAIS)) +
geom_line(size = 1.2) +
geom_point(size = 2) +
scale_color_manual(values = c("China" = "#e67e22", "Estados Unidos" = "#f39c12")) +
labs(
title = "Exportações Brasileiras de Soja",
subtitle = "China vs Estados Unidos (2023-2024)",
x = "Período",
y = "Valor FOB (US$ milhões)",
color = "País de Destino"
) +
theme_orange
ggplotly(p_temporal) %>%
layout(title = list(font = list(color = "#d35400")))
As importações possuem métricas específicas que incluem frete e seguro:
# Importações de máquinas elétricas (SH2 = 85)
imp_maquinas <- comex_stat_geral_imps(
anos = 2024,
sh2 = 85,
co_pais = c(160, 249), # China e EUA
agregar_por = c("CO_PAIS"),
metricas = c("VL_FOB", "VL_FRETE", "VL_SEGURO")
)
## Processando IMPORTAÇÕES de 1 ano(s): 2024
## Arquivos necessários: importacao/IMP_2024.parquet
##
## === Processando importações do ano 2024 ===
## Baixando arquivo de importação: importacao/IMP_2024.parquet
## Arquivo baixado com sucesso. Linhas: 2273708
## Arquivo de importação salvo no cache.
##
## === Combinando dados de importação de todos os anos ===
## Total de linhas combinadas: 2273708
##
## === Aplicando filtros nas importações ===
## Filtrado por SH2: 85
## Filtrado por países: 160, 249
## Linhas após filtros: 137764
##
## === Agregando dados de importação ===
## Agregando por: sh2, CO_PAIS
## Calculando métricas: VL_FOB, VL_FRETE, VL_SEGURO
## Métricas derivadas adicionadas: VL_TOTAL_CIF, PERC_FRETE, PERC_SEGURO
## Resultado final: 2 linhas
# O pacote calcula automaticamente métricas derivadas
names(imp_maquinas) # Inclui VL_TOTAL_CIF, PERC_FRETE, PERC_SEGURO
## [1] "sh2" "CO_PAIS" "VL_FOB" "VL_FRETE" "VL_SEGURO"
## [6] "VL_TOTAL_CIF" "PERC_FRETE" "PERC_SEGURO"
Métricas Automáticas de Importação:
O comexTL
calcula automaticamente: -
VL_TOTAL_CIF
: FOB + Frete + Seguro -
PERC_FRETE
: Percentual do frete sobre FOB -
PERC_SEGURO
: Percentual do seguro sobre FOB
# Preparar dados para visualização
imp_custos_plot <- imp_maquinas %>%
mutate(
PAIS = case_when(
CO_PAIS == 132 ~ "China",
CO_PAIS == 249 ~ "Estados Unidos",
TRUE ~ "Outros"
)
) %>%
select(PAIS, VL_FOB, VL_FRETE, VL_SEGURO) %>%
pivot_longer(cols = c(VL_FOB, VL_FRETE, VL_SEGURO),
names_to = "COMPONENTE",
values_to = "VALOR") %>%
mutate(
COMPONENTE = case_when(
COMPONENTE == "VL_FOB" ~ "FOB",
COMPONENTE == "VL_FRETE" ~ "Frete",
COMPONENTE == "VL_SEGURO" ~ "Seguro"
)
)
# Gráfico de custos de importação
p_custos <- imp_custos_plot %>%
ggplot(aes(x = PAIS, y = VALOR/1e6, fill = COMPONENTE)) +
geom_col(position = "stack", alpha = 0.8) +
scale_fill_manual(values = c("FOB" = "#e67e22", "Frete" = "#f39c12", "Seguro" = "#d35400")) +
labs(
title = "Composição dos Custos de Importação",
subtitle = "Máquinas Elétricas - China vs EUA (2024)",
x = "País de Origem",
y = "Valor (US$ milhões)",
fill = "Componente"
) +
theme_orange
ggplotly(p_custos)
Os dados municipais são limitados ao nível SH4 e focam no município da empresa:
# Exportações municipais de soja por UF
exp_municipal_uf <- analise_comex_municipal(
tipo = "exportacao",
anos = 2024,
sh2 = 12, # Soja (derivado de SH4)
sg_uf_mun = c("MT", "RS", "GO", "PR"),
agregar_por = c("SG_UF_MUN")
)
## Processando dados MUNICIPAIS de EXPORTACAO de 1 ano(s): 2024
## Arquivos necessários: municipio/exportacao/EXP_2024_MUN.parquet
##
## === Processando exportacao municipal do ano 2024 ===
## Baixando arquivo municipal: municipio/exportacao/EXP_2024_MUN.parquet
## Arquivo baixado com sucesso. Linhas: 1144828
## Arquivo municipal salvo no cache.
##
## === Combinando dados municipais de exportacao de todos os anos ===
## Total de linhas combinadas: 1144828
##
## === Aplicando filtros nos dados municipais ===
## Filtrado por SH2 (derivado de SH4): 12
## Filtrado por UFs das empresas: MT, RS, GO, PR
## Linhas após filtros: 3948
##
## === Agregando dados municipais ===
## Agregando por: sh2, SG_UF_MUN
## Calculando métricas: VL_FOB, KG_LIQUIDO
## Adicionada contagem de municípios únicos por grupo (N_MUNICIPIOS)
## Resultado final: 4 linhas
## [1] "sh2" "SG_UF_MUN" "VL_FOB" "KG_LIQUIDO" "N_MUNICIPIOS"
Limitações dos Dados Municipais:
# Gráfico de exportações municipais por UF
exp_municipal_uf %>%
ggplot(aes(x = reorder(SG_UF_MUN, VL_FOB), y = VL_FOB/1e9)) +
geom_col(fill = "#e67e22", alpha = 0.8) +
geom_text(aes(label = paste(N_MUNICIPIOS, "municípios")),
hjust = -0.1, color = "#d35400", fontface = "bold") +
coord_flip() +
labs(
title = "Exportações Municipais de Soja por UF",
subtitle = "Valores por UF e número de municípios exportadores - 2024",
x = "Unidade Federativa",
y = "Valor FOB (US$ bilhões)"
) +
theme_orange
Boas Práticas para Performance:
force_download = TRUE
# MELHOR: análise específica e rápida
resultado_otimizado <- comex_stat_geral_exps(
anos = 2024,
sh4 = c(1201, 1202), # Soja específica
co_pais = c(160, 249), # China e EUA
agregar_por = c("CO_PAIS")
)
## Processando 1 ano(s): 2024
## Arquivos necessários: exportacao/EXP_2024.parquet
##
## === Processando ano 2024 ===
## Usando arquivo em cache: exportacao/EXP_2024.parquet
##
## === Combinando dados de todos os anos ===
## Total de linhas combinadas: 1603796
##
## === Aplicando filtros ===
## Filtrado por SH4: 1201, 1202
## Filtrado por países: 160, 249
## Linhas após filtros: 699
##
## === Agregando dados ===
## Agregando por: sh4, CO_PAIS
## Calculando métricas: VL_FOB, KG_LIQUIDO, QT_ESTAT
## Resultado final: 4 linhas
# Sempre verificar se dados foram encontrados
resultado <- comex_stat_geral_exps(
anos = 2024,
sh6 = 999999 # Código que pode não existir
)
## Processando 1 ano(s): 2024
## Arquivos necessários: exportacao/EXP_2024.parquet
##
## === Processando ano 2024 ===
## Usando arquivo em cache: exportacao/EXP_2024.parquet
##
## === Combinando dados de todos os anos ===
## Total de linhas combinadas: 1603796
##
## === Aplicando filtros ===
## Filtrado por SH6: 999999
## AVISO: Alguns anos solicitados não foram encontrados nos dados
## Linhas após filtros: 0
if (nrow(resultado) == 0) {
cat("Nenhum dado encontrado com os filtros aplicados\n")
# Verificar códigos válidos
ncm_validos <- search_in_table("1", "produto_interesse")
} else {
print(paste("Encontrados", nrow(resultado), "registros"))
}
## Nenhum dado encontrado com os filtros aplicados
## Usando tabela em cache: NCM.csv
## Encontrados 0 registros para o termo ' produto_interesse '
# Análise integrada: geral + municipal para comparação
# 1. Dados gerais por UF
exp_geral_uf <- comex_stat_geral_exps(
anos = 2024,
sh2 = 12,
agregar_por = c("SG_UF_NCM")
)
## Processando 1 ano(s): 2024
## Arquivos necessários: exportacao/EXP_2024.parquet
##
## === Processando ano 2024 ===
## Usando arquivo em cache: exportacao/EXP_2024.parquet
##
## === Combinando dados de todos os anos ===
## Total de linhas combinadas: 1603796
##
## === Aplicando filtros ===
## Filtrado por SH2: 12
## Linhas após filtros: 8407
##
## === Agregando dados ===
## Agregando por: sh2, SG_UF_NCM
## Calculando métricas: VL_FOB, KG_LIQUIDO, QT_ESTAT
## Resultado final: 26 linhas
# 2. Dados municipais por UF
exp_municipal_uf <- analise_comex_municipal(
tipo = "exportacao",
anos = 2024,
sh2 = 12,
agregar_por = c("SG_UF_MUN")
)
## Processando dados MUNICIPAIS de EXPORTACAO de 1 ano(s): 2024
## Arquivos necessários: municipio/exportacao/EXP_2024_MUN.parquet
##
## === Processando exportacao municipal do ano 2024 ===
## Usando arquivo municipal em cache: municipio/exportacao/EXP_2024_MUN.parquet
##
## === Combinando dados municipais de exportacao de todos os anos ===
## Total de linhas combinadas: 1144828
##
## === Aplicando filtros nos dados municipais ===
## Filtrado por SH2 (derivado de SH4): 12
## Linhas após filtros: 11022
##
## === Agregando dados municipais ===
## Agregando por: sh2, SG_UF_MUN
## Calculando métricas: VL_FOB, KG_LIQUIDO
## Adicionada contagem de municípios únicos por grupo (N_MUNICIPIOS)
## Resultado final: 25 linhas
# 3. Comparar metodologias
comparacao <- exp_geral_uf %>%
select(UF = SG_UF_NCM, VL_GERAL = VL_FOB) %>%
full_join(
exp_municipal_uf %>% select(UF = SG_UF_MUN, VL_MUNICIPAL = VL_FOB),
by = "UF"
) %>%
mutate(
DIFERENCA_PERC = round(((VL_MUNICIPAL - VL_GERAL) / VL_GERAL) * 100, 2)
)
# Visualizar diferenças metodológicas
comparacao %>%
filter(!is.na(VL_GERAL) & !is.na(VL_MUNICIPAL)) %>%
datatable(
caption = "Comparação: Dados Gerais vs Municipais",
options = list(pageLength = 10)
)
Resumo do Tutorial:
Neste tutorial, exploramos as principais funcionalidades do pacote
comexTL
:
O comexTL
democratiza o acesso aos dados de comércio
exterior brasileiro, oferecendo uma ferramenta robusta e eficiente para
pesquisadores, analistas e profissionais do setor.
Tutorial criado por Alan Leal - Theta Lab | 2025-07-25