Este informe describe la evolución de las importaciones y exportaciones de productos asociados al rubro forestal en Paraguay. La unidad de análisis disponible es el ítem declarado en Aduanas; por ello, el número de filas no equivale al número de despachos.
Los datos se obtuvieron del portal de datos abiertos de la Dirección Nacional de Ingresos Tributarios (DNIT), a partir de archivos mensuales de la Dirección Nacional de Aduanas. El período efectivo depende de los archivos presentes en la carpeta indicada en el código.
Fuente: Datos abiertos de la DNIT.
Analizar el comportamiento del comercio exterior de productos del rubro forestal en Paraguay, considerando operaciones, volumen, valor FOB, productos, mercados, aduanas y medios de transporte.
La clasificación se basa en el campo RUBRO publicado por
Aduanas y se limita a seis categorías: Madera, Carbón vegetal, Capítulo
45 (corcho), Capítulo 47 (pasta de madera/celulosa), Papel y cartón, y
Capítulo 46 (manufacturas de espartería/cestería). Se toleran
diferencias de tildes, espacios y puntuación en las etiquetas de
capítulos. El catálogo detectado se imprime para revisar las etiquetas
efectivamente incluidas.
Este criterio es una aproximación temática, no una clasificación oficial exhaustiva del sector forestal. Antes de presentar resultados definitivos, conviene revisar la tabla de categorías detectadas y ajustar el patrón si el estudio considera otros productos o excluye alguno de ellos.
Las métricas monetarias y físicas se convierten usando coma decimal y
punto de miles cuando la fuente las entrega como texto. Los despachos se
cuentan mediante identificadores distintos de
DESPACHO CIFRADO; el peso y FOB se suman a nivel de
ítem.
inventario <- tibble::tibble(archivo = basename(archivos)) |>
dplyr::mutate(
anio = as.integer(substr(archivo, 1, 4)),
mes = sub("^[0-9]{4}_", "", sub("\\.parquet$", "", archivo))
) |>
dplyr::count(anio, name = "archivos_mensuales") |>
dplyr::arrange(anio)
knitr::kable(inventario, caption = "Archivos mensuales disponibles por año")
| anio | archivos_mensuales |
|---|---|
| 2016 | 12 |
| 2017 | 12 |
| 2018 | 12 |
| 2019 | 12 |
| 2020 | 12 |
| 2021 | 12 |
| 2022 | 12 |
| 2023 | 12 |
| 2024 | 12 |
| 2025 | 12 |
| 2026 | 8 |
cat("\nTotal de archivos mensuales:", length(archivos), "\n")
##
## Total de archivos mensuales: 128
cat("Período cubierto:", min(inventario$anio), "-", max(inventario$anio), "\n")
## Período cubierto: 2016 - 2026
Primero se inspecciona únicamente la columna RUBRO de
cada archivo. Así se obtiene el catálogo sin cargar todas las columnas
ni todas las filas en memoria.
rubros_catalogo <- unique(unlist(lapply(archivos, function(archivo) {
arrow::open_dataset(archivo, format = "parquet") |>
dplyr::select(RUBRO) |>
dplyr::distinct() |>
dplyr::collect() |>
dplyr::pull(RUBRO)
}), use.names = FALSE))
rubros_normalizados <- normalizar_texto(rubros_catalogo)
patrones_forestales <- c(
"^MADERA$",
"^CARBON VEGETAL$",
"^CAPITULO\\s*45\\s*[-:]*\\s*CORCHO",
"^CAPITULO\\s*47.*(PASTA DE MADERA|MATERIAS FIBROSAS CELULOSICAS)",
"^PAPEL Y CARTON$",
"^CAPITULO\\s*46.*(ESPARTERIA|CESTERIA)"
)
coincide_forestal <- Reduce(
`|`,
lapply(patrones_forestales, grepl, x = rubros_normalizados)
)
rubros_forestales <- rubros_catalogo[coincide_forestal]
rubros_forestales <- sort(unique(rubros_forestales[!is.na(rubros_forestales)]))
if (length(rubros_forestales) == 0) {
stop("No se encontraron las seis categorías forestales esperadas en RUBRO.")
}
knitr::kable(
tibble::tibble(rubro_detectado = rubros_forestales),
caption = "Categorías incluidas por el filtro forestal"
)
| rubro_detectado |
|---|
| CAPITULO 45CORCHO Y MANUFACTURAS DE CORCHO |
| CAPITULO 46 MANUFACTURAS DE ESPARTERIA O DE CESTERIA |
| CAPITULO 47 PASTA DE MADERA O DE OTRAS MATERIAS FIBROSAS CELULOSICAS ,DESPERDICIOS Y DESECHOS DE PA |
| CARBON VEGETAL |
| MADERA |
| PAPEL Y CARTON |
Se filtra cada mes antes de leerlo en memoria. La caché contiene solo las columnas necesarias para el análisis y emplea tipos homogéneos; de esta forma se pueden combinar años en los que los importes fueron almacenados como texto con otros en los que fueron almacenados como números.
if (reprocesar_cache && dir.exists(dir_cache)) {
unlink(dir_cache, recursive = TRUE, force = TRUE)
}
dir.create(dir_cache, recursive = TRUE, showWarnings = FALSE)
columnas_necesarias <- c(
"DESPACHO CIFRADO", "OPERACION", "AÑO", "MES", "ADUANA",
"MEDIO TRANSPORTE", "PAIS ORIGEN", "PAIS PROCEDENCIA/DESTINO",
"UNIDAD MEDIDA ESTADISTICA", "CANTIDAD ESTADISTICA", "KILO NETO",
"KILO BRUTO", "FOB DOLAR", "RUBRO", "MERCADERIA"
)
normalizar_texto_local <- function(x) {
x <- toupper(trimws(as.character(x)))
iconv(x, from = "", to = "ASCII//TRANSLIT")
}
parsear_numero_local <- function(x) {
if (is.numeric(x)) return(as.double(x))
readr::parse_number(
as.character(x),
locale = readr::locale(decimal_mark = ",", grouping_mark = ".")
)
}
for (archivo in archivos) {
salida <- file.path(dir_cache, basename(archivo))
if (!reprocesar_cache && file.exists(salida) && file.info(salida)$size > 0) {
next
}
tryCatch({
mensual <- arrow::open_dataset(archivo, format = "parquet") |>
dplyr::filter(RUBRO %in% rubros_forestales) |>
dplyr::collect()
names(mensual) <- trimws(names(mensual))
faltantes <- setdiff(columnas_necesarias, names(mensual))
if (length(faltantes) > 0) {
stop("Faltan columnas: ", paste(faltantes, collapse = ", "))
}
# Selección en R después del filtro Arrow; evita problemas con any_of().
mensual <- mensual[, columnas_necesarias, drop = FALSE]
mensual_limpio <- data.frame(
despacho = as.character(mensual[["DESPACHO CIFRADO"]]),
operacion = normalizar_texto_local(mensual[["OPERACION"]]),
anio = suppressWarnings(as.integer(as.character(mensual[["AÑO"]]))),
mes = normalizar_texto_local(mensual[["MES"]]),
aduana = as.character(mensual[["ADUANA"]]),
medio_transporte = as.character(mensual[["MEDIO TRANSPORTE"]]),
pais_origen = as.character(mensual[["PAIS ORIGEN"]]),
pais_procedencia_destino = as.character(mensual[["PAIS PROCEDENCIA/DESTINO"]]),
unidad_estadistica = as.character(mensual[["UNIDAD MEDIDA ESTADISTICA"]]),
cantidad_estadistica = parsear_numero_local(mensual[["CANTIDAD ESTADISTICA"]]),
kilo_neto = parsear_numero_local(mensual[["KILO NETO"]]),
kilo_bruto = parsear_numero_local(mensual[["KILO BRUTO"]]),
fob_dolar = parsear_numero_local(mensual[["FOB DOLAR"]]),
rubro = as.character(mensual[["RUBRO"]]),
mercaderia = as.character(mensual[["MERCADERIA"]]),
stringsAsFactors = FALSE
)
arrow::write_parquet(mensual_limpio, salida, compression = "zstd")
cat("Procesado:", basename(archivo), "\n")
}, error = function(e) {
stop(
"Error procesando ", basename(archivo), ": ",
conditionMessage(e),
call. = FALSE
)
})
}
archivos_forestales <- list.files(
dir_cache,
pattern = "\\.parquet$",
full.names = TRUE
)
if (length(archivos_forestales) == 0) {
stop("No se generaron archivos filtrados; compruebe las categorías y columnas.")
}
forestal <- arrow::open_dataset(archivos_forestales, format = "parquet")
filas_forestales <- forestal |>
dplyr::summarise(total = dplyr::n()) |>
dplyr::collect() |>
dplyr::pull(total)
cat("Archivos forestales normalizados:", length(archivos_forestales), "\n")
cat("Registros forestales:", base::format(filas_forestales, big.mark = "."), "\n")
resumen_rubros <- forestal |>
dplyr::count(rubro, sort = TRUE) |>
dplyr::collect()
knitr::kable(resumen_rubros, caption = "Registros por categoría forestal")
| rubro | n |
|---|---|
| PAPEL Y CARTON | 747201 |
| MADERA | 140295 |
| CARBON VEGETAL | 48645 |
| CAPITULO 47 PASTA DE MADERA O DE OTRAS MATERIAS FIBROSAS CELULOSICAS ,DESPERDICIOS Y DESECHOS DE PA | 9511 |
| CAPITULO 46 MANUFACTURAS DE ESPARTERIA O DE CESTERIA | 6568 |
| CAPITULO 13GOMAS, RESINAS Y DEMAS JUGOS Y EXTRACTOS VEGETALES | 5995 |
| CAPITULO 45CORCHO Y MANUFACTURAS DE CORCHO | 1079 |
| CAPITULO 55 FIBRAS SINTETICAS O ARTIFICIALES DISCONTINUAS | 10 |
resumen_operaciones <- forestal |>
dplyr::group_by(operacion) |>
dplyr::summarise(
despachos = dplyr::n_distinct(despacho),
registros = dplyr::n(),
.groups = "drop"
) |>
dplyr::collect()
knitr::kable(resumen_operaciones, caption = "Validación por tipo de operación")
| operacion | despachos | registros |
|---|---|---|
| IMPORTACION | 187874 | 809833 |
| EXPORTACION | 101975 | 149471 |
operaciones_tipo <- forestal |>
dplyr::group_by(operacion) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
registros = dplyr::n(),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
valor_fob_usd = sum(fob_dolar, na.rm = TRUE),
.groups = "drop"
) |>
dplyr::collect() |>
dplyr::arrange(dplyr::desc(operaciones))
knitr::kable(operaciones_tipo, digits = 2, caption = "Comercio forestal por operación")
| operacion | operaciones | registros | toneladas | valor_fob_usd |
|---|---|---|---|---|
| IMPORTACION | 187874 | 809833 | 7967486 | 17893145164 |
| EXPORTACION | 101975 | 149471 | 4603494 | 3206978994 |
ggplot(operaciones_tipo, aes(x = reorder(operacion, operaciones), y = operaciones, fill = operacion)) +
geom_col(show.legend = FALSE) +
coord_flip() +
scale_y_continuous(labels = scales::label_comma(big.mark = ".", decimal.mark = ",")) +
labs(title = "Despachos por tipo de operación", x = NULL, y = "Despachos distintos") +
theme_minimal(base_size = 12)
operaciones_rubro <- forestal |>
dplyr::group_by(rubro, operacion) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
.groups = "drop"
) |>
dplyr::collect()
ggplot(operaciones_rubro, aes(x = reorder(rubro, operaciones), y = operaciones, fill = operacion)) +
geom_col(position = "dodge") +
coord_flip() +
scale_y_continuous(labels = scales::label_comma(big.mark = ".", decimal.mark = ",")) +
labs(title = "Despachos por categoría y operación", x = NULL, y = "Despachos distintos", fill = "Operación") +
theme_minimal(base_size = 11)
volumen_valor <- forestal |>
dplyr::group_by(operacion) |>
dplyr::summarise(
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
valor_fob_usd = sum(fob_dolar, na.rm = TRUE),
.groups = "drop"
) |>
dplyr::collect()
knitr::kable(volumen_valor, digits = 2, caption = "Peso neto y valor FOB por operación")
| operacion | toneladas | valor_fob_usd |
|---|---|---|
| IMPORTACION | 7967486 | 17893145164 |
| EXPORTACION | 4603494 | 3206978994 |
ggplot(volumen_valor, aes(x = reorder(operacion, toneladas), y = toneladas, fill = operacion)) +
geom_col(show.legend = FALSE) +
coord_flip() +
scale_y_continuous(labels = scales::label_number(big.mark = ".", decimal.mark = ",")) +
labs(title = "Volumen físico por tipo de operación", x = NULL, y = "Toneladas netas") +
theme_minimal(base_size = 12)
evolucion_anual <- forestal |>
dplyr::group_by(anio, operacion) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
valor_fob_usd = sum(fob_dolar, na.rm = TRUE),
.groups = "drop"
) |>
dplyr::collect()
ggplot(evolucion_anual, aes(x = anio, y = toneladas, color = operacion, group = operacion)) +
geom_line(linewidth = 0.9) +
geom_point(size = 2) +
scale_x_continuous(breaks = sort(unique(evolucion_anual$anio))) +
scale_y_continuous(labels = scales::label_number(big.mark = ".", decimal.mark = ",")) +
labs(title = "Evolución anual del volumen forestal", x = "Año", y = "Toneladas netas", color = "Operación") +
theme_minimal(base_size = 11) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
mensual_anual <- forestal |>
dplyr::group_by(anio, mes, operacion) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
.groups = "drop"
) |>
dplyr::collect() |>
dplyr::mutate(mes_num = match(normalizar_texto(mes), meses_es)) |>
dplyr::filter(!is.na(mes_num))
estacionalidad <- mensual_anual |>
dplyr::group_by(mes_num, operacion) |>
dplyr::summarise(
toneladas_promedio = mean(toneladas, na.rm = TRUE),
operaciones_promedio = mean(operaciones, na.rm = TRUE),
.groups = "drop"
) |>
dplyr::mutate(mes = factor(meses_es[mes_num], levels = meses_es))
ggplot(estacionalidad, aes(x = mes, y = toneladas_promedio, color = operacion, group = operacion)) +
geom_line(linewidth = 0.9) +
geom_point(size = 2) +
scale_y_continuous(labels = scales::label_number(big.mark = ".", decimal.mark = ",")) +
labs(title = "Volumen mensual promedio por operación", x = "Mes", y = "Toneladas promedio", color = "Operación") +
theme_minimal(base_size = 11) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
productos_base <- forestal |>
dplyr::select(operacion, mercaderia, despacho, kilo_neto, fob_dolar) |>
dplyr::collect() |>
as.data.frame()
top_productos <- productos_base |>
dplyr::filter(
!is.na(mercaderia),
trimws(as.character(mercaderia)) != ""
) |>
dplyr::group_by(operacion, mercaderia) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
valor_fob_usd = sum(fob_dolar, na.rm = TRUE),
.groups = "drop"
) |>
dplyr::group_by(operacion) |>
dplyr::slice_max(
order_by = operaciones,
n = 10,
with_ties = FALSE
) |>
dplyr::ungroup()
knitr::kable(
top_productos,
digits = 2,
caption = "Diez principales mercaderías por operación"
)
| operacion | mercaderia | operaciones | toneladas | valor_fob_usd |
|---|---|---|---|---|
| EXPORTACION | LOS DEMAS PAPELES Y CARTONES DE GRAMAJE SUPERIOR A 150 G/M2 | 19172 | 763497.75 | 738553699.88 |
| EXPORTACION | LATERAL DE CARTON | 1344 | 332.43 | 19688.24 |
| EXPORTACION | CARBON VEGETAL EN BOLSAS | 1063 | 102294.12 | 37894237.49 |
| EXPORTACION | CARBON VEGETAL EN BOLSAS. | 647 | 66693.15 | 21615351.91 |
| EXPORTACION | CARBON VEGETAL | 580 | 34728.74 | 11136789.79 |
| EXPORTACION | PBL-CARTON YESO | 559 | 71068.00 | 40545964.98 |
| EXPORTACION | FORRO DE CARTON | 486 | 19.94 | 2969.14 |
| EXPORTACION | MADERA TERCIADA Y/O MULTILAMINADA | 411 | 13514.51 | 8281144.11 |
| EXPORTACION | LOS DEMAS PAPELES Y CARTONES DE GRAMAJE INFERIOR O IGUAL A 150 G/M2 | 401 | 12909.64 | 12595468.99 |
| EXPORTACION | CAJAS | 377 | 52.18 | 661298.78 |
| IMPORTACION | CAJAS DE PAPEL ONDULADO DE DIFERENTES MEDIDAS | 667 | 4903.18 | 3978943.61 |
| IMPORTACION | CAJAS DE CARTON CORRUGADO, DE DISTINTAS MEDIDAS, PARA CARNE, SEGUN DESCRIPCION EN SUB-ITEM: | 650 | 9079.81 | 7757984.23 |
| IMPORTACION | ALMOHADILLAS(PAD) PAD FOR AUTOMOTIVE HARNES PRODUCTION | 541 | 431.49 | 5517135.91 |
| IMPORTACION | LOS DEMAS, (66) UNI MDF DETALLADO EN LA SUBITEM | 541 | 3863.91 | 1741413.43 |
| IMPORTACION | FONDOS DE CARTON CORRUGADO. | 540 | 4631.34 | 5417819.85 |
| IMPORTACION | PAPEL HIGIENICO,EN: | 528 | 25512.83 | 46516319.38 |
| IMPORTACION | ETIQUETA . | 517 | 1111.57 | 5106898.75 |
| IMPORTACION | LOS DEMAS, (66) UNI MDF DETALLADO SEGUN SUBITEM | 515 | 3727.12 | 1866901.97 |
| IMPORTACION | ETIQUETAS (LABEL) IDENTIFICATION LABELS FOR AUTOMOTIVE HARNESS PRODUCTION | 447 | 63.82 | 1143038.23 |
| IMPORTACION | JUNTA | 441 | 4.56 | 225486.72 |
ggplot(
top_productos,
aes(x = reorder(mercaderia, operaciones), y = operaciones, fill = operacion)
) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~ operacion, scales = "free_y") +
labs(
title = "Principales mercaderías forestales",
x = NULL,
y = "Despachos distintos"
) +
theme_minimal(base_size = 10)
paises_base <- forestal |>
dplyr::select(
operacion,
pais_origen,
pais_procedencia_destino,
despacho,
kilo_neto
) |>
dplyr::collect() |>
as.data.frame()
paises <- paises_base |>
dplyr::mutate(
pais = ifelse(
operacion == "IMPORTACION",
pais_origen,
pais_procedencia_destino
)
) |>
dplyr::filter(
!is.na(pais),
trimws(as.character(pais)) != ""
) |>
dplyr::group_by(operacion, pais) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
.groups = "drop"
) |>
dplyr::group_by(operacion) |>
dplyr::slice_max(
order_by = operaciones,
n = 10,
with_ties = FALSE
) |>
dplyr::ungroup()
knitr::kable(
paises,
digits = 2,
caption = "Principales países por operación"
)
| operacion | pais | operaciones | toneladas |
|---|---|---|---|
| EXPORTACION | BRASIL | 14108 | 542157.57 |
| EXPORTACION | CHILE | 8460 | 359335.34 |
| EXPORTACION | ESTADOS UNIDOS DE AMERICA | 7179 | 207371.57 |
| EXPORTACION | BR - BRASIL | 6540 | 236701.58 |
| EXPORTACION | ARGENTINA | 6481 | 346027.11 |
| EXPORTACION | URUGUAY | 5723 | 174225.44 |
| EXPORTACION | REINO UNIDO | 4758 | 415717.15 |
| EXPORTACION | CL - CHILE | 4501 | 195897.57 |
| EXPORTACION | US - ESTADOS UNIDOS DE AMERICA | 3340 | 123875.82 |
| EXPORTACION | AR - ARGENTINA | 3113 | 123247.60 |
| IMPORTACION | BRASIL | 66188 | 3004663.30 |
| IMPORTACION | BR - BRASIL | 31044 | 1639877.49 |
| IMPORTACION | CHINA | 20496 | 336984.08 |
| IMPORTACION | ARGENTINA | 12677 | 554007.82 |
| IMPORTACION | CN - CHINA | 9411 | 182596.04 |
| IMPORTACION | ESTADOS UNIDOS DE AMERICA | 6526 | 132710.19 |
| IMPORTACION | AR - ARGENTINA | 4992 | 306839.79 |
| IMPORTACION | ALEMANIA | 3509 | 77230.18 |
| IMPORTACION | CHILE | 2665 | 58757.35 |
| IMPORTACION | US - ESTADOS UNIDOS DE AMERICA | 2658 | 59988.44 |
ggplot(
paises,
aes(x = reorder(pais, operaciones), y = operaciones, fill = operacion)
) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~ operacion, scales = "free_y") +
labs(
title = "Principales países de origen y destino",
x = NULL,
y = "Despachos distintos"
) +
theme_minimal(base_size = 10)
logistica_base <- forestal |>
dplyr::select(
operacion,
aduana,
medio_transporte,
despacho,
kilo_neto
) |>
dplyr::collect() |>
as.data.frame()
resumen_aduanas <- logistica_base |>
dplyr::filter(!is.na(aduana), trimws(as.character(aduana)) != "") |>
dplyr::group_by(operacion, aduana) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
.groups = "drop"
) |>
dplyr::group_by(operacion) |>
dplyr::slice_max(
order_by = operaciones,
n = 10,
with_ties = FALSE
) |>
dplyr::ungroup()
resumen_transporte <- logistica_base |>
dplyr::filter(
!is.na(medio_transporte),
trimws(as.character(medio_transporte)) != ""
) |>
dplyr::group_by(operacion, medio_transporte) |>
dplyr::summarise(
operaciones = dplyr::n_distinct(despacho),
toneladas = sum(kilo_neto, na.rm = TRUE) / 1000,
.groups = "drop"
) |>
dplyr::group_by(operacion) |>
dplyr::slice_max(
order_by = operaciones,
n = 10,
with_ties = FALSE
) |>
dplyr::ungroup()
knitr::kable(resumen_aduanas, digits = 2, caption = "Principales aduanas")
| operacion | aduana | operaciones | toneladas |
|---|---|---|---|
| EXPORTACION | PUERTO SECO BOREAL | 19516 | 679410.78 |
| EXPORTACION | PTO SEGURO FLUVIAL | 15895 | 954341.02 |
| EXPORTACION | TER. DE CARGAS KM.12 | 13621 | 523421.61 |
| EXPORTACION | CAACUPEMI | 12198 | 563421.80 |
| EXPORTACION | CHACOI | 11484 | 554251.28 |
| EXPORTACION | TERPORT - VILLETA | 10437 | 560380.57 |
| EXPORTACION | CAMPESTRE S.A. | 5618 | 98398.79 |
| EXPORTACION | PEDRO JUAN CABALLERO | 3891 | 213025.54 |
| EXPORTACION | MCAL.ESTIGARRIBIA | 2136 | 60053.13 |
| EXPORTACION | ENCARNACION | 1587 | 101205.80 |
| IMPORTACION | CIUDAD DEL ESTE | 63591 | 3197051.61 |
| IMPORTACION | AEROP. PETTIROSSI | 19668 | 27021.27 |
| IMPORTACION | SOLUCION LOGISTICA | 12878 | 350722.40 |
| IMPORTACION | PAKSA | 11312 | 534634.40 |
| IMPORTACION | CAACUPEMI | 9775 | 840793.22 |
| IMPORTACION | PUERTOS Y ESTIBAJES | 9489 | 455650.90 |
| IMPORTACION | PTO SEGURO FLUVIAL | 8395 | 533990.20 |
| IMPORTACION | JOSE FALCON | 6050 | 471443.01 |
| IMPORTACION | TERPORT - VILLETA | 5240 | 387587.07 |
| IMPORTACION | EMPEDRIL S.A. | 5221 | 246615.41 |
knitr::kable(
resumen_transporte,
digits = 2,
caption = "Principales medios de transporte"
)
| operacion | medio_transporte | operaciones | toneladas |
|---|---|---|---|
| EXPORTACION | CAMION | 59559 | 2284247.94 |
| EXPORTACION | ACUATICO | 41636 | 2309536.32 |
| EXPORTACION | AVION | 703 | 5549.89 |
| EXPORTACION | PROPIOS MEDIOS | 3 | 290.22 |
| IMPORTACION | CAMION | 112380 | 5855595.85 |
| IMPORTACION | ACUATICO | 22788 | 1919095.57 |
| IMPORTACION | AVION | 20395 | 25898.62 |
| IMPORTACION | PROPIOS MEDIOS | 281 | 449.47 |
ggplot(resumen_aduanas, aes(x = reorder(aduana, operaciones), y = operaciones, fill = operacion)) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~ operacion, scales = "free_y") +
labs(title = "Principales aduanas forestales", x = NULL, y = "Despachos distintos") +
theme_minimal(base_size = 10)
ggplot(resumen_transporte, aes(x = reorder(medio_transporte, operaciones), y = operaciones, fill = operacion)) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~ operacion, scales = "free_y") +
labs(title = "Medios de transporte utilizados", x = NULL, y = "Despachos distintos") +
theme_minimal(base_size = 10)
RUBRO;
revise las categorías listadas antes de interpretar el filtro como una
definición oficial del sector._forestal_normalizado_v1 y la reutiliza en ejecuciones
posteriores. Si cambia el patrón forestal, establezca
reprocesar_cache <- TRUE en el bloque de configuración y
vuelva a tejer el documento.Dirección Nacional de Ingresos Tributarios. Datos abiertos.