Data pre-processing avec R [Mode Zombie]

D
Formation Data SEO Labs

« Tu sais ce qui m’est arrivé ? Ils étaient des milliers… »
Nikolaï Belinski, mode Zombie de Call of Duty Black Ops

S’il avait pris le temps de se poser dans un coin et de sortir le Macbook Pro rangé à côté de son étui à fusil d’assaut automatique pour lancer R Studio, celui qui se dit « plus fort qu’une muraille » aurait probablement pu éviter de se faire croquer par un zombie et ainsi de mourir pour la 14ème fois.

zombies
En cas d’attaque de zombies, il est préférable d’avoir quelques bases de R

Comment ?

En utilisant ce qu’il a appris dans ses cours de machine learning pour créer un modèle de prédiction, évidemment. Pour re-commencer la partie sur de bonnes bases voici le conseil que je lui prodiguerais :

– Nikolaï, il te faut créer un jeu de données pour entrainer le modèle
– Que mettre dans mon jeu de données, ô Grand Rémi qui a déjà atteint la manche 44 à Kino der Toten ?
– Николай Белинский, le plus d’infos possible sur chaque zombie rencontré tu dois récupérer : âge estimé, poids estimé, taille estimée, nombre de membres restants, sexe, lieu de rencontre, armes, couleur des yeux, etc… et surtout s’il a tué quelqu’un (tu noteras 1 pour oui et 0 pour non). Cette variable (« Tué quelqu’un ») sera notre variable à prédire. Nous allons entrainer notre modèle à détecter ce qui rend le zombie particulièrement menaçant et à chaque fois que tu rencontreras un nouveau zombie, tu seras capable de prédire le risque qu’il te tue ou non.
– ♫ On boit de la Vodka ce soir ♫ !

Compte tenu des conditions dans lesquelles les données vont être récupérées par Nikolaï (attaque de zombies), le dataset comportera probablement quelques soucis : erreur encodage. cellules vides, données de grandeur différentes, etc.

Le « dataset imparfait » est monnaie courante dans la plupart (la totalité ?) des projets data science, et il n y a vraiment pas besoin de travailler sur des prédictions d’attaques de zombies pour s’en rendre compte.

Une fois le « dataset » constitué, une phase de « data pre-processing » s’impose donc systématiquement. Cette préparation des données est indispensable pour tirer le meilleur des algorithmes de machine learning.

Dans cet article, vous allez découvrir comment transformer les données avec le langage R dont je vous avais déjà parlé dans l’article « utiliser le langage R pour le SEO« . Je vous donne ici du code à copier-coller et à utiliser directement dans R Studio. Notez 2 choses : Premièrement, il existe d’autres méthodes que celles que je vais vous présenter. Ensuite, sachez que vous n’aurez pas toujours besoin de TOUT faire, à vous donc de picorer cet article au besoin comme un corbeau mange un cadavre ambulant.

Importer les données

#Ouvrir le dataset
dataset <- read.csv('my_dataset.csv',na.strings=c(""))

#Connaitre le nombre de valeurs différentes dans chaque colonnes
sapply(dataset, function(x) length(unique(x)))

Nous avons ici utilisé le paramètre na.strings qui nous permet de transformer les valeurs manquantes en NA (pour « Not Available »). Cela sera très utile pour la suite.

Gérer les valeurs manquantes

La plupart des « vrais » datasets que vous serez amené à utiliser comportent des cellules vides, des données manquantes ou corrompues et c’est précisément de ces données dont nous allons nous occuper maintenant.

Commençons par regarder le volume de données manquantes. Pour cela nous allons utiliser la fonction sapply qui permet d’appliquer la fonction sum() à chaque colonne du dataset.

#Compter le nombre de valeurs manquantes dans chacune des colonnes
sapply(dataset,function(x) sum(is.na(x)))

Voici une astuce pour obtenir une visualisation de la proportion de valeurs manquantes de chaque colonne.
Nous utilisons le package R « Amelia ».

#Afficher un graph avec les valeurs manquantes vs les valeurs observées
library(Amelia)
missmap(dataset, main = "Missing values vs observed")
missing values r na
Utilisation du package R Amelia pour afficher les valeurs manquantes vs les valeurs observées

Passons maintenant à la gestion des données manquantes (à la main !).

Vous avez repéré qu’une colonne avait un taux de valeurs manquantes trop important ? Il vaut peut-être mieux l’exclure de votre analyse.

#Supprimer une colonne de votre dataset
dataset$Colonne <- NULL

Vous avez repéré qu’une colonne avait quelques valeurs manquantes mais vous souhaitez l’utiliser quand même ?
L’une des solutions parmi les plus utilisées est de remplacer les valeurs vides par la moyenne ou la médiane de la colonne.

#Remplacer les valeurs manquantes par la moyenne de la colonne
dataset$Colonne[is.na(dataset$Colonne)] <- mean(dataset$Colonne,na.rm=T)

Transformer une variable catégorique en Factor

Si la variable a prédire par votre modèle est une variable catégorique, elle doit être encodée en factor.

#Vérifier qu'une variable catégorique est encodée en Factor
is.factor(dataset$Colonne)

#Si la réponse est FALSE, il faut l'encoder vous-même :
dataset$Colonne = factor(dataset$Colonne, levels = c(0, 1))
#N'hésitez pas à re-vérifier l'encodage
is.factor(dataset$Colonne)

Encoder une variable catégorique avec le One Hot Encoder

Le One hot encoding est une représentation binaire d’une variable catégorique.
Imaginez par exemple que votre dataset comporte une variable (= une colonne) $Gender avec pour valeur « Men » ou « Female ».
Le one hot encoding va transformer cette colonne en plusieurs colonnes correspondant chacune à l’un des 2 genres pré-cités, et ayant pour valeur des 0 et des 1.

Le one hot encoding avec r

Voici le code pour faire du one hot encoding avec R :

#On crée un nouvelle colonne pour chaque valeur de la variable catégorique
for(unique_value in unique(dataset$Gender)){
  dataset[paste("Gender", unique_value, sep = ".")] <- ifelse(dataset$Gender == unique_value, 1, 0)
}

#Ne pas oublier de supprimer une colonne générée par le One Hot Encoding
dataset$Gender.Male <- NULL

 

Features scaling

Avec le « features scaling » (= mise à l’échelle des variables) nous allons mettre les différentes variables sur le même ordre de grandeur pour améliorer les performances du modèle.

La fonction scale() de R
#Mettre les colonnes 1 et 2 à la même échelle
dataset[,1:2] = scale(dataset[,1:2])

J’espère que ce nouvel article sur R vous a plu ! Encore une fois j’insiste sur le fait que ce n’est pas nécessairement une recette à suivre mais plus une liste d’actions possibles pour préparer vos jeux de données.

Je mettrai l’article à jour de temps en temps avec de nouveaux scripts R pour le data pre-processing. Pour être au courant des prochaines mise à jour, n’hésitez pas à me suivre sur Twitter !

A propos de l'auteur

Rémi Bacha

Passionné de Search Marketing, Web Analyse et Data Science.

Ajouter un commentaire

Articles récents

Rémi Bacha

Passionné de Search Marketing, Web Analyse et Data Science.

Restons en contact

RDV sur les réseaux sociaux pour discuter et être informé de mes prochains articles :