Bibliotecas

library(tidyverse)
library(readxl)
library(janitor)
library(DT)
library(rvest)
library(lubridate)

Funciones

source("../functions-R/clean_data_wikipedia_update.R", encoding = "UTF-8")
source("../functions-R/clean_variable_string.R", encoding = "UTF-8")
source("../functions-R/data_final.R", encoding = "UTF-8")

Intención de voto

Web Scraping

Lectura de url

  • Lectura de información contenida en la página web suministrada.
url <- "https://es.wikipedia.org/wiki/Anexo:Sondeos_de_intenci%C3%B3n_de_voto_para_las_elecciones_presidenciales_de_Colombia_de_2022"

web_info <- url %>% 
  read_html()
web_info
## {html_document}
## <html class="client-nojs" lang="es" dir="ltr">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 ...
## [2] <body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-104 ns-subjec ...
  • Accediendo a la información que está en el nodo body.
web_info %>% 
  html_node("body")
## {html_node}
## <body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-104 ns-subject mw-editable page-Anexo_Sondeos_de_intención_de_voto_para_las_elecciones_presidenciales_de_Colombia_de_2022 rootpage-Anexo_Sondeos_de_intención_de_voto_para_las_elecciones_presidenciales_de_Colombia_de_2022 skin-vector action-view skin-vector-legacy">
## [1] <div id="mw-page-base" class="noprint"></div>
## [2] <div id="mw-head-base" class="noprint"></div>
## [3] <div id="content" class="mw-body" role="main">\n\t<a id="top"></a>\n\t<di ...
## [4] <div id="mw-navigation">\n\t<h2>Menú de navegación</h2>\n\t<div id="mw-he ...
## [5] <footer id="footer" class="mw-footer" role="contentinfo"><ul id="footer-i ...
## [6] <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgPageParseR ...

Tabla de encuestas (1)

  • Se podría generar una base datos con la información de todas las tablas que están presentes en el body de la página web.
web_info %>% 
  html_node("body") %>% 
  html_table()

Tabla de encuestas (final)

  • La aproximación anterior junta todas las tablas en un solo data.frame, pero como no todas las tablas tienen la misma estructura sería más fácil de manipular si se extraen de manera individual y luego se busca la manera correcta de unirlas. Este proceso lo estructura a través de tres funciones:
    • clean_data_wikipedia_update(): esta función permite unificar los nombres de las variables y las etiquetas (nombres) del candidato. Este proceso es necesario porque no todos los candidatos fueron evaluados en todas las encuestas (diferente número de variables en cada tabla) y porque no se les asignó el mismo nombre en cada encuesta (etiquetas diferente para el candidato).
    • clean_variable_string(): esta función permite eliminar el signo “%” y reemplazar la coma (“,”) por el punto (“.”), para después coercionar las variables a tipo numérico.
    • data_final: esta función permite leer múltiples tablas (encuestas) desde un objeto de clase xml_document (obtenido con la función read_html() del paqueete rvest), unirlas y realizar la depuración final para tener un solo dataframe para análisis. Esta función consume las dos funciones anteriores.
data_encuestas <-
  web_info %>%
  data_final(x = .)

data_encuestas

Exportando datos

write_csv(x = data_encuestas, file = "../data/EncuestasColombia2022-Update.csv")