1. Descarga de la base de datos

Dirígete a la página oficial de la ENIGH 2022: https://www.inegi.org.mx/programas/enigh/nc/2022/#microdatos

Busca el archivo titulado “Características sociodemográficas de los integrantes del hogar (población)” y descárgalo. Si está en formato ZIP, descomprímelo y ubica el archivo .csv.

Guarda este archivo en una carpeta para tu proyecto, por ejemplo, datos/.

2. Preparación del entorno de trabajo

# Instala estas librerías si aún no lo has hecho:
# install.packages("readr")
# install.packages("dplyr")

library(readr)
library(dplyr)
library(tidyr)
library(stringr)

3. Importación del archivo CSV

head(9 lo que hace es mostrarte las primeras 6 filas de tu tabla de datos)

# Carga tu archivo csv
poblacion <- read_csv("poblacion.csv")
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
##   dat <- vroom(...)
##   problems(dat)
## Rows: 309684 Columns: 188
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (26): folioviv, numren, madre_id, padre_id, lenguaind, nivel, residenci...
## dbl (129): foliohog, parentesco, sexo, edad, madre_hog, padre_hog, disc_cami...
## lgl  (33): otorg_c, forma_c, noatenc_1, noatenc_6, noatenc_7, noatenc_9, noa...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Verifica que la base se cargó correctamente
head(poblacion)
## # A tibble: 6 × 188
##   folioviv   foliohog numren parentesco  sexo  edad madre_hog madre_id padre_hog
##   <chr>         <dbl> <chr>       <dbl> <dbl> <dbl>     <dbl> <chr>        <dbl>
## 1 0100005002        1 01            101     2    91         2 <NA>             2
## 2 0100005002        1 02            301     2    48         1 01               2
## 3 0100005002        1 03            609     2    13         1 02               2
## 4 0100005003        1 01            101     1    68         2 <NA>             2
## 5 0100005003        1 02            201     2    64         2 <NA>             2
## 6 0100005004        1 01            101     1    56         2 <NA>             2
## # ℹ 179 more variables: padre_id <chr>, disc_camin <dbl>, disc_ver <dbl>,
## #   disc_brazo <dbl>, disc_apren <dbl>, disc_oir <dbl>, disc_vest <dbl>,
## #   disc_habla <dbl>, disc_acti <dbl>, cau_camin <dbl>, cau_ver <dbl>,
## #   cau_brazo <dbl>, cau_apren <dbl>, cau_oir <dbl>, cau_vest <dbl>,
## #   cau_habla <dbl>, cau_acti <dbl>, hablaind <dbl>, lenguaind <chr>,
## #   hablaesp <dbl>, comprenind <dbl>, etnia <dbl>, alfabetism <dbl>,
## #   asis_esc <dbl>, nivel <chr>, grado <dbl>, tipoesc <dbl>, tiene_b <dbl>, …

4. Exploración inicial de los datos

# Utiliza las funciones head, tail, str, summary y names y anota frente a su resultado para qué se utiliza cada
head(poblacion) #Nos muestra las priemras 6 filas de la base de datos
tail(poblacion) # Me da laa ultimas 6 observaciones de mi base de datos
str(poblacion) #La estructura de cada una de las variables
summary(poblacion) #Estadísticos generales de las variables numericas y no numericas. Class es el tipo de variable (character = text, factor = para analisis categóricos)
names(poblacion) #Nos mietsra los nombres de todas las columnas

5. Identificación de valores faltantes

# Utiliza la función anyNA, is.na y anota frente a su resultado para qué se utiliza cada una
anyNA(poblacion) # ver si hay algun Na en la tabla

is.na(poblacion) # Ve si esxiste un valor NA en cuaquier celda

sum(is.na(poblacion)) #suma todos los NA's del dataframe

colSums(is.na(poblacion)) #se analiza cada columna, por cada una de las columnas hace una suma del numero de NA's

max(colSums(is.na(poblacion))) # Te dice que columna tiene más NA's

6. Filtrado y selección de datos

#Crea un nuevo data frame que se llame poblacion_nl a partir del data frame original llamado poblacion
  
  # Este es el operador de dyplyr %>% (xmd + shift + m = %>%)

#Filtra los datos solamente para personas que vivan en el estado de Nuevo León

poblacion_nl <- poblacion%>%
  filter(entidad == "19") %>% 
  select(sexo, edad, disc_camin, hablaind, alfabetism)

  
#FILTRAR filtra filas, SELECCIONAR filtra columnas
#La variable que vamos a filtrar, entonces la funcion es --> filter(), y vamos a filtrar por entidad (adentro del parrentesis ) 
#Selecciona por lo menos 5 variables de interés para tu análisis

7. Agrupación y resumen de datos

#Calcula el promedio de edad por sexo para el estado de Jalisco
poblacion_j <- poblacion%>%
  filter(entidad == "14") %>% 
  select(edad, sexo)

poblacion_jhombres <- poblacion %>% 
  filter(entidad == "14") %>% 
  select(edad, sexo, ) %>% 
  filter(sexo==1)
mean(poblacion_jhombres$edad) #El signo de pesos lo usamos para decir especificamente de que columna queremos hacer el análisis
## [1] 32.86837
poblacion_jmujeres <- poblacion %>% 
  filter(entidad == "14") %>% 
  select(edad, sexo, ) %>% 
  filter(sexo==2)
mean(poblacion_jmujeres$edad)
## [1] 34.35508
poblacion_j <- poblacion%>%
  filter(entidad == "14") %>% 
  select(edad, sexo) %>% 
  group_by(sexo) %>% 
  summarise(prom_edad = mean(edad)) #summarise crea una variable nueva, en este caso la variable nueva es el promedio

#Para imprimir el resultado en la consola solo ponemos el nombre de la variable, en este caso poblacion_j

8. Revisar estructura

# Revisar estructura general
summary(poblacion_j)

9. Renombrar variables para facilitar el análisis

# Renombrar columnas clave con nombres más legibles

#rename
pob_nueva<-poblacion %>% 
  rename(
    años_imss = ss_aa, 
    disc_audi = cau_oir
  )

10. Re-codificar variables categóricas con case_when()

# Re-codificar variable de sexo

#mutate y case_when

poblacion_j<-poblacion_j%>%
  mutate(sexo=case_when(
    sexo == 1 ~ "Hombre",
    sexo == 2 ~ "Mujer"
  ))

11. Crear nuevas variables

# Crear una variable binaria para tercera edad

#ifelse

poblacion_jhombres<-poblacion_jhombres%>%
  mutate(tercera_edad=ifelse(edad>=60, "Tercera edad","Menor de 60 años"))

12. Manejo de valores faltantes

# Identificar variables con muchos NA

#colSums y is.na

colSums(is.na(poblacion_jhombres)) #Esto nos indica que no hay NA's
##         edad         sexo tercera_edad 
##            0            0            0
# Eliminar filas donde falta la edad

#filter e is.na

pob_nueva<-pob_nueva%>%
  filter(is.na(disc_brazo))
# Confirmar que ya no hay NA en edad

#anyNA

13. Ejercicio práctico

summary(poblacion)
#Crea un nuevo data frame que se llama poblacion_edad para filtrar de poblacion personas entre 18 y 25 años.
poblacion_edad <- poblacion%>%
  filter(edad > 17) %>%
  filter(edad < 26)

#Crear una variable llamada joven (1 si tiene 18-20 años, 0 si no)
poblacion_edad<-poblacion_edad%>%
  mutate(joven=ifelse(edad>17 & edad < 21, "1","0"))

#Crea una variable que se llame nivel educativo
poblacion_edad<-poblacion_edad%>%
  mutate(nivel_educativo=ifelse(nivel == "12", "Profesional", "Otro"))

#Seleccionar solo las variables edad, joven, nivel_educativo, sexo
poblacion_edad <- poblacion_edad%>%
  select(edad, joven, nivel_educativo, sexo) 

#Elimina NA en nivel educativo
poblacion_edad <- poblacion_edad %>%  
  filter(!is.na(nivel_educativo)) #El signo de excalamción significa NOT, de manera que NOT (no) enseña los NA's

#Crear un resumen con summarize donde digas la cantidad de personas de cada sexo por edad (de los que tienen 18, cuantas mujeres y cuantos hombres hay, de los ue tienen 19, cuantos hombres y cuantas mujeres hay, etc.)
pob_edad_por_sexo <- poblacion_edad%>%
  group_by(edad, sexo) %>% 
  summarise(numero_de_personas =n(), .groups = "drop_last") #R me dijo que le agregara drop last .groups para silenciar el mesnaje que me daba de que si habia ejecutado el comando. 


## 14. Cierre


``` r
# Guardar como CSV o Excel

#write_csv
#write_xlsx