1. Introduccion

En este cuaderno se mostrara cómo obtener estadísticas de varios años 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 2007-2018 proporcionado por el Ministerio de Agricultura y Desarrollo Rural.

2. Configuracion

En esta configuracion, instalaremos y cargaremos las librerias R necesarias.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.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)

3. Descargar el conjuntod de dato de EVA para su departamento

Vaya a https://www.datos.gov.co/Agricultura-y-Desarrollo-Rural/Evaluaciones-Agropecuarias-Municipales-EVA/2pnw-mmge/data para descargar el conjuntod de datos.

En el sitio web vinculado (es decir, 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.

Ahora, vaya al directorio de descargas para averiguar el archivo Evaluaciones_Agropecuarias_Municipales_EVA.csv. Muévalo a su directorio de trabajo.

3.1 Leer el conjunto de datos EVA

list.files()
## [1] "Cultivo-de-Caña.html"     "Cultivo de Caña.nb.html" 
## [3] "Cultivo de Caña.Rmd"      "Cultivo_de_Arroz.nb.html"
## [5] "Cultivo_de_Arroz.Rmd"     "EVA_TOLIMA.csv"          
## [7] "EVA_TOLIMA.Rproj"

Ahora, vamos a leer el conjunto de datos eva EVA 2007-2018:

(eva = read_csv("./EVA_TOLIMA.csv"))
## Rows: 8595 Columns: 17
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (10): DEPARTAMENTO, MUNICIPIO, GRUPO 
## DE CULTIVO, SUBGRUPO 
## DE CULTIVO, ...
## dbl  (2): CÓD. 
## DEP., Rendimiento
## (t/ha)
## num  (5): CÓD. MUN., AÑO, Área Sembrada
## (ha), Área Cosechada
## (ha), Producción
## (t)
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

En la tabla anterior se pueden ver diferentes datos estadisticos agricolas para diferentes años.

Es impotante saber cuales son los nombres que le da el software a las diferentes caracteristicas:

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"

4. Limpiar el conjunto de datos EVA

Vamos a selccionar algunos atributos para el limpiar el objeto eva

eva %>% dplyr::select('CÓD. MUN.':'ESTADO FISICO PRODUCCION') ->eva.tmp
eva.tmp

Ahora vamos a comprobar la salida y verificar que solo se seleccionen las columnas relevantes.

Ahora, cambie los nombres de varias colmnas que contengan caracteres erroneos:

eva.tmp%>% dplyr::rename('Cod_Mun' = 'CÓD. MUN.',
                          'Grupo' = 'GRUPO \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

Verificamos el codigo:

new_eva

Revisar que la tabla anterios y verificar que los atributos cuantitativos que contiene se almacenen como tipo de datos numéricos (no como tipo de datos de cadena).

5. Analisis de datos

Muchas tareas de análisis de datos se pueden abordar utilizando el paradigma dividir-aplicar-combinar: dividir los datos en grupos, aplicar algún análisis a cada grupo y luego combinar los resultados.

La biblioteca dplyr hace esto muy fácil mediante el uso de la función group_by(), que divide los datos en grupos. Cuando los datos se agrupan de esta manera, summarize() se puede usar para contraer cada grupo en un resumen de una sola fila. summarize() hace esto aplicando una función de agregación o resumen a cada grupo.

5.1 Los cultivos más importantes entre 2007 y 2018

Por ejemplo, si queremos saber la producción total por grupo de cultivos, utilizamos el siguiente codigo:

new_eva %>%
  ##filter(Produccion > 0) %>%
  group_by(Grupo) %>%
  summarize(produccion_total = sum(Produccion)) %>%
  arrange(desc(produccion_total))

En la tabla podemos observar con los datos obtenidos que los cultivos con mayor produccion son los cereales, seguido por los tuberculos y platanos. Y la menor producción se encuentran las Flores y Follajes.

Ahora, para guardar la producción total de un objeto:

new_eva %>%
  group_by(Grupo) %>%
  summarize(produccion_total = sum(Produccion)) -> PT

Ahora, filtrar los cultivos más importantes y con más producción:

PT %>%
  filter(produccion_total > 500000) -> main.groups

Vamos a conocer la producción total para los principales grupos de cultivos:

(value = sum(main.groups$produccion_total))
## [1] 18856556

Ahora, añadimos un nuevo atributo con el porcentaje de producción total:

main.groups$percent = main.groups$produccion_total/value

Para crear un fráfico circular de la producción total de main.groups:

-#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

5.2 Municipios con mayor producción para cada grupo de cultivos

Para conocer los municipios que lideraron la producción de cada cultivo de 2007 a 2018:

new_eva %>% 
  group_by(Grupo, MUNICIPIO) %>% 
  summarize(prod_total = sum(Produccion, na.rm = TRUE)) %>%
  slice(which.max(prod_total)) %>%
  arrange(desc(prod_total))
## `summarise()` has grouped output by 'Grupo'. You can override using the
## `.groups` argument.

Para guardar el objeto:

new_eva %>% 
  group_by(Grupo, MUNICIPIO) %>% 
  summarize(prod_total = sum(Produccion, na.rm = TRUE)) %>%
  slice(which.max(prod_total)) -> 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(prod_total > 100000) -> main.leaders

Grafiquemos lo municipios lideres en producción:

-# Basic barplot

p<-ggplot(data = main.leaders, aes(x=MUNICIPIO, y=prod_total))+geom_bar(stat="identity")
p

5.3 Dinamica de un cultivo entre 2007 y 2018

new_eva %>%
  filter(MUNICIPIO == "ESPINAL" & CULTIVO == "ARROZ") %>%
  group_by(Year,CULTIVO) %>%
  select(MUNICIPIO, CULTIVO, Produccion, Year) -> Espinal_arroz

Verificar el codigo:

Espinal_arroz

Hagamos un gráfico rápido de la producción de arroz en el ESPINAL para todo el período de tiempo cubierto por el conjunto de datos de EVA:

g <- ggplot(aes(x=Year, y=Produccion/1000), data = Espinal_arroz) + geom_bar(stat="identity") + labs(y="Produccion de arroz [Ton x 1000]")

Añade un titulo y visualizalo:

g + ggtitle("Evolucion de la produccion de cultivos de arroz en Espinal entre los años 2007 a 2018") + labs(caption = "basado en datos de EVA (Minagricultura, 2020")

6. Analisis y Graficos adicionales:

Para ver los municipios con mayor superficie cosechada para cada grupo de cultivo en 2018:

new_eva %>% 
  filter(Year==2018) %>% 
  group_by(Grupo, MUNICIPIO) %>%
  summarize(max_area_cosecha = max(AreaCosechada, na.rm = TRUE)) %>%
    slice(which.max(max_area_cosecha)) %>%
    arrange(desc(max_area_cosecha)) -> area_cosecha_max
## `summarise()` has grouped output by 'Grupo'. You can override using the
## `.groups` argument.
area_cosecha_max

Y por ultimo para ver el maximo de area sembrada para cada cultivo en 2018:

new_eva %>% 
  filter(Year==2018) %>% 
  group_by(Grupo, MUNICIPIO) %>%
  summarize(max_area_sembrada = max(AreaSembrada, na.rm = TRUE)) %>%
    slice(which.max(max_area_sembrada)) %>%
    arrange(desc(max_area_sembrada)) -> area_sembrada_max
## `summarise()` has grouped output by 'Grupo'. You can override using the
## `.groups` argument.
area_sembrada_max

7. Información

7.1 Bibliografia

-**Lizarazo, I., 2022 Comprender la productividad dinamica de los cultivos. Disponible en: https://rpubs.com/ials2un/production_dyn_v

sessionInfo()
## R version 4.3.1 (2023-06-16 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
## 
## Matrix products: default
## 
## 
## 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.2 forcats_1.0.0   stringr_1.5.0   dplyr_1.1.3    
##  [5] purrr_1.0.2     readr_2.1.4     tidyr_1.3.0     tibble_3.2.1   
##  [9] ggplot2_3.4.3   tidyverse_2.0.0
## 
## loaded via a namespace (and not attached):
##  [1] sass_0.4.7        utf8_1.2.3        generics_0.1.3    stringi_1.7.12   
##  [5] hms_1.1.3         digest_0.6.33     magrittr_2.0.3    evaluate_0.21    
##  [9] grid_4.3.1        timechange_0.2.0  fastmap_1.1.1     jsonlite_1.8.7   
## [13] fansi_1.0.4       scales_1.2.1      jquerylib_0.1.4   cli_3.6.1        
## [17] rlang_1.1.1       crayon_1.5.2      bit64_4.0.5       munsell_0.5.0    
## [21] withr_2.5.0       cachem_1.0.8      yaml_2.3.7        tools_4.3.1      
## [25] parallel_4.3.1    tzdb_0.4.0        colorspace_2.1-0  vctrs_0.6.3      
## [29] R6_2.5.1          lifecycle_1.0.3   bit_4.0.5         vroom_1.6.3      
## [33] pkgconfig_2.0.3   pillar_1.9.0      bslib_0.5.1       gtable_0.3.4     
## [37] glue_1.6.2        xfun_0.40         tidyselect_1.2.0  highr_0.10       
## [41] rstudioapi_0.15.0 knitr_1.43        farver_2.1.1      htmltools_0.5.6  
## [45] rmarkdown_2.24    labeling_0.4.3    compiler_4.3.1