En este breve tutorial se muestra como cargar en R la base de datos del Censo de Población y Vivienda en México 2020 a nivel localidad. Así, como realizar un manejo muy básico de esa base de datos filtrando infomación y generando variables a partir de la información del Censo.
El censo de población y vivienda en México es un proceso realizado cada 10 años por el Instituto Nacional de Estadística y Geografía (INEGI). Su objetivo principal es obtener información actualizada y detallada sobre la población y las características de las viviendas en todo el país. Este censo es una herramienta fundamental para la planificación, desarrollo y toma de decisiones en diversos ámbitos, como la educación, la salud, la vivienda, la economía y la política.
Durante el censo, se recopilan datos demográficos y socioeconómicos de todas las personas que residen en México, así como información relacionada con las viviendas en las que habitan. Algunos de los aspectos que se registran incluyen la edad, el sexo, la ocupación, la educación, el estado civil, la migración, los servicios básicos, la infraestructura y las características de las viviendas.
La recopilación de estos datos se lleva a cabo mediante cuestionarios y entrevistas directas a los habitantes. Además, se utilizan tecnologías avanzadas, como la captura electrónica de datos, para agilizar el proceso y garantizar la precisión de la información recopilada.
El censo de población y vivienda en México proporciona una radiografía completa y actualizada de la sociedad mexicana, permitiendo el análisis de tendencias demográficas, la identificación de necesidades y desigualdades, y el diseño de políticas públicas adecuadas para abordar los desafíos y promover el desarrollo equitativo en el país.
Para una visión ejecutiva de algunos aspectos metodológicos, así como de varios resultados relevantes que arrojó el Censo 2020, INEGI elabró el siguiente documento
Para descargar la base de datos, el diccionario de variables, así como otra información relevante vamos a la página del INEGI:
https://www.inegi.org.mx/programas/ccpv/2020/#Datos_abiertos
Inmediatamente navegamos por las opciones: archivos para descarga y
luego principales resultados por localidad (ITER). Aquí es posible
descargar las bases de datos en formato csv (tablas con información
separada por comas) con la información del Censo por estado o para todo
el país. En nuestro caso, usaremos la información para todo el país
(Estados Unidos Mexicanos). Esto nos descarga el folder comprimido
iter_00_cpv2020_csv.zip
. Al descomprimirlo se puede acceder
a las carpetas catalogos
, conjunto_de_datos
,
diccionario_de_datos
y metadatos
.
Antes de seguir adelante, se menciona que en la parte de abajo de la página
https://www.inegi.org.mx/programas/ccpv/2020/#Datos_abiertos
también es posible descargar las
Estadísticas censales a escalas geoelectorales
. Esto es
importante pues INEGI nos ofrece información censal a nivel geolectoral.
Combinando esta información con información de votaciones electorales,
que es posible obtener de la página del INE, podríamos intentar
descubrir tendencias electorales relacionadas con variables
sociodemográficas. Esto da para proyectos de tesis de licenciatura y
maestría.
Antes de leer la base de datos en R, es importante ir al folder
diccionario_de_datos
y abrir el archivo
diccionario_datos_iter_00CSV20.csv
En este archivo el INEGI proporciona una tabla con el número de variables en la base de datos, la variable que se tiene, una descripción muy breve de la variable, el nombre mnemotécnico en la base de datos, el rango de valores que puede tomar y finalmente su longitud. Es posible descargar esta información en pdf con una mejor presentación
https://www.inegi.org.mx/contenidos/programas/ccpv/2020/doc/fd_iter_cpv2020.pdf
En el folder conjunto_de_datos
se encuentra el archivo
conjunto_de_datos_iter_00CSV20.csv
que también es una tabla
de valores separados por comas. Para leerlo podríamos usar la función
básica de R read.csv
, pero es preferible usar la función
fread
de la librería data.table
de R. Esta
función es muy poderosa y permite leer bases de datos “grandes” muy
rápido y sin tener que especificar mayores detalles. Sólo hay que
considerar que la función fread
arroja la base de datos con
una estructura particular, así que de inmediato convertimos a una
data.frame
que es fácil de manejar.
library(data.table)
my_dir <- "/Users/carloserwin/Documents/"
CENSO1 <- data.frame(fread(paste0(my_dir, "CENSO/iter_00_cpv2020/conjunto_de_datos/conjunto_de_datos_iter_00CSV20.csv")))
Calculando la población total, i.e.
pobtot <- sum(CENSO1$POBTOT)
formatC(pobtot, big.mark=",")
## [1] "505,248,533"
notamos que algo obviamente no esta bien. Revisando con cuidado el diccionario de variables, página 3 del documento en pdf al que se hace referencia arriba, identificamos que en la base de datos a nivel localidad se incluyen subtotales por estado y municipio. Así que al sumar, obviamente estamos sumando varias veces la misma cosa.
Para resolver el problema, primero hay que definir lo que buscamos, para este tutorial vamos a obtener la información a nivel estado. Sin embargo, podría obtenerse a nivel municipio o a nivel localidad siguiendo un procedimiento similar. Una idea es partir de los datos más desagregados, los que están a nivel localidad, e ir agregando la información de las localidades correspondientes a cada municipio para obtener una base a nivel municipio. Después, agregamos la información de los municipios correspondientes a cada estado para conseguir la base que buscamos. Desafortunadamente, este no es el camino correcto:
Por lo que en definitiva agregar no es el camino indicado.
Lo que se debe hacer es extraer los subtotales que se requieren, para obtener los subtotales a nivel estado usamos el siguiente código en R
sum(id <- CENSO1$LOC == 0 & CENSO1$MUN == 0 & CENSO1$ENTIDAD != 0)
## [1] 32
CENSO2 <- CENSO1[id, ]
Esto nos indica que sólo hay 32 registros que cumplen con esta
condición. A continuación, es imprescindible verificar se haya filtrado
la información correctamente. Una manera es ir a la página de México en
la Wikipedia
https://es.wikipedia.org/wiki/M%C3%A9xico
en donde viene exactamente la población total de México que se obtuvo a partir del Censo 2020. Entonces, comparamos este dato con la suma que se obtien con la base de datos filtarada.
pobtot <- sum(CENSO2$POBTOT)
formatC(pobtot, big.mark=",")
## [1] "126,014,024"
ambos coinciden de manera exacta.
La base de datos a nivel estado tiene 32 observaciones y 286 variables. Nosotros sólo usaremos algunas de las variables, así que creamos otra base de datos con la información que se analizará.
Supongamos que nos interesa encontrar variables que tengan alguna relación con la población económicamente activa. Revisando el diccionario, detectamos que las siguientes variables podrían resultar relevantes.
CENSO3 <- CENSO2[,c("NOM_ENT", "POBTOT", "P_12YMAS", "P_15YMAS",
"PROM_HNV", "PHOG_IND", "P15YM_AN",
"GRAPROES", "PEA", "TVIVPARHAB", "VPH_INTER")]
Aquí surge otro detalle, como muchas variables tenían asteriscos, R al leerlas las identifica como de tipo caracter. Por lo que es necesario transformar a variables de tipo numérico.
for (j in 2:ncol(CENSO3)) {
CENSO3[,j] <- as.numeric(CENSO3[,j])
}
Finalmente, construimos variables de manera que sean comparables entré estados para hacer análisis.
WORK <- data.frame(NOM_ENT = CENSO3$NOM_ENT,
PEA = 100*CENSO3$PEA/CENSO3$P_12YMAS,
ANALF = 100*CENSO3$P15YM_AN/CENSO3$P_15YMAS,
PHOG_IND = 100*CENSO3$PHOG_IND/CENSO3$POBTOT,
PROM_HNV = CENSO3$PROM_HNV,
GRAPROES = CENSO3$GRAPROES,
VPH_INTER = 100*CENSO3$VPH_INTER/CENSO3$TVIVPARHAB)
Vamos a explicar sólo la población económicamente activa (PEA). De acuerdo al diccionario del Censo, la PEA está dada por el número de “Personas de 12 a 130 años de edad que trabajaron, tenían trabajo pero no trabajaron o buscaron trabajo en la semana de referencia”. Como obviamente la población en cada estado es muy heterogenea, necesitamos contrarrestar este efecto. Así, para cada estado obtenemos la PEA como porcentaje de la población de 12 a 130 años en ese estado. De esta manera podemos comparar la PEA entre estados.
Para finalizar generaremos una matriz de diagramas de dispersión. En este caso simplemente buscamos en internet intrucciones para generar esta gráfica de manera vistosa pero que además sea útil. Las instrucciones son las siguientes.
# Panel para la correlación
panel.corr <- function(x, y){
usr <- par("usr"); on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r <- round(cor(x, y), digits=2)
txt <- paste0("Corr: ", r)
text(0.5, 0.5, txt, cex = 1.2)
}
# Panel de histogramas
panel.hist <- function(x, ...){
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.4) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks
len <- length(breaks)
y <- h$counts/max(h$counts)
rect(breaks[-len], 0, breaks[-1], y, col = "lightblue")
}
# Panel of diagramas de puntos
panel.scat <- function(x, y){
points(x, y, pch = 19, cex = 1, col = "blue")
}
# Gráfica
pairs(WORK[,-1],
lower.panel = panel.scat,
upper.panel = panel.corr,
diag.panel = panel.hist,
gap = 0.3)
En el panel inferior se despliegan los diagramas de puntos de los cruces
entre variables, en la diagonal los histogramas. Por último, en el panel
superior se muestra la correlación entre variables.
Observando las correlaciones, es fácil apreciar que la PEA esta fuertemente correlacionada con las variables promedio de hijos nacidos vivos (PROM_HNV), así como con el porcentaje de viviendas particulares habitadas que cuentan con internet (VPH_INTER). En otras palabras, estados que tienen el mayor promedio de hijos nacidos vivos, tienen menor PEA. En cambio, estados que tienen mayor porcentaje de viviendas particulares con internet tienen mayor PEA.