#' Función para obtener los indicadores de la población de México
#'
#' Obtiene los indicadores de la población mexicana desde la API del INEGI
#'
#' @param nivel character - indica el nivel al que se obtendrán los datos, ya sea: "nacional" o "municipal"
#'
#' @param anio character - indica el año del que se requiere la información, en el caso del nivel "nacional" solo hay información para el 2010, por lo que se puede omitir.
#'
#' @return un data.frame con la información solicitada
#'
#' @examples g_obtener_indicadores(nivel="nacional",anio = "2015")
#' g_obtener_indicadores(nivel="municipal")
g_obtener_indicadores <- function(nivel = "nacional",anio = "2010"){
# Carga de librerias----
library(httr)
library(jsonlite)
library(rjson)
library(dplyr)
library(purrr)
library(foreach)
library(rlist)
######### Declaramos las funciones auxiliares.
# Funcion para extraer los datos de una pagina
extraer <- function(url){
url %>%
GET() %>%
content("text",encoding = "UTF-8") %>%
paste(collapse = " ") %>%
fromJSON()
}
# Convierte la información extraida en un data.frame
df_edo<-function(estados){
estados <- estados %>%
pluck("datos") %>%
reduce(rbind) %>%
data.frame() %>%
dplyr::select(cve_agee,nom_agee)
return(estados)
}
# Función para seleccionar la clave del estado
obtiene_clave_estado<-function(estados){
cv_edo <- estados %>%
dplyr::select(cve_agee) %>%
unlist()
names(cv_edo) <- estados$nom_agee
return(cv_edo)
}
# Función para extraer los municipios
obtener_municipios <- function(Estado){
url <- paste0("https://gaia.inegi.org.mx/wscatgeo/mgem/",Estado)
municipios <- extraer(url)
return(municipios)
}
# Función para convertir la información en un data.frame
df_mun <- function(estado){
municipios <- municipios %>%
pluck(estado,"datos") %>%
reduce(rbind) %>%
data.frame() %>%
dplyr::select(cve_agee,cve_agem,nom_agem,pob,pob_fem,pob_mas)
}
# Función para obtener los indicadores a nivel nacional
obtener_indicadores_nacional <- function(area,anio){
# Nombre de los indicadores
nombres <- c('Población',
'Hombres',
'Mujeres',
'0a4 anios',
'5a9 anios',
'10a14 anios',
'15a19 anios',
'20a24 anios',
'25a29 anios',
'30a34 anios',
'35a39 anios',
'40a44 anios',
'45a49 anios',
'50a54 anios',
'55a59 anios',
'60a64 anios',
'65a69 anios',
'70a74 anios',
'75a79 anios',
'80a84 anios',
'85a89 anios',
'90a94 anios',
'95a99 anios',
'100 anios y más'
)
# Creamos el url de la página de donde obtenereos la información
url = paste0("https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000001,1002000002,1002000003,1002000058,1002000061,1002000067,1002000070,1002000073,1002000076,1002000079,1002000082,1002000088/es/",area,"/false/BISE/2.0/959285de-3d6b-0a30-cfab-e39ece21fbae?type=json")
# Extraemos la informacíon de la página
flujoDatos <- extraer(url)
# Extraemos los indicadores
datos = foreach(i=1:length(flujoDatos$Series)) %do%{
v <-flujoDatos %>% pluck("Series",i,"OBSERVATIONS") %>%
list.filter(TIME_PERIOD==anio) %>%
pluck(1,1)
if (is.null(v)) {
valor = ""
}else{
valor = flujoDatos %>%
pluck("Series",i,"OBSERVATIONS") %>%
list.filter(TIME_PERIOD==anio) %>%
pluck(1,"OBS_VALUE") %>%
as.numeric()
}
}
datos1 <- data.frame(datos)
names(datos1) <- c('Población',
'Hombres',
'Mujeres',
'0a4 anios',
'10a14 anios',
'15a19 anios',
'20a24 anios',
'25a29 anios',
'30a34 anios',
'35a39 anios',
'40a44 anios',
'5a9 anios')
# Creamos el url de la página de donde obtenereos la información
url = paste0("https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000085,1002000091,1002000094,1002000097,1002000100,1002000103,1002000106,1002000109,1002000112,1002000115,1002000118,1002000064/es/",area,"/false/BISE/2.0/959285de-3d6b-0a30-cfab-e39ece21fbae?type=json")
# Extraemos los datos de la página
flujoDatos <- extraer(url)
#Extraemos los indicadores
datos2 = foreach(i=1:length(flujoDatos$Series)) %do%{
v <-flujoDatos %>% pluck("Series",i,"OBSERVATIONS") %>%
list.filter(TIME_PERIOD==anio) %>%
pluck(1,1)
if (is.null(v)) {
valor = ""
}else{
valor = flujoDatos %>%
pluck("Series",i,"OBSERVATIONS") %>%
list.filter(TIME_PERIOD==anio) %>%
pluck(1,"OBS_VALUE") %>%
as.numeric()
}
}
datos2 <- data.frame(datos2)
names(datos2) <- c('100 anios y más',
'45a49 anios',
'50a54 anios',
'55a59 anios',
'60a64 anios',
'65a69 anios',
'70a74 anios',
'75a79 anios',
'80a84 anios',
'85a89 anios',
'90a94 anios',
'95a99 anios'
)
datos <- cbind(datos1,datos2)
datos <- datos[nombres]
return(datos)
}
obtener_indicadores_municipal <- function(area){
# Nombre de los indicadores
nombres <- c('Población',
'Hombres',
'Mujeres'
)
# Creamos la url de la página
url <- paste0("https://gaia.inegi.org.mx/wscatgeo/mgem/",area)
municipios <- extraer(url)
municipios <- municipios %>%
pluck("datos") %>%
reduce(rbind) %>%
data.frame() %>%
dplyr::select(cve_agee,cve_agem,nom_agem,pob,pob_fem,pob_mas)
names(municipios)[names(municipios)%in%c("pob","pob_fem","pob_mas")] <- nombres
rownames(municipios) <- NULL
# Creamos un filtro para quitar los municipios sin información
municipios$Población <- as.numeric(municipios$Población)
municipios <- municipios[!is.na(municipios$Población),]
return(municipios)
}
####### Ejecucion
# url de la página del catalogo de entidades
url <- "https://gaia.inegi.org.mx/wscatgeo/mgee/"
# Extraemos el catalogo
estados <- extraer(url)
# Generamos un data.frame con los datos
estados <- df_edo(estados)
#Obtenemos la clave de cada estado
cv_edo <- obtiene_clave_estado(estados)
# Creamos los códigos como nos los pide la API
estados <- estados %>%
mutate(nom_agee = paste(cve_agee,nom_agee)) %>%
mutate(cve_agee = ifelse(nchar(cve_agee)==1,paste0("0700000",cve_agee),paste0("070000",cve_agee)))
# Agregamos el código del nivel nacional
estados <- rbind(estados,c("0700","00 Nacional"))
#Obtenemos la información de los municipios
municipios <- cv_edo %>%
map(obtener_municipios)
municipios <- names(cv_edo) %>%
map(df_mun) %>%
reduce(rbind)
municipios <- municipios %>%
mutate(nom_agem = paste(cve_agee,cve_agem,nom_agem,sep = "_")) %>%
mutate(cve_agee = paste0("070000",cve_agee)) %>%
mutate(cve_agem = paste0("0",cve_agem)) %>%
mutate(codigo_mun = paste0(cve_agee,cve_agem))
# Extraemos la información de los Estados y la guardamos en un data.frame
if (nivel == "nacional") {
codigo_edo <- estados$cve_agee
distribucion <- codigo_edo %>%
map(anio = anio,obtener_indicadores_nacional) %>%
reduce(rbind)
rownames(distribucion) <- estados$nom_agee
distribucion <- add_rownames(distribucion,"Estados")
}
if (nivel == "municipal") {
# Extraemos la información del municipio
codigo_edo <- cv_edo
distribucion <- codigo_edo %>%
map(obtener_indicadores_municipal) %>%
reduce(rbind) %>%
data.frame()
}
return(distribucion)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.