Este es el tercer cuaderno de R Markdown para el curso de Geomática Básica. En él se ilustra cómo obtener estadísticas multianuales de un grupo determinado de cultivos agrícolas en el departamento de Vichada. Como fuente principal de información se utilizarán las Evaluaciones Agropecuarias Municipales (EVA), una base de datos sobre la actividad agrícola en Colombia, publicada por la Unidad de Planificación Rural Agropecuaria (UPRA).
En este paso instalaremos y cargaremos las librerías de R necesarias para el procesamiento, análisis y visualización de los datos.
# Ejecutar las siguientes líneas desde la consola:
# install.packages("dplyr")
# install.packages("readxl")
# install.packages("sf")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── 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
library(dplyr)
library(readr)
library(ggplot2)
Ingresa a https://www.datos.gov.co/Agricultura-y-Desarrollo-Rural/Evaluaciones-Agropecuarias-Municipales-EVA/2pnw-mmge/data para encontrar la base de datos.
En el sitio web (datos.gov.co), visualiza la información y aplica un filtro para obtener únicamente los registros correspondientes al departamento de Vichada. Posteriormente, exporta los datos en formato CSV.
Ahora, dirígete a la carpeta de Descargas de tu computador y localiza el archivo Evaluaciones_Agropecuarias_Municipales_EVA.csv. Trasládalo a tu directorio de trabajo en RStudio.
list.files(".", pattern = "csv")
## [1] "Evaluaciones_Agropecuarias_Municipales_EVA_20261027.csv"
Ahora procederemos a leer la base de datos de las Evaluaciones Agropecuarias Municipales (EVA) correspondiente al periodo 2007-2018 para el departamento de Vichada.
# Ajustar la ruta del archivo según la ubicación de los datos
(eva = read_csv("Evaluaciones_Agropecuarias_Municipales_EVA_20261027.csv",
col_names = TRUE,
show_col_types = FALSE))
Observa la tabla y confirma que contiene estadísticas agrícolas correspondientes a diferentes años. ¿Puedes identificar cuál es el periodo temporal que abarcan estos datos?
Es muy importante conocer los nombres exactos de las variables que reconoce el programa, ya que pueden ser diferentes de los que observamos visualmente en la tabla. Vamos a identificarlos:
names(eva)
## [1] "CÓD. \nDEP."
## [2] "DEPARTAMENTO"
## [3] "CÓD. MUN."
## [4] "MUNICIPIO"
## [5] "GRUPO \nDE CULTIVO"
## [6] "SUBGRUPO \nDE CULTIVO"
## [7] "CULTIVO"
## [8] "DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO"
## [9] "AÑO"
## [10] "PERIODO"
## [11] "Área Sembrada\n(ha)"
## [12] "Área Cosechada\n(ha)"
## [13] "Producción\n(t)"
## [14] "Rendimiento\n(t/ha)"
## [15] "ESTADO FISICO PRODUCCION"
## [16] "NOMBRE \nCIENTIFICO"
## [17] "CICLO DE CULTIVO"
Seleccionaremos algunos atributos relevantes para depurar el objeto
eva:
# Revisar el resultado del último bloque de código y
# ajustar los nombres de los atributos según los datos propios
eva %>% dplyr::select('CÓD. MUN.':'ESTADO FISICO PRODUCCION') -> eva.tmp
eva.tmp
Revisa el resultado y verifica que únicamente se hayan seleccionado las columnas relevantes.
Ahora cambiaremos los nombres de algunas columnas que contienen espacios, saltos de línea o caracteres que dificultan su utilización en R.
# Asegúrate de utilizar los nombres de las columnas del objeto eva.tmp
eva.tmp %>% dplyr::rename(
'Cod_Mun' = 'CÓD. MUN.',
'Grupo' = 'GRUPO \nDE CULTIVO',
'Subgrupo' = 'SUBGRUPO \nDE CULTIVO',
'Year' = 'AÑO',
'AreaSembrada' = 'Área Sembrada\n(ha)',
'AreaCosechada' = 'Área Cosechada\n(ha)',
'Produccion' = 'Producción\n(t)',
'Rendimiento' = 'Rendimiento\n(t/ha)',
'Sistema' = 'DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO',
'Estado' = 'ESTADO FISICO PRODUCCION'
) -> new_eva
Comprobemos el resultado:
new_eva
Revisa la tabla anterior y verifica que los atributos cuantitativos estén almacenados como datos numéricos y no como cadenas de texto.
Muchas tareas de análisis de datos pueden abordarse mediante el paradigma dividir-aplicar-combinar (split-apply-combine): dividir los datos en grupos, aplicar un análisis a cada grupo y, posteriormente, combinar los resultados.
La librería dplyr facilita este procedimiento
mediante la función group_by(), que permite agrupar los
datos según una o varias variables. Una vez agrupados, la función
summarize() permite resumir cada grupo en una sola fila.
Para ello, summarize() aplica una función de agregación o
resumen a cada grupo.
Por ejemplo, si queremos conocer la producción total por grupo de cultivos, escribimos:
new_eva %>%
##filter(Produccion > 0) %>%
group_by(Grupo) %>%
summarize(total_produccion = sum(Produccion)) %>%
arrange(desc(total_produccion))
Observa que la producción total corresponde a la suma de la producción registrada para cada grupo de cultivos durante el periodo 2007-2018. En el departamento de Vichada, los dos grupos de cultivos con mayor producción acumulada fueron los cereales, con 360.043 toneladas, y las leguminosas, con 149.713 toneladas.
Para guardar la producción total en un objeto:
new_eva %>%
group_by(Grupo) %>%
summarize(total_produccion = sum(Produccion)) -> PT
Para filtrar los grupos de cultivos más importantes:
PT %>%
filter(total_produccion > 100000) -> main.groups
Para conocer la producción total de los principales grupos de cultivos:
(value = sum(main.groups$total_produccion))
## [1] 632019
Para añadir un nuevo atributo con el porcentaje de participación en la producción total:
main.groups$percent = main.groups$total_produccion/value
Para crear un gráfico circular de la producción total de los principales grupos de cultivos:
library(ggplot2)
# Gráfico de barras
bp <- ggplot(main.groups, aes(x="", y=percent, fill=Grupo)) +
geom_bar(width = 1, stat = "identity")
# Gráfico circular
pie <- bp + coord_polar("y", start=0)
pie
Para identificar los municipios que lideraron la producción de cada grupo de cultivos durante el periodo 2007-2018:
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_prod)) %>%
arrange(desc(total_prod))
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by Grupo and MUNICIPIO.
## ℹ Output is grouped by Grupo.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(Grupo, MUNICIPIO))` for per-operation grouping
## (`?dplyr::dplyr_by`) instead.
Para guardar los resultados en un objeto:
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_prod)) -> leaders
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by Grupo and MUNICIPIO.
## ℹ Output is grouped by Grupo.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(Grupo, MUNICIPIO))` for per-operation grouping
## (`?dplyr::dplyr_by`) instead.
leaders
Para filtrar los municipios más importantes desde el punto de vista agrícola:
main.leaders <- leaders %>%
filter(total_prod > 20000)
main.leaders
Durante el periodo 2007-2018, Cumaribo concentró los mayores registros de producción acumulada en cereales, leguminosas y tubérculos y plátanos, mientras que Puerto Carreño destacó en frutales y La Primavera en oleaginosas. Estos resultados evidencian diferencias en la composición productiva de los municipios de Vichada.
A continuación, se representará gráficamente la producción acumulada de los municipios líderes en los grupos de cultivos seleccionados para Vichada durante el periodo 2007-2018. Para ello, se utilizará un gráfico de barras que permita comparar los registros de producción superiores a 20.000 toneladas.
# Gráfico de barras de los municipios líderes
p <- ggplot(data = main.leaders,
aes(x = MUNICIPIO, y = total_prod)) +
geom_bar(stat = "identity")
p
El gráfico muestra que Cumaribo concentra la mayor producción acumulada
entre los registros seleccionados, debido principalmente a su
participación en cereales, leguminosas y tubérculos y plátanos. Puerto
Carreño y La Primavera presentan valores inferiores, asociados a los
grupos de frutales y oleaginosas, respectivamente. Es importante señalar
que esta comparación corresponde únicamente a los grupos seleccionados y
no a la producción agrícola total de cada municipio.
Con el propósito de analizar la dinámica temporal de un cultivo representativo del departamento de Vichada, se examinará la producción agrícola registrada durante el periodo 2007-2018. Para seleccionar el cultivo de estudio, se identificarán inicialmente los cereales con mayor producción acumulada en Cumaribo, municipio que presenta el registro más alto dentro de este grupo.
# Identificar los principales cereales de Cumaribo
new_eva %>%
filter(MUNICIPIO == "CUMARIBO",
Grupo == "CEREALES") %>%
group_by(CULTIVO) %>%
summarize(
Produccion_total = sum(Produccion, na.rm = TRUE)
) %>%
arrange(desc(Produccion_total))
Los resultados muestran que el maíz fue el cereal con mayor producción acumulada en Cumaribo durante el periodo 2007-2018, con 326.641 toneladas, seguido del arroz con 25.079 toneladas. Debido a su participación predominante dentro del grupo de cereales, se seleccionará el maíz para analizar la evolución anual de su producción en este municipio.
# Seleccionar la producción de maíz en Cumaribo
new_eva %>%
filter(MUNICIPIO == "CUMARIBO" & CULTIVO == "MAIZ") %>%
group_by(Year, CULTIVO) %>%
select(MUNICIPIO, CULTIVO, Produccion, Year) -> cumaribo_maiz
cumaribo_maiz
La selección de los registros correspondientes al cultivo de maíz en Cumaribo permitió identificar 26 observaciones distribuidas entre 2007 y 2018. Dado que algunos años presentan más de un registro de producción, es necesario agregar los valores correspondientes a cada año para obtener una serie temporal anual que permita analizar su evolución durante el periodo de estudio.
# Calcular la producción anual de maíz en Cumaribo
cumaribo_maiz_anual <- cumaribo_maiz %>%
group_by(Year) %>%
summarize(
Produccion_anual = sum(Produccion, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(Year)
cumaribo_maiz_anual
sum(cumaribo_maiz_anual$Produccion_anual)
## [1] 326641
Una vez agrupados los registros por año, se verificó que la producción acumulada de maíz en Cumaribo durante el periodo 2007-2018 corresponde a 326.641 toneladas, valor que coincide con el total obtenido anteriormente. A continuación, se representa gráficamente la evolución anual de la producción para identificar sus variaciones a lo largo del periodo estudiado.
# Evolución anual de la producción de maíz en Cumaribo
ggplot(cumaribo_maiz_anual,
aes(x = Year, y = Produccion_anual)) +
geom_line(color = "steelblue", linewidth = 1) +
geom_point(color = "steelblue", size = 2) +
labs(
title = "Producción anual de maíz en Cumaribo (2007-2018)",
x = "Año",
y = "Producción (toneladas)"
) +
scale_x_continuous(breaks = 2007:2018) +
theme_minimal()
La producción de maíz en el municipio de Cumaribo presentó variaciones
significativas durante el periodo 2007-2018. Entre 2007 y 2014 se
registraron volúmenes relativamente bajos, con incrementos moderados.
Sin embargo, en 2015 se observa un aumento pronunciado que representa el
valor máximo de la serie, seguido de una producción todavía elevada en
2016.
A partir de 2017 se evidencia una reducción considerable, que continúa en 2018, aunque los volúmenes registrados permanecen por encima de los observados durante los primeros años del periodo. En conjunto, los resultados muestran una concentración importante de la producción acumulada en los años 2015 y 2016, dentro de un total de 326.641 toneladas registradas para el periodo analizado.
Estas variaciones permiten identificar cambios en la dinámica productiva del cultivo, aunque los datos disponibles no permiten establecer por sí solos sus causas. Para explicar el incremento y posterior disminución sería necesario examinar variables como el área sembrada, el área cosechada, los rendimientos y las condiciones productivas del municipio.
new_eva %>%
filter(MUNICIPIO == "CUMARIBO",
CULTIVO == "MAIZ") %>%
group_by(Year) %>%
summarize(
Produccion = sum(Produccion, na.rm = TRUE),
Area_cosechada = sum(AreaCosechada, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(Year)
La comparación entre la producción y el área cosechada de maíz en Cumaribo permite examinar con mayor detalle el incremento registrado en 2015. Entre 2014 y 2015, la producción pasó de 2.877 a 136.805 toneladas, mientras que el área cosechada aumentó de 1.722 a 21.195 hectáreas. Asimismo, el rendimiento calculado pasó de aproximadamente 1,67 a 6,45 toneladas por hectárea. Estos resultados indican que el incremento de la producción estuvo acompañado tanto por una expansión de la superficie cosechada como por un aumento del rendimiento. No obstante, la magnitud de las variaciones hace necesario considerar posibles diferencias en el registro estadístico antes de atribuirlas exclusivamente a transformaciones productivas.
print(
new_eva %>%
filter(MUNICIPIO == "CUMARIBO",
CULTIVO == "MAIZ") %>%
group_by(Year) %>%
summarize(
Produccion = sum(Produccion, na.rm = TRUE),
Area_cosechada = sum(AreaCosechada, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(
Rendimiento = round(Produccion / Area_cosechada, 2)
) %>%
arrange(Year),
n = Inf
)
## # A tibble: 12 × 4
## Year Produccion Area_cosechada Rendimiento
## <dbl> <dbl> <dbl> <dbl>
## 1 2007 64 43 1.49
## 2 2008 284 237 1.2
## 3 2009 190 199 0.95
## 4 2010 1655 572 2.89
## 5 2011 1600 1200 1.33
## 6 2012 1960 1400 1.4
## 7 2013 2142 1700 1.26
## 8 2014 2877 1722 1.67
## 9 2015 136805 21195 6.45
## 10 2016 126258 21103 5.98
## 11 2017 36925 9750 3.79
## 12 2018 15881 4552 3.49
La producción de maíz en el municipio de Cumaribo presentó variaciones significativas durante el periodo 2007-2018. Entre 2007 y 2014 se registraron volúmenes relativamente bajos, inferiores a 3.000 toneladas anuales. Sin embargo, en 2015 la producción aumentó considerablemente hasta alcanzar 136.805 toneladas, el valor máximo del periodo, acompañado de una expansión del área cosechada de 1.722 a 21.195 hectáreas respecto al año anterior.
Este incremento también estuvo asociado con un aumento del rendimiento calculado, que pasó de 1,67 t/ha en 2014 a 6,45 t/ha en 2015. En 2016 la producción se mantuvo elevada, con 126.258 toneladas, aunque posteriormente disminuyó hasta alcanzar 36.925 toneladas en 2017 y 15.881 toneladas en 2018. Durante estos últimos años también se redujeron tanto el área cosechada como el rendimiento.
En conjunto, los resultados evidencian una concentración de la producción en 2015 y 2016, dentro de un total acumulado de 326.641 toneladas para el periodo analizado. No obstante, la magnitud de las variaciones observadas hace necesario considerar posibles cambios en la cobertura o el registro estadístico de las Evaluaciones Agropecuarias Municipales antes de atribuirlas exclusivamente a transformaciones en las condiciones productivas del municipio.
Para representar la evolución de la producción de maíz en Cumaribo durante el periodo 2007-2018, se elaborará un gráfico de barras a partir de los registros anuales consolidados. La producción se expresará en miles de toneladas para facilitar la lectura y comparación de los valores entre años.
# Gráfico de barras de la producción anual de maíz
g <- ggplot(
data = cumaribo_maiz_anual,
aes(x = factor(Year), y = Produccion_anual / 1000)
) +
geom_bar(stat = "identity") +
labs(
x = "Año",
y = "Producción de maíz (miles de toneladas)"
)
Finalmente, se incorpora el título y la fuente de información al gráfico, con el propósito de presentar la evolución temporal de la producción de maíz en Cumaribo de manera clara y contextualizada.
# Añadir título y fuente al gráfico
g +
ggtitle("Evolución de la producción de maíz en Cumaribo (2007-2018)") +
labs(
caption = "Fuente: Evaluaciones Agropecuarias Municipales (EVA), UPRA."
) +
theme(
plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 45, hjust = 1)
)
El gráfico muestra la evolución de la producción de maíz en el municipio
de Cumaribo durante el periodo 2007-2018. Entre 2007 y 2014, la
producción se mantuvo relativamente baja, con registros anuales
inferiores a 3.000 toneladas. Sin embargo, en 2015 se presentó un
incremento considerable, alcanzando 136.805 toneladas, el valor más alto
del periodo, seguido de 126.258 toneladas en 2016. Posteriormente, la
producción disminuyó hasta alcanzar 36.925 toneladas en 2017 y 15.881
toneladas en 2018.
Este comportamiento estuvo acompañado por cambios importantes en el área cosechada y el rendimiento del cultivo. Entre 2014 y 2015, el área cosechada pasó de 1.722 a 21.195 hectáreas, mientras que el rendimiento calculado aumentó de 1,67 a 6,45 toneladas por hectárea. Esto indica que el incremento de la producción estuvo asociado tanto con la expansión de la superficie cosechada como con una mayor producción por unidad de área. No obstante, la magnitud de estas variaciones hace necesario interpretar los resultados con cautela, considerando posibles cambios en la cobertura o el registro de la información estadística.
Lizárraga, I. (2022). Understanding dynamic productivity of crops. Disponible en: https://rpubs.com/ials2un/production_dyn_v1
Unidad de Planificación Rural Agropecuaria (UPRA). Evaluaciones Agropecuarias Municipales (EVA). Base de datos de producción agrícola municipal, departamento de Vichada, periodo 2007-2018.
sessionInfo()
## R version 4.6.1 (2026-06-24)
## Platform: aarch64-apple-darwin23
## Running under: macOS Tahoe 26.5.1
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## time zone: America/Bogota
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] lubridate_1.9.5 forcats_1.0.1 stringr_1.6.0 dplyr_1.2.1
## [5] purrr_1.2.2 readr_2.2.0 tidyr_1.3.2 tibble_3.3.1
## [9] ggplot2_4.0.3 tidyverse_2.0.0
##
## loaded via a namespace (and not attached):
## [1] bit_4.6.0 gtable_0.3.6 jsonlite_2.0.0 crayon_1.5.3
## [5] compiler_4.6.1 tidyselect_1.2.1 parallel_4.6.1 jquerylib_0.1.4
## [9] scales_1.4.0 yaml_2.3.12 fastmap_1.2.0 R6_2.6.1
## [13] labeling_0.4.3 generics_0.1.4 knitr_1.52 bslib_0.12.0
## [17] pillar_1.11.1 RColorBrewer_1.1-3 tzdb_0.5.0 rlang_1.3.0
## [21] stringi_1.8.9 cachem_1.1.0 xfun_0.62 sass_0.4.10
## [25] S7_0.2.2 bit64_4.8.6 otel_0.2.0 timechange_0.4.0
## [29] cli_3.6.6 withr_3.0.3 magrittr_2.0.5 digest_0.6.39
## [33] grid_4.6.1 vroom_1.7.1 rstudioapi_0.19.0 hms_1.1.4
## [37] lifecycle_1.0.5 vctrs_0.7.3 evaluate_1.0.5 glue_1.8.1
## [41] farver_2.1.2 rmarkdown_2.32 tools_4.6.1 pkgconfig_2.0.3
## [45] htmltools_0.5.9
```