Capítulo 20 Profundizando tidyverse: encuestas electorales
Scripts usados:
- script20.R: profundizando tidyverse. Ver en https://github.com/dadosdelaplace/courses-ECI-2022/blob/main/scripts/script20.
Vamos a profundizar un poco en el uso de funciones tidyverse para el análisis de datos de encuestas, datos de Our World in Data y datos de Spotify
En la denostada wikipedia se publican de forma bastante completa las encuestas electorales previas a las elecciones de un país, en este caso de España. El enlace donde están los datos es https://en.wikipedia.org/wiki/Opinion_polling_for_the_next_Spanish_general_election
Lo que vamos a hacer primero extraer la información de la web, analizando desde R
su código HTML y quedándonos con las encuestas de 2021 y 2022. Para ello haremos uso del paquete rvest (cargaremos también tidyverse):
-
read_html()
: nos permite obtener el código HTML de la web -
html_elements()
: nos permite seleccionar elementos de dicho html -
html_table()
: nos convierte una tabla HTML en untibble
.
De esta manera leeremos el HTML, localizaremos las tablas de datos y seleccionaremos solo las dos primeras (encuestas de 2022 y 2021).
library(rvest)
library(tidyverse)
wiki <-
paste0("https://en.wikipedia.org/wiki/Opinion_polling_for_the_next_Spanish_general_election")
# Leemos html
html <- read_html(wiki)
# Seleccionamos las tablas del HTML
tablas <- html_elements(html, ".wikitable")
# Obtenemos las dos primeras tablas: encuestas de 2022 y 2021
encuestas_2022 <- html_table(tablas[[1]])
encuestas_2022
## # A tibble: 14 × 21
## `Polling firm/Com… `Fieldwork date` `Sample size` Turnout `` `` ``
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Polling firm/Comm… Fieldwork date Sample size Turnout "" "" ""
## 2 ElectoPanel/Elect… 21–28 Jan 1,161 ? "24.2… "22.5… "20.…
## 3 DYM/Henneo[2] 19–23 Jan 1,008 ? "25.7… "26.9… "17.…
## 4 KeyData/Público[3] 21 Jan ? 68.1 "26.0… "25.6… "17.…
## 5 ElectoPanel/Elect… 14–20 Jan 1,190 ? "24.4… "22.9… "20.…
## 6 Celeste-Tel/Onda … 10–14 Jan 1,100 ? "26.2… "27.2… "16.…
## 7 InvyMark/laSexta[… 10–14 Jan ? ? "27.3" "27.9" "16.…
## 8 CIS (SocioMétrica… 3–14 Jan 3,777 59.3 "26.9" "22.4" "19.…
## 9 CIS[9][10][11] 3–14 Jan 3,777 ? "28.5… "21.5… "14.…
## 10 IMOP/El Confidenc… 3–14 Jan 1,312 ? "26.4… "24.9… "17.…
## 11 ElectoPanel/Elect… 7–13 Jan 1,317 ? "24.5… "23.3… "20.…
## 12 Simple Lógica/elD… 3–13 Jan 1,039 63.0 "24.6" "24.3" "18.…
## 13 ElectoPanel/Elect… 31 Dec–6 Jan 1,823 ? "24.9… "23.5… "20.…
## 14 Data10/OKDiario[1… 3–5 Jan 1,000 ? "25.4… "27.8… "17.…
## # … with 14 more variables: <chr>, <chr>, <chr>, <chr>, <chr>, PNV <chr>,
## # <chr>, <chr>, <chr>, <chr>, <chr>, PRC <chr>, <chr>, Lead <chr>
encuestas_2021 <- html_table(tablas[[2]])
encuestas_2021
## # A tibble: 209 × 21
## `Polling firm/Com… `Fieldwork date` `Sample size` Turnout `` `` ``
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Polling firm/Comm… Fieldwork date Sample size Turnout "" "" ""
## 2 ElectoPanel/Elect… 24–30 Dec 1,189 ? "24.9… "23.9… "19.…
## 3 40dB/Prisa[18][19] 23–30 Dec 2,000 ? "26.1… "23.5… "18.…
## 4 IMOP/El Confidenc… 20–30 Dec 1,315 ? "25.2… "25.0… "18.…
## 5 SocioMétrica/El E… 20–30 Dec 3,000 ? "25.5… "24.2… "17.…
## 6 PSOE[22] 27 Dec ? ? "29.0" "22.0" "17.…
## 7 Sigma Dos/Antena … 26 Dec ? ? "25.7… "28.8… "15.…
## 8 Sigma Dos/El Mund… 20–24 Dec 2,619 ? "26.0… "27.4… "16.…
## 9 ElectoPanel/Elect… 17–23 Dec 1,299 ? "25.3… "24.6… "19.…
## 10 KeyData/Público[2… 22 Dec ? 67.1 "25.7… "26.4… "17.…
## # … with 199 more rows, and 14 more variables: <chr>, <chr>, <chr>, <chr>,
## # <chr>, PNV <chr>, <chr>, <chr>, <chr>, <chr>, <chr>, PRC <chr>,
## # TE <chr>, Lead <chr>
20.1 Nombrar columnas
Dado que la mayoría de las columnas tienen como nombre de partido el logo del mismo, vamos a renombrar las variables.
nombre_cols <-
c("casa", "fechas", "muestra", "participacion", "PSOE", "PP", "Vox",
"UP", "Cs", "ERC", "MP", "JxCat", "PNV", "EHBildu", "CUP",
"CC", "BNG", "NA+", "PRC", "EV", "ventaja")
names(encuestas_2022) <- names(encuestas_2021) <- nombre_cols
encuestas_2022
## # A tibble: 14 × 21
## casa fechas muestra participacion PSOE PP Vox UP Cs ERC MP
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Polli… Field… Sample… Turnout "" "" "" "" "" "" ""
## 2 Elect… 21–28… 1,161 ? "24.… "22.… "20.… "13.… "3.3… "3.5… "2.5…
## 3 DYM/H… 19–23… 1,008 ? "25.… "26.… "17.… "11.… "3.4… "–" "2.8…
## 4 KeyDa… 21 Jan ? 68.1 "26.… "25.… "17.… "11.… "2.9… "3.5… "3.0…
## 5 Elect… 14–20… 1,190 ? "24.… "22.… "20.… "12.… "3.2… "3.5… "2.5…
## 6 Celes… 10–14… 1,100 ? "26.… "27.… "16.… "11.… "3.4… "3.0… "3.6…
## 7 InvyM… 10–14… ? ? "27.… "27.… "16.… "10.… "1.3" "–" "3.0"
## 8 CIS (… 3–14 … 3,777 59.3 "26.… "22.… "19.… "11.… "3.0" "3.1" "2.6"
## 9 CIS[9… 3–14 … 3,777 ? "28.… "21.… "14.… "13.… "4.0… "3.0… "2.8…
## 10 IMOP/… 3–14 … 1,312 ? "26.… "24.… "17.… "11.… "2.6… "3.4… "2.5…
## 11 Elect… 7–13 … 1,317 ? "24.… "23.… "20.… "12.… "3.3… "3.5… "2.6…
## 12 Simpl… 3–13 … 1,039 63.0 "24.… "24.… "18.… "11.… "2.5" "–" "2.3"
## 13 Elect… 31 De… 1,823 ? "24.… "23.… "20.… "12.… "3.2… "3.5… "2.6…
## 14 Data1… 3–5 J… 1,000 ? "25.… "27.… "17.… "10.… "2.7… "3.2… "3.2…
## # … with 10 more variables: JxCat <chr>, PNV <chr>, EHBildu <chr>, CUP <chr>,
## # CC <chr>, BNG <chr>, NA+ <chr>, PRC <chr>, EV <chr>, ventaja <chr>
encuestas_2021
## # A tibble: 209 × 21
## casa fechas muestra participacion PSOE PP Vox UP Cs ERC MP
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Polli… Field… Sample… Turnout "" "" "" "" "" "" ""
## 2 Elect… 24–30… 1,189 ? "24.… "23.… "19.… "11.… "3.2… "3.5… "2.7…
## 3 40dB/… 23–30… 2,000 ? "26.… "23.… "18.… "11.… "3.6… "?13" "3.6…
## 4 IMOP/… 20–30… 1,315 ? "25.… "25.… "18.… "12.… "2.8… "3.2… "2.7…
## 5 Socio… 20–30… 3,000 ? "25.… "24.… "17.… "12.… "4.3… "2.8… "3.2…
## 6 PSOE[… 27 Dec ? ? "29.… "22.… "17.… "11.… "–" "–" "–"
## 7 Sigma… 26 Dec ? ? "25.… "28.… "15.… "10.… "3.2… "3.0… "3.0…
## 8 Sigma… 20–24… 2,619 ? "26.… "27.… "16.… "10.… "3.1… "3.0… "3.1…
## 9 Elect… 17–23… 1,299 ? "25.… "24.… "19.… "11.… "3.2… "3.5… "2.7…
## 10 KeyDa… 22 Dec ? 67.1 "25.… "26.… "17.… "11.… "3.1… "3.4… "3.1…
## # … with 199 more rows, and 10 more variables: JxCat <chr>, PNV <chr>,
## # EHBildu <chr>, CUP <chr>, CC <chr>, BNG <chr>, NA+ <chr>, PRC <chr>,
## # EV <chr>, ventaja <chr>
20.2 Eliminar filas
Tras la lectura sin salirnos de R
, tenemos dos tablas de encuestas electorales, a las que les vamos a quitar la primera fila (vacía) con slice(-1)
.
encuestas_2022 <- encuestas_2022 %>% slice(-1)
encuestas_2022
## # A tibble: 13 × 21
## casa fechas muestra participacion PSOE PP Vox UP Cs ERC MP
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Elect… 21–28… 1,161 ? 24.2… 22.5… 20.9… 13.1… 3.31 3.513 2.55
## 2 DYM/H… 19–23… 1,008 ? 25.7… 26.9… 17.1… 11.6… 3.42… – 2.82…
## 3 KeyDa… 21 Jan ? 68.1 26.0… 25.6… 17.4… 11.5… 2.91 3.513 3.04
## 4 Elect… 14–20… 1,190 ? 24.4… 22.9… 20.7… 12.7… 3.21 3.514 2.55
## 5 Celes… 10–14… 1,100 ? 26.2… 27.2… 16.5… 11.0… 3.42 3.012 3.65
## 6 InvyM… 10–14… ? ? 27.3 27.9 16.5 10.9 1.3 – 3.0
## 7 CIS (… 3–14 … 3,777 59.3 26.9 22.4 19.0 11.7 3.0 3.1 2.6
## 8 CIS[9… 3–14 … 3,777 ? 28.5… 21.5… 14.7… 13.1… 4.03 3.013 2.83
## 9 IMOP/… 3–14 … 1,312 ? 26.4… 24.9… 17.9… 11.8… 2.61 3.414 2.53
## 10 Elect… 7–13 … 1,317 ? 24.5… 23.3… 20.5… 12.4… 3.31 3.514 2.66
## 11 Simpl… 3–13 … 1,039 63.0 24.6 24.3 18.7 11.1 2.5 – 2.3
## 12 Elect… 31 De… 1,823 ? 24.9… 23.5… 20.2… 12.0… 3.21 3.514 2.65
## 13 Data1… 3–5 J… 1,000 ? 25.4… 27.8… 17.0… 10.9… 2.71 3.213 3.23
## # … with 10 more variables: JxCat <chr>, PNV <chr>, EHBildu <chr>, CUP <chr>,
## # CC <chr>, BNG <chr>, NA+ <chr>, PRC <chr>, EV <chr>, ventaja <chr>
encuestas_2021 <- encuestas_2021 %>% slice(-1)
encuestas_2021
## # A tibble: 208 × 21
## casa fechas muestra participacion PSOE PP Vox UP Cs ERC MP
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Elect… 24–30… 1,189 ? 24.9… 23.9… 19.9… 11.8… 3.21 3.514 2.76
## 2 40dB/… 23–30… 2,000 ? 26.1… 23.5… 18.3… 11.8… 3.62… ?13 3.63…
## 3 IMOP/… 20–30… 1,315 ? 25.2… 25.0… 18.6… 12.1… 2.81 3.213 2.73
## 4 Socio… 20–30… 3,000 ? 25.5… 24.2… 17.7… 12.3… 4.33 2.812 3.25
## 5 PSOE[… 27 Dec ? ? 29.0 22.0 17.0 11.0 – – –
## 6 Sigma… 26 Dec ? ? 25.7… 28.8… 15.7… 10.6… 3.21 3.0? 3.06
## 7 Sigma… 20–24… 2,619 ? 26.0… 27.4… 16.6… 10.9… 3.11 3.012 3.16
## 8 Elect… 17–23… 1,299 ? 25.3… 24.6… 19.5… 11.4… 3.21 3.514 2.76
## 9 KeyDa… 22 Dec ? 67.1 25.7… 26.4… 17.1… 11.1… 3.11 3.413 3.14
## 10 DYM/H… 15–19… 1,012 ? 25.6… 27.6… 16.9… 10.6… 4.72… – 3.22…
## # … with 198 more rows, and 10 more variables: JxCat <chr>, PNV <chr>,
## # EHBildu <chr>, CUP <chr>, CC <chr>, BNG <chr>, NA+ <chr>, PRC <chr>,
## # EV <chr>, ventaja <chr>
20.4 Juntar tablas
Dado que queremos un solo dataset con las encuestas de ambos años, vamos a juntar ambas tablas con rbind()
para tener una sola tabla encuestas
.
encuestas <- rbind(encuestas_2022, encuestas_2021)
20.5 Convertir a numéricas
Si te fijas los valores de muchas variables son erróneos, como tamaño de la muestra o participación: son de tipo texto cuando deberían ser numéricas.
encuestas
## # A tibble: 221 × 22
## casa fechas muestra participacion PSOE PP Vox UP Cs ERC MP
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Elect… 21–28… 1,161 ? 24.2… 22.5… 20.9… 13.1… 3.31 3.513 2.55
## 2 DYM/H… 19–23… 1,008 ? 25.7… 26.9… 17.1… 11.6… 3.42… – 2.82…
## 3 KeyDa… 21 Jan ? 68.1 26.0… 25.6… 17.4… 11.5… 2.91 3.513 3.04
## 4 Elect… 14–20… 1,190 ? 24.4… 22.9… 20.7… 12.7… 3.21 3.514 2.55
## 5 Celes… 10–14… 1,100 ? 26.2… 27.2… 16.5… 11.0… 3.42 3.012 3.65
## 6 InvyM… 10–14… ? ? 27.3 27.9 16.5 10.9 1.3 – 3.0
## 7 CIS (… 3–14 … 3,777 59.3 26.9 22.4 19.0 11.7 3.0 3.1 2.6
## 8 CIS[9… 3–14 … 3,777 ? 28.5… 21.5… 14.7… 13.1… 4.03 3.013 2.83
## 9 IMOP/… 3–14 … 1,312 ? 26.4… 24.9… 17.9… 11.8… 2.61 3.414 2.53
## 10 Elect… 7–13 … 1,317 ? 24.5… 23.3… 20.5… 12.4… 3.31 3.514 2.66
## # … with 211 more rows, and 11 more variables: JxCat <chr>, PNV <chr>,
## # EHBildu <chr>, CUP <chr>, CC <chr>, BNG <chr>, NA+ <chr>, PRC <chr>,
## # EV <chr>, ventaja <chr>, anno <dbl>
Para ello vamos antes a eliminar las comas","
que separan los millares de los números, con gsub()
. Dicha orden nos permite sustituir en un vector los caracteres que queramos. Por ejemplo, de un vector de palabras vamos a cambiar la letra a
por un punto *
: primero le indicamos el patrón a buscar, después el valor nuevo que le daremos, y por último la variable en la que lo vamos a aplicar.
## [1] "hol*" "c*m*" "elef*nte" "cerrojo" "león" "g*t*"
Con esta función localizaremos las ","
de muestra
para sustituirlas por ""
(sin nada), y lo mismo haremos con "?"
en la variable participacion
con los datos ausentes "?"
.
encuestas_depurado <-
encuestas %>%
# Quitamos "," como millares en números
mutate(muestra = gsub("?", "", gsub(",", "", muestra)),
participacion = gsub("?", NA, participacion))
encuestas_depurado
## # A tibble: 221 × 22
## casa fechas muestra participacion PSOE PP Vox UP Cs ERC MP
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Elect… 21–28… 1161 <NA> 24.2… 22.5… 20.9… 13.1… 3.31 3.513 2.55
## 2 DYM/H… 19–23… 1008 <NA> 25.7… 26.9… 17.1… 11.6… 3.42… – 2.82…
## 3 KeyDa… 21 Jan ? <NA> 26.0… 25.6… 17.4… 11.5… 2.91 3.513 3.04
## 4 Elect… 14–20… 1190 <NA> 24.4… 22.9… 20.7… 12.7… 3.21 3.514 2.55
## 5 Celes… 10–14… 1100 <NA> 26.2… 27.2… 16.5… 11.0… 3.42 3.012 3.65
## 6 InvyM… 10–14… ? <NA> 27.3 27.9 16.5 10.9 1.3 – 3.0
## 7 CIS (… 3–14 … 3777 <NA> 26.9 22.4 19.0 11.7 3.0 3.1 2.6
## 8 CIS[9… 3–14 … 3777 <NA> 28.5… 21.5… 14.7… 13.1… 4.03 3.013 2.83
## 9 IMOP/… 3–14 … 1312 <NA> 26.4… 24.9… 17.9… 11.8… 2.61 3.414 2.53
## 10 Elect… 7–13 … 1317 <NA> 24.5… 23.3… 20.5… 12.4… 3.31 3.514 2.66
## # … with 211 more rows, and 11 more variables: JxCat <chr>, PNV <chr>,
## # EHBildu <chr>, CUP <chr>, CC <chr>, BNG <chr>, NA+ <chr>, PRC <chr>,
## # EV <chr>, ventaja <chr>, anno <dbl>
Tras estos cambios, aunque muchas variables numéricas siguen siendo caracter, ya podemos aplicar la función as.numeric()
, que aplicaremos a todas las variables menos casa
y fechas
, con mutate_at
, indicándole con vars()
primero las columnas a seleccionar (aquellas que no contengan la palabra casa
ni fechas
), y después la función a aplicar.
encuestas_depurado <-
encuestas_depurado %>%
mutate_at(vars(!contains(c("casa", "fechas"))), as.numeric)
encuestas_depurado
## # A tibble: 221 × 22
## casa fechas muestra participacion PSOE PP Vox UP Cs ERC MP
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Elect… 21–28… 1161 NA 24.3 22.6 21.0 13.1 3.31 3.51 2.55
## 2 DYM/H… 19–23… 1008 NA NA NA NA NA NA NA NA
## 3 KeyDa… 21 Jan NA NA 26.0 25.6 17.5 11.5 2.91 3.51 3.04
## 4 Elect… 14–20… 1190 NA 24.5 23.0 20.8 12.7 3.21 3.51 2.55
## 5 Celes… 10–14… 1100 NA 26.2 27.2 16.6 11.0 3.42 3.01 3.65
## 6 InvyM… 10–14… NA NA 27.3 27.9 16.5 10.9 1.3 NA 3
## 7 CIS (… 3–14 … 3777 NA 26.9 22.4 19 11.7 3 3.1 2.6
## 8 CIS[9… 3–14 … 3777 NA 28.5 21.6 14.8 13.1 4.03 3.01 2.83
## 9 IMOP/… 3–14 … 1312 NA 26.4 24.9 18.0 11.8 2.61 3.41 2.53
## 10 Elect… 7–13 … 1317 NA 24.6 23.4 20.6 12.4 3.31 3.51 2.66
## # … with 211 more rows, and 11 more variables: JxCat <dbl>, PNV <dbl>,
## # EHBildu <dbl>, CUP <dbl>, CC <dbl>, BNG <dbl>, NA+ <dbl>, PRC <dbl>,
## # EV <dbl>, ventaja <dbl>, anno <dbl>
20.6 Convertir las fechas de campo
Las fechas del trabajo de campo deben ser tratadas previamente:
las fechas de tipo
"28 Dec–2 Jan"
(por ejemplo, de 2021) deberemos de convertirlas en dos fechas,2021-12-28
y2022-01-02
.las fechas de tipo
"12–14 Jan"
(por ejemplo, de 2021) deberemos de convertirlas en dos fechas,2021-01-12
y2021-01-14
.las fechas de tipo
"15 Jan"
(por ejemplo, de 2021), las convertiremos a dos fechas,2021-01-15
y2021-01-15
.
Para ello primero que vamos a hacer va a ser separar las fechas por los guiones -
con str_plit()
(que nos devolverá una lista).
fechas_intermedias <- str_split(encuestas_depurado$fechas, "–")
fechas_intermedias[1:6]
## [[1]]
## [1] "21" "28 Jan"
##
## [[2]]
## [1] "19" "23 Jan"
##
## [[3]]
## [1] "21 Jan"
##
## [[4]]
## [1] "14" "20 Jan"
##
## [[5]]
## [1] "10" "14 Jan"
##
## [[6]]
## [1] "10" "14 Jan"
En cada lugar de la lista vemos que tenemos dos fechas en la mayoría de casos: las pondremos en columnas fecha_inicio
y fecha_inicial
, devolviendo un tibble
con map_dfr
aplicado a la lista
fechas_intermedias <-
map_dfr(fechas_intermedias,
function(x) { tibble("fecha_inicio" = x[1],
"fecha_final" = x[2]) })
fechas_intermedias
## # A tibble: 221 × 2
## fecha_inicio fecha_final
## <chr> <chr>
## 1 21 28 Jan
## 2 19 23 Jan
## 3 21 Jan <NA>
## 4 14 20 Jan
## 5 10 14 Jan
## 6 10 14 Jan
## 7 3 14 Jan
## 8 3 14 Jan
## 9 3 14 Jan
## 10 7 13 Jan
## # … with 211 more rows
Los registros donde fecha_final
está ausente significa que toma el mismo valor que la fecha de inicio, y así lo modificaremos.
fechas_intermedias <-
fechas_intermedias %>%
mutate(fecha_final = ifelse(is.na(fecha_final),
fecha_inicio, fecha_final))
fechas_intermedias
## # A tibble: 221 × 2
## fecha_inicio fecha_final
## <chr> <chr>
## 1 21 28 Jan
## 2 19 23 Jan
## 3 21 Jan 21 Jan
## 4 14 20 Jan
## 5 10 14 Jan
## 6 10 14 Jan
## 7 3 14 Jan
## 8 3 14 Jan
## 9 3 14 Jan
## 10 7 13 Jan
## # … with 211 more rows
Las fechas que no tenga mes en fecha_inicio
, asumiremos que es el mismo mes que fecha_final
: si solo hay números (dos o menos caracteres), obtenemos el mes de la fecha_final
(últimos 3 caracteres) y lo pegamos al día.
fechas_intermedias <-
fechas_intermedias %>%
mutate(fecha_inicio =
ifelse(nchar(fecha_inicio) <= 2,
paste(fecha_inicio,
paste0(rev(rev(unlist(str_split(fecha_final, "")))[1:3]),
collapse = "")), fecha_inicio))
fechas_intermedias
## # A tibble: 221 × 2
## fecha_inicio fecha_final
## <chr> <chr>
## 1 21 Jan 28 Jan
## 2 19 Jan 23 Jan
## 3 21 Jan 21 Jan
## 4 14 Jan 20 Jan
## 5 10 Jan 14 Jan
## 6 10 Jan 14 Jan
## 7 3 Jan 14 Jan
## 8 3 Jan 14 Jan
## 9 3 Jan 14 Jan
## 10 7 Jan 13 Jan
## # … with 211 more rows
Esas fechas intermedias las vamos añadir como columnas y, pegándole el año, vamos a convertirlas en datos de tipo fecha. De todas las fechas nos vamos a quedar solo con la fecha_final
(recolocando dicha columna tras el nombre de la casa encuestadora).
library(lubridate)
encuestas_depurado <-
bind_cols(encuestas_depurado,
fechas_intermedias) %>%
mutate(fecha_inicio = dmy(paste(fecha_inicio, anno)),
fecha_final = dmy(paste(fecha_final, anno))) %>%
select(-c(fechas, anno, fecha_inicio)) %>%
relocate(fecha_final, .after = casa)
encuestas_depurado
## # A tibble: 221 × 21
## casa fecha_final muestra participacion PSOE PP Vox UP Cs ERC
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Electo… 2022-01-28 1161 NA 24.3 22.6 21.0 13.1 3.31 3.51
## 2 DYM/He… 2022-01-23 1008 NA NA NA NA NA NA NA
## 3 KeyDat… 2022-01-21 NA NA 26.0 25.6 17.5 11.5 2.91 3.51
## 4 Electo… 2022-01-20 1190 NA 24.5 23.0 20.8 12.7 3.21 3.51
## 5 Celest… 2022-01-14 1100 NA 26.2 27.2 16.6 11.0 3.42 3.01
## 6 InvyMa… 2022-01-14 NA NA 27.3 27.9 16.5 10.9 1.3 NA
## 7 CIS (S… 2022-01-14 3777 NA 26.9 22.4 19 11.7 3 3.1
## 8 CIS[9]… 2022-01-14 3777 NA 28.5 21.6 14.8 13.1 4.03 3.01
## 9 IMOP/E… 2022-01-14 1312 NA 26.4 24.9 18.0 11.8 2.61 3.41
## 10 Electo… 2022-01-13 1317 NA 24.6 23.4 20.6 12.4 3.31 3.51
## # … with 211 more rows, and 11 more variables: MP <dbl>, JxCat <dbl>,
## # PNV <dbl>, EHBildu <dbl>, CUP <dbl>, CC <dbl>, BNG <dbl>, NA+ <dbl>,
## # PRC <dbl>, EV <dbl>, ventaja <dbl>
20.7 Limpiamos nombres de encuestas
Por último, vamos limpiar los nombres de las encuestas eliminando la referencia a los enlaces de la wikipedia
20.8 Consultas
Una vez que tenemos los datos depurados vamos a realizar algunas consultas sencillas usando tidyverse.
¿Cuáles son las 10 encuestas con mayor tamaño muestral?
encuestas_depurado %>% slice_max(muestra, n = 10)
## # A tibble: 10 × 21
## casa fecha_final muestra participacion PSOE PP Vox UP Cs ERC
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ELECTO… 2021-05-02 4320 NA 27.1 24.0 17.0 12.3 4.03 3.61
## 2 CIS (S… 2021-02-11 3869 NA 28.1 19.7 16.3 11.3 9 3.3
## 3 CIS 2021-02-11 3869 NA 30.7 18.9 13.6 11.2 9.32 3.52
## 4 CIS (S… 2021-01-25 3862 NA 28.6 22.2 15.9 10 7.4 2.9
## 5 CIS 2021-01-25 3862 NA 30.7 20.6 13.0 10.7 9.32 2.91
## 6 CIS (S… 2021-04-14 3823 NA 30 20.8 18.8 10.8 4 3.2
## 7 CIS 2021-04-14 3823 NA 31.5 20.7 15.5 10.7 6.71 2.81
## 8 CIS 2021-03-11 3820 NA 31.3 18.0 15.1 9.62 9.52 3.21
## 9 CIS 2021-06-15 3814 NA 27.4 23.9 13.0 12.0 5.78 3.61
## 10 CIS 2021-05-13 3814 NA 27.9 23.4 13.7 10.4 5.37 3.01
## # … with 11 more variables: MP <dbl>, JxCat <dbl>, PNV <dbl>, EHBildu <dbl>,
## # CUP <dbl>, CC <dbl>, BNG <dbl>, NA+ <dbl>, PRC <dbl>, EV <dbl>,
## # ventaja <dbl>
¿Cuáles son las encuestas más recientes?
## # A tibble: 221 × 21
## casa fecha_final muestra participacion PSOE PP Vox UP Cs ERC
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ELECTO… 2022-01-28 1161 NA 24.3 22.6 21.0 13.1 3.31 3.51
## 2 DYM/HE… 2022-01-23 1008 NA NA NA NA NA NA NA
## 3 KEYDAT… 2022-01-21 NA NA 26.0 25.6 17.5 11.5 2.91 3.51
## 4 ELECTO… 2022-01-20 1190 NA 24.5 23.0 20.8 12.7 3.21 3.51
## 5 CELEST… 2022-01-14 1100 NA 26.2 27.2 16.6 11.0 3.42 3.01
## 6 INVYMA… 2022-01-14 NA NA 27.3 27.9 16.5 10.9 1.3 NA
## 7 CIS (S… 2022-01-14 3777 NA 26.9 22.4 19 11.7 3 3.1
## 8 CIS 2022-01-14 3777 NA 28.5 21.6 14.8 13.1 4.03 3.01
## 9 IMOP/E… 2022-01-14 1312 NA 26.4 24.9 18.0 11.8 2.61 3.41
## 10 ELECTO… 2022-01-13 1317 NA 24.6 23.4 20.6 12.4 3.31 3.51
## # … with 211 more rows, and 11 more variables: MP <dbl>, JxCat <dbl>,
## # PNV <dbl>, EHBildu <dbl>, CUP <dbl>, CC <dbl>, BNG <dbl>, NA+ <dbl>,
## # PRC <dbl>, EV <dbl>, ventaja <dbl>
¿Cuáles son las 5 encuestas en las que el PSOE tiene mayor proyección?
encuestas_depurado %>% slice_max(PSOE, n = 5)
## # A tibble: 5 × 21
## casa fecha_final muestra participacion PSOE PP Vox UP Cs ERC
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 CIS 2021-04-14 3823 NA 31.5 20.7 15.5 10.7 6.71 2.81
## 2 CIS 2021-03-11 3820 NA 31.3 18.0 15.1 9.62 9.52 3.21
## 3 CIS 2021-02-11 3869 NA 30.7 18.9 13.6 11.2 9.32 3.52
## 4 CIS 2021-01-25 3862 NA 30.7 20.6 13.0 10.7 9.32 2.91
## 5 CIS (SO… 2021-04-14 3823 NA 30 20.8 18.8 10.8 4 3.2
## # … with 11 more variables: MP <dbl>, JxCat <dbl>, PNV <dbl>, EHBildu <dbl>,
## # CUP <dbl>, CC <dbl>, BNG <dbl>, NA+ <dbl>, PRC <dbl>, EV <dbl>,
## # ventaja <dbl>
¿Cuál es la encuesta del CIS en la que el PP tiene mayor proyección?
## # A tibble: 1 × 21
## casa fecha_final muestra participacion PSOE PP Vox UP Cs ERC
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 CIS 2021-06-15 3814 NA 27.4 23.9 13.0 12.0 5.78 3.61
## # … with 11 more variables: MP <dbl>, JxCat <dbl>, PNV <dbl>, EHBildu <dbl>,
## # CUP <dbl>, CC <dbl>, BNG <dbl>, NA+ <dbl>, PRC <dbl>, EV <dbl>,
## # ventaja <dbl>
¿Cuál es el promedio de las encuestas del PSOE y PP por casa encuestadora?
encuestas_depurado %>%
select(-fecha_final) %>%
group_by(casa) %>%
summarise(media_PSOE = mean(PSOE), media_PP = mean(PP)) %>%
ungroup()
## # A tibble: 28 × 3
## casa media_PSOE media_PP
## <chr> <dbl> <dbl>
## 1 40DB/PRISA NA NA
## 2 ÁGORA INTEGRAL/CANARIAS AHORA 25.8 25.4
## 3 CELESTE-TEL/ONDA CERO 26.3 27.8
## 4 CIS 29.2 21.3
## 5 CIS (SOCIOMÉTRICA) 27.2 22.1
## 6 DATA10/OKDIARIO 25.0 29.2
## 7 DEMOSCOPIA Y SERVICIOS/ESDIARIO 25.3 25.9
## 8 DYM/HENNEO NA NA
## 9 ELECTOPANEL/ELECTOMANÍA 26.2 25.7
## 10 GAD3/ABC 25.5 29.8
## # … with 18 more rows
¿Cuál es son las 3 casas encuestadoras más sesgada hacia el PSOE (con mayor diferencia de promedio de PSOE vs PP)? ¿Y hacia el PP?
encuestas_depurado %>%
select(-fecha_final) %>%
group_by(casa) %>%
summarise(media_PSOE = mean(PSOE), media_PP = mean(PP)) %>%
ungroup() %>%
mutate(diferencia = media_PSOE - media_PP) %>%
slice_max(diferencia, n = 3)
## # A tibble: 3 × 4
## casa media_PSOE media_PP diferencia
## <chr> <dbl> <dbl> <dbl>
## 1 CIS 29.2 21.3 7.94
## 2 PSOE 29 22 7
## 3 CIS (SOCIOMÉTRICA) 27.2 22.1 5.13
encuestas_depurado %>%
select(-fecha_final) %>%
group_by(casa) %>%
summarise(media_PSOE = mean(PSOE), media_PP = mean(PP)) %>%
ungroup() %>%
mutate(diferencia = media_PP - media_PSOE) %>%
slice_max(diferencia, n = 3)
## # A tibble: 3 × 4
## casa media_PSOE media_PP diferencia
## <chr> <dbl> <dbl> <dbl>
## 1 GAD3/ABC 25.5 29.8 4.36
## 2 DATA10/OKDIARIO 25.0 29.2 4.12
## 3 SIGMA DOS/ANTENA 3 25.3 29.3 3.99