knitr::opts_chunk$set(echo = TRUE)
#1. En este cuaderno trabajaremos las exploraciones estadisticas no espaciales del departamento de Caqueta, es fundamental para comprender lo que sucede en los territorios. Varias bibliotecas de R, en particular dplyr y tidyverse, son muy útiles para explorar y resumir estadísticas.
Comenzamos removiendo el contenido de la memoria
rm(list=ls())
Intalamos la librerias que necesitamos y las llamamos
library(here)
library(tidyverse)
library(rgeos)
library(maptools)
library(raster)
library(sf)
library(viridis)
#2. Descargamos los datos de Caqueta de las “Estadisticas municipales agropecuarias” y lo llamamos en formato CVS
En este objeto vamos a asignar los datos no espaciales asociados a las evaluaciones agropecuarias del departamento, donde se hace un resumen de los cultivos producidos en cada municipio, ademas de datos estadisticos como el area cultivada por cada elemento ademas de valores de produccion anual de los mismos
datos <- read_csv2("d:/Users/Janus/Documents/Geomatica basica/18_CAQUETA/Caqueta_EVA.csv")
Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
Parsed with column specification:
cols(
COD_DEP = col_double(),
DEPARTAMENTO = col_character(),
COD_MUN = col_double(),
MUNICIPIO = col_character(),
GRUPO = col_character(),
SUBGRUPO = col_character(),
CULTIVO = col_character(),
YEAR = col_double(),
PERIODO = col_character(),
H_Sembrada = col_double(),
H_Cosechada = col_double(),
PRODUCCION = col_double(),
REN = col_character(),
ESTADO_FRUTO = col_character(),
CICLO = col_character()
)
Observamos los atributos de los datos
head(datos)
tail(datos)
library(dplyr)
#3. Vamos a iniciar el trabajo mostrando el rendimiento promedio de la produccion de los diferentes cultivos en cada uno de los muncipios, con esto podemos ver que grupo de cultivos predominan en tema de rendimiento anual en cada municipio
datos %>%
group_by(MUNICIPIO, GRUPO) %>%
summarise(rend_prom = mean(REN, na.rm = TRUE)) -> REN_resumen
argument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NAargument is not numeric or logical: returning NA`summarise()` regrouping output by 'MUNICIPIO' (override with `.groups` argument)
REN_resumen
NA
NA
datos %>% group_by(GRUPO) %>% summarise(PRODUCCION=mean(PRODUCCION,na.rm= TRUE))->PROD_caqueta
`summarise()` ungrouping output (override with `.groups` argument)
PROD_caqueta
datos %>%
filter(YEAR==2.018) %>%
group_by(GRUPO, MUNICIPIO) %>%
summarize(max_ren = max(REN, na.rm = TRUE)) %>%
slice(which.max(max_ren)) -> ren_max_16
`summarise()` regrouping output by 'GRUPO' (override with `.groups` argument)
ren_max_16
Aqui vamos a mostrar que municipio tuvo un mayor rendimiento para cada grupo de cultivo especificamente en el año 2018
datos %>%filter(YEAR==2.018) %>% group_by(GRUPO, MUNICIPIO) %>%
summarize(max_H_Cosechada = max(H_Cosechada, na.rm = TRUE)) %>%
slice(which.max(max_H_Cosechada)) -> H_cosecha_max
`summarise()` regrouping output by 'GRUPO' (override with `.groups` argument)
H_cosecha_max
#4. Para esta nueva visualizacion, realizaremos un filtro de los datos donde que municipio tuvo una mayor area cosechada para cada grupo de cultivo, observando que hay municipios que destinan una gran superficie para el tema agricola
datos %>% filter(GRUPO=="OTROS PERMANENTES") %>%
group_by(MUNICIPIO, SUBGRUPO="CACAO") %>%
summarise (max_PROD=max(PRODUCCION, na.rm = TRUE)) %>% slice(which.max(max_PROD))->PROD_max
`summarise()` regrouping output by 'MUNICIPIO' (override with `.groups` argument)
PROD_max
Aqui realizamos un filtro de los datos para explorar el grupo de cultivo Otros permanentes para ver que cual fue la maxima produccion de estos cultivos dentro del tiempo que cubren los datos
datos %>%
filter(MUNICIPIO=="FLORENCIA" & SUBGRUPO=="CACAO") %>%
group_by(YEAR, CULTIVO) -> VICEN_CACAO
VICEN_CACAO
Para ver estos datos de una forma grafica, nos aprovecharemos de la funcion ggplot para vrlos de forma grafica y analizarlos de mejor manera, donde observamos que el año de mayor produccion en el municipio fue el 2013 llegando a las 200 toneladas en ese año
g <- ggplot(aes(x=YEAR, y=PRODUCCION/100), data = VICEN_CACAO) + geom_bar(stat='identity') + labs(y='Cacao Production [Ton x 1000]')
g + ggtitle("Evolution of cacao production in FLORENCIA from 2013 to 2018") + labs(caption= "Based on EMA data (DANE, 2018)")
Realizamos otra consulta, esta vez para observar la superficie cosechada total por cada grupo de cultivo en el año 2018, donde se observa que los cultivos Otros Permanentes detacan ampliamente sobre el resto
datos %>%
filter(YEAR==2.018) %>%
group_by(GRUPO) %>%
summarize(sum_H_Cosechada = sum(H_Cosechada, na.rm = TRUE)) %>%
arrange(desc(sum_H_Cosechada)) -> total_area_cosecha
`summarise()` ungrouping output (override with `.groups` argument)
total_area_cosecha
Basados en lo anterior, vamos a realizar un filtro sobre el mismo año, pero tomando solo los cultivos otros permanentes, esto para ver cual cultivo en especifico es el que predomina respecto al area cosechada en el departamento
datos %>%
filter(GRUPO=="OTROS PERMANENTES" & YEAR==2.018) %>%
group_by(CULTIVO) %>%
summarize(sum_cosecha = sum(H_Cosechada, na.rm = TRUE)) %>%
arrange(desc(sum_cosecha)) -> total_cosecha
`summarise()` ungrouping output (override with `.groups` argument)
total_cosecha
Ahora que ya sabemos que la caña panalera es el cultivo de mayor area cosechada, con este nuevo filtro veremos que municipio presenta una mayor area cosechada de caña panelera en el año 2018.
datos %>%
filter(YEAR==2.018 & GRUPO=="OTROS PERMANENTES") %>%
group_by(CULTIVO, MUNICIPIO) %>%
summarize(max_area2 = max(H_Cosechada, na.rm = TRUE)) %>%
slice(which.max(max_area2)) -> area_cosecha2
`summarise()` regrouping output by 'CULTIVO' (override with `.groups` argument)
area_cosecha2
antes de realizar el ploteo, a cada una de las clases, que seran los grupos de cultivo, vamos a realizarles una abreviatura, para que se pueda leer con claridad en el ploteo
total_area_cosecha$CROP <- abbreviate(total_area_cosecha$GRUPO, 3)
g <- ggplot(aes(x=CROP, y=sum_H_Cosechada), data = total_area_cosecha) + geom_bar(stat='identity') + labs(y='Total Harvested Area [Ha]')
library(ggplot2)
g+ ggtitle(“Total harvested area by crop groups in 2018 for FLORENCIA”) + theme(plot.title = element_text(hjust = 0.5)) + labs(caption= “Based on EMA data (DANE, 2018)”)
g+ ggtitle("Total harvested area by crop groups in 2018 for Caqueta") + theme(plot.title = element_text(hjust = 0.5)) +
labs(caption= "Based on EMA data (DANE, 2018)")
NA
NA
#5. La segunda parte del informe consistira en realizar una union entre los datos no espacilaes mostrados en la primeraparte y un archivo de datos espaciales proveniente del marco geoestadistico del pais provenineto del DANE
ant_munic <- sf::st_read("d:/Users/Janus/Documents/Geomatica basica/18_CAQUETA/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
Reading layer `MGN_MPIO_POLITICO' from data source `D:\Users\Janus\Documents\Geomatica basica\18_CAQUETA\ADMINISTRATIVO\MGN_MPIO_POLITICO.shp' using driver `ESRI Shapefile'
Simple feature collection with 16 features and 9 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: -76.30622 ymin: -0.70584 xmax: -71.25385 ymax: 2.964148
geographic CRS: WGS 84
ant_munic
Simple feature collection with 16 features and 9 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: -76.30622 ymin: -0.70584 xmax: -71.25385 ymax: 2.964148
geographic CRS: WGS 84
First 10 features:
DPTO_CCDGO MPIO_CCDGO MPIO_CNMBR
1 18 18001 FLORENCIA
2 18 18029 ALBANIA
3 18 18094 BELÉN DE LOS ANDAQUÍES
4 18 18247 EL DONCELLO
5 18 18256 EL PAUJIL
6 18 18410 LA MONTAÑITA
7 18 18460 MILÁN
8 18 18479 MORELIA
9 18 18610 SAN JOSÉ DEL FRAGUA
10 18 18860 VALPARAÍSO
MPIO_CRSLC MPIO_NAREA MPIO_NANO DPTO_CNMBR
1 Decreto 642 de Junio 17 de 1912 2547.6384 2017 CAQUETÁ
2 Ordenanza 3 de Noviembre 12 de 1985 414.1220 2017 CAQUETÁ
3 Decreto 963 de Marzo 14 de 1950 1191.6187 2017 CAQUETÁ
4 Decreto 1678 de Septiembre 7 de 1967 1105.8029 2017 CAQUETÁ
5 Decreto 1678 de Septiembret 7 de 1967 1234.7427 2017 CAQUETÁ
6 Decreto 83 de Julio 6 de 1955 1701.0522 2017 CAQUETÁ
7 Ordenanza 3 de Noviembre 12 de 1985 1220.5726 2017 CAQUETÁ
8 Ordenanza 3 de Noviembre 12 de 1985 462.4799 2017 CAQUETÁ
9 Ordenanza 3 de Noviembre 12 de 1985 1304.7690 2017 CAQUETÁ
10 Ordenanza 3 de Noviembre 12 de 1985 1330.2126 2017 CAQUETÁ
Shape_Leng Shape_Area geometry
1 2.942508 0.20692777 POLYGON ((-75.42074 2.19413...
2 1.112829 0.03361758 POLYGON ((-75.89506 1.36569...
3 2.234657 0.09674460 POLYGON ((-75.78705 1.74982...
4 3.154370 0.08986744 POLYGON ((-75.36167 2.32142...
5 3.529316 0.10030928 POLYGON ((-75.36691 2.21234...
6 3.402939 0.13817351 POLYGON ((-75.40404 1.76944...
7 1.863197 0.09912782 POLYGON ((-75.39362 1.35738...
8 1.518688 0.03755356 POLYGON ((-75.77185 1.57991...
9 2.040837 0.10589313 POLYGON ((-76.16722 1.58752...
10 2.313848 0.10800551 POLYGON ((-75.73128 1.32740...
Para realizar el join necesitamos un campo en comun entre ambos paquetes de datos, por lo que usaremos el codigo de municipio para ello, estas dos lineas nos serviran para crear dos campos nuevos a los datos no espaciales, conel objetivo de convertir la columna COD_MUN que es un objeto de tipo numerico a un objeto de tipo factor, cosa fundamental para realizar el join
datos %>% filter (MUNICIPIO =="FLORENCIA") -> caq_datos
caq_datos
class(caq_datos$COD_MUN)
[1] "numeric"
datos2 <- datos
datos2$TEMP <- as.character(datos2$COD_MUN)
datos2$MPIO_CCDGO <- as.factor(paste(0, datos2$TEMP, sep=""))
head(datos2)
NA
Para poder hacer la unión, necesitamos cambiar tanto el tipo de datos como el contenido del código que identifica a cada municipio. Para esta tarea, es una buena idea crear una copia de los datos estadísticos originales. Con este enfoque, cualquier movimiento falso no estropeará los datos originales.
datos2 %>% filter(CULTIVO == "CACAO") -> datos3
head(datos3)
NA
class(datos3)
[1] "spec_tbl_df" "tbl_df" "tbl" "data.frame"
datos4 <- datos3 %>% dplyr::select(MUNICIPIO, MPIO_CCDGO, YEAR, PRODUCCION, REN)
datos4
NA
datos4 %>%
gather("YEAR", "PRODUCCION", "REN" , key = variable, value = number)
head(datos4)
NA
Ésta tarea es clave. Implica varios pasos para poder convertir la tabla de atributos de formato largo a formato ancho.
datos4 %>%
group_by(MPIO_CCDGO) %>%
mutate(Visit = 1:n()) %>%
gather("YEAR", "PRODUCCION", "REN", key = variable, value = number) %>%
unite(combi, variable, Visit) %>%
spread(combi, number) -> datos5
head(datos5)
NA
tail(datos5)
NA
Realizamos una copia de la colección de características simples
ant_munic2 <- ant_munic
ant_munic_stat = left_join(ant_munic2, datos5, by="MPIO_CCDGO")
summary(ant_munic_stat)
DPTO_CCDGO MPIO_CCDGO MPIO_CNMBR
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
MPIO_CRSLC MPIO_NAREA MPIO_NANO DPTO_CNMBR
Length:16 Min. : 403.4 Min. :2017 Length:16
Class :character 1st Qu.: 948.6 1st Qu.:2017 Class :character
Mode :character Median : 1269.8 Median :2017 Mode :character
Mean : 5631.4 Mean :2017
3rd Qu.: 2947.4 3rd Qu.:2017
Max. :42312.8 Max. :2017
Shape_Leng Shape_Area MUNICIPIO PRODUCCION_1
Min. : 1.113 Min. :0.03274 Length:16 Length:16
1st Qu.: 1.794 1st Qu.:0.07708 Class :character Class :character
Median : 2.628 Median :0.10310 Mode :character Mode :character
Mean : 4.483 Mean :0.45741
3rd Qu.: 3.713 3rd Qu.:0.23944
Max. :20.046 Max. :3.43579
PRODUCCION_10 PRODUCCION_11 PRODUCCION_12
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
PRODUCCION_2 PRODUCCION_3 PRODUCCION_4
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
PRODUCCION_5 PRODUCCION_6 PRODUCCION_7
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
PRODUCCION_8 PRODUCCION_9 REN_1
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
REN_10 REN_11 REN_12
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
REN_2 REN_3 REN_4
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
REN_5 REN_6 REN_7
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
REN_8 REN_9 YEAR_1
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
YEAR_10 YEAR_11 YEAR_12
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
YEAR_2 YEAR_3 YEAR_4
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
YEAR_5 YEAR_6 YEAR_7
Length:16 Length:16 Length:16
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
YEAR_8 YEAR_9 geometry
Length:16 Length:16 POLYGON :16
Class :character Class :character epsg:4326 : 0
Mode :character Mode :character +proj=long...: 0
#6. Intalamos las librerias necesarias para Plotear
library(RColorBrewer)
library(leaflet)
Esta instruccion nos permite ver en un mapa del departamento los valores de produccion de cada departamente en un año especifico
bins <- c(0, 250, 500, 1000, 2000, 5000, 10000, 15000)
pal <- colorBin("YlOrRd", domain = ant_munic_stat$PRODUCCION_12, bins = bins)
mapa <- leaflet(data = ant_munic_stat) %>%
addTiles() %>%
addPolygons(label = ~PRODUCCION_12,
popup = ~MPIO_CNMBR,
fillColor = ~pal(PRODUCCION_12),
color = "#444444",
weight = 1,
smoothFactor = 0.5,
opacity = 1.0,
fillOpacity = 0.5,
highlightOptions = highlightOptions(color = "white", weight = 2, bringToFront = TRUE)
) %>%
addProviderTiles(providers$OpenStreetMap) %>%
addLegend("bottomright", pal = pal, values = ~PRODUCCION_12,
title = "CACAO production in Caqueta [Ton] (2018)",
opacity = 1
)
#7. Este es resultado de nuestro mapa de cultivo de CACAO en Caqueta
mapa