Ejemplo: municipios()

Héctor Meleiro · 03/02/2019 · 4 minute read

Cargar las librerías

Instalo la librería R-elecciones y cargo el resto de 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 municipio de las elecciones generales de diciembre de 2015.

results <- municipios("generales", "2015", "12") # Descargo los datos

Importar el shapefile

Importo el shapefile de los municipios de España. El shapefile se puede descargar en la web de Open Data de ESRI.

shp <- read_sf("~/Google Drive/DATOS/datos/GIS/Municipios_IGN/Municipios_IGN.shp", quiet = T) ### Importo el shapefile 

Recodifico las siglas

Como la mayoría de los partidos tienen marcas distintas a lo largo del territorio, necesitamos recodificarlas para poder agrupar los resultados de los cinco partidos nacionales. Para ello uso el código de acumulación nacional (code.nacional en el dataset).

# Recodifico las siglas para agrupar las diferentes denominaciones de los cinco partidos nacionales
results$siglas_r <- NA
results$siglas_r <- results$siglas

df <- results[str_detect(results$denominacion, "PARTIDO POPULAR"),]
idsPP <- unique(df$code.nacional)
results$siglas_r[results$code.nacional %in% idsPP] <- "PP"


df <- results[str_detect(results$denominacion, "SOCIALIST"),]
idsPSOE <- unique(df$code.nacional)
results$siglas_r[results$code.nacional %in% idsPSOE] <- "PSOE"


df <- results[str_detect(results$siglas, "PODEMOS|EN COMÚ"),]
idsPs <- unique(df$code.nacional)
results$siglas_r[results$code.nacional %in% idsPs] <- "Podemos +confluencias"


df <- results[str_detect(results$siglas, "C's|C´s"),]
idsCs <- unique(df$code.nacional)
results$siglas_r[results$code.nacional %in% idsCs] <- "C's"

df <- results[str_detect(results$denominacion, "UNIDAD POPULAR"),]
idsIU <- unique(df$code.nacional)
results$siglas_r[results$code.nacional %in% idsIU] <- "IU"

ids <- c(idsPP, idsPSOE, idsPs, idsCs, idsIU)


# Selecciono a los cinco partidos
results <- results[results$code.nacional %in% c(ids),]

# Agrupo para quitar las columnas innecesarias
results <- results %>% 
  group_by(CODIGOINE, siglas_r) %>% 
  summarise(censo = sum(censo.INE), 
            votos.candidatura = sum(candidaturas), 
            votos = sum(votos))


# Transformo los datos de formato long a wide 
results <- spread(results, key = siglas_r, value = votos)

# Calculo los % sobre censo
results$PP_pct <- round((results$PP / results$censo ) * 100, 2)
results$PSOE_pct <- round(( results$PSOE / results$censo ) * 100, 2)
results$Ps_pct <- round(( results$`Podemos +confluencias` / results$censo ) * 100, 2)
results$Cs_pct <- round(( results$`C's` / results$censo ) * 100, 2)
results$IU_pct <- round(( results$IU / results$censo ) * 100, 2)

Fusiono los datos con el shapefile

La librería r-elecciones incluye en el dataset resultante una columna llamada CODIGOINE para facilitar la fusión con otros datos o archivos vectoriales (CODIGOINE = CODIGO PROVINCIA + CODIGO MUNICIPIO). Empleamos esa columna para hacer la fusión con el shapefile de los municipios. Para visualizar los mapas a los cinco partidos a la vez conviene visualizar por separado la península ibérica (+Baleares) y Canarias. Para ello dividimos el data frame.

shp <- merge(shp, results, by = "CODIGOINE")

peninbal <- shp[!substr(shp$CODIGOINE, 1, 2) %in% c("35", "38"), ]
canarias <- shp[substr(shp$CODIGOINE, 1, 2) %in% c("35", "38"), ]

Visualizamos

Por último, usamos la librería tmap para visualizar los mapas de voto para los cinco partidos. Para poder comparar el resultado a cada partido creamos cinco rampas de color que parten del mismo gris y van hasta el color de cada patido, indicamos que queremos los intervalos fijos para cada uno de los mapas (style = "fixed") y proporcionamos los puntos de corte a nuestro gusto (breaks).

colores5 <- list(c("#ededed", "#0cb2ff"), # PP
                 c("#ededed", "#E01021"), # PSOE
                 c("#ededed", "#612d62"), # Podemos
                 c("#ededed", "#E85B2D"), # Cs
                 c("#ededed", "#E01021")) # IU


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

library(tmap)
mapa <- tm_shape(peninbal) + 
  tm_polygons(col = c("PP_pct", "PSOE_pct", "Ps_pct", "Cs_pct", "IU_pct"), style = "fixed", 
              palette = colores5, 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("Partido Popular", "PSOE", "Podemos", "Ciudadanos", "Izquierda Unida"),
            title.fontface = "bold") +
  tm_legend(legend.text.size = 1, 
            legend.title.size = 1) +
  tm_facets(sync = TRUE, ncol = 2)
mapa

Bola Extra: Canarias!

Hacemos lo mismo con el data frame de Canarias.

colores5 <- list(c("#ededed", "#0cb2ff"), # PP
                 c("#ededed", "#E01021"), # PSOE
                 c("#ededed", "#612d62"), # Podemos
                 c("#ededed", "#E85B2D"), # Cs
                 c("#ededed", "#E01021")) # IU


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

library(tmap)
mapa <- tm_shape(canarias) + 
  tm_polygons(col = c("PP_pct", "PSOE_pct", "Ps_pct", "Cs_pct", "IU_pct"), style = "fixed", 
              palette = colores5, 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("Partido Popular", "PSOE","Podemos", "Ciudadanos", "Izquierda Unida"), 
            title.fontface = "bold") +
  tm_legend(legend.text.size = 1, 
            legend.title.size = 1) +
  tm_facets(sync = TRUE, ncol = 2)
mapa