Este es el tercer cuaderno R Markdown para el curso Geomática Básica 2026. Ilustra cómo obtener estadísticas multianuales para un grupo determinado de cultivos en cualquier departamento. Utilizaremos como fuente principal de datos las Evaluaciones Agropecuarias Municipales (EVA), un conjunto de datos agrícolas de 2007 a 2026 proporcionado por el Ministerio de Agricultura y Desarrollo Rural.
En este paso, instalaremos y cargaremos las bibliotecas de R necesarias.
#run the following lines from the command line:
#install.packages('dplyr')
#install.packages('readxl')
#install.packages('sf)
library(tidyverse)
library(dplyr)
library(readr)
library(ggplot2)
Vamos a https://www.datos.gov.co/Agricultura-y-Desarrollo-Rural/Evaluaciones-Agropecuarias-Municipales-EVA/2pnw-mmge/data para encontrar el conjunto de datos
En el sitio web enlazado (datos.gov.co), visualice los datos y aplique un filtro para obtener solo los datos correspondientes a su departamento. Luego, exporte los datos en formato CSV.
A continuación, vaya a la carpeta de descargas para encontrar el archivo Evaluaciones_Agropecuarias_Municipales_EVA.csv. Muévalo a su directorio de trabajo.
list.files("./datos", pattern=c('csv'))
[1] "Evaluaciones_Agropecuarias_Municipales_EVA_20261027.csv"
Ahora, procedamos a leer el conjunto de datos de EVA 2007-2018
# adjust the filepath acording to your data
(eva = read_csv("./datos/Evaluaciones_Agropecuarias_Municipales_EVA_20261027.csv", col_names = TRUE,
show_col_types = FALSE))
Consulta la tabla y confirma que contiene estadísticas agrícolas de diferentes años. ¿Puedes indicar el período de tiempo al que corresponden estos datos?
Es muy importante saber qué nombres utiliza el software, ya que pueden ser diferentes a los que vemos nosotros. Averigüémoslo:
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"
Seleccionemos algunos atributos para limpiar el objeto eva:
# check the objet output in the last chunk and
# change attribute names according to your own data
eva %>% dplyr::select('CÓD. MUN.':'ESTADO FISICO PRODUCCION') -> eva.tmp
eva.tmp
Compruebe el resultado y verifique que solo se hayan seleccionado las columnas relevantes.
Ahora, cambie los nombres de varias columnas que contengan caracteres vacíos o “ruidosos”:
# make sure to use the column names that are in your eva.tmp object
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 Sembrada\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
Vamos a comprobar el resultado:
new_eva
Consulta la tabla anterior y verifica que los atributos cuantitativos se almacenen como tipos de datos numéricos (no como tipos de datos de cadena).
Muchas tareas de análisis de datos pueden abordarse utilizando el paradigma de dividir-aplicar-combinar: dividir los datos en grupos, aplicar algún análisis a cada grupo y, a continuación, combinar los resultados.
La biblioteca dplyr facilita enormemente este proceso mediante la función group_by(), que divide los datos en grupos. Una vez agrupados de esta forma, se puede usar summarize() para consolidar cada grupo en un resumen de una sola fila. summarize() realiza esta operación aplicando una función de agregación o resumen a cada grupo.
Por ejemplo, si queremos averiguar 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))
NA
Tenga en cuenta que la producción total contiene la suma de la producción de cada grupo de cultivos entre 2007 y 2018. En Arauca, los dos cultivos con mayor producción fueron “Frutales” y “Otros permanentes”.
Para guardar la producción total en un objeto:
new_eva %>%
group_by(Grupo) %>%
summarize(total_produccion = sum(Produccion)) -> PT
Para filtrar los cultivos más importantes:
PT %>%
filter(total_produccion > 10000) -> main.groups
Para conocer la producción total de los principales grupos de cultivos:
(value = sum(main.groups$total_produccion))
[1] 131486.3
Para agregar un nuevo atributo con porcentaje de la producción total:
main.groups$percent = main.groups$total_produccion/value
Para crear un gráfico circular de la producción total de main.groups:
library(ggplot2)
# Barplot
bp<- ggplot(main.groups, aes(x="", y=percent, fill=Grupo))+
geom_bar(width = 1, stat = "identity")
# Piechart
pie <- bp + coord_polar("y", start=0)
pie
Para conocer los municipios que lideraron la producción de cada cultivo entre 2007 y 2018:
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_prod)) %>%
arrange(desc(total_prod))
Para guardar el objeto:
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_prod)) -> leaders
## `summarise()` has grouped output by 'Grupo'. You can override using the `.groups` argument.
leaders
Para filtrar los municipios más importantes desde el punto de vista agrícola:
leaders %>%
filter(total_prod > 5000) -> main.leaders
Vamos a graficar los líderes filtrados:
# Basic barplot
p<-ggplot(data=main.leaders, aes(x=MUNICIPIO, y=total_prod )) +
geom_bar(stat="identity" , fill = "#2d6a4f")
p
new_eva %>%
filter(MUNICIPIO=="TAME" & CULTIVO=="PLATANO") %>%
group_by(Year, CULTIVO) %>%
select(MUNICIPIO, CULTIVO, Produccion, Year) -> Tame_platano
Vamos a comprobar el resultado:
Tame_platano
Vamos a hacer un gráfico rápido de la producción de platano en Tame para todo el período cubierto por el conjunto de datos EVA:
g <- ggplot(aes(x=Year, y=Produccion/1000), data = Tame_platano) + geom_bar(stat='identity', fill = "#1b4332") + labs(y='Produccion de Platano [Ton x 1000]')
Añade un título y visualiza:
g + ggtitle("Evolution of Platano Crop Production in Tame from 2007 to 2018") + labs(caption= "Based on EVA data (Minagricultura, 2020)")
Han ilustrado algunos ejemplos de análisis. Podrías analizar otras variables además de producción (por ejemplo, rendimiento, areacosechada, areasembrada).
Hay más ejemplos de análisis disponibles en https://rpubs.com/ials2un/EVA4Boyaca
En tu cuaderno, cita este trabajo como Vargas, D., 2026. Comprensión de la productividad dinámica de los cultivos. Disponible en https://rpubs.com/DV2026/1471070
sessionInfo()
R version 4.6.1 (2026-06-24 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 10 x64 (build 19045)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=Spanish_Colombia.utf8 LC_CTYPE=Spanish_Colombia.utf8
[3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C
[5] LC_TIME=Spanish_Colombia.utf8
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 crayon_1.5.3
[4] compiler_4.6.1 tidyselect_1.2.1 parallel_4.6.1
[7] scales_1.4.0 yaml_2.3.12 fastmap_1.2.0
[10] R6_2.6.1 labeling_0.4.3 generics_0.1.4
[13] knitr_1.52 pillar_1.11.1 RColorBrewer_1.1-3
[16] tzdb_0.5.0 rlang_1.3.0 stringi_1.8.9
[19] xfun_0.62 S7_0.2.2 bit64_4.8.6
[22] otel_0.2.0 timechange_0.4.0 cli_3.6.6
[25] withr_3.0.3 magrittr_2.0.5 digest_0.6.39
[28] grid_4.6.1 vroom_1.7.1 rstudioapi_0.19.0
[31] hms_1.1.4 lifecycle_1.0.5 vctrs_0.7.3
[34] evaluate_1.0.5 glue_1.8.1 farver_2.1.2
[37] rsconnect_1.11.2 rmarkdown_2.32 tools_4.6.1
[40] pkgconfig_2.0.3 htmltools_0.5.9