Para la extracción de los datos utilizaremos el paquete RSelenium, que nos permite crear un usuario simulado web que rellene formularios y descargue información. Lo que haremos será extraer informacion de la pestaña de análsis sociodemográfico de la OVIE El código para este usuario simulado es:
library(RSelenium)
library(sf)
library(rebus)
library(stringr)
# extra capabilities
eCaps <- list(
chromeOptions =
list(prefs = list(
"profile.default_content_settings.popups" = 0L,
"download.prompt_for_download" = FALSE,
"download.default_directory" = "/Users/admin/Desktop/kmla"
)
)
)
# HECHAR A ANDAR EL NAVEGADOR #
rD <- rsDriver(verbose = FALSE, extraCapabilities = eCaps)
rD
remDr <- rD$client
remDr$navigate("http://www.ovie.sedecodf.gob.mx/OVIEWEB")
Sys.sleep(3)
for(i in 195:length(L)){
a1 <- remDr$findElement("class", "modal-action")
a1$clickElement()
Sys.sleep(1)
a2 <- remDr$findElement("id", "mnu_addGeo")
a2$clickElement()
Sys.sleep(1)
a3 <- remDr$findElement("class", "button")
a3$clickElement()
Sys.sleep(1)
a4 <- remDr$findElement("id", "sa_search_input_searchArea")
a4$clickElement()
a4$sendKeysToElement(list("Metro ", L[i], key = 'enter'))
Sys.sleep(1)
a5 <- remDr$findElements("class", "circle")
tryCatch(
a5[[1]]$clickElement(),
error = function(e){
i <- i + 1
a4$clearElement()
a4$sendKeysToElement(list("Metro ", L[i], key = 'enter'))
}
)
Sys.sleep(1)
a6 <- remDr$findElements("class", "secondary-content")
a6[[1]]$clickElement()
Sys.sleep(1)
a6_1 <- remDr$findElement("id", "radiovalue")
a6_1$sendKeysToElement(list(as.character("1000"), key = 'enter'))
Sys.sleep(2)
a6_2 <- remDr$findElement("class", "areas-extraData")
tryCatch(
a6_2$clickElement(),
error = function(e){
i <- i + 1
a4$clearElement()
a4$sendKeysToElement(list("Metro ", L[i], key = 'enter'))
}
)
Sys.sleep(1)
a7 <- remDr$findElement("class", "fixed-action-btn")
a7$clickElement()
Sys.sleep(1)
a8 <- remDr$findElements("class", "btn-floating")
a8[[2]]$clickElement()
Sys.sleep(1)
list.files("/Users/admin/Desktop/kamala")
file.rename(from = "/Users/admin/Desktop/kamala/mdmData_kml.zip", to = paste0("/Users/admin/Desktop/kamala/", as.character(L[i]), ".zip"))
Se nos habrá descargado una carpeta con archivos .zip a los que les habremos dado un nombre particular. Para poder extraer información de estos haremos unzip desde R y leeremos los archivos .kml ahí guardados con el paquete sf que sirve manipular información geográfica. Posteriormente, a la cadena de caracteres con datos descriptivos le daremos un orden y un formato para que podamos obtener la información cuantitativa de nuestros polígonos de interés.
# Hacemos unzip de los archivos comprimidos
kml <- utils::unzip(zipfile = paste0("/Users/admin/Desktop/kml/", as.character(L[i]), ".zip"))
# Leemos el archivo
kml <- st_read(kml, quiet = T)
# Generamos un archivo con informacion de todos los poligonos
if(i == 1){
mapa <- kml
} else {
mapa <- rbind(mapa, kml)
}
# Volvemos a texto la observacion de descripcion de todos los poligonos
txt <- as.character(kml$Description)
txt
# Problema o
pattern <- "ó"
str_view_all(txt, pattern = pattern, match = T)
txt <- str_replace_all(txt, pattern = pattern, replacement = "ó")
# Problema enie
pattern <- "ñ"
txt <- str_replace_all(txt, pattern = pattern, replacement = "ñ")
info <- c("Indice_de_desarrollo_social",
"Población_masculina",
"Población_femenina",
"Grupo_de_edad_niños",
"Grupo_de_edad_jóvenes",
"Grupo_de_edad_adultos_jóvenes",
"Grupo_de_edad_adultos",
"Grupo_de_edad_adultos_mayores",
"Prescolar",
"Primaria",
"Secundaria",
"Bachillerato",
"Universidad",
"Posgrado",
"Superficie",
"Población_total",
"Viviendas_totales",
"Unidades_económicas")
frase <- c()
valor <- c()
for(j in 1:length(info)){
pattern = info[j] %R% "=" %R% capture(one_or_more(DGT)) %R% optional(PUNCT) %R% capture(one_or_more(DGT))
str_view_all(txt, pattern = pattern, match = T)
frase[j] <- str_extract(txt, pattern)
valor[j] <- str_extract(frase[j], pattern = capture(one_or_more(DGT) %R% optional(PUNCT) %R% capture(one_or_more(DGT))))
}
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
Además de la informacion sociodemografica del mapa, podemos obtener la informacion siguiente:
La informacion de esta plataforma proviene del DENUE 2017 y del Censo Económico 2009 y 2014 del INEGI, georreferenciando y procesando la informacion desde el servicio de microdatos.