GRÁFICO 1: Votos obtenidos por Agrupación Política en Loreto (2006- 2022)
# Carga de Librerías
library(readr) # Para leer archivos CSV
## Warning: package 'readr' was built under R version 4.3.3
library(dplyr) # Para manipulación de datos
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2) # Para visualización de datos
## Warning: package 'ggplot2' was built under R version 4.3.3
library(purrr) # Para trabajar con listas
# Definir la ruta donde están los archivos CSV
ruta_archivos <- "C:/Users/ASUS/Desktop/IEP/Evaluación técnica/Caso práctico #2/Resultados 2006-2022/"
# Listar los archivos CSV en la carpeta
archivos_csv <- list.files(path = ruta_archivos, pattern = "*.csv", full.names = TRUE)
#Definir los años correspondientes a cada archivo
años <- c(2006, 2010, 2014, 2018, 2022)
# Leer y combinar todos los archivos CSV en un solo dataframe, agregando el año como columna
datos <- map2_df(archivos_csv, años, ~ {
read_csv2(.x) %>%
mutate(Año = .y) # Agregar la columna Año
})
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 557537 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (10): UBIGEO, DEPARTAMENTO, PROVINCIA, DISTRITO, TIPO_ELECCION, MESA, ES...
## dbl (5): VOTOS_OBTENIDOS, ELECTORES_HABILES, VOTOS_BLANCOS, VOTOS_NULOS, VO...
## lgl (1): UBICACION_EN_CEDULA
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 896716 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (10): UBIGEO, DEPARTAMENTO, PROVINCIA, DISTRITO, TIPO_ELECCION, MESA, ES...
## dbl (5): VOTOS_OBTENIDOS, ELECTORES_HABILES, VOTOS_BLANCOS, VOTOS_NULOS, VO...
## lgl (1): UBICACION_EN_CEDULA
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
##
## Rows: 851285 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (10): UBIGEO, DEPARTAMENTO, PROVINCIA, DISTRITO, TIPO_ELECCION, MESA, ES...
## dbl (5): VOTOS_OBTENIDOS, ELECTORES_HABILES, VOTOS_BLANCOS, VOTOS_NULOS, VO...
## lgl (1): UBICACION_EN_CEDULA
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
##
## Rows: 755523 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (10): UBIGEO, DEPARTAMENTO, PROVINCIA, DISTRITO, TIPO_ELECCION, MESA, ES...
## dbl (6): UBICACION_EN_CEDULA, VOTOS_OBTENIDOS, ELECTORES_HABILES, VOTOS_BLA...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
##
## Rows: 509064 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (10): UBIGEO, DEPARTAMENTO, PROVINCIA, DISTRITO, TIPO_ELECCION, MESA, ES...
## dbl (5): VOTOS_OBTENIDOS, ELECTORES_HABILES, VOTOS_BLANCOS, VOTOS_NULOS, VO...
## lgl (1): UBICACION_EN_CEDULA
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Filtrar los datos para incluir solo el departamento de Loreto
datos_loreto <- datos %>%
filter(DEPARTAMENTO == "LORETO")
# Agrupar los datos por agrupación política y año, y sumar los votos obtenidos
resultado_votos <- datos_loreto %>%
group_by(AGRUPACION_POLITICA, Año) %>% # Agrupamos por agrupación política y año
summarise(Votos_Obtenidos = sum(VOTOS_OBTENIDOS), .groups = 'drop') %>% # Sumar los votos obtenidos
arrange(Año, desc(Votos_Obtenidos)) # Ordenamos por año y votos
# Mostrar el resultado
print(resultado_votos)
## # A tibble: 53 × 3
## AGRUPACION_POLITICA Año Votos_Obtenidos
## <chr> <dbl> <dbl>
## 1 FUERZA LORETANA 2006 137173
## 2 RESTAURACION NACIONAL 2006 83273
## 3 MOVIMIENTO POLITICO REGIONAL UNIPOL 2006 32661
## 4 ACCION POPULAR 2006 28572
## 5 FRENTE INDEPENDIENTE DE LORETO 2006 13809
## 6 PARTIDO APRISTA PERUANO 2006 13292
## 7 PARTIDO NACIONALISTA PERUANO 2006 6651
## 8 UNION POR EL PERU 2006 6339
## 9 FRENTE POPULAR AGRICOLA FIA DEL PERU 2006 6233
## 10 MOVIMIENTO POLITICO INDEPENDIENTE REGIONAL MOTOR DEL D… 2006 5003
## # ℹ 43 more rows
# Calcular el total de votos por año
total_votos_por_año <- resultado_votos %>%
group_by(Año) %>%
summarise(Total_Votos = sum(Votos_Obtenidos), .groups = 'drop')
# Unir los totales a los datos de resultado_votos para calcular porcentajes
resultado_votos <- resultado_votos %>%
left_join(total_votos_por_año, by = "Año") %>%
mutate(Porcentaje_Voto = (Votos_Obtenidos / Total_Votos) * 100) # Calcular porcentaje
# Obtener las dos agrupaciones políticas con más votos por año
top_votos <- resultado_votos %>%
group_by(Año) %>%
slice_max(order_by = Votos_Obtenidos, n = 2) %>% # Selecciona las dos agrupaciones con más votos
ungroup()
# Mostrar el resultado de las agrupaciones seleccionadas
print(top_votos)
## # A tibble: 10 × 5
## AGRUPACION_POLITICA Año Votos_Obtenidos Total_Votos Porcentaje_Voto
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 FUERZA LORETANA 2006 137173 334756 41.0
## 2 RESTAURACION NACIONAL 2006 83273 334756 24.9
## 3 FUERZA LORETANA 2010 110155 348954 31.6
## 4 MOVIMIENTO ESPERANZA REGIO… 2010 84135 348954 24.1
## 5 MOVIMIENTO INTEGRACION LOR… 2014 164210 397778 41.3
## 6 FUERZA LORETANA 2014 111562 397778 28.0
## 7 RESTAURACION NACIONAL 2018 129282 379396 34.1
## 8 MOVIMIENTO ESPERANZA REGIO… 2018 102497 379396 27.0
## 9 PARTIDO DEMOCRATICO SOMOS … 2022 132111 404533 32.7
## 10 MOVIMIENTO ESPERANZA REGIO… 2022 96700 404533 23.9
# Guardar el gráfico como archivo JPG
jpeg("votos_obtenidos_loreto.jpg", width = 800, height = 600) # Abre el dispositivo gráfico para JPG
# Visualizar los resultados en un gráfico de barras
ggplot(top_votos, aes(x = factor(Año), y = Votos_Obtenidos, fill = AGRUPACION_POLITICA)) +
geom_bar(stat = "identity", position = "dodge") + # Creamos un gráfico de barras separadas
geom_text(aes(label = paste0(round(Porcentaje_Voto, 1), "%")), # Agregar etiquetas con el porcentaje de votos por año
position = position_dodge(width = 0.9), # Alinear las etiquetas con las barras
vjust = -0.5, # Ajustar la posición vertical de las etiquetas
size = 3) + # Disminuir el tamaño del texto (ajusta según sea necesario)
labs(title = "Votos Obtenidos por Agrupación Política en Loreto",
x = "Año",
y = "Número de Votos Obtenidos",
fill = "Agrupación Política") +
theme_minimal() + # Aplicamos un tema minimalista al gráfico
scale_y_continuous(expand = expansion(mult = c(0, .05))) + # Añadir espacio en la parte superior del gráfico
theme(axis.text.x = element_text(angle = 0)) # Mantener etiquetas del eje X horizontales
dev.off() # Cierra el dispositivo gráfico y guarda el archivo
## png
## 2
# Mensaje para confirmar que se guardó correctamente
cat("El gráfico se ha guardado como 'votos_obtenidos_loreto.jpg' en el directorio actual.\n")
## El gráfico se ha guardado como 'votos_obtenidos_loreto.jpg' en el directorio actual.
# Visualizar los resultados en un gráfico de barras
ggplot(top_votos, aes(x = factor(Año), y = Votos_Obtenidos, fill = AGRUPACION_POLITICA)) +
geom_bar(stat = "identity", position = "dodge") + # Creamos un gráfico de barras separadas
geom_text(aes(label = paste0(round(Porcentaje_Voto, 1), "%")), # Agregar etiquetas con el porcentaje de votos
position = position_dodge(width = 0.9), # Alinear las etiquetas con las barras
vjust = -0.5, # Ajustar la posición vertical de las etiquetas
size = 3) + # Disminuir el tamaño del texto (ajusta según sea necesario)
labs(title = "Votos Obtenidos por Agrupación Política en Loreto",
x = "Año",
y = "Número de Votos Obtenidos",
fill = "Agrupación Política") +
theme_minimal() + # Aplicamos un tema minimalista al gráfico
scale_y_continuous(expand = expansion(mult = c(0, .05))) + # Añadir espacio en la parte superior del gráfico
theme(axis.text.x = element_text(angle = 0)) # Mantener etiquetas del eje X horizontales
GRÁFICO 2: AUSENTISMO ELECTORAL
# Crear un cuadro con mesas electorales, años y electores hábiles
ausentismo_mesas <- datos_loreto %>%
group_by(MESA, Año) %>% # Agrupar por mesa electoral y año
summarise(ELECTORES_HABILES = first(ELECTORES_HABILES), .groups = 'drop') %>% # Obtener electores hábiles
arrange(Año, MESA) # Ordenar por año y mesa electoral
# Mostrar el resultado del cuadro
print(ausentismo_mesas)
## # A tibble: 12,599 × 3
## MESA Año ELECTORES_HABILES
## <chr> <dbl> <dbl>
## 1 026001 2006 191
## 2 026002 2006 244
## 3 026003 2006 244
## 4 026004 2006 226
## 5 026005 2006 250
## 6 026006 2006 218
## 7 026007 2006 245
## 8 026009 2006 214
## 9 026010 2006 248
## 10 026012 2006 214
## # ℹ 12,589 more rows
# Sumar VOTOS_OBTENIDOS por MESA electoral
votos_por_mesa <- datos_loreto %>%
group_by(MESA, Año) %>%
summarise(Votos_Obtenidos = sum(VOTOS_OBTENIDOS, na.rm = TRUE), .groups = 'drop')
# Unir ambos dataframes para incluir la suma de votos en el cuadro de ausentismo
ausentismo_mesas <- ausentismo_mesas %>%
left_join(votos_por_mesa, by = c("MESA", "Año"))
# Crear un cuadro con mesas electorales, años y electores hábiles
ausentismo_mesas <- datos_loreto %>%
group_by(MESA, Año) %>% # Agrupar por mesa electoral y año
summarise(
Electores_Habiles = first(ELECTORES_HABILES), # Obtener electores hábiles
Votos_Obtenidos = sum(VOTOS_OBTENIDOS, na.rm = TRUE), # Sumar votos obtenidos
Votos_Blancos = first(VOTOS_BLANCOS), # Obtener votos blancos (repite por mesa)
Votos_Nulos = first(VOTOS_NULOS), # Obtener votos nulos (repite por mesa)
Votos_Impugnados = first(VOTOS_IMPUG), # Obtener votos impugnados (repite por mesa)
.groups = 'drop'
) %>%
arrange(Año, MESA) # Ordenar por año y mesa electoral
# Mostrar el resultado final con electores hábiles y votos obtenidos
print(ausentismo_mesas)
## # A tibble: 12,599 × 7
## MESA Año Electores_Habiles Votos_Obtenidos Votos_Blancos Votos_Nulos
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 026001 2006 191 155 0 6
## 2 026002 2006 244 193 4 9
## 3 026003 2006 244 192 4 10
## 4 026004 2006 226 156 7 22
## 5 026005 2006 250 193 5 13
## 6 026006 2006 218 179 3 10
## 7 026007 2006 245 200 2 6
## 8 026009 2006 214 173 2 9
## 9 026010 2006 248 202 2 8
## 10 026012 2006 214 175 1 5
## # ℹ 12,589 more rows
## # ℹ 1 more variable: Votos_Impugnados <dbl>
# Calcular el ausentismo electoral
ausentismo_mesas <- ausentismo_mesas %>%
mutate(
Ausentismo_Electoral = Electores_Habiles - (Votos_Obtenidos + Votos_Blancos + Votos_Nulos + Votos_Impugnados)
)
# Mostrar el resultado final con electores hábiles y ausentismo electoral
print(ausentismo_mesas)
## # A tibble: 12,599 × 8
## MESA Año Electores_Habiles Votos_Obtenidos Votos_Blancos Votos_Nulos
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 026001 2006 191 155 0 6
## 2 026002 2006 244 193 4 9
## 3 026003 2006 244 192 4 10
## 4 026004 2006 226 156 7 22
## 5 026005 2006 250 193 5 13
## 6 026006 2006 218 179 3 10
## 7 026007 2006 245 200 2 6
## 8 026009 2006 214 173 2 9
## 9 026010 2006 248 202 2 8
## 10 026012 2006 214 175 1 5
## # ℹ 12,589 more rows
## # ℹ 2 more variables: Votos_Impugnados <dbl>, Ausentismo_Electoral <dbl>
# Crear un dataframe resumido por año
resumen_ausentismo_año <- ausentismo_mesas %>%
group_by(Año) %>%
summarise(
Total_Electores_Habiles = sum(Electores_Habiles),
Total_Ausentismo_Electoral = sum(Ausentismo_Electoral),
.groups = 'drop'
) %>%
mutate(
Porcentaje_Ausentismo = (Total_Ausentismo_Electoral / Total_Electores_Habiles) * 100 # Calcular porcentaje de ausentismo
)
# Mostrar el resultado final del dataframe resumido con porcentaje de ausentismo
print(resumen_ausentismo_año)
## # A tibble: 5 × 4
## Año Total_Electores_Habiles Total_Ausentismo_Electoral Porcentaje_Ausentismo
## <dbl> <dbl> <dbl> <dbl>
## 1 2006 442999 65431 14.8
## 2 2010 531109 102350 19.3
## 3 2014 615249 144832 23.5
## 4 2018 675528 205153 30.4
## 5 2022 722741 240744 33.3
# Guardar el gráfico como archivo JPG
jpeg("tendencia_ausentismo_loreto.jpg", width = 800, height = 600) # Abre el dispositivo gráfico para JPG
# Crear el gráfico de puntos con etiquetas de ausentismo electoral
ggplot(resumen_ausentismo_año, aes(x = Año, y = Porcentaje_Ausentismo)) +
geom_point(color = "blue", size = 3) + # Gráfico de puntos
geom_line(color = "blue", linetype = "dashed") + # Línea para mostrar la tendencia
geom_text(aes(label = round(Porcentaje_Ausentismo, 1)),
vjust = -1, color = "black") + # Agregar etiquetas con el porcentaje de ausentismo
labs(title = "Tendencia de Ausentismo Electoral en Loreto",
x = "Año",
y = "Porcentaje de Ausentismo (%)") +
theme_minimal() + # Aplicar un tema minimalista al gráfico
scale_y_continuous(expand = expansion(mult = c(0, .05))) + # Añadir espacio en la parte superior del gráfico
theme(axis.text.x = element_text(angle = 0)) # Mantener etiquetas del eje X horizontales
dev.off() # Cierra el dispositivo gráfico y guarda el archivo
## png
## 2
# Mensaje para confirmar que se guardó correctamente
cat("El gráfico se ha guardado como 'tendencia_ausentismo_loreto.jpg' en el directorio actual.\n")
## El gráfico se ha guardado como 'tendencia_ausentismo_loreto.jpg' en el directorio actual.
MAPA
# Cargar las librerías necesarias
library(sf) # Para trabajar con shapefiles
## 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
# Leer el shapefile
shapefile_path <- "C:/Users/ASUS/Desktop/IEP/Evaluación técnica/Caso práctico #2/shapefiles/DISTRITOS_inei_geogpsperu_suyopomalia" # Reemplaza con la ruta del shapefile
mapa_peru <- st_read(shapefile_path)
## Reading layer `DISTRITOS_inei_geogpsperu_suyopomalia' from data source
## `C:\Users\ASUS\Desktop\IEP\Evaluación técnica\Caso práctico #2\shapefiles\DISTRITOS_inei_geogpsperu_suyopomalia'
## using driver `ESRI Shapefile'
## Simple feature collection with 1874 features and 77 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -81.32823 ymin: -18.35093 xmax: -68.65228 ymax: -0.03860597
## Geodetic CRS: WGS 84
print(mapa_peru)
## Simple feature collection with 1874 features and 77 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -81.32823 ymin: -18.35093 xmax: -68.65228 ymax: -0.03860597
## Geodetic CRS: WGS 84
## First 10 features:
## UBIGEO OBJECTID NOMBDEP NOMBPROV NOMBDIST
## 1 100902 1 HUANUCO PUERTO INCA CODO DEL POZUZO
## 2 100904 2 HUANUCO PUERTO INCA TOURNAVISTA
## 3 250305 3 UCAYALI PADRE ABAD ALEXANDER VON HUMBOLDT
## 4 250302 4 UCAYALI PADRE ABAD IRAZOLA
## 5 250304 5 UCAYALI PADRE ABAD NESHUYA
## 6 250301 6 UCAYALI PADRE ABAD PADRE ABAD
## 7 250303 7 UCAYALI PADRE ABAD CURIMANA
## 8 100901 8 HUANUCO PUERTO INCA PUERTO INCA
## 9 250106 9 UCAYALI CORONEL PORTILLO NUEVA REQUENA
## 10 250102 10 UCAYALI CORONEL PORTILLO CAMPOVERDE
## CAPITAL POBTOTAL POB_EDAD_T POB_EDAD_E DENSIDAD POBMASCU
## 1 CODO DEL POZUZO 7768 5022 4329 2.338322 4312
## 2 TOURNAVISTA 6219 4162 3577 2.790716 3490
## 3 ALEXANDER VON HUMBOLDT 6085 4172 3616 31.892034 3210
## 4 SAN ALEJANDRO 10941 7308 6368 10.952719 5670
## 5 MONTE ALEGRE 9003 5983 5058 15.535539 4756
## 6 AGUAYTIA 34819 23266 20053 7.425360 18093
## 7 CURIMANA 9158 5890 5094 4.291391 4931
## 8 PUERTO INCA 10250 6633 5704 4.773703 5364
## 9 NUEVA REQUENA 5560 3555 2987 2.992755 2959
## 10 CAMPO VERDE 18000 12030 10205 15.074114 9455
## POBFEMEN POBMASCU_P POBFEMEN_P R_MASCULIN POBURBANA POBRURAL POBURBANA_
## 1 3456 55.50978 44.49022 124.7685 2398 5370 30.87024
## 2 2729 56.11835 43.88165 127.8857 1495 4724 24.03923
## 3 2875 52.75267 47.24733 111.6522 4564 1521 75.00411
## 4 5271 51.82342 48.17658 107.5697 6922 4019 63.26661
## 5 4247 52.82684 47.17316 111.9849 4518 4485 50.18327
## 6 16726 51.96301 48.03699 108.1729 27063 7756 77.72481
## 7 4227 53.84363 46.15637 116.6548 4327 4831 47.24831
## 8 4886 52.33171 47.66829 109.7831 5178 5072 50.51707
## 9 2601 53.21942 46.78058 113.7639 2610 2950 46.94245
## 10 8545 52.52778 47.47222 110.6495 7430 10570 41.27778
## POBRURAL_P EDAD_PROME POB_0_14 POB_15_29 POB_30_59 POB_60_MAS VIV_PARTIC
## 1 69.12976 25.53301 2872 1888 2575 432 2498
## 2 75.96077 26.87959 2162 1496 2125 435 1683
## 3 24.99589 27.25661 2055 1508 2134 388 1849
## 4 36.73339 25.78656 3866 2830 3713 532 3820
## 5 49.81673 26.25762 3222 2236 2951 594 2349
## 6 22.27519 26.45646 12294 8435 12085 2005 10741
## 7 52.75169 25.79912 3445 2114 3059 540 2397
## 8 49.48293 25.93488 3856 2331 3403 660 3861
## 9 53.05755 26.45263 2116 1259 1723 462 1315
## 10 58.72222 27.66810 6308 4175 5882 1635 5973
## VIV_PART_1 HOGARES Shape_Leng Shape_Area
## 1 1961 1979 2.4166548 0.26553974
## 2 1397 1407 2.5782341 0.14317895
## 3 1251 1295 0.7017831 0.01688238
## 4 2491 2563 2.4557323 0.15434584
## 5 1882 1925 1.4405383 0.05125121
## 6 7542 7984 3.5495331 0.38769201
## 7 1840 1884 2.8860707 0.15427740
## 8 2509 2598 2.6896685 0.19673326
## 9 1285 1297 2.6569448 0.16915358
## 10 4358 4413 2.1012270 0.10886499
## DIRECCION POB_PROYEC POB_EDAD_1 POB_EDAD_2
## 1 CODO DEL POZUZO,PUERTO INCA,HUANUCO 8248 64.64985 55.72863
## 2 TOURNAVISTA,PUERTO INCA,HUANUCO 6543 66.92394 57.51729
## 3 ALEXANDER VON HUMBOLDT,PADRE ABAD,UCAYALI 6159 68.56204 59.42482
## 4 IRAZOLA,PADRE ABAD,UCAYALI 12065 66.79463 58.20309
## 5 NESHUYA,PADRE ABAD,UCAYALI 10501 66.45563 56.18127
## 6 PADRE ABAD,PADRE ABAD,UCAYALI 38100 66.81984 57.59212
## 7 CURIMANA,PADRE ABAD,UCAYALI 10219 64.31535 55.62350
## 8 PUERTO INCA,PUERTO INCA,HUANUCO 10665 64.71220 55.64878
## 9 NUEVA REQUENA,CORONEL PORTILLO,UCAYALI 5742 63.93885 53.72302
## 10 CAMPOVERDE,CORONEL PORTILLO,UCAYALI 19598 66.83333 56.69444
## EDAD_MEDIA POB_0_14_P POB_15_29_ POB_30_59_ POB_60_M_1 POB_ANALFA POB_ANAL_1
## 1 23 36.97219 24.30484 33.14882 5.561277 517.6213 10.572494
## 2 24 34.76443 24.05531 34.16948 6.994694 318.0908 7.841220
## 3 24 33.77157 24.78225 35.06984 6.376335 393.9589 9.775665
## 4 23 35.33498 25.86601 33.93657 4.862444 759.8799 10.741105
## 5 23 35.78807 24.83617 32.77796 6.597801 317.0260 5.484065
## 6 24 35.30831 24.22528 34.70806 5.758350 1845.6383 8.193720
## 7 23 37.61738 23.08364 33.40249 5.896484 363.9562 6.370983
## 8 23 37.61951 22.74146 33.20000 6.439024 456.1724 7.134712
## 9 22 38.05755 22.64388 30.98921 8.309353 174.4504 5.065616
## 10 24 35.04444 23.19444 32.67778 9.083333 553.5674 4.734698
## HOMBRES_AN HOMBRES__1 MUJERES_AN MUJERES__1 MUJERES_ED MUJERES__2 TOTAL_MADR
## 1 173.43702 6.157152 344.1843 16.554594 1700.381 49.20301 1785
## 2 94.53248 3.936873 223.5584 13.504447 1309.517 47.97713 1372
## 3 122.38348 5.719672 271.5754 14.366774 1490.656 51.85195 1539
## 4 248.44866 6.677189 511.4313 15.250002 2748.533 52.14060 2553
## 5 101.48763 3.264465 215.5383 8.066564 2117.695 49.86021 2175
## 6 616.83258 5.175640 1228.8057 11.584814 8490.309 50.76117 8573
## 7 119.63991 3.804988 244.3163 9.512301 2086.987 49.37839 2150
## 8 138.82945 4.035552 317.3429 10.744479 2352.121 48.14020 2434
## 9 58.07835 3.068188 116.3720 7.503547 1199.271 46.10552 1306
## 10 178.23745 2.854182 375.3300 6.890666 4170.685 48.80940 4477
## MADRES_SOL MADRES_S_1 MUJERES_AD MADRES_ADO MADRES_A_1 AL_MENOS_1 AL_MENOS_2
## 1 103 5.770308 478 101 21.12971 476 6.127703
## 2 101 7.361516 449 77 17.14922 451 7.251970
## 3 168 10.916179 406 67 16.50246 573 9.416598
## 4 238 9.322366 821 107 13.03289 836 7.640983
## 5 148 6.804598 685 107 15.62044 717 7.964012
## 6 894 10.428088 2454 348 14.18093 3091 8.877337
## 7 177 8.232558 626 104 16.61342 819 8.943001
## 8 177 7.271980 697 110 15.78192 821 8.009756
## 9 90 6.891271 385 72 18.70130 427 7.679856
## 10 482 10.766138 1180 167 14.15254 1528 8.488889
## SIN_DISCAP SIN_DISC_1 ALGUNA_NBI NBI_PORC VIV_PART_2 IC_INF IC_SUP
## 1 7292 93.87230 62.60028 37.39972 78.50280 15.229372 39.20713
## 2 5768 92.74803 54.51219 45.48781 83.00654 18.068731 35.26509
## 3 5512 90.58340 55.06422 44.93578 67.65819 8.116695 17.68242
## 4 10105 92.35902 59.21201 40.78799 65.20942 8.116695 17.68242
## 5 8286 92.03599 60.49713 39.50287 80.11920 7.576868 16.31685
## 6 31728 91.12266 47.51261 52.48739 70.21693 6.417539 12.40027
## 7 8339 91.05700 57.11530 42.88470 76.76262 4.422702 13.60639
## 8 9429 91.99024 49.19720 50.80280 64.98316 10.423639 36.07322
## 9 5133 92.32014 54.15565 45.84435 97.71863 8.163155 15.12812
## 10 16472 91.51111 59.28377 40.71623 72.96166 8.163155 15.12812
## UBIC_POBMO TOTAL_DEFU TOTAL_DE_1 TOTAL_DE_2 NAC_BAJOPE NAC_BAJO_1 MUJERES_NA
## 1 1181 5 5 10 4.326923 9 46.15385
## 2 1192 3 5 8 4.580153 6 48.09160
## 3 1657 0 3 3 3.703704 3 49.38272
## 4 1656 10 15 25 3.076923 10 48.00000
## 5 1680 3 16 19 0.000000 0 0.00000
## 6 1742 16 34 50 3.744799 27 49.93065
## 7 1748 6 10 16 8.571429 18 49.52381
## 8 1335 15 15 30 4.482759 13 43.79310
## 9 1690 6 7 13 6.617647 9 47.79412
## 10 1689 16 35 51 5.294118 18 46.76471
## MUJERES__3 HOMBRES_NA HOMBRES__2 TOTAL_NACI IND_121951 IND_122042 IND_122047
## 1 96 53.84615 112 208 37 11868.289 9469.690
## 2 63 51.90840 68 131 35 7746.847 6279.180
## 3 40 50.61728 41 81 53 3892.914 3316.870
## 4 156 52.00000 169 325 176 11690.842 11225.285
## 5 0 0.00000 0 0 60 7432.201 6834.759
## 6 360 50.06935 361 721 277 65794.218 76958.246
## 7 104 50.47619 106 210 120 8219.753 7664.426
## 8 127 56.20690 163 290 81 19699.624 11907.173
## 9 65 52.20588 71 136 43 3777.614 3965.878
## 10 159 53.23529 181 340 86 10124.997 9621.983
## IND_516462 IND_516484 geometry
## 1 75000.0 730 MULTIPOLYGON (((-75.31797 -...
## 2 13500.0 1236 MULTIPOLYGON (((-75.20831 -...
## 3 43950.0 540 MULTIPOLYGON (((-74.95635 -...
## 4 125760.0 1366 MULTIPOLYGON (((-75.10843 -...
## 5 237441.0 691 MULTIPOLYGON (((-75.01589 -...
## 6 1114976.0 2426 MULTIPOLYGON (((-75.29655 -...
## 7 73000.0 800 MULTIPOLYGON (((-75.43663 -...
## 8 334816.3 1036 MULTIPOLYGON (((-74.60662 -...
## 9 91525.0 907 MULTIPOLYGON (((-74.78 -8.2...
## 10 163000.0 2123 MULTIPOLYGON (((-74.77971 -...
# Filtrar solo los distritos de Loreto
mapa_distritos_loreto <- mapa_peru %>%
filter(NOMBDEP == "LORETO") # Asegúrate de que la columna sea correcta
# Visualizar el mapa (suponiendo que tienes una columna 'Nombre_Distrito' para mostrar)
ggplot(data = mapa_distritos_loreto) +
geom_sf() +
labs(title = "Distritos de Loreto") +
theme_minimal()
# Filtrar los datos para el año 2022
resultados_2022 <- datos_loreto %>%
filter(Año == 2022)
# Crear un dataframe con los resultados por distrito
resultados_por_distrito2022 <- resultados_2022 %>%
group_by(DISTRITO, UBIGEO, AGRUPACION_POLITICA) %>% # Agrupar por distrito y organización política
summarise(Votos_Obtenidos_2022 = sum(VOTOS_OBTENIDOS, na.rm = TRUE), .groups = 'drop') %>% # Sumar los votos obtenidos
arrange(DISTRITO, desc(Votos_Obtenidos_2022) ) # Ordenar por distrito y votos
# Mostrar el resultado final
print(resultados_por_distrito2022)
## # A tibble: 583 × 4
## DISTRITO UBIGEO AGRUPACION_POLITICA Votos_Obtenidos_2022
## <chr> <chr> <chr> <dbl>
## 1 ALTO NANAY 150102 PARTIDO DEMOCRATICO SOMOS PERU 540
## 2 ALTO NANAY 150102 ALIANZA PARA EL PROGRESO 534
## 3 ALTO NANAY 150102 MOVIMIENTO ESPERANZA REGION AMAZONICA 519
## 4 ALTO NANAY 150102 MOVIMIENTO INDEPENDIENTE REIVINDIQUEM… 179
## 5 ALTO NANAY 150102 MOVIMIENTO INDEPENDIENTE LORETO - MI … 82
## 6 ALTO NANAY 150102 JUNTOS POR LORETO 12
## 7 ALTO NANAY 150102 MISION ORGANIZADA VIA INTEGRIDAD Y LI… 9
## 8 ALTO NANAY 150102 FUERZA POPULAR 5
## 9 ALTO NANAY 150102 PARTIDO POLITICO NACIONAL PERU LIBRE 4
## 10 ALTO NANAY 150102 LORETO PARA TODOS 1
## # ℹ 573 more rows
# Determinar el ganador por distrito
ganadores_por_distrito2022 <- resultados_por_distrito2022 %>%
group_by(DISTRITO, UBIGEO) %>% # Agrupar por distrito y ubigeo
slice_max(order_by = Votos_Obtenidos_2022, n = 1) %>% # Seleccionar la organización política con más votos
ungroup() # Desagrupar para evitar problemas en futuros análisis
# Mostrar el resultado final con los ganadores
print(ganadores_por_distrito2022)
## # A tibble: 53 × 4
## DISTRITO UBIGEO AGRUPACION_POLITICA Votos_Obtenidos_2022
## <chr> <chr> <chr> <dbl>
## 1 ALTO NANAY 150102 PARTIDO DEMOCRATICO SOMOS PERU 540
## 2 ALTO TAPICHE 150402 MOVIMIENTO INDEPENDIENTE REIVI… 276
## 3 ANDOAS 150702 PARTIDO DEMOCRATICO SOMOS PERU 1648
## 4 BALSAPUERTO 150202 MOVIMIENTO INDEPENDIENTE LORET… 2737
## 5 BARRANCA 150701 PARTIDO DEMOCRATICO SOMOS PERU 2859
## 6 BELEN 150112 PARTIDO DEMOCRATICO SOMOS PERU 13304
## 7 CAHUAPANAS 150703 PARTIDO DEMOCRATICO SOMOS PERU 1098
## 8 CAPELO 150403 MOVIMIENTO INDEPENDIENTE REIVI… 651
## 9 CONTAMANA 150501 MOVIMIENTO ESPERANZA REGION AM… 3187
## 10 EMILIO SAN MARTIN 150404 ALIANZA PARA EL PROGRESO 1105
## # ℹ 43 more rows
# Cambiar el nombre de la columna "DISTRITO" a "NOMBDEP"
ganadores_por_distrito2022 <- ganadores_por_distrito2022 %>%
rename(NOMBDIST = DISTRITO )
# Mostrar el resultado final con los ganadores
print(ganadores_por_distrito2022)
## # A tibble: 53 × 4
## NOMBDIST UBIGEO AGRUPACION_POLITICA Votos_Obtenidos_2022
## <chr> <chr> <chr> <dbl>
## 1 ALTO NANAY 150102 PARTIDO DEMOCRATICO SOMOS PERU 540
## 2 ALTO TAPICHE 150402 MOVIMIENTO INDEPENDIENTE REIVI… 276
## 3 ANDOAS 150702 PARTIDO DEMOCRATICO SOMOS PERU 1648
## 4 BALSAPUERTO 150202 MOVIMIENTO INDEPENDIENTE LORET… 2737
## 5 BARRANCA 150701 PARTIDO DEMOCRATICO SOMOS PERU 2859
## 6 BELEN 150112 PARTIDO DEMOCRATICO SOMOS PERU 13304
## 7 CAHUAPANAS 150703 PARTIDO DEMOCRATICO SOMOS PERU 1098
## 8 CAPELO 150403 MOVIMIENTO INDEPENDIENTE REIVI… 651
## 9 CONTAMANA 150501 MOVIMIENTO ESPERANZA REGION AM… 3187
## 10 EMILIO SAN MARTIN 150404 ALIANZA PARA EL PROGRESO 1105
## # ℹ 43 more rows
# Unir el shapefile con los ganadores electorales
mapa_resultados2022 <- mapa_distritos_loreto %>%
left_join(ganadores_por_distrito2022, by = "NOMBDIST") # Asegúrate de que la columna clave coincida
names(mapa_resultados2022)
## [1] "UBIGEO.x" "OBJECTID" "NOMBDEP"
## [4] "NOMBPROV" "NOMBDIST" "CAPITAL"
## [7] "POBTOTAL" "POB_EDAD_T" "POB_EDAD_E"
## [10] "DENSIDAD" "POBMASCU" "POBFEMEN"
## [13] "POBMASCU_P" "POBFEMEN_P" "R_MASCULIN"
## [16] "POBURBANA" "POBRURAL" "POBURBANA_"
## [19] "POBRURAL_P" "EDAD_PROME" "POB_0_14"
## [22] "POB_15_29" "POB_30_59" "POB_60_MAS"
## [25] "VIV_PARTIC" "VIV_PART_1" "HOGARES"
## [28] "Shape_Leng" "Shape_Area" "DIRECCION"
## [31] "POB_PROYEC" "POB_EDAD_1" "POB_EDAD_2"
## [34] "EDAD_MEDIA" "POB_0_14_P" "POB_15_29_"
## [37] "POB_30_59_" "POB_60_M_1" "POB_ANALFA"
## [40] "POB_ANAL_1" "HOMBRES_AN" "HOMBRES__1"
## [43] "MUJERES_AN" "MUJERES__1" "MUJERES_ED"
## [46] "MUJERES__2" "TOTAL_MADR" "MADRES_SOL"
## [49] "MADRES_S_1" "MUJERES_AD" "MADRES_ADO"
## [52] "MADRES_A_1" "AL_MENOS_1" "AL_MENOS_2"
## [55] "SIN_DISCAP" "SIN_DISC_1" "ALGUNA_NBI"
## [58] "NBI_PORC" "VIV_PART_2" "IC_INF"
## [61] "IC_SUP" "UBIC_POBMO" "TOTAL_DEFU"
## [64] "TOTAL_DE_1" "TOTAL_DE_2" "NAC_BAJOPE"
## [67] "NAC_BAJO_1" "MUJERES_NA" "MUJERES__3"
## [70] "HOMBRES_NA" "HOMBRES__2" "TOTAL_NACI"
## [73] "IND_121951" "IND_122042" "IND_122047"
## [76] "IND_516462" "IND_516484" "UBIGEO.y"
## [79] "AGRUPACION_POLITICA" "Votos_Obtenidos_2022" "geometry"
# Mostrar los valores únicos de la columna "AGRUPACION_POLITICA"
unique(mapa_resultados2022$AGRUPACION_POLITICA)
## [1] "MOVIMIENTO ESPERANZA REGION AMAZONICA"
## [2] "ALIANZA PARA EL PROGRESO"
## [3] "PARTIDO DEMOCRATICO SOMOS PERU"
## [4] "MOVIMIENTO INDEPENDIENTE REIVINDIQUEMOS LORETO"
## [5] "MOVIMIENTO INDEPENDIENTE LORETO - MI LORETO"
## [6] "MOVIMIENTO INDEPENDIENTE POLITICO VOLUNTAD GENERAL AMAZONICA - VOGA"
## [7] "PARTIDO POLITICO NACIONAL PERU LIBRE"
#Para más colores
library(RColorBrewer)
# Visualizar el mapa
ggplot(data = mapa_resultados2022) +
geom_sf(aes(fill = AGRUPACION_POLITICA)) + # Rellenar por organización política
labs(title = "Organizaciones Políticas Ganadoras los distritos de Loreto (2022)",
fill = "Organización Política") +
theme_minimal() +
theme(legend.position = "right") +
scale_fill_brewer(palette = "Set3")# Color de paleta
# Calcular los centroides de cada distrito
mapa_centroides <- mapa_resultados2022 %>%
mutate(centroid = st_centroid(geometry)) # Calcular centroides
# Extraer coordenadas x e y del centroide
mapa_centroides <- mapa_centroides %>%
mutate(x = st_coordinates(centroid)[,1],
y = st_coordinates(centroid)[,2])
# Visualizar el mapa con nombres de distritos
mapa2022 <- ggplot(data = mapa_resultados2022) +
geom_sf(aes(fill = AGRUPACION_POLITICA)) + # Rellenar por organización política
geom_text(data = mapa_centroides, aes(x = x, y = y, label = NOMBDIST), size = 2, color = "black", check_overlap = TRUE) + # Agregar nombres de distritos
labs(title = "Organizaciones Políticas Ganadoras en Loreto (2022)",
fill = "Organización Política") +
theme_minimal() +
theme(legend.position = "right") +
scale_fill_brewer(palette = "Set3")
print(mapa2022)
# Guardar el mapa en alta resolución
ggsave("mapa_resultados_loreto.png", plot = mapa2022, width = 12, height = 10, dpi = 300) # Ajusta el tamaño y dpi según sea necesario