library(readr)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
nacimientos <- read_csv("2023_Nacimientos_2023.csv")
## Rows: 1521280 Columns: 68
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): FECHANACIMIENTOMADRE, FECHANACIMIENTO, CODIGOCIEANOMALIA1, CODIGO...
## dbl (59): NACIOEXTRANJERO, ENTIDADNACIMIENTO, MUNICIPIONACIMIENTO, EDAD, SE...
## time (2): HORANACIMIENTO, TIEMPOTRASLADO
##
## ℹ 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.
A partir del nacimientos, extrae sólo los datos de los
nacidos en enero, febrero y marzo de 2023.
Para cada uno de esos tres meses, calcula:
El número total de nacimientos,
El peso promedio al nacer,
El porcentaje de madres que hablan lengua indígena.
Guarda el resultado en un nuevo data frame llamado resumen_trimestre_1.
#Paso 1
# Filtrar los nacimientos a través de la variable FECHANACIMIENTO, donde solamente me voy a quedar con los nacimientos previos a 1 de abril de 2023, sin incluirlo
nacimientos_trimestre_1 <- nacimientos %>% # Se crea el objeto nacimientos_trimestre_1 a partir de el objeto nacimientos
filter(as.Date(FECHANACIMIENTO, format="%d/%m/%Y") < as.Date("2023-04-01")) # Se filtran los datos para quedarse sólo con los nacimientos previos a 1 de abril de 2023, as.Date es una función que convierte una cadena de texto a un objeto de fecha, y el formato "%d/%m/%Y" indica que la fecha está en formato día/mes/año
#Paso 2
# Tengo las fechas en formato diario, quiero agrupar cada una de las observaciones por mes, para eso creo una nueva variable llamada mes, que se obtiene a través de la función format, que extrae el año y el mes de la fecha de nacimiento
nacimientos_trimestre_1 <- nacimientos_trimestre_1 %>%
mutate(mes = format(as.Date(FECHANACIMIENTO, format="%d/%m/%Y"), "%Y-%m")) # Se crea la variable mes a través de la función mutate, que permite crear nuevas variables a partir de las existentes, y la función format extrae el año y el mes de la fecha de nacimiento)
#Paso 3
# Realizar la agrupación por medio de la variable mes, y calcular el número total de nacimientos, el peso promedio al nacer, y el porcentaje de madres que hablan lengua indígena
resumen_trimestre_1 <- nacimientos_trimestre_1 %>%
group_by(mes) %>% # Se agrupa el data frame por la variable mes, que tiene solamente 3 grupos (enero, febrero y marzo)
summarise(
total_nacimientos = n(), # Se calcula el número total de nacimientos con la función n()
peso_promedio = mean(PESO, na.rm = TRUE), # Se calcula el peso promedio al nacer con la función mean, y se omiten los valores NA con na.rm = TRUE
porcentaje_madres_lengua_indigena = mean(HABLALENGUAINDIGENA == 1, na.rm = TRUE) * 100 # Se calcula el porcentaje de madres que hablan lengua indígena con la función mean, comparando la variable HABLALENGUAINDIGENA con 1 (que indica que sí hablan lengua indígena), y se multiplica por 100 para obtener el porcentaje
)
Genera el data frame nacimientos_nl (sólo Nuevo León) y
crea una nueva variable rango_edad con estas
categorías:
“< 18”
“18–24”
“25–34”
“≥ 35”
Renombra las columnas clave a minúsculas y con guiones bajos.
Exporta el resultado con write_csv() a un archivo llamado nacimientos_nl_edad_por_rango.csv.
nacimientos_nl <- nacimientos%>%
filter(ENTIDADNACIMIENTO == "19") %>% # Se filtran los datos para quedarse sólo con los nacimientos en Nuevo León, comparando la variable ENTIDADNACIMIENTO con "Nuevo León"
mutate(rango_edad = case_when(EDAD < 18 ~ "< 18", # Se crea la variable rango_edad a través de la función case_when, que permite crear categorías a partir de condiciones, en este caso se crean las categorías "< 18", "18-24", "25-34", y "≥ 35" según el valor de la variable EDAD
EDAD >= 18 & EDAD <= 24 ~ "18-24",
EDAD >= 25 & EDAD <= 34 ~ "25-34",
EDAD >= 35 ~ "≥ 35")) %>%
rename(
edad = EDAD, # Se renombra la variable EDAD a edad
se_considera_indigena = SECONSIDERAINDIGENA, # Se renombra la variable SECONSIDERAINDIGENA a se_considera_indigena
habla_lengua_indigena = HABLALENGUAINDIGENA, # Se renombra la variable HABLALENGUAINDIGENA a habla_lengua_indigena
estado_conyugal = ESTADOCONYUGAL, # Se renombra la variable ESTADOCONYUGAL a estado_conyugal
entidad_residencia = ENTIDADRESIDENCIA, # Se renombra la variable ENTIDADRESIDENCIA a entidad_residencia
numero_embarazos = NUMEROEMBARAZOS, # Se renombra la variable NUMEROEMBARAZOS a numero_embarazos
hijos_sobrevivientes = HIJOSSOBREVIVIENTES, # Se renombra la variable HIJOSSOBREVIVIENTES a hijos_sobrevivientes
fecha_nacimiento = FECHANACIMIENTO, # Se renombra la variable FECHANACIMIENTO a fecha_nacimiento
sexo = SEXO, # Se renombra la variable SEXO a sexo
peso = PESO # Se renombra la variable PESO a peso
)
#Creare el archivo nacimientos_nl_edad_por_rango.csv
write_csv(nacimientos_nl, "nacimientos_nl_edad_por_rango.csv")
Con el data frame nacimientos, crea un gráfico de barras
(geom_col()) de total_personas por cada categoría de
estado_conyugal.
Después, usando el objeto original nacimientos, haz un scatterplot de EDAD vs. NUMEROEMBARAZOS, coloreando por estado_conyugal.
Sobre ese scatterplot, añade una línea de tendencia (geom_smooth) que muestre la tendencia de número de embarazos en función de la edad.
# Agrupar el conjunto de datos nacimientos, por medio de la variable ESTADOCONYUGAL
nacimientos_ESTADOCONYUGAL <- nacimientos %>%
group_by(ESTADOCONYUGAL) %>%
summarise(total_personas = n()) # Se calcula el número total de personas por cada ESTADOCONYUGAL
# Crea un grafico de barras con la función geom_col()
library(ggplot2)
grafico_barras <- ggplot(nacimientos_ESTADOCONYUGAL, aes(x = ESTADOCONYUGAL, y = total_personas)) + # Se crea el gráfico de barras con ggplot, donde se especifica el data frame nacimientos_ESTADOCONYUGAL, y se asigna la variable ESTADOCONYUGAL al eje x, y la variable total_personas al eje y
geom_col() + # Se añade la capa de barras con geom_col()
labs(title = "Total de personas por estado conyugal", x = "Estado conyugal", y = "Total de personas") # Se añaden los títulos y etiquetas a los ejes
grafico_barras # Se muestra el gráfico
#Scatterplot de EDAD vs NUMEROEMBARAZOS
graficaembarazos <- ggplot(nacimientos_nl, aes(x = edad, y = numero_embarazos, color = estado_conyugal)) + # Se crea el gráfico de dispersión con ggplot, donde se especifica el data frame nacimientos, y se asigna la variable EDAD al eje x, la variable NUMEROEMBARAZOS al eje y, y la variable ESTADOCONYUGAL al color
geom_point() + # Se añade la capa de puntos con geom_point()
geom_smooth(method = "loess", se = FALSE) + # Se añade la línea de tendencia con geom_smooth, utilizando el método loess para ajustar una curva suave a los datos, y se omite el intervalo de confianza con se = FALSE
labs(title = "Número de embarazos en función de la edad", x = "Edad", y = "Número de embarazos") # Se añaden los títulos y etiquetas a los ejes
graficaembarazos # Se muestra el gráfico
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation:
## colour.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?