Microdatos del censo agropecuario nacional
https://portal.gis.mag.gov.py/arcgis/apps/sites/#/geoportal/pages/microdatos
#install.packages("maps", "tmaptools", "tmap")
library("maps")
## Warning: package 'maps' was built under R version 4.3.3
library("tmaptools")
## Warning: package 'tmaptools' was built under R version 4.3.3
#library("rgdal")
#library("OpenStreetMap")
library("sf")
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library("raster")
## Warning: package 'raster' was built under R version 4.3.3
## Loading required package: sp
## Warning: package 'sp' was built under R version 4.3.3
library("dplyr")
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:raster':
##
## intersect, select, union
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library("spData")
## Warning: package 'spData' was built under R version 4.3.3
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
library("tmap") # for static and interactive maps
## Warning: package 'tmap' was built under R version 4.3.3
library("leaflet") # for interactive maps
## Warning: package 'leaflet' was built under R version 4.3.3
library("ggplot2") # tidyverse data visualization package
## Warning: package 'ggplot2' was built under R version 4.3.3
#library("spDataLarge")
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'tibble' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ✔ readr 2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ tidyr::extract() masks raster::extract()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ purrr::map() masks maps::map()
## ✖ dplyr::select() masks raster::select()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# can<- read_dta("G:/Mi unidad/FACEN_BIGDATA/CAN2022SanPedro/BASE_CAN2022_DATOS_GENERALES_P2.dta")
# names(can)
#
# # 3. Guardar como CSV
# write_csv(
# can,
# "G:/Mi unidad/FACEN_BIGDATA/CAN2022SanPedro/BASE_CAN2022_DATOS_GENERALES_P2.csv"
# )
# cargar la base
library(readr)
can <- read_delim(
"G:/Mi unidad/FACEN_BIGDATA/CAN2022SanPedro/BASE_CAN2022_DATOS_GENERALES_P2.csv",
delim = ",",
show_col_types = FALSE
)
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
names(can)
## [1] "ID_FCA_ALEATORIO" "CLASIFICANEW" "DPTO_PROC"
## [4] "DSTO_PROC" "tipoi" "tipofinca"
## [7] "p5000" "menores_total" "mayores_total"
## [10] "p7001_sn" "p7021p" "p7021p_nosabe"
## [13] "p7033p" "p7033p_nosabe" "p7221t"
## [16] "p7221t_nosabe" "p7223t" "p7223t_nosabe"
## [19] "p8000_1" "p8000_3" "p9001"
## [22] "p9000_total" "p10001" "p10002"
## [25] "p10003" "p10004" "p10005"
## [28] "p10006" "p10007" "p10008"
## [31] "p10009" "p10000_total" "p12000_sn"
## [34] "p12000_total" "p12000b_total" "p13300_total"
## [37] "p14000_sn" "p14000_total" "p15000_sn"
## [40] "p15000_total" "p16000_sn" "p16000_total"
## [43] "p18000_sn" "p18002" "XP18003_1"
## [46] "XP18003_2" "XP18003_3" "p18003_esp"
## [49] "p18003_0" "p18003_1" "p18003_2"
## [52] "p18003_3" "p19100_sn" "p19101"
## [55] "p19102" "p19103" "p19104"
## [58] "p19105" "p19106" "p19107"
## [61] "p19108" "p19109" "p19110"
## [64] "p19111" "p19112" "p19119"
## [67] "p19121" "p19122" "p19123"
## [70] "p19123_nosabe" "xp19124_1" "xp19124_2"
## [73] "xp19124_3" "xp19124_4" "p19125_1"
## [76] "p19131" "p19132" "p19133"
## [79] "p19135_1_sn" "p19136_sn" "p19139_sn"
## [82] "p19140_sn" "p19300_sn" "p19303_total"
## [85] "raza_oveja_total" "p19400_sn" "p19405_total"
## [88] "raza_cabra_total" "p19500_sn" "p19509_total"
## [91] "p19700_sn" "p19701" "p19710"
## [94] "p19800_sn" "p19802" "p19802_nosabe"
## [97] "p210051_sn" "p21010_sn" "p21011_sn"
## [100] "p21013_sn" "p21014_sn" "p21016_sn"
## [103] "p21017_sn" "p21018_sn" "p21018_1"
## [106] "XP21018_2_1" "XP21018_2_2" "XP21018_2_3"
## [109] "XP21018_2_4" "p22000_sn" "p23100_sn"
## [112] "XP23101_1" "XP23101_2" "XP23101_3"
## [115] "XP23101_4" "XP23101_5" "XP23101_6"
## [118] "XP23101_7" "XP23102_1_1" "XP23102_1_2"
## [121] "XP23102_1_3" "XP23102_1_4" "XP23102_1_5"
## [124] "XP23102_1_6" "XP23102_1_7" "XP23102_1_8"
## [127] "XP23102_1_9" "XP23102_1_10" "XP23102_1_11"
## [130] "XP23102_1_12" "XP23102_3_1" "XP23102_3_2"
## [133] "XP23102_3_3" "XP23102_3_4" "XP23102_3_5"
## [136] "XP23102_3_6" "XP23102_3_7" "XP23102_3_8"
## [139] "XP23102_3_9" "XP23102_3_10" "XP23102_3_11"
## [142] "XP23102_3_12" "p23150_sn" "p23200_sn"
## [145] "XP23201_1" "XP23201_2" "XP23201_3"
## [148] "XP23201_4" "XP23201_5" "XP23201_6"
## [151] "XP23202_1_1" "XP23202_1_2" "XP23202_1_3"
## [154] "XP23202_1_4" "XP23202_1_5" "XP23202_1_6"
## [157] "XP23202_1_7" "XP23202_31" "XP23202_32"
## [160] "XP23202_33" "XP23202_34" "XP23202_35"
## [163] "XP23202_36" "XP23202_37" "p23250_sn"
## [166] "XP23251_1" "XP23251_2" "XP23251_3"
## [169] "XP23251_4" "XP23251_5" "XP23251_6"
## [172] "XP23252_11" "XP23252_12" "XP23252_13"
## [175] "XP23252_14" "XP23252_15" "XP23252_16"
## [178] "XP23252_17" "XP23252_31" "XP23252_32"
## [181] "XP23252_33" "XP23252_34" "XP23252_35"
## [184] "XP23252_36" "p23300_sn" "p24000_1_sn"
## [187] "p24000_2_sn" "p24000_3_sn" "p24000_4_sn"
## [190] "p24000_5_sn" "p24000_13_sn" "p26002_sn"
## [193] "p26101_sn" "p26102_sn" "p26103_sn"
## [196] "p27000_sn" "p28100_sn" "XP28100_1"
## [199] "XP28100_2" "XP28100_3" "XP28100_4"
## [202] "XP28100_5" "XP28100_6" "XP28100_7"
## [205] "XP28100_9" "p28200_sn" "XP29000_1"
## [208] "XP29000_2" "XP29000_3" "XP29000_4"
## [211] "XP29000_5" "XP29000_6" "XP29000_9"
## [214] "p29000_esp" "p30000_sn" "p30000_1"
## [217] "SEMBRAMANUAL" "PULVEMOCHILA" "PULVEMOTO"
## [220] "ARADOS" "MOTOCULTOR" "MOTOSIERRA"
## [223] "CARRETA" "PICADORA" "TRACTOR"
## [226] "SEMBRADIRECTA" "PULVEARRASTRE" "COSEAUTOMOTRIZ"
## [229] "ACOPLADOS" "CAMIONES" "AERONAVES"
## [232] "TRACTORGPS" "SEMBRASENSOR" "PULVECONTROL"
## [235] "COSECHASENSOR" "DRONES"
py <- st_read("G:/Mi unidad/FACEN_BIGDATA/CAN2022SanPedro/gadm40_PRY_2.shp")
## Reading layer `gadm40_PRY_2' from data source
## `G:\Mi unidad\FACEN_BIGDATA\CAN2022SanPedro\gadm40_PRY_2.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 218 features and 12 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -62.64652 ymin: -27.60586 xmax: -54.25863 ymax: -19.29137
## Geodetic CRS: WGS 84
py$refer <- rnorm(218,0,1)
#View(py)
Identificador de la finca: ID_FCA_ALEATORIO Departamento:
“DPTO_PROC”
Distrito: “DSTO_PROC”
Tipo de finca:“tipoi”
cbind(table(can$DPTO_PROC))
## [,1]
## 1 12083
## 2 39480
## 3 15539
## 4 13044
## 5 30825
## 6 14065
## 7 24470
## 8 5696
## 9 13973
## 10 11725
## 11 2872
## 12 5618
## 13 2604
## 14 11570
## 15 3273
## 16 2029
## 17 968
cansp <- can %>%
filter(DPTO_PROC==7)
cbind(table(cansp$DPTO_PROC))
## [,1]
## 7 24470
# Vector key → nombre de distrito para los 218 distritos (códigos DSTO_PROC)
# Crear vector etiquetado para distritos de Itapúa
itapua_labels <- c(
`0701` = "Encarnación",
`0702` = "Bella Vista",
`0703` = "Cambyretá",
`0704` = "Capitán Meza",
`0705` = "Capitán Miranda",
`0706` = "Nueva Alborada",
`0707` = "Carmen del Paraná",
`0708` = "Coronel Bogado",
`0709` = "Carlos Antonio López",
`0710` = "Natalio",
`0711` = "Fram",
`0712` = "General Artigas",
`0713` = "General Delgado",
`0714` = "Hohenau",
`0715` = "Jesús",
`0716` = "José Leandro Oviedo",
`0717` = "Obligado",
`0718` = "Mayor Julio Dionisio Otaño",
`0719` = "San Cosme y Damián",
`0720` = "San Pedro del Paraná",
`0721` = "San Rafael del Paraná",
`0722` = "Trinidad",
`0723` = "Edelira",
`0724` = "Tomás Romero Pereira",
`0725` = "Alto Verá",
`0726` = "La Paz",
`0727` = "Yatytay",
`0728` = "San Juan del Paraná",
`0729` = "Pirapó"
)
# Ejemplo de uso creando un factor categórico a partir de los códigos (completo)
codigos_itapua <- c(
"0701", "0702", "0703", "0704", "0705", "0706", "0707",
"0708", "0709", "0710", "0711", "0712", "0713", "0714",
"0715", "0716", "0717", "0718", "0719", "0720", "0721",
"0722", "0723", "0724", "0725", "0726", "0727", "0728", "0729"
)
# Crear factor con nombres claros para distritos
distrito_nombre <- factor(
codigos_itapua,
levels = names(itapua_labels),
labels = itapua_labels
)
# Verificar resultado
distrito_nombre
## [1] Encarnación Bella Vista
## [3] Cambyretá Capitán Meza
## [5] Capitán Miranda Nueva Alborada
## [7] Carmen del Paraná Coronel Bogado
## [9] Carlos Antonio López Natalio
## [11] Fram General Artigas
## [13] General Delgado Hohenau
## [15] Jesús José Leandro Oviedo
## [17] Obligado Mayor Julio Dionisio Otaño
## [19] San Cosme y Damián San Pedro del Paraná
## [21] San Rafael del Paraná Trinidad
## [23] Edelira Tomás Romero Pereira
## [25] Alto Verá La Paz
## [27] Yatytay San Juan del Paraná
## [29] Pirapó
## 29 Levels: Encarnación Bella Vista Cambyretá Capitán Meza ... Pirapó
# 5. Asignar etiqueta a cada fila según DSTO_PROC
cansp <- cansp %>%
mutate(
DSTO_PROC = sprintf("%04d", DSTO_PROC), # asegurarse que tenga formato correcto ("0701", etc.)
distrito_nombre = recode(DSTO_PROC, !!!itapua_labels)
)
t=cbind(table(cansp$distrito_nombre))
t
## [,1]
## 0730 956
## Alto Verá 1164
## Bella Vista 802
## Cambyretá 765
## Capitán Meza 960
## Capitán Miranda 666
## Carlos Antonio López 1439
## Carmen del Paraná 392
## Coronel Bogado 746
## Edelira 1562
## Encarnación 436
## Fram 503
## General Artigas 1055
## General Delgado 799
## Hohenau 339
## Jesús 188
## José Leandro Oviedo 456
## La Paz 161
## Mayor Julio Dionisio Otaño 822
## Natalio 1355
## Nueva Alborada 486
## Obligado 844
## Pirapó 481
## San Cosme y Damián 600
## San Juan del Paraná 93
## San Pedro del Paraná 1947
## San Rafael del Paraná 1488
## Tomás Romero Pereira 1880
## Trinidad 248
## Yatytay 837
Cuantas fincas hay en San Pedro?
tabla1=sort(table(cansp$distrito_nombre), decreasing=FALSE)
tabla1
##
## San Juan del Paraná La Paz
## 93 161
## Jesús Trinidad
## 188 248
## Hohenau Carmen del Paraná
## 339 392
## Encarnación José Leandro Oviedo
## 436 456
## Pirapó Nueva Alborada
## 481 486
## Fram San Cosme y Damián
## 503 600
## Capitán Miranda Coronel Bogado
## 666 746
## Cambyretá General Delgado
## 765 799
## Bella Vista Mayor Julio Dionisio Otaño
## 802 822
## Yatytay Obligado
## 837 844
## 0730 Capitán Meza
## 956 960
## General Artigas Alto Verá
## 1055 1164
## Natalio Carlos Antonio López
## 1355 1439
## San Rafael del Paraná Edelira
## 1488 1562
## Tomás Romero Pereira San Pedro del Paraná
## 1880 1947
# Ajusta margen izquierdo para etiquetas largas
par(mar = c(5, 10, 4, 2)) # c(bottom, left, top, right)
barplot(tabla1,
horiz = TRUE, # barras horizontales
las = 1, # etiquetas de eje y en horizontal
col = "steelblue", # color de las barras
xlab = "Número de fincas",
main = "Fincas por distrito (orden descendente)")
### Clasificación de la finca
# Vector key → nombre de distrito para los 218 distritos (códigos DSTO_PROC)
clasifica_labels <- c(
# ── San Pedro (20x) ───────────────────────────────────
`11` = "Finca agropecuaria no indígena",
`12` = "Productor con más de una finca",
`13` = "Finca agropecuaria indígena"
)
# 5. Asignar etiqueta a cada fila según DSTO_PROC
cansp <- cansp %>%
mutate(
CLASIFICANEW = as.integer(CLASIFICANEW), # asegurarse de tipo entero
clasefinca= recode(CLASIFICANEW, !!!clasifica_labels)
)
cbind(table(cansp$clasefinca))
## [,1]
## Finca agropecuaria indígena 1
## Finca agropecuaria no indígena 24327
## Productor con más de una finca 142
library(dplyr)
library(ggplot2)
cansp %>%
count(clasefinca, name = "n") %>%
mutate(pct = n / sum(n) * 100) %>%
ggplot(aes(x = "", y = n, fill = clasefinca)) +
geom_col(width = 1, color = "white") +
coord_polar("y", start = 0) + # transforma a “pastel”
geom_text(aes(label = paste0(round(pct, 1), "%")),
position = position_stack(vjust = 0.5), size = 3) +
labs(title = "Distribución de fincas por clase",
fill = "Clase de finca") +
theme_void() +
theme(legend.position = "top")
Comentario: Al menos un buen párrafo
1.¿La finca es manejada por un solo productor/a? 2.¿o es manejada por dos o más productores asociados de hecho (como socio)? 3. Otros (Empresa, Estado, Comunidad Religiosa, Cooperativa, etc.)
tipofinca_labels <- c(
# ── San Pedro (20x) ───────────────────────────────────
`1` = "Manejada por un solo productor/a",
`2` = "manejada por dos o más productores asociados",
`3` = "Otros (Empresa, Estado, Comunidad Religiosa...)"
)
# 5. Asignar etiqueta a cada fila según DSTO_PROC
cansp <- cansp %>%
mutate(
tipofinca = as.integer(tipofinca), # asegurarse de tipo entero
tipodefinca= recode(tipofinca, !!!tipofinca_labels)
)
# Ajusta margen izquierdo para etiquetas largas
par(mar = c(5, 10, 4, 2)) # c(bottom, left, top, right)
barplot(tabla1,
horiz = TRUE, # barras horizontales
las = 1, # etiquetas de eje y en horizontal
col = "steelblue", # color de las barras
xlab = "Número de fincas",
main = "Fincas por distrito (orden descendente)")
cbind(table(cansp$tipofinca))
## [,1]
## 1 23094
## 2 1110
## 3 266
# Vector key → nombre de distrito para los 218 distritos (códigos DSTO_PROC)
tipofinca_labels <- c(
# ── San Pedro (20x) ───────────────────────────────────
`1` = "Manejada por un solo productor/a",
`2` = "manejada por dos o más productores asociados",
`3` = "Otros (Empresa, Estado, Comunidad Religiosa...)"
)
# 5. Asignar etiqueta a cada fila según DSTO_PROC
cansp <- cansp %>%
mutate(
tipofinca = as.integer(tipofinca), # asegurarse de tipo entero
tipodefinca= recode(tipofinca, !!!tipofinca_labels)
)
cbind(table(cansp$tipodefinca))
## [,1]
## manejada por dos o más productores asociados 1110
## Manejada por un solo productor/a 23094
## Otros (Empresa, Estado, Comunidad Religiosa...) 266
11.Finca agropecuaria no indígena 12.Productor con más de una finca 13.Finca agropecuaria indígena
cbind(table(cansp$CLASIFICANEW))
## [,1]
## 11 24327
## 12 142
## 13 1
# Vector key → nombre de distrito para los 218 distritos (códigos DSTO_PROC)
clasifica_labels <- c(
# ── San Pedro (20x) ───────────────────────────────────
`11` = "Finca agropecuaria no indígena",
`12` = "Productor con más de una finca",
`13` = "Finca agropecuaria indígena"
)
# 5. Asignar etiqueta a cada fila según DSTO_PROC
cansp <- cansp %>%
mutate(
CLASIFICANEW = as.integer(CLASIFICANEW), # asegurarse de tipo entero
clasefinca= recode(CLASIFICANEW, !!!clasifica_labels)
)
cbind(table(cansp$clasefinca))
## [,1]
## Finca agropecuaria indígena 1
## Finca agropecuaria no indígena 24327
## Productor con más de una finca 142
p5000 ¿Qué nacionalidad tiene (el productor/a)?
cbind(table(cansp$p5000))
## [,1]
## 1 22176
## 2 918
# Vector key → nombre de distrito para los 218 distritos (códigos DSTO_PROC)
nacionalidad_labels <- c(
# ── San Pedro (20x) ───────────────────────────────────
`1` = "Paraguaya",
`2` = "Otros"
)
# 5. Asignar etiqueta a cada fila según DSTO_PROC
cansp <- cansp %>%
mutate(
p5000 = as.integer(p5000), # asegurarse de tipo entero
nacionalidadprod= recode(p5000, !!!nacionalidad_labels)
)
cbind(table(cansp$nacionalidadprod))
## [,1]
## Otros 918
## Paraguaya 22176
Clasficación de las fincas
11.Finca agropecuaria no indígena 12.Productor con más de una finca 13.Finca agropecuaria indígena
# tabla de suma total de tamaño de tierra por finca , por tipo de manjo
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.3
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
library(dplyr)
library(scales) # solo si quieres formatear el porcentaje
## Warning: package 'scales' was built under R version 4.3.3
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
tabla_clasificafinca <- cansp %>%
filter(!is.na(clasefinca)) %>% # quita NAs
group_by(clasefinca) %>%
summarise(
n_fincas = n(), # recuento
total_ha = sum(p8000_1, na.rm = TRUE), # superficie total (ha)
media_ha = mean(p8000_1, na.rm = TRUE), # promedio (ha)
mediana_ha = median(p8000_1, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(
pct_fincas = n_fincas / sum(n_fincas) * 100, # porcentaje
pct_label = percent(pct_fincas / 100, accuracy = .1) # "xx.x%"
) %>%
arrange(desc(total_ha))
tabla_clasificafinca
## # A tibble: 3 × 7
## clasefinca n_fincas total_ha media_ha mediana_ha pct_fincas pct_label
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 Finca agropecuaria… 24327 932282. 38.3 6.5 99.4 99.4%
## 2 Productor con más … 142 11270. 79.4 20.5 0.580 0.6%
## 3 Finca agropecuaria… 1 6.6 6.6 6.6 0.00409 0.0%
5000 ¿Qué nacionalidad tiene (el productor/a)? p5000 1 1.Paraguaya 2 2. Otros
1.Paraguaya 2. Otros
summary(cansp$p10000_total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01 2.60 6.90 38.56 16.00 16000.00
# tabla de suma total de tamaño de tierra por finca , por tipo de manjo
library(dplyr)
tabla1 <- cansp %>% # usa tu data.frame CAN
filter(!is.na(tipodefinca)) %>% # opcional: quita NAs en la categoría
group_by(tipodefinca) %>% # agrupa por tipo de manejo
summarise(
n_fincas = n(), # cantidad de fincas
total_ha = sum(p8000_1, na.rm = TRUE), # superficie total (ha)
media_ha = mean(p8000_1, na.rm = TRUE), # superficie promedio (ha)
mediana_ha = median(p8000_1, na.rm = TRUE)
) %>%
arrange(desc(total_ha)) # ordena de mayor a menor superficie
tabla1
## # A tibble: 3 × 5
## tipodefinca n_fincas total_ha media_ha mediana_ha
## <chr> <int> <dbl> <dbl> <dbl>
## 1 Manejada por un solo productor/a 23094 740014. 32.0 6
## 2 Otros (Empresa, Estado, Comunidad Relig… 266 152095. 572. 62
## 3 manejada por dos o más productores asoc… 1110 51450. 46.4 9.25
library(dplyr)
tamaño_medio_distrito <- cansp %>% # usa tu data.frame con micro-datos
group_by(distrito_nombre) %>% # un distrito = una fila
summarise(
n_fincas = n(), # cuántas fincas en el distrito
mean_superf = mean(p8000_1, na.rm = TRUE) # tamaño medio de finca (ha)
) %>%
ungroup() %>%
arrange(desc(mean_superf)) # ordena de mayor a menor, opcional
tamaño_medio_distrito
## # A tibble: 30 × 3
## distrito_nombre n_fincas mean_superf
## <chr> <int> <dbl>
## 1 Carmen del Paraná 392 201.
## 2 Pirapó 481 116.
## 3 La Paz 161 95.6
## 4 General Artigas 1055 82.6
## 5 San Cosme y Damián 600 77.1
## 6 Jesús 188 56.5
## 7 Carlos Antonio López 1439 51.3
## 8 Trinidad 248 46.8
## 9 San Rafael del Paraná 1488 46.6
## 10 Hohenau 339 45.9
## # ℹ 20 more rows
# Instalar ggrepel solo la primera vez
if (!requireNamespace("ggrepel", quietly = TRUE)) {
install.packages("ggrepel")
}
library(ggplot2)
library(ggrepel)
library(scales)
ggplot(tamaño_medio_distrito,
aes(x = n_fincas,
y = mean_superf,
size = mean_superf)) + # tamaño proporcional
geom_point(color = "steelblue", alpha = .7) +
# ── Etiquetas que no se superpongan ──────────────────────────
geom_text_repel(aes(label = distrito_nombre),
size = 3,
max.overlaps = 50,
box.padding = .25,
point.padding = .2,
segment.color = "grey70") +
# Escalas y formato ------------------------------------------
scale_size_area(max_size = 12, guide = "none") + # controla diámetro máximo
scale_x_continuous(labels = comma) +
scale_y_continuous(labels = comma) +
labs(
title = "Nº de fincas vs. tamaño medio por distrito",
subtitle = "Área del punto ∝ tamaño medio de finca (ha)",
x = "Cantidad de fincas censadas (n)",
y = "Tamaño medio de finca (ha)",
caption = "Fuente: Censo Agropecuario Nacional 2022"
) +
theme_minimal(base_size = 12)
Interpretación:
Relación inversa casi sistemática: más fincas → fincas más pequeñas.
Implica que el mercado o la asignación histórica de tierras produjo un patrón de concentración donde la expansión de grandes establecimientos se asocia a baja densidad de productores.
Dominio de la tierra en manos de relativamente pocos en ciertos distritos (outliers de gran tamaño medio). Ej.: Tacuatí sobresale tanto en diámetro del punto como en altura (≈ 80 ha) con apenas ~2 000 fincas.
Zonas de minifundio: la mayor parte de la población rural se concentra en distritos donde el promedio no supera 20 ha; allí los desafíos giran en torno a la seguridad alimentaria y la intensificación sostenible más que a la expansión de la frontera.
En suma, el dispersograma visualiza de un vistazo la dualidad agraria en San Pedro: grandes extensiones con baja densidad vs. mosaicos de pequeñas fincas.
names(py)
## [1] "ID_0" "COUNTRY" "NAME_1" "NL_NAME_1" "ID_2" "NAME_2"
## [7] "VARNAME_2" "NL_NAME_2" "TYPE_2" "ENGTYPE_2" "CC_2" "HASC_2"
## [13] "geometry" "refer"
# 1. Librerías (dplyr debe cargarse después de paquetes que exporten select S4)
library(sf)
library(stringr)
library(dplyr)
# 3. Extraer dstocode de GID_2 (o ID_2 según tu shapefile)
py <- py %>%
mutate(
raw_id2 = as.character(ID_2), # o ID_2 si así se llama
dstocode = raw_id2 %>%
str_remove("^PRY\\.") %>% # quita "PRY."
str_remove("_.*$") %>% # quita el "_" y lo que sigue
str_replace_all("\\.", "") %>% # elimina cualquier punto
as.integer() # convierte a integer (ej. 1613)
)
# 4. Preparar tu df 'can' para el join
cansp <- cansp %>%
mutate(dstocode = as.integer(DSTO_PROC))
# 5. Hacer el join usando dplyr::select() para evitar conflictos
canspgeo <- cansp %>%
left_join(
py %>%
sf::st_drop_geometry() %>%
dplyr::select(dstocode, NAME_1, NAME_2),
by = "dstocode"
) %>%
dplyr::rename(
departamento = NAME_1,
distrito = NAME_2
)
# 7. Vista rápida del resultado
head(canspgeo)
## # A tibble: 6 × 243
## ID_FCA_ALEATORIO CLASIFICANEW DPTO_PROC DSTO_PROC tipoi tipofinca p5000
## <dbl> <int> <dbl> <chr> <dbl> <int> <int>
## 1 3 11 7 0723 NA 1 1
## 2 15 11 7 0719 NA 2 NA
## 3 27 11 7 0721 NA 1 1
## 4 33 11 7 0718 NA 1 1
## 5 68 11 7 0713 NA 1 1
## 6 108 11 7 0704 NA 1 1
## # ℹ 236 more variables: menores_total <dbl>, mayores_total <dbl>,
## # p7001_sn <dbl>, p7021p <dbl>, p7021p_nosabe <dbl>, p7033p <dbl>,
## # p7033p_nosabe <dbl>, p7221t <dbl>, p7221t_nosabe <dbl>, p7223t <dbl>,
## # p7223t_nosabe <dbl>, p8000_1 <dbl>, p8000_3 <dbl>, p9001 <dbl>,
## # p9000_total <dbl>, p10001 <dbl>, p10002 <dbl>, p10003 <dbl>, p10004 <dbl>,
## # p10005 <dbl>, p10006 <dbl>, p10007 <dbl>, p10008 <dbl>, p10009 <dbl>,
## # p10000_total <dbl>, p12000_sn <dbl>, p12000_total <dbl>, …
names(canspgeo)
## [1] "ID_FCA_ALEATORIO" "CLASIFICANEW" "DPTO_PROC"
## [4] "DSTO_PROC" "tipoi" "tipofinca"
## [7] "p5000" "menores_total" "mayores_total"
## [10] "p7001_sn" "p7021p" "p7021p_nosabe"
## [13] "p7033p" "p7033p_nosabe" "p7221t"
## [16] "p7221t_nosabe" "p7223t" "p7223t_nosabe"
## [19] "p8000_1" "p8000_3" "p9001"
## [22] "p9000_total" "p10001" "p10002"
## [25] "p10003" "p10004" "p10005"
## [28] "p10006" "p10007" "p10008"
## [31] "p10009" "p10000_total" "p12000_sn"
## [34] "p12000_total" "p12000b_total" "p13300_total"
## [37] "p14000_sn" "p14000_total" "p15000_sn"
## [40] "p15000_total" "p16000_sn" "p16000_total"
## [43] "p18000_sn" "p18002" "XP18003_1"
## [46] "XP18003_2" "XP18003_3" "p18003_esp"
## [49] "p18003_0" "p18003_1" "p18003_2"
## [52] "p18003_3" "p19100_sn" "p19101"
## [55] "p19102" "p19103" "p19104"
## [58] "p19105" "p19106" "p19107"
## [61] "p19108" "p19109" "p19110"
## [64] "p19111" "p19112" "p19119"
## [67] "p19121" "p19122" "p19123"
## [70] "p19123_nosabe" "xp19124_1" "xp19124_2"
## [73] "xp19124_3" "xp19124_4" "p19125_1"
## [76] "p19131" "p19132" "p19133"
## [79] "p19135_1_sn" "p19136_sn" "p19139_sn"
## [82] "p19140_sn" "p19300_sn" "p19303_total"
## [85] "raza_oveja_total" "p19400_sn" "p19405_total"
## [88] "raza_cabra_total" "p19500_sn" "p19509_total"
## [91] "p19700_sn" "p19701" "p19710"
## [94] "p19800_sn" "p19802" "p19802_nosabe"
## [97] "p210051_sn" "p21010_sn" "p21011_sn"
## [100] "p21013_sn" "p21014_sn" "p21016_sn"
## [103] "p21017_sn" "p21018_sn" "p21018_1"
## [106] "XP21018_2_1" "XP21018_2_2" "XP21018_2_3"
## [109] "XP21018_2_4" "p22000_sn" "p23100_sn"
## [112] "XP23101_1" "XP23101_2" "XP23101_3"
## [115] "XP23101_4" "XP23101_5" "XP23101_6"
## [118] "XP23101_7" "XP23102_1_1" "XP23102_1_2"
## [121] "XP23102_1_3" "XP23102_1_4" "XP23102_1_5"
## [124] "XP23102_1_6" "XP23102_1_7" "XP23102_1_8"
## [127] "XP23102_1_9" "XP23102_1_10" "XP23102_1_11"
## [130] "XP23102_1_12" "XP23102_3_1" "XP23102_3_2"
## [133] "XP23102_3_3" "XP23102_3_4" "XP23102_3_5"
## [136] "XP23102_3_6" "XP23102_3_7" "XP23102_3_8"
## [139] "XP23102_3_9" "XP23102_3_10" "XP23102_3_11"
## [142] "XP23102_3_12" "p23150_sn" "p23200_sn"
## [145] "XP23201_1" "XP23201_2" "XP23201_3"
## [148] "XP23201_4" "XP23201_5" "XP23201_6"
## [151] "XP23202_1_1" "XP23202_1_2" "XP23202_1_3"
## [154] "XP23202_1_4" "XP23202_1_5" "XP23202_1_6"
## [157] "XP23202_1_7" "XP23202_31" "XP23202_32"
## [160] "XP23202_33" "XP23202_34" "XP23202_35"
## [163] "XP23202_36" "XP23202_37" "p23250_sn"
## [166] "XP23251_1" "XP23251_2" "XP23251_3"
## [169] "XP23251_4" "XP23251_5" "XP23251_6"
## [172] "XP23252_11" "XP23252_12" "XP23252_13"
## [175] "XP23252_14" "XP23252_15" "XP23252_16"
## [178] "XP23252_17" "XP23252_31" "XP23252_32"
## [181] "XP23252_33" "XP23252_34" "XP23252_35"
## [184] "XP23252_36" "p23300_sn" "p24000_1_sn"
## [187] "p24000_2_sn" "p24000_3_sn" "p24000_4_sn"
## [190] "p24000_5_sn" "p24000_13_sn" "p26002_sn"
## [193] "p26101_sn" "p26102_sn" "p26103_sn"
## [196] "p27000_sn" "p28100_sn" "XP28100_1"
## [199] "XP28100_2" "XP28100_3" "XP28100_4"
## [202] "XP28100_5" "XP28100_6" "XP28100_7"
## [205] "XP28100_9" "p28200_sn" "XP29000_1"
## [208] "XP29000_2" "XP29000_3" "XP29000_4"
## [211] "XP29000_5" "XP29000_6" "XP29000_9"
## [214] "p29000_esp" "p30000_sn" "p30000_1"
## [217] "SEMBRAMANUAL" "PULVEMOCHILA" "PULVEMOTO"
## [220] "ARADOS" "MOTOCULTOR" "MOTOSIERRA"
## [223] "CARRETA" "PICADORA" "TRACTOR"
## [226] "SEMBRADIRECTA" "PULVEARRASTRE" "COSEAUTOMOTRIZ"
## [229] "ACOPLADOS" "CAMIONES" "AERONAVES"
## [232] "TRACTORGPS" "SEMBRASENSOR" "PULVECONTROL"
## [235] "COSECHASENSOR" "DRONES" "distrito_nombre"
## [238] "clasefinca" "tipodefinca" "nacionalidadprod"
## [241] "dstocode" "departamento" "distrito"
tipofinca
1.¿La finca es manejada por un solo productor/a? 2.¿o es manejada por dos o más productores asociados de hecho (como socio)? 3. Otros (Empresa, Estado, Comunidad Religiosa, Cooperativa, etc.)
8000_1 ¿Qué superficie de la tierra MANEJA en total (INCLUIR todas las superficies de las PARCELAS SEPARADAS, pero SIN INCLUIR aquella tierra que alquila a otra persona)? p8000_1
10000_4 ¿Qué superficie de tierra tiene con montes naturales?____ha
#
# # 1. Cargar librerías
# library(dplyr)
# library(stringi)
#
# # 2. Calcular la proporción media de bosque NATURAL por distrito (Sólo San Pedro)
# bosques_distrito <- canspgeo %>% # data.frame sf con fincas
# mutate( # normalizar nombre
# distrito_norm = distrito_nombre %>%
# stri_trans_general("Latin-ASCII") %>%
# toupper()
# ) %>%
# group_by(distrito_norm) %>% # agrupar por distrito
# summarise(
# mean_porcbosques = mean(porcbosquesnat, na.rm = TRUE),
# n_fincas = n(), # opcional
# .groups = "drop"
# ) %>%
# arrange(desc(mean_porcbosques)) # ordenar de mayor a menor
#
# bosques_distrito
# # 3. Normalizar nombres en el objeto espacial San Pedro
# py <- py %>%
# mutate(
# join_name = NAME_2 %>%
# stringi::stri_trans_general("Latin-ASCII") %>%
# toupper() %>%
# str_squish()
# )
#
# # 4. Hacer el join sobre la columna normalizada
# py <- py %>%
# left_join(bosques_distrito,
# by = c("NAME_2" = "distrito_norm"))