Resultados de las elecciones municipales 2023 según candidatura en la Comunidad Valenciana
Input
Se ha obtenido un conjunto de datos sobre los resultados electorales en la Comunitat Valenciana a través del Banco de Datos Territorial (BDT) de la Generalitat Valenciana.
Los datos utilizados en este estudio han sido extraídos del fichero V0301_C1D5283.xlsx
, disponible en el portal del Banco de Datos Territorial - Resultados Electorales. Además, se ha considerado la documentación metodológica adjunta.
Los datos están disponibles para su descarga en distintos formatos, incluyendo Excel (.xlsx
), CSV y otros formatos de datos tabulares. En este estudio, se ha trabajado con el archivo en formato Excel, ya que permite una mejor manipulación de los datos en herramientas de análisis como R.
Descripción
Se cargan las librerías necesarias:
Se lee y se carga el conjunto de datos, omitiendo las 9 primeras filas en las que aparecen textos innecesarios:
res_elec <- read_excel("data/V0301_C1D5283.xlsx", skip = 9)
Se trata de un data frame con un total de 549 filas y 9 columnas que contiene información estructurada en formato tabular, tbl
.
Tratamiento
Se detecta que las columbras no están bien nombradas, hay información clave junta que debe ser separada, se necesita que algunos de los datos sean numéricos y el objeto no contiene ningún tipo de geografía.
head(res_elec)
# A tibble: 6 × 9
...1 PP PSOE COMPROMÍS VOX `PODEMOS - IU` `C's` EUPV Otras
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Comunitat Valenc… 8810… 7478… 332371 2331… 59535 48099 27518 1320…
2 Provincia de Ali… 3238… 2525… 75225 80939 22313 20369 12319 31792
3 03001 - Atzúbia,… 104 0 0 0 0 0 0 210
4 03002 - Agost 1533 396 260 128 0 124 0 350
5 03003 - Agres 198 56 155 0 0 0 0 0
6 03004 - Aigües 88 383 0 20 0 0 0 68
Para solucionar estos problemas se renombran las columnas de forma más estándar para mejorar la legibilidad y facilitar su manipulación. Además, se eliminan las filas que tengan NAs, ya que son textos o filas vacías y se elige la columna PP
porque en la primera columna aparece algún texto que no queremos y de esta forma no se eliminaría.
Se extrae el código y el nombre del municipio, separando información clave.
datos_cod <- datos %>%
mutate(
Codigo = str_extract(Municipio, "^\\d+"), # Extraer código numérico
Municipio = str_replace(Municipio, "^\\d+ - ", "") # Limpiar nombres
) %>%
filter(!is.na(Codigo)) # Filtrar filas sin código
Se convierten datos a numéricos.
datos_num <- datos_cod %>%
mutate(across(PP:Otras, ~ as.numeric(.), .names = "{.col}_num"), .keep = "unused")
Se busca a ver si hay algún NA.
Aparece un NA y se observa que el municipio Gátova
aparece dos veces pero con diferencias. Las dos filas son Gátova (hasta 1995)
y Gátova (desde 1996)
, la primera solo tiene NAs y la segunda tiene valores normales. Por eso eliminamos la fila Gátova (hasta 1995)
por ser problemática y porque ya tenemos valores de ese municipio.
Cuando ya tenemos los datos numéricos, se calculan el total de votos y porcentajes por partido, normalizando la información.
Se determina el partido ganador en cada municipio.
Se obtiene la cartografía de la Comunidad Valenciana mediante mapSpain
.
spain <- esp_get_munic()
cv <- spain %>% filter(codauto == 10)
Una vez ya se tiene todo lo anterior, se unen en un mismo conjunto los datos electorales con la cartografía, permitiendo su análisis espacial.
Se verifican los nombres de los partidos ganadores.
[1] "Otras" "PP" "PSOE" "COMPROMIS" "EUPV" "CS"
[7] "VOX"
Por último, se asignan a cada partido sus colores representativos para crear el gráfico.
colores <- c("PP" = "blue", "PSOE" = "red", "COMPROMIS" = "orange", "VOX" = "green",
"PODEMOS" = "purple", "CS" = "yellow", "EUPV" = "brown", "Otras" = "gray")
res_elec_cart$color <- colores[res_elec_cart$Ganador]
Output
Se obtiene un nuevo objeto sf"
, con 542 observaciones y 28 variables.
Cuando se obtiene el conjunto de datos con todas las características deseadas, se representa un mapa interactivo con Leaflet
de la Comunitat Valenciana en el que se visualizan los resultados electorales a nivel municipal y en el que cada municipio está coloreado según el partido político que ha obtenido la mayor cantidad de votos, facilitando así la interpretación de la distribución geográfica del voto.
La información se ha integrado en ventanas emergentes (popups)
, donde se detallan los resultados para cada municipio, incluyendo el número de votos y el porcentaje correspondiente a cada partido. En el mapa también se ha incorporado una leyenda explicativa.
leaflet(res_elec_cart) %>%
addTiles() %>%
addPolygons(
fillColor = ~color, # Color según el partido ganador
fillOpacity = 0.7,
color = "black",
weight = 1,
popup = ~paste( # Ventana emergente con información
"<b>", Municipio, "</b><br>",
"PP: ", PP_num, " (", round(PP_num_pct, 1), "%)<br>",
"PSOE: ", PSOE_num, " (", round(PSOE_num_pct, 1), "%)<br>",
"COMPROMIS: ", COMPROMIS_num, " (", round(COMPROMIS_num_pct, 1), "%)<br>",
"VOX: ", VOX_num, " (", round(VOX_num_pct, 1), "%)<br>",
"PODEMOS: ", PODEMOS_num, " (", round(PODEMOS_num_pct, 1), "%)<br>",
"CS: ", CS_num, " (", round(CS_num_pct, 1), "%)<br>",
"EUPV: ", EUPV_num, " (", round(EUPV_num_pct, 1), "%)<br>",
"Otras: ", Otras_num, " (", round(Otras_num_pct, 1), "%)"
)
) %>%
addLegend(
"bottomright",
colors = colores,
labels = names(colores),
title = "Partido Ganador"
)
sf::st_write(res_elec_cart, "res_elec_cv.gpkg")
El fichero generado con el procedimiento descrito anteriormente se puede descargar, en formato GeoPackage (gpkg), de aquí.
Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394