Los valores perdidos en la ciencia de datos surgen cuando falta una observación en una columna de un marco de datos o cuando hay un valor de carácter en lugar de un valor numérico. Los valores faltantes deben eliminarse o reemplazarse para llegar a una conclusión correcta a partir de los datos.
En este tutorial, aprenderemos cómo lidiar con los valores perdidos con la biblioteca dplyr. La biblioteca dplyr es parte de un ecosistema para el análisis de datos.
En este tutorial, aprenderá
mutar ()
El cuarto verbo de la biblioteca dplyr es útil para crear nuevas variables o cambiar valores de variables existentes.
Procederemos en dos partes. Aprenderemos a:
- excluir los valores perdidos de un marco de datos
- calcular los valores perdidos con la media y la mediana
El verbo mutate () es muy fácil de usar. Podemos crear una nueva variable de acuerdo con esta sintaxis:
mutate(df, name_variable_1 = condition, ...) arguments: -df: Data frame used to create a new variable -name_variable_1: Name and the formula to create the new variable -...: No limit constraint. Possibility to create more than one variable inside mutate()
Exclusión de valores perdidos (NA)
El método na.omit () de la biblioteca dplyr es una forma sencilla de excluir las observaciones que faltan. Es fácil omitir todas las Naciones Unidas de los datos, pero eso no significa que sea la solución más elegante. Durante el análisis, tiene sentido utilizar diferentes métodos para lidiar con los valores perdidos.
Para abordar el problema de las observaciones faltantes, utilizaremos el conjunto de datos titánico. En este conjunto de datos, tenemos acceso a la información de los pasajeros que estaban a bordo durante la tragedia. Hay muchas Naciones Unidas en este conjunto de datos que deben ser atendidas.
Cargaremos el archivo csv de Internet y luego revisaremos las columnas que tienen NA. Para restaurar las columnas con datos faltantes, podemos usar el siguiente código:
Carguemos los datos y verifiquemos los datos que faltan.
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv" df_titanic <- read.csv(PATH, sep = ",") # Return the column names containing missing observations list_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ] list_na
Producción:
## [1] "age" "fare"
Seo
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Se proporciona el nombre de las columnas que no contienen datos.
Faltan valores para la edad y la tarifa de las columnas.
Podemos liberarlos con na.omit ().
library(dplyr) # Exclude the missing observations df_titanic_drop <-df_titanic %>% na.omit() dim(df_titanic_drop)
Producción:
## [1] 1045 13
El nuevo conjunto de datos contiene 1045 capas en comparación con 1309 con el conjunto de datos original.
Faltan datos para Media y Mediana
Podríamos atribuir los valores perdidos (población) a la mediana o al promedio. Es una buena práctica crear dos variables separadas para la media y la mediana. Una vez creadas, podemos reemplazar las variables recién formadas con los valores faltantes.
Usaremos el método de aplicación para calcular la media de la columna con NA. Veamos un ejemplo
Paso 1) Anteriormente en el tutorial, almacenamos el nombre de las columnas con los valores faltantes en la lista llamada list_na. Usaremos esta lista
Paso 2) Ahora necesitamos calcular la media con el argumento na.rm = TRUE. Este argumento es obligatorio porque a las columnas les faltan datos y esto le dice a R que las ignore.
# Create mean average_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na], 2, mean, na.rm = TRUE) average_missing
Explicación del Código:
Capturamos 4 argumentos en el método de aplicación.
- df: df_titanic[,colnames(df_titanic) %in% list_na]. Este código devolverá el nombre de las columnas del objeto list_na (es decir, «edad» y «tarifa»)
- 2: calcula la función en las columnas
- promedio: calcula la media
- na.rm = TRUE: Ignora los valores faltantes
Producción:
## age fare ## 29.88113 33.29548
Logramos crear la media de las columnas donde faltaban observaciones. Ambos valores se utilizarán para reemplazar las observaciones faltantes.
Paso 3) Valores sustitutivos de la ONU
El verbo mutar de la biblioteca dplyr es útil para crear nuevas variables. No necesitamos cambiar la columna original para poder crear una nueva variable sin la UN. mutate es fácil de usar, solo seleccionamos un nombre de variable y definimos cómo crear esta variable. Aquí está el código completo
# Create a new variable with the mean and median df_titanic_replace <- df_titanic %>% mutate(replace_mean_age = ifelse(is.na(age), average_missing[1], age), replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))
Explicación del Código:
Creamos dos variables, replace_mean_age y replace_mean_fare de la siguiente manera:
- replace_mean_age = ifelse (is.na (age), average_missing[1], edad)
- replace_mean_fare = ifelse (is.na (tarifa), average_missing[2], tarifa)
Si a la edad de la columna le faltan valores, reemplácelo con el primer elemento de la media (edad media), mantenga los valores originales. Misma lógica sobre la tarifa
sum(is.na(df_titanic_replace$age))
Producción:
## [1] 263
Hacer el reemplazo
sum(is.na(df_titanic_replace$replace_mean_age))
Producción:
## [1] 0
A la edad de la columna original le faltan 263 valores y la variable recién creada ha sido reemplazada por la variable de edad media.
Paso 4) Podemos reemplazar las observaciones que faltan con la mediana.
median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na], 2, median, na.rm = TRUE) df_titanic_replace <- df_titanic %>% mutate(replace_median_age = ifelse(is.na(age), median_missing[1], age), replace_median_fare = ifelse(is.na(fare), median_missing[2], fare)) head(df_titanic_replace)
Producción:
Paso 5) Un conjunto de datos grande puede tener muchos valores perdidos y el método anterior puede ser muy difícil. Podemos ejecutar todos los pasos anteriores en una línea de código usando el método sapply (). Aunque no conoceríamos los valles de los medios y la mediana.
sapply no crea un marco de datos, por lo que podemos plegar la función sapply () dentro de data.frame () para crear un objeto de marco de datos.
# Quick code to replace missing values with the mean df_titanic_impute_mean < -data.frame( sapply( df_titanic, function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x)))
Resumen
Tenemos tres métodos para lidiar con los valores perdidos:
- Omita todas las observaciones que faltan
- Imputar al promedio
- Imputar con la mediana
La siguiente tabla resume cómo eliminar todas las observaciones faltantes
Biblioteca | Propósito | Código |
---|---|---|
bonn | Enumere las observaciones que faltan | colnames(df)[apply(df, 2, anyNA)] |
dplyr | Eliminar todos los valores faltantes | na.omit(df) |
La entrada con una media o mediana se puede realizar de dos formas
Método | Detalles | Ventajas | Desventajas |
---|---|---|---|
Paso a paso para realizar la solicitud | Verifique las columnas con el cálculo de la media, media / mediana, almacene el valor, reemplace mutate () | Conoces el valor de un recurso / mediana | Más tiempo de ejecución. Puede ser lento con un gran conjunto de datos |
Manera rápida de aplicar | Utilice sapply () y data.frame () para buscar y reemplazar automáticamente media / mediana | Código corto y rápido | No conozco los valores de entrada |