Sandra Katteryne Rodríguez Hurtado

Objetivo

El objetivo de este cuaderno es dar a conocer los datos de las Estadísticas Municipales Agropecuarias en Caquetá, donde se representarán algunos de estos datos gráficamente y por medio de tablas, dando a conocer información sobre productos agrícolas que conforman la economía del departamento. Además, se divulgará información sobre algunas herramientas para el desarrollo de o anteriormente mencionado.

Funcionalidades de los SIG

Las estadísticas departamentales son de gran utilidad para poder analizar lo que está sucendiendo en el departamento y en los municipios que lo conforman. En programas como RStudio y QGIS, es posible unir datos estadísticos con datos espaciales para poder realizar análisis, por ejemplo, saber cuáles son los municipios que están presentando mayor o menor producción. Lo primero es eliminar el contenido de la memoria con la función:

rm(list=ls())

Para la realización de este trabajo, es necesario instalar una serie de paquetes con la siguiente instrucción, la cual trae como ventaja que instalará solo los paquetes que no han sido instalados:

list.of.packages <- c("here", "tidyverse", "rgeos", "maptools", "raster", "sf",  "viridis", "rnaturalearth", "GSODR", "ggrepel", "cowplot")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

Luego cargar las bibliotecas.

library(here)
library(tidyverse)
library(rgeos)
library(maptools)
library(raster)
library(sf)
library(viridis)
library(rnaturalearth)
library(GSODR)
library(ggrepel)
library(cowplot)

Exporando las estadísticas municipales de Caquetá

Una vez descargado en archivo csv de las estadísticas agropecuarias municipales de Caquetá, se leerá con la siguiente instrucción:

datos <- read_csv("./Agro/EVA_Caquetá2.csv")
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(),
  Area_Siembra = col_double(),
  Area_cosechada = col_double(),
  Produccion = col_double(),
  Rendimiento = col_double(),
  ESTADO = col_character(),
  CICLO = col_character()
)

A conticuandión, se mostrarán los atributos de los datos, donde la primera tabla muestra los primeros datos que la conforman con la instrucción “head(datos)”, y en la segunda, muestra los datos que están al final de la misma con la instrucción tail(datos). ##### Tabla 1:

head(datos)

Tabla 2:

tail(datos)

Se debe tener en cuenta que, pese a que en las tablas no se dan unidades, las de área son hectáreas (Ha), y las unidades de rendimientos son toneladas/Ha. Con la siguiente instrucción se podrán ver un promedio de varios años de los rendimientos de ciertos cultivos por grupo y municipio.

Ahora se calculará el rendimiento promedio.

datos %>%
  group_by(MUNICIPIO, GRUPO) %>%
  summarise(rend_prom = mean(Rendimiento, na.rm = TRUE)) -> rend_resumen

head(rend_resumen)

Se puede calcular el promedio por grupo en los municipios de Caquetá, donde se puede apreciar que los grupos de cultivos con mayores rendimientos son las hortalizas, frutales y tubérculos y plátanos. Esto es posible con la siguiente instrucción:

datos %>%
  group_by(GRUPO) %>%
  summarise(rend_dep = mean(Rendimiento, na.rm = TRUE)) -> rend_caquetá

rend_caquetá

Ahora se van a apreciar los municipios del departamento de Caquetá con mayor rendimiento para cada grupo de cultivos, esto con la siguiente instrucción:

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO, MUNICIPIO) %>%
  summarize(max_rend = max(Rendimiento, na.rm = TRUE)) %>%
    slice(which.max(max_rend)) -> rend_max_18

rend_max_18

A continuación se mostrarán los municipios con la mayor área cosechada en el año de la evaluación del archivo (2018), donde el municipio de San Vicente del Caguán fue el de mayor área sembrada en el grupo de cereales.

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO, MUNICIPIO) %>%
  summarize(max_area_cosecha = max(Area_cosechada, na.rm = TRUE)) %>%
    slice(which.max(max_area_cosecha)) -> area_cosecha_max

area_cosecha_max

Se seleccionará el arroz para mirar la producción de este (en toneladas) en el municipio de San Vicente del Caguán por medio de la instrucción:

datos %>% 
  filter(MUNICIPIO=="SAN VICENTE DEL CAGUAN" & SUBGRUPO=="ARROZ") %>% 
  group_by(YEAR, CULTIVO) ->  sanvicentedelcaguan_arroz

sanvicentedelcaguan_arroz

Realización de gráficas de la información

Para esto se necesita la librería ggplot.

g <- ggplot(aes(x=YEAR, y=Produccion/1000), data = sanvicentedelcaguan_arroz) + geom_bar(stat='identity') + labs(y='Producción de Arroz [Ton x 1000]')
g + ggtitle("Evolución de la producción de Arroz en San Vicente del Caguán de 2007 a 2018") + labs(caption= "Basado en los datos de EMA (DANE, 2018)")

Ahora se darán la información de qué cultivos tuvieron la mayor área cosechada en 2018, donde tubérculos y plátanos, y otros permanentes, son los de mayor área cultivada.

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO) %>%
  summarize(sum_area_cosecha = sum(Area_cosechada, na.rm = TRUE)) %>%
     arrange(desc(sum_area_cosecha)) -> total_area_cosecha

total_area_cosecha

Para ver los cultivos que componen el grupo de “Otros permanentes” y verlos de manera organizada en una tabla, se puede hacer consultando directamente en la página del DANE o con la siguiente instrucción:

datos %>%
  filter(GRUPO=="OTROS PERMANENTES" & YEAR==2018) %>%
  group_by(CULTIVO) %>%
  summarize(sum_cosecha = sum(Area_cosechada, na.rm = TRUE)) %>%
     arrange(desc(sum_cosecha)) -> total_cosecha


total_cosecha

Ahora se analizará cuáles son los municipios con mayor área cosechada para cada cultivo permanente en el año 2018, donde en el municipio de Florencia se encuentra la mayor área cosechada de café, en San Vicente del Caguán de caña panelera y en Milán de cacao.

datos %>% 
  filter(YEAR==2018 & GRUPO=="OTROS PERMANENTES") %>% 
  group_by(CULTIVO, MUNICIPIO) %>%
  summarize(max_area2 = max(Area_cosechada, na.rm = TRUE)) %>%
    slice(which.max(max_area2)) -> area_cosecha2

area_cosecha2

A continuación se organizarán los nombres de los grupos de cultivos, dándoles una serie de abreviaturas.

total_area_cosecha$CROP <- abbreviate(total_area_cosecha$GRUPO, 3)

Se hará el ploteo con estas dos instrucciones:

g <- ggplot(aes(x=CROP, y=sum_area_cosecha), data = total_area_cosecha) + geom_bar(stat='identity') + labs(y='Área total cosechada [Ha]')
g+ ggtitle("Superficie total cosechada por grupos de cultivos en 2018 para Caquetá") + theme(plot.title = element_text(hjust = 0.5)) +
   labs(caption= "Basado en datos de EMA (DANE, 2018)")

A continuación se analizarán los datos de Hortalizas, donde San Vicente del Cagúan tuvo la mayor área cosechada dentro de los cultivos de este grupo con el cultivo de tomate.

datos %>% 
  filter(YEAR==2018 & GRUPO=="HORTALIZAS") %>% 
  group_by(CULTIVO, MUNICIPIO) %>%
  summarize(max_area2 = max(Area_cosechada, na.rm = TRUE)) %>%
    slice(which.max(max_area2)) -> area_cosecha3

area_cosecha3

Análisis de rendimientos para cultivos de Caquetá

La siguiente tabla muestra los grupos de cultivo con el total de rendimientos (Tonelada/ha) de manera descendente, donde los frutales, tubérculos y hortalizas ocuán los primeros lugares.

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO) %>%
  summarize(sum_rendimiento = sum(Rendimiento, na.rm = TRUE)) %>%
     arrange(desc(sum_rendimiento)) -> total_rendimiento

total_rendimiento

En seguida se muestran los municipios con mayores rendimientos (Tonelada/ha) en los cultivos que componen el grupo de “Otros permanentes” en el departamento de Caquetá, donde el municipio El Doncello tuvo mayores rendimientos en cacao y caña panelera, y el municipio de Puerto Rico tuvo mayores rendimientos en café.

datos %>% 
  filter(YEAR==2018 & GRUPO=="OTROS PERMANENTES") %>% 
  group_by(CULTIVO, MUNICIPIO) %>%
  summarize(Rendimiento = max(Rendimiento, na.rm = TRUE)) %>%
    slice(which.max(Rendimiento)) -> Rendimiento

Rendimiento

Abreviar los nombres:

total_rendimiento$Grupo <- abbreviate(total_rendimiento$GRUPO, 3)

Plotear:

g <- ggplot(aes(x=Grupo, y=sum_rendimiento), data = total_rendimiento) + geom_bar(stat='identity') + labs(y='Rendimientos [Ton/Ha]')
g+ ggtitle("Superficie total cosechada por grupos de cultivos en 2018 para Caquetá") + theme(plot.title = element_text(hjust = 0.5)) +
   labs(caption= "Basado en los datos de EMA (DANE, 2018)")

Unir las estadísticas agrícolas a los municipios.

Luego de haber subido los datos de Administrativo del departamento de Caquetá que se encuentran en el Marco Geoestadistico Departamental que está disponible en DANE Geoportal, se unrán las estadísticas agrícolas a los municipios que componen este departamento. Para realizar esto es necesario a librería sf.

ant_munic <- sf::st_read("./Agro/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
Reading layer `MGN_MPIO_POLITICO' from data source `/cloud/project/Agro/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
CRS:            4326

¿Qué es ant_munic? En un conjunto de características simples, donde se utilizan datos con el sistema de referencia WGS84. Es necesario utilizar la función left_join para unir las estadísticas y los municipios.

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
CRS:            4326
First 10 features:
   DPTO_CCDGO MPIO_CCDGO             MPIO_CNMBR                            MPIO_CRSLC
1          18      18001              FLORENCIA       Decreto 642 de Junio 17 de 1912
2          18      18029                ALBANIA   Ordenanza 3 de Noviembre 12 de 1985
3          18      18094 BELÉN DE LOS ANDAQUÍES       Decreto 963 de Marzo 14 de 1950
4          18      18247            EL DONCELLO  Decreto 1678 de Septiembre 7 de 1967
5          18      18256              EL PAUJIL Decreto 1678 de Septiembret 7 de 1967
6          18      18410           LA MONTAÑITA         Decreto 83 de Julio 6 de 1955
7          18      18460                  MILÁN   Ordenanza 3 de Noviembre 12 de 1985
8          18      18479                MORELIA   Ordenanza 3 de Noviembre 12 de 1985
9          18      18610    SAN JOSÉ DEL FRAGUA   Ordenanza 3 de Noviembre 12 de 1985
10         18      18860             VALPARAÍSO   Ordenanza 3 de Noviembre 12 de 1985
   MPIO_NAREA MPIO_NANO DPTO_CNMBR Shape_Leng Shape_Area                       geometry
1   2547.6384      2017    CAQUETÁ   2.942508 0.20692777 POLYGON ((-75.42074 2.19413...
2    414.1220      2017    CAQUETÁ   1.112829 0.03361758 POLYGON ((-75.89506 1.36569...
3   1191.6187      2017    CAQUETÁ   2.234657 0.09674460 POLYGON ((-75.78705 1.74982...
4   1105.8029      2017    CAQUETÁ   3.154370 0.08986744 POLYGON ((-75.36167 2.32142...
5   1234.7427      2017    CAQUETÁ   3.529316 0.10030928 POLYGON ((-75.36691 2.21234...
6   1701.0522      2017    CAQUETÁ   3.402939 0.13817351 POLYGON ((-75.40404 1.76944...
7   1220.5726      2017    CAQUETÁ   1.863197 0.09912782 POLYGON ((-75.39362 1.35738...
8    462.4799      2017    CAQUETÁ   1.518688 0.03755356 POLYGON ((-75.77185 1.57991...
9   1304.7690      2017    CAQUETÁ   2.040837 0.10589313 POLYGON ((-76.16722 1.58752...
10  1330.2126      2017    CAQUETÁ   2.313848 0.10800551 POLYGON ((-75.73128 1.32740...

Para poder realizar la unión de los datos, es necesario identificar una característica que tengan en común ambos, en este caso MPIO_CCDGO y COD_MUN.

datos %>% filter (MUNICIPIO =="SAN VICENTE DEL CAGUAN") ->  med_datos
med_datos
class(med_datos$COD_MUN)
[1] "numeric"

Es necesario verificar si es necesario hacerle elgpun tipo de cambio a los datos, como la clase o añadir o quitar algún número que tengan de diferencia. En este caso no fue necesario.

datos2 <- datos
datos2$TEMP <-  as.character(datos2$COD_MUN)
datos2$MPIO_CCDGO <- as.factor(paste(datos2$TEMP, sep=""))
head(datos2)

Ahora se van a filtrar los datos de un cultivo en específico, en este caso arroz, filtrando solo un año.

datos2 %>% filter(CULTIVO == "ARROZ")  -> datos3
head(datos3)
class(datos3)
[1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame" 
datos4 <- datos3 %>% dplyr::select(MUNICIPIO, MPIO_CCDGO, YEAR, Produccion, Rendimiento) 
datos4
datos4 %>% 
  gather("YEAR", "Produccion", "Rendimiento" , key = variable, value = number)
head(datos4)
datos4 %>% 
  group_by(MPIO_CCDGO) %>% 
  mutate(Visit = 1:n()) %>% 
  gather("YEAR", "Produccion", "Rendimiento", key = variable, value = number) %>% 
  unite(combi, variable, Visit) %>%
  spread(combi, number) -> datos5
head(datos5)
tail(datos5)
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
 18:16      18001  : 1   ALBANIA               : 1  
            18029  : 1   BELÉN DE LOS ANDAQUÍES: 1  
            18094  : 1   CARTAGENA DEL CHAIRÁ  : 1  
            18150  : 1   CURILLO               : 1  
            18205  : 1   EL DONCELLO           : 1  
            18247  : 1   EL PAUJIL             : 1  
            (Other):10   (Other)               :10  
                                       MPIO_CRSLC   MPIO_NAREA        MPIO_NANO   
 Ordenanza 3 de Noviembre 12 de 1985        :8    Min.   :  403.4   Min.   :2017  
 Decreto 963 de Marzo 14 de 1950            :2    1st Qu.:  948.6   1st Qu.:2017  
 Decreto 1678 de Septiembre 7 de 1967       :1    Median : 1269.8   Median :2017  
 Decreto 1678 de Septiembret 7 de 1967      :1    Mean   : 5631.4   Mean   :2017  
 Decreto 1678 de Septiembretiembre 7 de 1967:1    3rd Qu.: 2947.4   3rd Qu.:2017  
 Decreto 642 de Junio 17 de 1912            :1    Max.   :42312.8   Max.   :2017  
 (Other)                                    :2                                    
   DPTO_CNMBR   Shape_Leng       Shape_Area       MUNICIPIO          Produccion_1   
 CAQUETÁ:16   Min.   : 1.113   Min.   :0.03274   Length:16          Min.   :  5.00  
              1st Qu.: 1.794   1st Qu.:0.07708   Class :character   1st Qu.: 24.00  
              Median : 2.628   Median :0.10310   Mode  :character   Median : 45.00  
              Mean   : 4.483   Mean   :0.45741                      Mean   : 91.46  
              3rd Qu.: 3.713   3rd Qu.:0.23944                      3rd Qu.:105.00  
              Max.   :20.046   Max.   :3.43579                      Max.   :495.00  
                                                                    NA's   :3       
 Produccion_10    Produccion_11   Produccion_12    Produccion_13    Produccion_14   
 Min.   :  60.0   Min.   : 48.0   Min.   :  53.0   Min.   :  40.0   Min.   :  71.0  
 1st Qu.: 120.0   1st Qu.: 60.0   1st Qu.:  96.0   1st Qu.:  60.0   1st Qu.: 105.0  
 Median : 180.0   Median :126.0   Median : 120.0   Median : 120.0   Median : 225.0  
 Mean   : 492.7   Mean   :243.3   Mean   : 684.9   Mean   : 263.8   Mean   : 654.9  
 3rd Qu.: 317.0   3rd Qu.:340.0   3rd Qu.: 416.0   3rd Qu.: 203.0   3rd Qu.: 667.0  
 Max.   :2700.0   Max.   :770.0   Max.   :4074.0   Max.   :1250.0   Max.   :2736.0  
 NA's   :7        NA's   :7       NA's   :7        NA's   :7        NA's   :7       
 Produccion_15   Produccion_16   Produccion_17    Produccion_18    Produccion_19   
 Min.   : 60.0   Min.   : 36.0   Min.   : 110.0   Min.   : 124.0   Min.   :  25.0  
 1st Qu.:128.0   1st Qu.:117.5   1st Qu.: 155.0   1st Qu.: 201.2   1st Qu.: 113.5  
 Median :240.0   Median :211.0   Median : 173.5   Median : 341.5   Median : 285.0  
 Mean   :261.9   Mean   :266.0   Mean   : 568.2   Mean   : 551.8   Mean   : 515.6  
 3rd Qu.:330.0   3rd Qu.:297.0   3rd Qu.: 616.2   3rd Qu.: 742.2   3rd Qu.: 783.0  
 Max.   :705.0   Max.   :780.0   Max.   :2160.0   Max.   :1587.0   Max.   :1500.0  
 NA's   :7       NA's   :8       NA's   :8        NA's   :8        NA's   :8       
  Produccion_2   Produccion_20    Produccion_21    Produccion_22    Produccion_23   
 Min.   : 24.0   Min.   :  80.0   Min.   :  90.0   Min.   :  75.0   Min.   :  16.0  
 1st Qu.: 35.0   1st Qu.: 214.0   1st Qu.: 201.8   1st Qu.: 242.2   1st Qu.: 194.0  
 Median : 80.0   Median : 465.0   Median : 307.5   Median : 715.5   Median : 270.0  
 Mean   :153.7   Mean   : 668.6   Mean   : 589.8   Mean   :1070.8   Mean   : 779.8  
 3rd Qu.:210.0   3rd Qu.:1057.5   3rd Qu.: 761.2   3rd Qu.:1892.2   3rd Qu.: 585.0  
 Max.   :536.0   Max.   :1592.0   Max.   :1755.0   Max.   :2550.0   Max.   :2834.0  
 NA's   :3       NA's   :9        NA's   :10       NA's   :10       NA's   :11      
 Produccion_24    Produccion_25   Produccion_26   Produccion_27 Produccion_28
 Min.   : 100.0   Min.   : 56.0   Min.   :117.0   Min.   :212   Min.   :585  
 1st Qu.: 707.5   1st Qu.:160.5   1st Qu.:129.0   1st Qu.:212   1st Qu.:585  
 Median :1130.5   Median :265.0   Median :141.0   Median :212   Median :585  
 Mean   :1419.0   Mean   :202.7   Mean   :252.7   Mean   :212   Mean   :585  
 3rd Qu.:1842.0   3rd Qu.:276.0   3rd Qu.:320.5   3rd Qu.:212   3rd Qu.:585  
 Max.   :3315.0   Max.   :287.0   Max.   :500.0   Max.   :212   Max.   :585  
 NA's   :12       NA's   :13      NA's   :13      NA's   :15    NA's   :15   
  Produccion_3    Produccion_4     Produccion_5     Produccion_6    Produccion_7   
 Min.   : 30.0   Min.   :  54.0   Min.   :  40.0   Min.   : 30.0   Min.   :  35.0  
 1st Qu.:100.0   1st Qu.: 138.0   1st Qu.: 115.5   1st Qu.:109.5   1st Qu.:  58.5  
 Median :219.0   Median : 260.5   Median : 175.0   Median :188.0   Median : 112.5  
 Mean   :258.7   Mean   : 322.9   Mean   : 306.2   Mean   :197.1   Mean   : 247.4  
 3rd Qu.:287.0   3rd Qu.: 321.5   3rd Qu.: 303.0   3rd Qu.:268.5   3rd Qu.: 180.0  
 Max.   :875.0   Max.   :1167.0   Max.   :1365.0   Max.   :400.0   Max.   :1010.0  
 NA's   :3       NA's   :4        NA's   :4        NA's   :6       NA's   :6       
  Produccion_8    Produccion_9    Rendimiento_1   Rendimiento_10  Rendimiento_11 
 Min.   : 34.0   Min.   :  10.0   Min.   :0.950   Min.   :1.000   Min.   :1.000  
 1st Qu.: 91.5   1st Qu.:  57.5   1st Qu.:1.200   1st Qu.:1.400   1st Qu.:1.250  
 Median :119.0   Median : 108.5   Median :1.200   Median :2.000   Median :1.400  
 Mean   :258.5   Mean   : 201.9   Mean   :1.981   Mean   :2.766   Mean   :2.489  
 3rd Qu.:421.5   3rd Qu.: 190.0   3rd Qu.:2.500   3rd Qu.:4.240   3rd Qu.:4.300  
 Max.   :684.0   Max.   :1035.0   Max.   :5.250   Max.   :6.000   Max.   :5.200  
 NA's   :6       NA's   :6        NA's   :3       NA's   :7       NA's   :7      
 Rendimiento_12  Rendimiento_13  Rendimiento_14  Rendimiento_15  Rendimiento_16 
 Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
 1st Qu.:1.330   1st Qu.:1.080   1st Qu.:1.400   1st Qu.:1.500   1st Qu.:1.300  
 Median :1.510   Median :2.000   Median :2.000   Median :2.200   Median :1.850  
 Mean   :2.893   Mean   :2.629   Mean   :2.613   Mean   :2.633   Mean   :2.386  
 3rd Qu.:5.000   3rd Qu.:4.170   3rd Qu.:4.140   3rd Qu.:4.300   3rd Qu.:2.998  
 Max.   :6.700   Max.   :6.000   Max.   :4.980   Max.   :4.800   Max.   :4.800  
 NA's   :7       NA's   :7       NA's   :7       NA's   :7       NA's   :8      
 Rendimiento_17  Rendimiento_18  Rendimiento_19  Rendimiento_2   Rendimiento_20 
 Min.   :1.030   Min.   :1.490   Min.   :1.000   Min.   :0.800   Min.   :1.000  
 1st Qu.:1.395   1st Qu.:1.875   1st Qu.:1.450   1st Qu.:1.200   1st Qu.:1.495  
 Median :1.850   Median :2.750   Median :2.265   Median :1.450   Median :3.000  
 Mean   :2.658   Mean   :2.828   Mean   :2.851   Mean   :2.022   Mean   :2.970  
 3rd Qu.:3.075   3rd Qu.:3.615   3rd Qu.:3.495   3rd Qu.:2.000   3rd Qu.:3.650  
 Max.   :6.450   Max.   :4.530   Max.   :6.500   Max.   :5.250   Max.   :6.500  
 NA's   :8       NA's   :8       NA's   :8       NA's   :3       NA's   :9      
 Rendimiento_21  Rendimiento_22  Rendimiento_23  Rendimiento_24  Rendimiento_25 
 Min.   :1.000   Min.   :1.490   Min.   :1.490   Min.   :4.170   Min.   :4.140  
 1st Qu.:1.350   1st Qu.:1.875   1st Qu.:4.620   1st Qu.:4.635   1st Qu.:4.220  
 Median :2.250   Median :3.725   Median :4.980   Median :4.885   Median :4.300  
 Mean   :3.015   Mean   :3.870   Mean   :4.558   Mean   :5.110   Mean   :4.857  
 3rd Qu.:4.343   3rd Qu.:5.822   3rd Qu.:5.200   3rd Qu.:5.360   3rd Qu.:5.215  
 Max.   :6.500   Max.   :6.500   Max.   :6.500   Max.   :6.500   Max.   :6.130  
 NA's   :10      NA's   :10      NA's   :11      NA's   :12      NA's   :13     
 Rendimiento_26  Rendimiento_27 Rendimiento_28 Rendimiento_3   Rendimiento_4  
 Min.   :4.500   Min.   :4.3    Min.   :4.79   Min.   :1.100   Min.   :1.100  
 1st Qu.:4.645   1st Qu.:4.3    1st Qu.:4.79   1st Qu.:1.200   1st Qu.:1.312  
 Median :4.790   Median :4.3    Median :4.79   Median :2.500   Median :2.495  
 Mean   :4.757   Mean   :4.3    Mean   :4.79   Mean   :3.202   Mean   :3.217  
 3rd Qu.:4.885   3rd Qu.:4.3    3rd Qu.:4.79   3rd Qu.:5.920   3rd Qu.:5.035  
 Max.   :4.980   Max.   :4.3    Max.   :4.79   Max.   :6.560   Max.   :6.290  
 NA's   :13      NA's   :15     NA's   :15     NA's   :3       NA's   :4      
 Rendimiento_5   Rendimiento_6   Rendimiento_7   Rendimiento_8   Rendimiento_9  
 Min.   :1.100   Min.   :0.730   Min.   :0.900   Min.   :0.730   Min.   :1.020  
 1st Qu.:1.208   1st Qu.:1.125   1st Qu.:1.238   1st Qu.:1.025   1st Qu.:1.200  
 Median :2.250   Median :1.350   Median :1.895   Median :1.290   Median :1.400  
 Mean   :3.187   Mean   :2.616   Mean   :2.531   Mean   :2.015   Mean   :2.130  
 3rd Qu.:4.893   3rd Qu.:3.875   3rd Qu.:3.665   3rd Qu.:1.730   3rd Qu.:1.875  
 Max.   :6.250   Max.   :6.880   Max.   :6.250   Max.   :6.000   Max.   :6.000  
 NA's   :4       NA's   :6       NA's   :6       NA's   :6       NA's   :6      
     YEAR_1        YEAR_10        YEAR_11        YEAR_12        YEAR_13        YEAR_14    
 Min.   :2006   Min.   :2010   Min.   :2010   Min.   :2011   Min.   :2011   Min.   :2012  
 1st Qu.:2006   1st Qu.:2011   1st Qu.:2012   1st Qu.:2013   1st Qu.:2013   1st Qu.:2014  
 Median :2007   Median :2012   Median :2012   Median :2013   Median :2013   Median :2014  
 Mean   :2008   Mean   :2012   Mean   :2012   Mean   :2013   Mean   :2014   Mean   :2014  
 3rd Qu.:2010   3rd Qu.:2012   3rd Qu.:2013   3rd Qu.:2013   3rd Qu.:2014   3rd Qu.:2015  
 Max.   :2016   Max.   :2014   Max.   :2015   Max.   :2016   Max.   :2017   Max.   :2017  
 NA's   :3      NA's   :7      NA's   :7      NA's   :7      NA's   :7      NA's   :7     
    YEAR_15        YEAR_16        YEAR_17        YEAR_18        YEAR_19         YEAR_2    
 Min.   :2012   Min.   :2013   Min.   :2013   Min.   :2010   Min.   :2011   Min.   :2007  
 1st Qu.:2014   1st Qu.:2015   1st Qu.:2015   1st Qu.:2015   1st Qu.:2016   1st Qu.:2007  
 Median :2015   Median :2015   Median :2016   Median :2016   Median :2016   Median :2008  
 Mean   :2015   Mean   :2015   Mean   :2016   Mean   :2015   Mean   :2016   Mean   :2009  
 3rd Qu.:2015   3rd Qu.:2016   3rd Qu.:2016   3rd Qu.:2017   3rd Qu.:2017   3rd Qu.:2010  
 Max.   :2018   Max.   :2017   Max.   :2018   Max.   :2017   Max.   :2018   Max.   :2017  
 NA's   :7      NA's   :8      NA's   :8      NA's   :8      NA's   :8      NA's   :3     
    YEAR_20        YEAR_21        YEAR_22        YEAR_23        YEAR_24        YEAR_25    
 Min.   :2011   Min.   :2012   Min.   :2009   Min.   :2013   Min.   :2013   Min.   :2014  
 1st Qu.:2014   1st Qu.:2013   1st Qu.:2012   1st Qu.:2014   1st Qu.:2014   1st Qu.:2014  
 Median :2016   Median :2016   Median :2014   Median :2014   Median :2014   Median :2015  
 Mean   :2015   Mean   :2015   Mean   :2014   Mean   :2015   Mean   :2015   Mean   :2015  
 3rd Qu.:2017   3rd Qu.:2017   3rd Qu.:2017   3rd Qu.:2016   3rd Qu.:2016   3rd Qu.:2016  
 Max.   :2018   Max.   :2018   Max.   :2018   Max.   :2018   Max.   :2017   Max.   :2017  
 NA's   :9      NA's   :10     NA's   :10     NA's   :11     NA's   :12     NA's   :13    
    YEAR_26        YEAR_27        YEAR_28         YEAR_3         YEAR_4         YEAR_5    
 Min.   :2014   Min.   :2015   Min.   :2015   Min.   :2006   Min.   :2007   Min.   :2007  
 1st Qu.:2014   1st Qu.:2015   1st Qu.:2015   1st Qu.:2007   1st Qu.:2008   1st Qu.:2008  
 Median :2015   Median :2015   Median :2015   Median :2007   Median :2008   Median :2008  
 Mean   :2016   Mean   :2015   Mean   :2015   Mean   :2009   Mean   :2010   Mean   :2010  
 3rd Qu.:2016   3rd Qu.:2015   3rd Qu.:2015   3rd Qu.:2012   3rd Qu.:2011   3rd Qu.:2012  
 Max.   :2018   Max.   :2015   Max.   :2015   Max.   :2016   Max.   :2014   Max.   :2015  
 NA's   :13     NA's   :15     NA's   :15     NA's   :3      NA's   :4      NA's   :4     
     YEAR_6         YEAR_7         YEAR_8         YEAR_9              geometry 
 Min.   :2008   Min.   :2008   Min.   :2009   Min.   :2009   POLYGON      :16  
 1st Qu.:2009   1st Qu.:2009   1st Qu.:2010   1st Qu.:2010   epsg:4326    : 0  
 Median :2009   Median :2010   Median :2010   Median :2011   +proj=long...: 0  
 Mean   :2011   Mean   :2011   Mean   :2012   Mean   :2012                     
 3rd Qu.:2012   3rd Qu.:2012   3rd Qu.:2012   3rd Qu.:2012                     
 Max.   :2016   Max.   :2017   Max.   :2017   Max.   :2018                     
 NA's   :6      NA's   :6      NA's   :6      NA's   :6                        

Ploteo

library(RColorBrewer)
library(leaflet)

A continuación se mostrarán los datos de cada municipio con la cantidad de producción de arroz que tuvieron en el año 2018.

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 = "Producción de Arroz en Caquetá [Ton] (2018)",
    opacity = 1
  )
mapa
sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.6 LTS

Matrix products: default
BLAS:   /usr/lib/atlas-base/atlas/libblas.so.3.0
LAPACK: /usr/lib/atlas-base/atlas/liblapack.so.3.0

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
 [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
 [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
[10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] leaflet_2.0.3       RColorBrewer_1.1-2  cowplot_1.0.0       ggrepel_0.8.2      
 [5] GSODR_2.0.1         rnaturalearth_0.1.0 viridis_0.5.1       viridisLite_0.3.0  
 [9] sf_0.9-2            raster_3.0-12       maptools_0.9-9      rgeos_0.5-2        
[13] sp_1.4-1            forcats_0.5.0       stringr_1.4.0       dplyr_0.8.5        
[17] purrr_0.3.3         readr_1.3.1         tidyr_1.0.2         tibble_3.0.0       
[21] ggplot2_3.3.0       tidyverse_1.3.0     here_0.1           

loaded via a namespace (and not attached):
 [1] httr_1.4.1              jsonlite_1.6.1          modelr_0.1.6           
 [4] assertthat_0.2.1        cellranger_1.1.0        yaml_2.2.1             
 [7] pillar_1.4.3            backports_1.1.6         lattice_0.20-38        
[10] glue_1.4.0              digest_0.6.25           rvest_0.3.5            
[13] leaflet.providers_1.9.0 colorspace_1.4-1        htmltools_0.4.0        
[16] pkgconfig_2.0.3         broom_0.5.5             haven_2.2.0            
[19] scales_1.1.0            farver_2.0.3            generics_0.0.2         
[22] ellipsis_0.3.0          withr_2.1.2             cli_2.0.2              
[25] magrittr_1.5            crayon_1.3.4            readxl_1.3.1           
[28] fs_1.4.1                fansi_0.4.1             nlme_3.1-139           
[31] xml2_1.3.1              foreign_0.8-71          class_7.3-15           
[34] tools_3.6.0             data.table_1.12.8       hms_0.5.3              
[37] lifecycle_0.2.0         munsell_0.5.0           reprex_0.3.0           
[40] packrat_0.5.0           compiler_3.6.0          e1071_1.7-3            
[43] rlang_0.4.5             classInt_0.4-3          units_0.6-6            
[46] grid_3.6.0              rstudioapi_0.11         htmlwidgets_1.5.1      
[49] crosstalk_1.1.0.1       labeling_0.3            gtable_0.3.0           
[52] codetools_0.2-16        DBI_1.1.0               R6_2.4.1               
[55] gridExtra_2.3           lubridate_1.7.8         knitr_1.28             
[58] rprojroot_1.3-2         KernSmooth_2.23-15      stringi_1.4.6          
[61] Rcpp_1.0.4.6            vctrs_0.2.4             dbplyr_1.4.2           
[64] tidyselect_1.0.0        xfun_0.12              
LS0tCnRpdGxlOiAiRXN0YWTDrXN0aWNhcyBNdW5pY2lwYWxlcyBBZ3JvcGVjdWFyaWFzIGVuIENhcXVldMOhIgpkYXRlOiAiMTkvMDQvMjAyMCIKbmFtZTogIlNhbmRyYSBLYXR0ZXJ5bmUgUm9kcsOtZ3VleiBIdXJ0YWRvIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCiMjIyMgU2FuZHJhIEthdHRlcnluZSBSb2Ryw61ndWV6IEh1cnRhZG8gCiMjIyBPYmpldGl2bwpFbCBvYmpldGl2byBkZSBlc3RlIGN1YWRlcm5vIGVzIGRhciBhIGNvbm9jZXIgbG9zIGRhdG9zIGRlIGxhcyBFc3RhZMOtc3RpY2FzIE11bmljaXBhbGVzIEFncm9wZWN1YXJpYXMgZW4gQ2FxdWV0w6EsIGRvbmRlIHNlIHJlcHJlc2VudGFyw6FuIGFsZ3Vub3MgZGUgZXN0b3MgZGF0b3MgZ3LDoWZpY2FtZW50ZSB5IHBvciBtZWRpbyBkZSB0YWJsYXMsIGRhbmRvIGEgY29ub2NlciBpbmZvcm1hY2nDs24gc29icmUgcHJvZHVjdG9zIGFncsOtY29sYXMgcXVlIGNvbmZvcm1hbiBsYSBlY29ub23DrWEgZGVsIGRlcGFydGFtZW50by4gQWRlbcOhcywgc2UgZGl2dWxnYXLDoSBpbmZvcm1hY2nDs24gc29icmUgYWxndW5hcyBoZXJyYW1pZW50YXMgcGFyYSBlbCBkZXNhcnJvbGxvIGRlIG8gYW50ZXJpb3JtZW50ZSBtZW5jaW9uYWRvLgoKIyMjIEZ1bmNpb25hbGlkYWRlcyBkZSBsb3MgU0lHCkxhcyBlc3RhZMOtc3RpY2FzIGRlcGFydGFtZW50YWxlcyBzb24gZGUgZ3JhbiB1dGlsaWRhZCBwYXJhIHBvZGVyIGFuYWxpemFyIGxvIHF1ZSBlc3TDoSBzdWNlbmRpZW5kbyBlbiBlbCBkZXBhcnRhbWVudG8geSBlbiBsb3MgbXVuaWNpcGlvcyBxdWUgbG8gY29uZm9ybWFuLiBFbiBwcm9ncmFtYXMgY29tbyBSU3R1ZGlvIHkgUUdJUywgZXMgcG9zaWJsZSB1bmlyIGRhdG9zIGVzdGFkw61zdGljb3MgY29uIGRhdG9zIGVzcGFjaWFsZXMgcGFyYSBwb2RlciByZWFsaXphciBhbsOhbGlzaXMsIHBvciBlamVtcGxvLCBzYWJlciBjdcOhbGVzIHNvbiBsb3MgbXVuaWNpcGlvcyBxdWUgZXN0w6FuIHByZXNlbnRhbmRvIG1heW9yIG8gbWVub3IgcHJvZHVjY2nDs24uIExvIHByaW1lcm8gZXMgZWxpbWluYXIgZWwgY29udGVuaWRvIGRlIGxhIG1lbW9yaWEgY29uIGxhIGZ1bmNpw7NuOgpgYGB7cn0Kcm0obGlzdD1scygpKQpgYGAKUGFyYSBsYSByZWFsaXphY2nDs24gZGUgZXN0ZSB0cmFiYWpvLCBlcyBuZWNlc2FyaW8gaW5zdGFsYXIgdW5hIHNlcmllIGRlIHBhcXVldGVzIGNvbiBsYSBzaWd1aWVudGUgaW5zdHJ1Y2Npw7NuLCBsYSBjdWFsIHRyYWUgY29tbyB2ZW50YWphIHF1ZSBpbnN0YWxhcsOhIHNvbG8gbG9zIHBhcXVldGVzIHF1ZSBubyBoYW4gc2lkbyBpbnN0YWxhZG9zOgpgYGB7cn0KbGlzdC5vZi5wYWNrYWdlcyA8LSBjKCJoZXJlIiwgInRpZHl2ZXJzZSIsICJyZ2VvcyIsICJtYXB0b29scyIsICJyYXN0ZXIiLCAic2YiLCAgInZpcmlkaXMiLCAicm5hdHVyYWxlYXJ0aCIsICJHU09EUiIsICJnZ3JlcGVsIiwgImNvd3Bsb3QiKQpuZXcucGFja2FnZXMgPC0gbGlzdC5vZi5wYWNrYWdlc1shKGxpc3Qub2YucGFja2FnZXMgJWluJSBpbnN0YWxsZWQucGFja2FnZXMoKVssIlBhY2thZ2UiXSldCmlmKGxlbmd0aChuZXcucGFja2FnZXMpKSBpbnN0YWxsLnBhY2thZ2VzKG5ldy5wYWNrYWdlcykKYGBgCkx1ZWdvIGNhcmdhciBsYXMgYmlibGlvdGVjYXMuCmBgYHtyfQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJnZW9zKQpsaWJyYXJ5KG1hcHRvb2xzKQpsaWJyYXJ5KHJhc3RlcikKbGlicmFyeShzZikKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KHJuYXR1cmFsZWFydGgpCmxpYnJhcnkoR1NPRFIpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShjb3dwbG90KQpgYGAKIyMjIEV4cG9yYW5kbyBsYXMgZXN0YWTDrXN0aWNhcyBtdW5pY2lwYWxlcyBkZSBDYXF1ZXTDoQpVbmEgdmV6IGRlc2NhcmdhZG8gZW4gYXJjaGl2byBjc3YgZGUgbGFzIGVzdGFkw61zdGljYXMgYWdyb3BlY3VhcmlhcyBtdW5pY2lwYWxlcyBkZSBDYXF1ZXTDoSwgc2UgbGVlcsOhIGNvbiBsYSBzaWd1aWVudGUgaW5zdHJ1Y2Npw7NuOgpgYGB7cn0KZGF0b3MgPC0gcmVhZF9jc3YoIi4vQWdyby9FVkFfQ2FxdWV0w6EyLmNzdiIpCmBgYApBIGNvbnRpY3VhbmRpw7NuLCBzZSBtb3N0cmFyw6FuIGxvcyBhdHJpYnV0b3MgZGUgbG9zIGRhdG9zLCBkb25kZSBsYSBwcmltZXJhIHRhYmxhIG11ZXN0cmEgbG9zIHByaW1lcm9zIGRhdG9zIHF1ZSBsYSBjb25mb3JtYW4gY29uIGxhIGluc3RydWNjacOzbiDigJxoZWFkKGRhdG9zKeKAnSwgeSBlbiBsYSBzZWd1bmRhLCBtdWVzdHJhIGxvcyBkYXRvcyBxdWUgZXN0w6FuIGFsIGZpbmFsIGRlIGxhIG1pc21hIGNvbiBsYSBpbnN0cnVjY2nDs24gdGFpbChkYXRvcykuIAojIyMjIyBUYWJsYSAxOgpgYGB7cn0KaGVhZChkYXRvcykKYGBgCiMjIyMgVGFibGEgMjoKYGBge3J9CnRhaWwoZGF0b3MpCmBgYApTZSBkZWJlIHRlbmVyIGVuIGN1ZW50YSBxdWUsIHBlc2UgYSBxdWUgZW4gbGFzIHRhYmxhcyBubyBzZSBkYW4gdW5pZGFkZXMsIGxhcyBkZSDDoXJlYSBzb24gaGVjdMOhcmVhcyAoSGEpLCB5IGxhcyB1bmlkYWRlcyBkZSByZW5kaW1pZW50b3Mgc29uIHRvbmVsYWRhcy9IYS4gQ29uIGxhIHNpZ3VpZW50ZSBpbnN0cnVjY2nDs24gc2UgcG9kcsOhbiB2ZXIgdW4gcHJvbWVkaW8gZGUgdmFyaW9zIGHDsW9zIGRlIGxvcyByZW5kaW1pZW50b3MgZGUgY2llcnRvcyBjdWx0aXZvcyBwb3IgZ3J1cG8geSBtdW5pY2lwaW8uCgpBaG9yYSBzZSBjYWxjdWxhcsOhIGVsIHJlbmRpbWllbnRvIHByb21lZGlvLgpgYGB7cn0KZGF0b3MgJT4lCiAgZ3JvdXBfYnkoTVVOSUNJUElPLCBHUlVQTykgJT4lCiAgc3VtbWFyaXNlKHJlbmRfcHJvbSA9IG1lYW4oUmVuZGltaWVudG8sIG5hLnJtID0gVFJVRSkpIC0+IHJlbmRfcmVzdW1lbgoKaGVhZChyZW5kX3Jlc3VtZW4pCmBgYApTZSBwdWVkZSBjYWxjdWxhciBlbCBwcm9tZWRpbyBwb3IgZ3J1cG8gZW4gbG9zIG11bmljaXBpb3MgZGUgQ2FxdWV0w6EsIGRvbmRlIHNlIHB1ZWRlIGFwcmVjaWFyIHF1ZSBsb3MgZ3J1cG9zIGRlIGN1bHRpdm9zIGNvbiBtYXlvcmVzIHJlbmRpbWllbnRvcyBzb24gbGFzIGhvcnRhbGl6YXMsIGZydXRhbGVzIHkgdHViw6lyY3Vsb3MgeSBwbMOhdGFub3MuIEVzdG8gZXMgcG9zaWJsZSBjb24gbGEgc2lndWllbnRlIGluc3RydWNjacOzbjoKYGBge3J9CmRhdG9zICU+JQogIGdyb3VwX2J5KEdSVVBPKSAlPiUKICBzdW1tYXJpc2UocmVuZF9kZXAgPSBtZWFuKFJlbmRpbWllbnRvLCBuYS5ybSA9IFRSVUUpKSAtPiByZW5kX2NhcXVldMOhCgpyZW5kX2NhcXVldMOhCmBgYApBaG9yYSBzZSB2YW4gYSBhcHJlY2lhciBsb3MgbXVuaWNpcGlvcyBkZWwgZGVwYXJ0YW1lbnRvIGRlIENhcXVldMOhIGNvbiBtYXlvciByZW5kaW1pZW50byBwYXJhIGNhZGEgZ3J1cG8gZGUgY3VsdGl2b3MsIGVzdG8gY29uIGxhIHNpZ3VpZW50ZSBpbnN0cnVjY2nDs246CmBgYHtyfQpkYXRvcyAlPiUgCiAgZmlsdGVyKFlFQVI9PTIwMTgpICU+JSAKICBncm91cF9ieShHUlVQTywgTVVOSUNJUElPKSAlPiUKICBzdW1tYXJpemUobWF4X3JlbmQgPSBtYXgoUmVuZGltaWVudG8sIG5hLnJtID0gVFJVRSkpICU+JQogICAgc2xpY2Uod2hpY2gubWF4KG1heF9yZW5kKSkgLT4gcmVuZF9tYXhfMTgKCnJlbmRfbWF4XzE4CmBgYApBIGNvbnRpbnVhY2nDs24gc2UgbW9zdHJhcsOhbiBsb3MgbXVuaWNpcGlvcyBjb24gbGEgbWF5b3Igw6FyZWEgY29zZWNoYWRhIGVuIGVsIGHDsW8gZGUgbGEgZXZhbHVhY2nDs24gZGVsIGFyY2hpdm8gKDIwMTgpLCBkb25kZSBlbCBtdW5pY2lwaW8gZGUgU2FuIFZpY2VudGUgZGVsIENhZ3XDoW4gZnVlIGVsIGRlIG1heW9yIMOhcmVhIHNlbWJyYWRhIGVuIGVsIGdydXBvIGRlIGNlcmVhbGVzLgpgYGB7cn0KZGF0b3MgJT4lIAogIGZpbHRlcihZRUFSPT0yMDE4KSAlPiUgCiAgZ3JvdXBfYnkoR1JVUE8sIE1VTklDSVBJTykgJT4lCiAgc3VtbWFyaXplKG1heF9hcmVhX2Nvc2VjaGEgPSBtYXgoQXJlYV9jb3NlY2hhZGEsIG5hLnJtID0gVFJVRSkpICU+JQogICAgc2xpY2Uod2hpY2gubWF4KG1heF9hcmVhX2Nvc2VjaGEpKSAtPiBhcmVhX2Nvc2VjaGFfbWF4CgphcmVhX2Nvc2VjaGFfbWF4CmBgYApTZSBzZWxlY2Npb25hcsOhIGVsIGFycm96IHBhcmEgbWlyYXIgbGEgcHJvZHVjY2nDs24gZGUgZXN0ZSAoZW4gdG9uZWxhZGFzKSBlbiBlbCBtdW5pY2lwaW8gZGUgU2FuIFZpY2VudGUgZGVsIENhZ3XDoW4gcG9yIG1lZGlvIGRlIGxhIGluc3RydWNjacOzbjoKYGBge3J9CmRhdG9zICU+JSAKICBmaWx0ZXIoTVVOSUNJUElPPT0iU0FOIFZJQ0VOVEUgREVMIENBR1VBTiIgJiBTVUJHUlVQTz09IkFSUk9aIikgJT4lIAogIGdyb3VwX2J5KFlFQVIsIENVTFRJVk8pIC0+ICBzYW52aWNlbnRlZGVsY2FndWFuX2Fycm96CgpzYW52aWNlbnRlZGVsY2FndWFuX2Fycm96CmBgYAojIyMgUmVhbGl6YWNpw7NuIGRlIGdyw6FmaWNhcyBkZSBsYSBpbmZvcm1hY2nDs24KUGFyYSBlc3RvIHNlIG5lY2VzaXRhIGxhIGxpYnJlcsOtYSBnZ3Bsb3QuCmBgYHtyfQpnIDwtIGdncGxvdChhZXMoeD1ZRUFSLCB5PVByb2R1Y2Npb24vMTAwMCksIGRhdGEgPSBzYW52aWNlbnRlZGVsY2FndWFuX2Fycm96KSArIGdlb21fYmFyKHN0YXQ9J2lkZW50aXR5JykgKyBsYWJzKHk9J1Byb2R1Y2Npw7NuIGRlIEFycm96IFtUb24geCAxMDAwXScpCmBgYApgYGB7cn0KZyArIGdndGl0bGUoIkV2b2x1Y2nDs24gZGUgbGEgcHJvZHVjY2nDs24gZGUgQXJyb3ogZW4gU2FuIFZpY2VudGUgZGVsIENhZ3XDoW4gZGUgMjAwNyBhIDIwMTgiKSArIGxhYnMoY2FwdGlvbj0gIkJhc2FkbyBlbiBsb3MgZGF0b3MgZGUgRU1BIChEQU5FLCAyMDE4KSIpCmBgYApBaG9yYSBzZSBkYXLDoW4gbGEgaW5mb3JtYWNpw7NuIGRlIHF1w6kgY3VsdGl2b3MgdHV2aWVyb24gbGEgbWF5b3Igw6FyZWEgY29zZWNoYWRhIGVuIDIwMTgsIGRvbmRlIHR1YsOpcmN1bG9zIHkgcGzDoXRhbm9zLCB5IG90cm9zIHBlcm1hbmVudGVzLCBzb24gbG9zIGRlIG1heW9yIMOhcmVhIGN1bHRpdmFkYS4KYGBge3J9CmRhdG9zICU+JSAKICBmaWx0ZXIoWUVBUj09MjAxOCkgJT4lIAogIGdyb3VwX2J5KEdSVVBPKSAlPiUKICBzdW1tYXJpemUoc3VtX2FyZWFfY29zZWNoYSA9IHN1bShBcmVhX2Nvc2VjaGFkYSwgbmEucm0gPSBUUlVFKSkgJT4lCiAgICAgYXJyYW5nZShkZXNjKHN1bV9hcmVhX2Nvc2VjaGEpKSAtPiB0b3RhbF9hcmVhX2Nvc2VjaGEKCnRvdGFsX2FyZWFfY29zZWNoYQpgYGAKUGFyYSB2ZXIgbG9zIGN1bHRpdm9zIHF1ZSBjb21wb25lbiBlbCBncnVwbyBkZSDigJxPdHJvcyBwZXJtYW5lbnRlc+KAnSB5IHZlcmxvcyBkZSBtYW5lcmEgb3JnYW5pemFkYSBlbiB1bmEgdGFibGEsIHNlIHB1ZWRlIGhhY2VyIGNvbnN1bHRhbmRvIGRpcmVjdGFtZW50ZSBlbiBsYSBww6FnaW5hIGRlbCBEQU5FIG8gY29uIGxhIHNpZ3VpZW50ZSBpbnN0cnVjY2nDs246CmBgYHtyfQpkYXRvcyAlPiUKICBmaWx0ZXIoR1JVUE89PSJPVFJPUyBQRVJNQU5FTlRFUyIgJiBZRUFSPT0yMDE4KSAlPiUKICBncm91cF9ieShDVUxUSVZPKSAlPiUKICBzdW1tYXJpemUoc3VtX2Nvc2VjaGEgPSBzdW0oQXJlYV9jb3NlY2hhZGEsIG5hLnJtID0gVFJVRSkpICU+JQogICAgIGFycmFuZ2UoZGVzYyhzdW1fY29zZWNoYSkpIC0+IHRvdGFsX2Nvc2VjaGEKCgp0b3RhbF9jb3NlY2hhCmBgYApBaG9yYSBzZSBhbmFsaXphcsOhIGN1w6FsZXMgc29uIGxvcyBtdW5pY2lwaW9zIGNvbiBtYXlvciDDoXJlYSBjb3NlY2hhZGEgcGFyYSBjYWRhIGN1bHRpdm8gcGVybWFuZW50ZSBlbiBlbCBhw7FvIDIwMTgsIGRvbmRlIGVuIGVsIG11bmljaXBpbyBkZSBGbG9yZW5jaWEgc2UgZW5jdWVudHJhIGxhIG1heW9yIMOhcmVhIGNvc2VjaGFkYSBkZSBjYWbDqSwgZW4gU2FuIFZpY2VudGUgZGVsIENhZ3XDoW4gZGUgY2HDsWEgcGFuZWxlcmEgeSBlbiBNaWzDoW4gZGUgY2FjYW8uCmBgYHtyfQpkYXRvcyAlPiUgCiAgZmlsdGVyKFlFQVI9PTIwMTggJiBHUlVQTz09Ik9UUk9TIFBFUk1BTkVOVEVTIikgJT4lIAogIGdyb3VwX2J5KENVTFRJVk8sIE1VTklDSVBJTykgJT4lCiAgc3VtbWFyaXplKG1heF9hcmVhMiA9IG1heChBcmVhX2Nvc2VjaGFkYSwgbmEucm0gPSBUUlVFKSkgJT4lCiAgICBzbGljZSh3aGljaC5tYXgobWF4X2FyZWEyKSkgLT4gYXJlYV9jb3NlY2hhMgoKYXJlYV9jb3NlY2hhMgpgYGAKQSBjb250aW51YWNpw7NuIHNlIG9yZ2FuaXphcsOhbiBsb3Mgbm9tYnJlcyBkZSBsb3MgZ3J1cG9zIGRlIGN1bHRpdm9zLCBkw6FuZG9sZXMgdW5hIHNlcmllIGRlIGFicmV2aWF0dXJhcy4KYGBge3J9CnRvdGFsX2FyZWFfY29zZWNoYSRDUk9QIDwtIGFiYnJldmlhdGUodG90YWxfYXJlYV9jb3NlY2hhJEdSVVBPLCAzKQpgYGAKU2UgaGFyw6EgZWwgcGxvdGVvIGNvbiBlc3RhcyBkb3MgaW5zdHJ1Y2Npb25lczoKYGBge3J9CmcgPC0gZ2dwbG90KGFlcyh4PUNST1AsIHk9c3VtX2FyZWFfY29zZWNoYSksIGRhdGEgPSB0b3RhbF9hcmVhX2Nvc2VjaGEpICsgZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknKSArIGxhYnMoeT0nw4FyZWEgdG90YWwgY29zZWNoYWRhIFtIYV0nKQpgYGAKYGBge3J9CmcrIGdndGl0bGUoIlN1cGVyZmljaWUgdG90YWwgY29zZWNoYWRhIHBvciBncnVwb3MgZGUgY3VsdGl2b3MgZW4gMjAxOCBwYXJhIENhcXVldMOhIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKwogICBsYWJzKGNhcHRpb249ICJCYXNhZG8gZW4gZGF0b3MgZGUgRU1BIChEQU5FLCAyMDE4KSIpCmBgYApBIGNvbnRpbnVhY2nDs24gc2UgYW5hbGl6YXLDoW4gbG9zIGRhdG9zIGRlIEhvcnRhbGl6YXMsIGRvbmRlIFNhbiBWaWNlbnRlIGRlbCBDYWfDumFuIHR1dm8gbGEgbWF5b3Igw6FyZWEgY29zZWNoYWRhIGRlbnRybyBkZSBsb3MgY3VsdGl2b3MgZGUgZXN0ZSBncnVwbyBjb24gZWwgY3VsdGl2byBkZSB0b21hdGUuCmBgYHtyfQpkYXRvcyAlPiUgCiAgZmlsdGVyKFlFQVI9PTIwMTggJiBHUlVQTz09IkhPUlRBTElaQVMiKSAlPiUgCiAgZ3JvdXBfYnkoQ1VMVElWTywgTVVOSUNJUElPKSAlPiUKICBzdW1tYXJpemUobWF4X2FyZWEyID0gbWF4KEFyZWFfY29zZWNoYWRhLCBuYS5ybSA9IFRSVUUpKSAlPiUKICAgIHNsaWNlKHdoaWNoLm1heChtYXhfYXJlYTIpKSAtPiBhcmVhX2Nvc2VjaGEzCgphcmVhX2Nvc2VjaGEzCmBgYAojIyMgQW7DoWxpc2lzIGRlIHJlbmRpbWllbnRvcyBwYXJhIGN1bHRpdm9zIGRlIENhcXVldMOhCkxhIHNpZ3VpZW50ZSB0YWJsYSBtdWVzdHJhIGxvcyBncnVwb3MgZGUgY3VsdGl2byBjb24gZWwgdG90YWwgZGUgcmVuZGltaWVudG9zIChUb25lbGFkYS9oYSkgZGUgbWFuZXJhIGRlc2NlbmRlbnRlLCBkb25kZSBsb3MgZnJ1dGFsZXMsIHR1YsOpcmN1bG9zIHkgaG9ydGFsaXphcyBvY3XDoW4gbG9zIHByaW1lcm9zIGx1Z2FyZXMuCmBgYHtyfQpkYXRvcyAlPiUgCiAgZmlsdGVyKFlFQVI9PTIwMTgpICU+JSAKICBncm91cF9ieShHUlVQTykgJT4lCiAgc3VtbWFyaXplKHN1bV9yZW5kaW1pZW50byA9IHN1bShSZW5kaW1pZW50bywgbmEucm0gPSBUUlVFKSkgJT4lCiAgICAgYXJyYW5nZShkZXNjKHN1bV9yZW5kaW1pZW50bykpIC0+IHRvdGFsX3JlbmRpbWllbnRvCgp0b3RhbF9yZW5kaW1pZW50bwpgYGAKRW4gc2VndWlkYSBzZSBtdWVzdHJhbiBsb3MgbXVuaWNpcGlvcyBjb24gbWF5b3JlcyByZW5kaW1pZW50b3MgKFRvbmVsYWRhL2hhKSBlbiBsb3MgY3VsdGl2b3MgcXVlIGNvbXBvbmVuIGVsIGdydXBvIGRlIOKAnE90cm9zIHBlcm1hbmVudGVz4oCdIGVuIGVsIGRlcGFydGFtZW50byBkZSBDYXF1ZXTDoSwgZG9uZGUgZWwgbXVuaWNpcGlvIEVsIERvbmNlbGxvIHR1dm8gbWF5b3JlcyByZW5kaW1pZW50b3MgZW4gY2FjYW8geSBjYcOxYSBwYW5lbGVyYSwgeSBlbCBtdW5pY2lwaW8gZGUgUHVlcnRvIFJpY28gdHV2byBtYXlvcmVzIHJlbmRpbWllbnRvcyBlbiBjYWbDqS4KYGBge3J9CmRhdG9zICU+JSAKICBmaWx0ZXIoWUVBUj09MjAxOCAmIEdSVVBPPT0iT1RST1MgUEVSTUFORU5URVMiKSAlPiUgCiAgZ3JvdXBfYnkoQ1VMVElWTywgTVVOSUNJUElPKSAlPiUKICBzdW1tYXJpemUoUmVuZGltaWVudG8gPSBtYXgoUmVuZGltaWVudG8sIG5hLnJtID0gVFJVRSkpICU+JQogICAgc2xpY2Uod2hpY2gubWF4KFJlbmRpbWllbnRvKSkgLT4gUmVuZGltaWVudG8KClJlbmRpbWllbnRvCmBgYApBYnJldmlhciBsb3Mgbm9tYnJlczoKYGBge3J9CnRvdGFsX3JlbmRpbWllbnRvJEdydXBvIDwtIGFiYnJldmlhdGUodG90YWxfcmVuZGltaWVudG8kR1JVUE8sIDMpCmBgYApQbG90ZWFyOgpgYGB7cn0KZyA8LSBnZ3Bsb3QoYWVzKHg9R3J1cG8sIHk9c3VtX3JlbmRpbWllbnRvKSwgZGF0YSA9IHRvdGFsX3JlbmRpbWllbnRvKSArIGdlb21fYmFyKHN0YXQ9J2lkZW50aXR5JykgKyBsYWJzKHk9J1JlbmRpbWllbnRvcyBbVG9uL0hhXScpCmBgYAoKYGBge3J9CmcrIGdndGl0bGUoIlN1cGVyZmljaWUgdG90YWwgY29zZWNoYWRhIHBvciBncnVwb3MgZGUgY3VsdGl2b3MgZW4gMjAxOCBwYXJhIENhcXVldMOhIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKwogICBsYWJzKGNhcHRpb249ICJCYXNhZG8gZW4gbG9zIGRhdG9zIGRlIEVNQSAoREFORSwgMjAxOCkiKQpgYGAKIyMjIFVuaXIgbGFzIGVzdGFkw61zdGljYXMgYWdyw61jb2xhcyBhIGxvcyBtdW5pY2lwaW9zLgpMdWVnbyBkZSBoYWJlciBzdWJpZG8gbG9zIGRhdG9zIGRlIEFkbWluaXN0cmF0aXZvIGRlbCBkZXBhcnRhbWVudG8gZGUgQ2FxdWV0w6EgcXVlIHNlIGVuY3VlbnRyYW4gZW4gZWwgTWFyY28gR2VvZXN0YWRpc3RpY28gRGVwYXJ0YW1lbnRhbCBxdWUgZXN0w6EgZGlzcG9uaWJsZSBlbiBEQU5FIEdlb3BvcnRhbCwgc2UgdW5yw6FuIGxhcyBlc3RhZMOtc3RpY2FzIGFncsOtY29sYXMgYSBsb3MgbXVuaWNpcGlvcyBxdWUgY29tcG9uZW4gZXN0ZSBkZXBhcnRhbWVudG8uIFBhcmEgcmVhbGl6YXIgZXN0byBlcyBuZWNlc2FyaW8gYSBsaWJyZXLDrWEgc2YuCmBgYHtyfQphbnRfbXVuaWMgPC0gc2Y6OnN0X3JlYWQoIi4vQWdyby9BRE1JTklTVFJBVElWTy9NR05fTVBJT19QT0xJVElDTy5zaHAiKQpgYGAKwr9RdcOpIGVzIGFudF9tdW5pYz8KRW4gdW4gY29uanVudG8gZGUgY2FyYWN0ZXLDrXN0aWNhcyBzaW1wbGVzLCBkb25kZSBzZSB1dGlsaXphbiBkYXRvcyBjb24gZWwgc2lzdGVtYSBkZSByZWZlcmVuY2lhIFdHUzg0LiBFcyBuZWNlc2FyaW8gdXRpbGl6YXIgbGEgZnVuY2nDs24gbGVmdF9qb2luIHBhcmEgdW5pciBsYXMgZXN0YWTDrXN0aWNhcyB5IGxvcyBtdW5pY2lwaW9zLiAKYGBge3J9CmFudF9tdW5pYwpgYGAKUGFyYSBwb2RlciByZWFsaXphciBsYSB1bmnDs24gZGUgbG9zIGRhdG9zLCBlcyBuZWNlc2FyaW8gaWRlbnRpZmljYXIgdW5hIGNhcmFjdGVyw61zdGljYSBxdWUgdGVuZ2FuIGVuIGNvbcO6biBhbWJvcywgZW4gZXN0ZSBjYXNvIE1QSU9fQ0NER08geSBDT0RfTVVOLgpgYGB7cn0KZGF0b3MgJT4lIGZpbHRlciAoTVVOSUNJUElPID09IlNBTiBWSUNFTlRFIERFTCBDQUdVQU4iKSAtPiAgbWVkX2RhdG9zCmBgYAoKYGBge3J9Cm1lZF9kYXRvcwpgYGAKYGBge3J9CmNsYXNzKG1lZF9kYXRvcyRDT0RfTVVOKQpgYGAKRXMgbmVjZXNhcmlvIHZlcmlmaWNhciBzaSBlcyBuZWNlc2FyaW8gaGFjZXJsZSBlbGdwdW4gdGlwbyBkZSBjYW1iaW8gYSBsb3MgZGF0b3MsIGNvbW8gbGEgY2xhc2UgbyBhw7FhZGlyIG8gcXVpdGFyIGFsZ8O6biBuw7ptZXJvIHF1ZSB0ZW5nYW4gZGUgZGlmZXJlbmNpYS4gRW4gZXN0ZSBjYXNvIG5vIGZ1ZSBuZWNlc2FyaW8uCmBgYHtyfQpkYXRvczIgPC0gZGF0b3MKYGBgCmBgYHtyfQpkYXRvczIkVEVNUCA8LSAgYXMuY2hhcmFjdGVyKGRhdG9zMiRDT0RfTVVOKQpgYGAKYGBge3J9CmRhdG9zMiRNUElPX0NDREdPIDwtIGFzLmZhY3RvcihwYXN0ZShkYXRvczIkVEVNUCwgc2VwPSIiKSkKYGBgCmBgYHtyfQpoZWFkKGRhdG9zMikKYGBgCkFob3JhIHNlIHZhbiBhIGZpbHRyYXIgbG9zIGRhdG9zIGRlIHVuIGN1bHRpdm8gZW4gZXNwZWPDrWZpY28sIGVuIGVzdGUgY2FzbyBhcnJveiwgZmlsdHJhbmRvIHNvbG8gdW4gYcOxby4gCmBgYHtyfQpkYXRvczIgJT4lIGZpbHRlcihDVUxUSVZPID09ICJBUlJPWiIpICAtPiBkYXRvczMKYGBgCmBgYHtyfQpoZWFkKGRhdG9zMykKYGBgCmBgYHtyfQpjbGFzcyhkYXRvczMpCmBgYApgYGB7cn0KZGF0b3M0IDwtIGRhdG9zMyAlPiUgZHBseXI6OnNlbGVjdChNVU5JQ0lQSU8sIE1QSU9fQ0NER08sIFlFQVIsIFByb2R1Y2Npb24sIFJlbmRpbWllbnRvKSAKYGBgCmBgYHtyfQpkYXRvczQKYGBgCmBgYHtyfQpkYXRvczQgJT4lIAogIGdhdGhlcigiWUVBUiIsICJQcm9kdWNjaW9uIiwgIlJlbmRpbWllbnRvIiAsIGtleSA9IHZhcmlhYmxlLCB2YWx1ZSA9IG51bWJlcikKYGBgCmBgYHtyfQpoZWFkKGRhdG9zNCkKYGBgCmBgYHtyfQpkYXRvczQgJT4lIAogIGdyb3VwX2J5KE1QSU9fQ0NER08pICU+JSAKICBtdXRhdGUoVmlzaXQgPSAxOm4oKSkgJT4lIAogIGdhdGhlcigiWUVBUiIsICJQcm9kdWNjaW9uIiwgIlJlbmRpbWllbnRvIiwga2V5ID0gdmFyaWFibGUsIHZhbHVlID0gbnVtYmVyKSAlPiUgCiAgdW5pdGUoY29tYmksIHZhcmlhYmxlLCBWaXNpdCkgJT4lCiAgc3ByZWFkKGNvbWJpLCBudW1iZXIpIC0+IGRhdG9zNQpgYGAKYGBge3J9CmhlYWQoZGF0b3M1KQpgYGAKYGBge3J9CnRhaWwoZGF0b3M1KQpgYGAKYGBge3J9CmFudF9tdW5pYzIgPC0gYW50X211bmljCmBgYApgYGB7cn0KYW50X211bmljX3N0YXQgPSBsZWZ0X2pvaW4oYW50X211bmljMiwgZGF0b3M1LCBieT0iTVBJT19DQ0RHTyIpCmBgYAoKYGBge3J9CnN1bW1hcnkoYW50X211bmljX3N0YXQpCmBgYAojIyMgUGxvdGVvCmBgYHtyfQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShsZWFmbGV0KQpgYGAKQSBjb250aW51YWNpw7NuIHNlIG1vc3RyYXLDoW4gbG9zIGRhdG9zIGRlIGNhZGEgbXVuaWNpcGlvIGNvbiBsYSBjYW50aWRhZCBkZSBwcm9kdWNjacOzbiBkZSBhcnJveiBxdWUgdHV2aWVyb24gZW4gZWwgYcOxbyAyMDE4LgpgYGB7cn0KYmlucyA8LSBjKDAsIDI1MCwgNTAwLCAxMDAwLCAyMDAwLCA1MDAwLCAxMDAwMCwgMTUwMDApCnBhbCA8LSBjb2xvckJpbigiWWxPclJkIiwgZG9tYWluID0gYW50X211bmljX3N0YXQkUHJvZHVjY2lvbl8xMiwgYmlucyA9IGJpbnMpCgogIG1hcGEgPC0gbGVhZmxldChkYXRhID0gYW50X211bmljX3N0YXQpICU+JQogIGFkZFRpbGVzKCkgJT4lCiAgYWRkUG9seWdvbnMobGFiZWwgPSB+UHJvZHVjY2lvbl8xMiwKICAgICAgICAgICAgICBwb3B1cCA9IH5NUElPX0NOTUJSLAogICAgICAgICAgICAgIGZpbGxDb2xvciA9IH5wYWwoUHJvZHVjY2lvbl8xMiksCiAgICAgICAgICAgICAgY29sb3IgPSAiIzQ0NDQ0NCIsCiAgICAgICAgICAgICAgd2VpZ2h0ID0gMSwKICAgICAgICAgICAgICBzbW9vdGhGYWN0b3IgPSAwLjUsCiAgICAgICAgICAgICAgb3BhY2l0eSA9IDEuMCwKICAgICAgICAgICAgICBmaWxsT3BhY2l0eSA9IDAuNSwKICAgICAgICAgICAgICBoaWdobGlnaHRPcHRpb25zID0gaGlnaGxpZ2h0T3B0aW9ucyhjb2xvciA9ICJ3aGl0ZSIsIHdlaWdodCA9IDIsIGJyaW5nVG9Gcm9udCA9IFRSVUUpCiAgICAgICAgICAgICAgKSAlPiUKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRPcGVuU3RyZWV0TWFwKSAlPiUKICBhZGRMZWdlbmQoImJvdHRvbXJpZ2h0IiwgcGFsID0gcGFsLCB2YWx1ZXMgPSB+UHJvZHVjY2lvbl8xMiwKICAgIHRpdGxlID0gIlByb2R1Y2Npw7NuIGRlIEFycm96IGVuIENhcXVldMOhIFtUb25dICgyMDE4KSIsCiAgICBvcGFjaXR5ID0gMQogICkKYGBgCgpgYGB7cn0KbWFwYQpgYGAKCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAo=