Este es el tercer cuaderno de R Markdown de la asignatura Geomatica Basica 2023. Aquí encontraras la forma en la que puedes obtener estadísticas multianuales del cacao en el departamento de Santander. Utilizaremos como fuente principal de datos las Evaluaciones Agropecuarias Municipales (EVA), un conjunto de datos agrícolas de 2007-2018 proporcionado por el Ministerio de Agricultura y Desarrollo Rural de Colombia.
También vamos a utilizar las principales funcionalidades de la biblioteca dplyr:
mutate: añade nuevas variables que son funciones de variables existentes. select: selecciona variables basándose en sus nombres. filter: selecciona casos basándose en sus valores. summarise: creduce múltiples valores a un único resumen. arrange: cambia el orden de las filas.
Todas éstas funciones se combinan de forma natural con group_by, que permite realizar cualquier operación “por grupo”.
Lo primero que necesitamos hacer es instalar y cargar la biblioteca R necesarias.
#run the following lines from the command line:
#install.packages('dplyr')
#install.packages('readxl')
#install.packages('sf')
#install.packages ('tidyverse')
library(tidyverse)
library(dplyr)
library(readr)
library(ggplot2)
Ingrese 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 vinculado (es decir datos.gov.co), visualiza los datos y aplica un filtro para obtener solo los datos correspondientes a tu departamento. Luego, exporte los datos en formato csv.
Ahora, dirígete al directorio de descargas para encontrar el archivo Evaluaciones_Agropecuarias_Municipales_EVA.csv. Muévalo a su directorio de trabajo.
list.files()
## [1] "aguacate.jpg" "BaseEVA_Agrícola20192022.xlsx"
## [3] "Cuaderno_aguacate.html" "Cuaderno_aguacate.pdf"
## [5] "Cuaderno_aguacate.Rmd" "Cuaderno_aguacate.Santander.Rmd"
## [7] "Cuaderno_Join.nb.html" "Cuaderno_Join.Rmd"
## [9] "EVA_STDR.csv" "Librerias"
## [11] "rsconnect" "SANTANDER_EVA.qgz"
## [13] "stder_frutales_2022.csv"
Ahora, procedamos a leer el conjunto de datos EVA 2007-2018:
# adjust the filepath acording to your data
(eva = read.csv("./EVA_STDR.csv"))
Vea la tabla y confirme que contenga estadísticas agrícolas para diferentes años. ¿Puedes decir cuál es el período de tiempo para estos datos?
Es muy importante saber cuáles son los nombres que puede observar en el software. Puede ser diferente de lo que vemos:
names(eva)
## [1] "CÓD...DEP."
## [2] "DEPARTAMENTO"
## [3] "CÓD..MUN."
## [4] "MUNICIPIO"
## [5] "GRUPO..DE.CULTIVO"
## [6] "SUBGRUPO..DE.CULTIVO"
## [7] "CULTIVO"
## [8] "DESAGREGACIÓN.REGIONAL.Y.O.SISTEMA.PRODUCTIVO"
## [9] "AÑO"
## [10] "PERIODO"
## [11] "Área.Sembrada..ha."
## [12] "Área.Cosechada..ha."
## [13] "Producción..t."
## [14] "Rendimiento..t.ha."
## [15] "ESTADO.FISICO.PRODUCCION"
## [16] "NOMBRE..CIENTIFICO"
## [17] "CICLO.DE.CULTIVO"
Seleccionemos algunos atributos para limpiar el objeto eva:
eva %>% dplyr::select('CÓD..MUN.':'ESTADO.FISICO.PRODUCCION') -> eva.tmp
eva.tmp
Verifique el resultado y verifique que solo se seleccionaron 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..DE.CULTIVO',
'Subgrupo' = 'SUBGRUPO..DE.CULTIVO',
'Sistema' = 'DESAGREGACIÓN.REGIONAL.Y.O.SISTEMA.PRODUCTIVO',
'Year' = 'AÑO',
'AreaSembrada' ='Área.Sembrada..ha.',
'AreaCosechada' = 'Área.Cosechada..ha.',
'Produccion' = 'Producción..t.', 'Rendimiento' = 'Rendimiento..t.ha.',
'Estado' = 'ESTADO.FISICO.PRODUCCION') -> new_eva
Comprobemos el resultado:
new_eva
Consulte la tabla anterior y verifique 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 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 que esto sea 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, se puede utilizar summarize() para colapsar cada grupo en un resumen de una sola fila. summarize() hace esto aplicando una función de agregación o resumen a cada grupo.
Por ejemplo, si queremos saber la produccion total por grupo de cultivos, tecleamos:
new_eva %>%
group_by(Grupo) %>%
summarize(total_produccion = sum(Produccion)) %>%
arrange(desc(total_produccion))
Nótese que la producción total contiene la suma de la producción de cada grupo de cultivos entre 2007 y 2018. En Santander, los dos cultivos de mayor producción fueron “Frutales” y “Tubérculos y Plátanos”.
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 > 1000000) -> main.groups
Para conocer la producción total de los principales grupos de cultivos:
(value = sum(main.groups$total_produccion))
## [1] 18075086
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 los grupos principales:
#barplot
bp<- ggplot(main.groups, aes(x="", y=percent, fill=Grupo))+
geom_bar(width = 1, stat = "identity")
#Piechart
# Piechart
pie <- bp + coord_polar("y", start=0)
pie
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(total_produccion = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_produccion)) %>%
arrange(desc(total_produccion))
## `summarise()` has grouped output by 'Grupo'. You can override using the
## `.groups` argument.
Para guardar el objeto:
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_produccion = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_produccion)) -> 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_produccion > 50000) -> main.leaders
Grafiquemos a los líderes filtrados:
p<-ggplot(data=main.leaders, aes(x=MUNICIPIO, y=total_produccion)) +
geom_bar(stat="identity")
p
Para conocer la produccion del Aguacate en el municipio del Playon entre el 2007 y 2018
new_eva %>%
filter(MUNICIPIO=="EL PLAYON" & CULTIVO=="AGUACATE") %>%
group_by(Year, CULTIVO) %>%
select(MUNICIPIO, CULTIVO, Produccion, Year) -> el_playon.aguacate
Comprobamos
el_playon.aguacate
Hagamos un gráfico de la producción de aguacate en El Playon durante todo el periodo cubierto por el conjunto de datos de EVA:
g <- ggplot(aes(x=Year, y=Produccion/1000), data = el_playon.aguacate) + geom_bar(stat='identity') + labs(y='Produccion de aguacate [Ton x 1000]')
Añade un título y visualiza:
g + ggtitle("Produccion del aguacate en el municipio de El Playon en el periodo del 2007 al 2018") + labs(caption= "Basado en datos de EVA (Minagricultura, 2023)")
Para conocer el total del area sembrada por grupo de cultivos en el departamento de Santander.
new_eva %>%
group_by(Grupo) %>%
summarize(total_AreaSembrada = sum(AreaSembrada)) %>%
arrange(desc(total_AreaSembrada))
Podemos decir que el grupo de cultivo OTROS PERMANTENTES ocupa una mayor extención en hectarias en el departamento.
Ahora vamos a determinar cual municipio ocupa la mayor extencion de su territorio en area sembrada
new_eva %>%
group_by(Grupo) %>%
summarize(total_AreaSembrada = sum(AreaSembrada)) -> PT
PT %>%
filter(total_AreaSembrada > 1000000) -> main.groups
(value = sum(main.groups$total_AreaSembrada))
## [1] 1463311
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_AreaSembrada = sum(AreaSembrada, na.rm = TRUE)) %>%
slice(which.max(total_AreaSembrada)) %>%
arrange(desc(total_AreaSembrada))
## `summarise()` has grouped output by 'Grupo'. You can override using the
## `.groups` argument.
Podemos decir que Puerto Wilches es el municipio que ocupa mayor area sembrada en el departamento.
Ahora vamos a graficarlo graficamos, separandolo por los lideres
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_AreaSembrada = sum(AreaSembrada, na.rm = TRUE)) %>%
slice(which.max(total_AreaSembrada)) -> leaders1
## `summarise()` has grouped output by 'Grupo'. You can override using the
## `.groups` argument.
leaders1
leaders1 %>%
filter(total_AreaSembrada> 100000) -> main.leaders1
p<-ggplot(data=main.leaders1, aes(x=MUNICIPIO, y=total_AreaSembrada)) +
geom_bar(stat="identity")
p
new_eva %>%
filter(MUNICIPIO=="EL PLAYON" & CULTIVO=="AGUACATE") %>%
group_by(Year, CULTIVO) %>%
select(MUNICIPIO, CULTIVO, AreaSembrada, Year) -> el_playon.areasembrada.Aguacate
Comprobamos
el_playon.areasembrada.Aguacate
Se puede afirmar que el año en el que mas areas sembradas por hectarias a tenido el municipio El Playon para el aguacate es el 2018
Para conocer el area de siembra por cultivo en el municipio El Playon
new_eva %>%
filter(MUNICIPIO=="EL PLAYON") %>%
group_by(Year, CULTIVO) %>%
select(MUNICIPIO, CULTIVO, AreaSembrada, Year) -> el_playon.areasembrada
Comprobamos
el_playon.areasembrada
Para conocer cual es el area de siembra de cada uno de los cultivos hacemos lo siguiente
el_playon.areasembrada %>%
group_by(CULTIVO) %>%
summarize(total_AreaSembrada = sum(AreaSembrada)) -> PT1
PT1 %>%
filter(total_AreaSembrada > 1000) -> main.groups
(value = sum(main.groups$total_AreaSembrada))
## [1] 35236
el_playon.areasembrada%>%
group_by(CULTIVO, MUNICIPIO) %>%
summarize(total_AreaSembrada = sum(AreaSembrada, na.rm = TRUE)) %>%
slice(which.max(total_AreaSembrada)) %>%
arrange(desc(total_AreaSembrada))
## `summarise()` has grouped output by 'CULTIVO'. You can override using the
## `.groups` argument.
Separamos los lideres para poder graficar
el_playon.areasembrada %>%
group_by(CULTIVO, MUNICIPIO) %>%
summarize(total_AreaSembrada = sum(AreaSembrada, na.rm = TRUE)) %>%
slice(which.max(total_AreaSembrada)) -> leaders2
## `summarise()` has grouped output by 'CULTIVO'. You can override using the
## `.groups` argument.
leaders2
El grafico
leaders2 %>%
filter(total_AreaSembrada> 1000) -> main.leaders1
p<-ggplot(data=main.leaders1, aes(x=CULTIVO, y=total_AreaSembrada/100)) +
geom_bar(stat="identity")
p
Sabemos que el cultivo que mas area ocupa en el municipio El Playon es
el Cacao.
Se podrían analizar otras variables además de la producción y el area Sembrada por ejemplo el rendimiento y area cosechada).
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] gtable_0.3.4 jsonlite_1.8.7 compiler_4.3.1 tidyselect_1.2.0
## [5] jquerylib_0.1.4 scales_1.2.1 yaml_2.3.7 fastmap_1.1.1
## [9] R6_2.5.1 labeling_0.4.3 generics_0.1.3 knitr_1.44
## [13] munsell_0.5.0 bslib_0.5.1 pillar_1.9.0 tzdb_0.4.0
## [17] rlang_1.1.1 utf8_1.2.3 stringi_1.7.12 cachem_1.0.8
## [21] xfun_0.40 sass_0.4.7 timechange_0.2.0 cli_3.6.1
## [25] withr_2.5.0 magrittr_2.0.3 digest_0.6.33 grid_4.3.1
## [29] rstudioapi_0.15.0 hms_1.1.3 lifecycle_1.0.3 vctrs_0.6.3
## [33] evaluate_0.21 glue_1.6.2 farver_2.1.1 fansi_1.0.4
## [37] colorspace_2.1-0 rmarkdown_2.24 tools_4.3.1 pkgconfig_2.0.3
## [41] htmltools_0.5.6