Análisis de los Datos proporcionados por el OVIE

1. Extraccion de los datos.

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.

  • Apertura de Archivos:
# 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
  • Limpieza del texto
# Problema o
pattern <- "&oacute;"
str_view_all(txt, pattern = pattern, match = T)
txt <- str_replace_all(txt, pattern = pattern, replacement = "ó")

# Problema enie
pattern <- "&ntilde;"
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))))
}
  • Elaboramos el mapa
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"

Informacion adicional del OVIE

Además de la informacion sociodemografica del mapa, podemos obtener la informacion siguiente:

  • Total de personal ocupado
  • Remuneracion promedio por empleado (mensual)
  • Productividad laboral promedio (anual)
  • Actividad predominante (a nivel actividad: Tienda de abarrotes, taquerias y torterias, papelerias, cafeterias, etc)
  • Composicion de unidades económicas por sector (Comercio, industria, servicios)

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.