Voici un petit morceau de code que j’ai écrit pour signaler les variables avec des valeurs manquantes dans un bloc de données. J’essaie de penser à une manière plus élégante de le faire, qui renvoie peut-être un data.frame, mais je suis coincé:
for (Var in names(airquality)) { missing 0) { print(c(Var,missing)) } }
Edit: je traite des data.frames avec des dizaines à des centaines de variables, il est donc essentiel de ne rapporter que les variables avec des valeurs manquantes.
Utilisez simplement sapply
> sapply(airquality, function(x) sum(is.na(x))) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0
Vous pouvez également utiliser apply
ou colSums
sur la masortingce créée par is.na()
> apply(is.na(airquality),2,sum) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0 > colSums(is.na(airquality)) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0
Plus succinct -: sum(is.na(x[1]))
C’est
x[1]
Regardez la première colonne
is.na()
true si c’est NA
sum()
TRUE
est 1
, FALSE
est 0
Nous pouvons utiliser map_df
avec purrr.
library(mice) library(purrr) # map_df with purrr map_df(airquality, function(x) sum(is.na(x))) # A tibble: 1 × 6 # Ozone Solar.R Wind Temp Month Day # # 1 37 7 0 0 0 0
Une autre alternative graphique – la fonction plot_missing
d’un excellent package DataExplorer
:
Docs souligne également que vous pouvez enregistrer ces résultats pour des parsings supplémentaires avec missing_data <- plot_missing(data)
.
summary(airquality)
vous donne déjà cette information
Les packages VIM offrent également de belles tracés de données manquantes pour data.frame
library("VIM") aggr(airquality)
Une autre fonction qui vous aiderait à regarder les données manquantes serait df_status de la bibliothèque funModeling
library(funModeling)
iris.2 est le jeu de données de l’iris avec quelques NA ajoutés. Vous pouvez le remplacer par votre jeu de données.
df_status(iris.2)
Cela vous donnera le nombre et le pourcentage d’AN dans chaque colonne.
Mon nouveau favori pour les données (pas trop larges) sont les méthodes d’un excellent package naniar . Non seulement vous obtenez des fréquences mais aussi des modèles de disparition:
library(naniar) library(UpSetR) riskfactors %>% as_shadow_upset() %>% upset()
Il est souvent utile de voir où se situent les manquements par rapport aux non-manquants, en traçant un diagramme de dispersion avec les manquants:
ggplot(airquality, aes(x = Ozone, y = Solar.R)) + geom_miss_point()
Ou pour les variables catégorielles:
gg_miss_fct(x = riskfactors, fct = marital)
Ces exemples proviennent d’une vignette de package qui répertorie d’autres visualisations intéressantes.
Une autre manière graphique et interactive consiste à utiliser la fonction heatmaply
bibliothèque heatmaply
:
library(heatmaply) heatmaply(is.na10(airquality), grid_gap = 1, showticklabels = c(T,F), k_col =3, k_row = 3, margins = c(55, 30), colors = c("grey80", "grey20"))
Ne fonctionnera probablement pas bien avec les grands ensembles de données.
Si vous voulez le faire pour une colonne particulière, vous pouvez également l’utiliser
length(which(is.na(airquality[1])==T))
Pour une solution graphique supplémentaire, le package vis_miss
propose vis_miss
.
library(visdat) vis_miss(airquality)
Très similaire à la sortie d’ Amelia
avec une petite différence de donner% s aux ratés.
Je pense que la bibliothèque Amelia fait un bon travail dans le traitement des données manquantes et comprend également une carte pour visualiser les lignes manquantes.
install.packages("Amelia") library(Amelia) missmap(airquality)
Vous pouvez également exécuter le code suivant pour retourner les valeurs logiques de na
row.has.na <- apply(training, 1, function(x){any(is.na(x))})