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