Ejemplo: mesas()

Héctor Meleiro · 01/02/2019 · 3 minute read

Cargar las librerías

Instalo la librería R-elecciones y cargo las librerías.

#devtools::install_github("hmeleiro/elecciones") # <--- Instala la librería elecciones

library(elecciones)
# Cargo el resto de librerías
library(sf)
library(tidyverse)
library(mapdeck)
library(knitr)
library(kableExtra)

Descargar los resultados

Me descargo los resultados a nivel de mesa de las elecciones municipales de mayo de 2015 y me quedo solo con los de la ciudad de Madrid.

results.muni <- mesas("municipales", "2015", "05") # Descargo los datos

results.muni <- results.muni[results.muni$provincia == "28" & results.muni$municipio == "079",] # 28 = Comunidad de Madrid | 079 = Ciudad de Madrid

Importar el shapefile

Importo el shapefile de la Comunidad de Madrid y selecciono solo la ciudad de Madrid. El shapefile se puede descargar en la web del Instituto de Estadística de la Comunidad de Madrid.

shp <- read_sf("~/Google Drive/DATOS/R/COMPORTAMIENTO ELECTORAL/shp/Comunidad de Madrid/2015/corregido/secciones_corregidas.shp", quiet = T) ### Importo el shapefile 
shp <- shp[substr(shp$GEOCODIGO, 1, 3) == "079",]  # Selecciono solo la ciudad de Madrid
shp <-  st_transform(shp, 4326)  # Transformo la proyección

Agrupar las mesas en secciones

Los datos se descargan a nivel de mesa electoral pero yo los quiero a nivel de sección censal. Así que agrupo los datos y me quedo solo con los cinco partidos más votados.

# Agrupo los datos
seccs.muni <- results.muni %>% 
  group_by(year, mes, municipio, distrito, seccion, siglas) %>% 
  summarise(censo = sum(censo.INE), 
            votos.candidatura = sum(candidaturas), 
            votos = sum(votos))

# Selecciono a los cinco partidos
seccs.muni <- seccs.muni[seccs.muni$siglas %in% c("P.P.", "C's", "AhoraMadrid", "P.S.O.E.", "IZQUIERDA U"),]

# Transformo los datos de formato long a wide 
seccs.muni <- spread(seccs.muni, key = siglas, value = votos)

# Calculo los % sobre censo
seccs.muni$PP_pct <- round((seccs.muni$P.P. / seccs.muni$censo ) * 100, 2)
seccs.muni$PSOE_pct <- round(( seccs.muni$P.S.O.E. / seccs.muni$censo ) * 100, 2)
seccs.muni$AM_pct <- round(( seccs.muni$AhoraMadrid / seccs.muni$censo ) * 100, 2)
seccs.muni$Cs_pct <- round(( seccs.muni$`C's` / seccs.muni$censo ) * 100, 2)

Fusiono los datos con el shapefile

Creo una columna en el data frame de los resultados electorales con valores identificadores de cada seccion censal (GEOCODIGO). Esta columna ya existe con el mismo nombre en el shapefile de la Comunidad de Madrid y es la concatenación de CODIGO MUNICIPIO + CODIGO DISTRITO + CODIGO DE SECCION CENSAL.

Para facilitar la fusión de estos datos con los shapefiles del INE R-elecciones incluye una columna llamada CUSEC (CÓDIGO PROVINCIA + CÓDIGO MUNICIPIO + CÓDIGO DISTRITO + CÓDIGO SECCIÓN CENSAL)1.

seccs.muni$GEOCODIGO <- paste0(seccs.muni$municipio, seccs.muni$distrito, seccs.muni$seccion)

shp <- merge(shp, seccs.muni, by = "GEOCODIGO")

Visualizamos

Uso la librería tmap para visualizar un mapa del voto a Ahora Madrid.

colores4 <- list(c("#ededed", "#26a58e"), # AM
                 c("#ededed", "#0cb2ff"), # PP
                 c("#ededed", "#E01021"), # PSOE
                 c("#ededed", "#E85B2D")) # Cs


breaks <- c(0,10,20,30,40,50,60,70)

library(tmap)
mapa <- tm_shape(shp) + 
  tm_polygons(col = c("AM_pct", "PP_pct", "PSOE_pct", "Cs_pct"), style = "fixed", 
              palette = colores4, breaks = breaks,
              title = "% sobre censo", 
              border.alpha = 0, lwd = 0, legend.show = T, legend.outside = T) +
  tm_layout(between.margin = 5, frame = FALSE, 
            fontfamily = "Roboto Condensed", 
            title = c("Ahora Madrid", "Partido Popular", "PSOE", "Ciudadanos"),
            title.fontface = "bold") +
  tm_legend(legend.text.size = 1, 
            legend.title.size = 1) +
  tm_facets(sync = TRUE, ncol = 2)
mapa

O lo guardamos

También podemos guardar el shapefile para abrirlo con alguna aplicación GIS. En este caso lo guardo como un Geopackage.

sf::write_sf(shp, "~/Google Drive/DATOS/R/MAPAS MAS MADRID/GPKG/elecciones24M.gpkg", driver = "GPKG")

  1. Hay que tener en cuenta que el INE proporciona los shapefiles de las secciones censales a 1 de enero de 2011 y el seccionado cambia de año a año, por lo que habrá inconsistencias al usar resultados electorales de otros años. Lo mejor es buscar shapefiles del seccionado en los institutos estadísticos autonómicos que suelen estar más actualizados.