ProPython
Datascience avec Python - Prétraitement des données - Part. 2
15 Nov, 2021

Datascience avec Python - Prétraitement des données - Part. 2

Cet article est la suite des articles sur la datascience avec Python, n'hésitez pas à aller voir les autres si jamais ce n'est pas encore fait afin de tout comprendre.

Aujourd'hui, nous allons voir continuer à voir comment traiter des données brutes afin de les rendre exploitables par un modèle de machine learning. Ne perdons pas de temps, on va supposer que vous avez suivi l'article précédent et que vous avez déjà importé vos données.

Nettoyage des données

Le nettoyage des données consiste à éliminer les données inutiles, incorrectes, dupliquées, corrompues ou incomplètes d'un ensemble de données dans le cadre du processus de préparation des données, dans le but de créer des ensembles de données fiables, uniformes et standardisés. Pandas est une excellente bibliothèque pour manipuler les données et les analyser.

Il existe quatre façons d'effectuer le nettoyage des données :

  • Supprimer les valeurs manquante
  • Remplacer les valeurs manquantes
  • Remplacez chaque NaN par une valeur scalaire
  • Remplir les valeurs manquantes en avant ou en arrière.

Commençons par exclure les valeurs manquantes de notre dataset:

df.dropna()

Par défaut, l'axe est l'axe 0. Cela va donc exclure une ligne complète si jamais une de ses valeurs est manquante.

Ensuite, on va remplacer les NaN :

from numpy import NaN
df.replace({NaN:1.00})

On peut aussi remplacer les valeurs nulles par des scalaires :

df.fillna(10) # remplace les valeurs nulles par 10

Nous pouvons également effectuer les remplacements en utilisant la moyenne, la médiane ou le mode. Pour les données numériques, nous pouvons calculer leur moyenne ou leur médiane et utiliser le résultat pour remplacer les valeurs manquantes. Pour les données non numériques, nous pouvons calculer leur mode pour remplacer la valeur manquante.

df.age.fillna(age_mean, inplace=True)

Il y a d'autres méthodes de remplacement :

  • "Hot Deck" : Grâce à cela, nous pouvons remplacer la valeur manquante de l'observation par une valeur sélectionnée de manière aléatoire parmi toutes les observations de l'échantillon faisant référence aux variables ayant une valeur similaire.
  • Réechelonnage : Afin de mettre à l'échelle de manière uniforme les attributs avec des échelles différentes, la remise à l'échelle est une technique utile pour avoir tous les attributs à la même échelle en utilisant scikit-learn en utilisant la classe MinMaxScaler.

s_m = MinMaxScaler(feature_range=(0, 2))
rescaledX = s_m.fit_transform(X)
  • Binarisation des données : C'est un processus très utile qui est généralement utilisé pour manipuler nos données en utilisant un seuil de référence binaire en utilisant scikit-learn avec la classe Binarizer.
b_n = Binarizer(threshold = 1.0).fit(X)
b_X = b_n.transform(X)
  • Régression : Afin de préserver les relations entre les caractéristiques, nous pouvons utiliser le remplacement par régression, une technique qui consiste à ajuster un modèle de régression sur une caractéristique comportant des données manquantes, puis à utiliser ce modèle pour prédire les valeurs qui seront utilisées pour remplacer les valeurs manquantes.
  • Régression stochastique : Dans cette technique, afin de reproduire la corrélation entre les caractéristiques et les étiquettes, nous ajoutons une variation aléatoire à la valeur prédite.

Modification des données

Cela consiste à augmenter la quantité et la diversité d'un ensemble d'entraînement en appliquant des transformations aléatoires.

C'est utile afin d'entraîner un modèle sur des données qui ne sont pas toutes similaires.

Cela fonctionne particulièrement bien sur les images, c'est ce que nous allons voir maintenant.

Il faut installer Tensorflow pour commencer :

pip install tensorflow

Ensuite on peut importer tensorflow :

import tensorflow as tf

Décalages en largeur et en hauteur

generator = tf.keras.preprocessing.image.ImageDataGenerator(
    
    width_shift_range=[-90,-40,0,40,90],
    height_shift_range=[-40,0,40]
)
x, y = next(generator.flow_from_directory('images', batch_size=1))
plt.imshow(x[0].astype('uint8'));

Luminosité

generator = tf.keras.preprocessing.image.ImageDataGenerator(
    
    brightness_range=(0.8,4.2)
)
x, y = next(generator.flow_from_directory('images', batch_size=1))
plt.imshow(x[0].astype('uint8'));

Cisaillement

generator = tf.keras.preprocessing.image.ImageDataGenerator(
    
    shear_range=46
)
x, y = next(generator.flow_from_directory('images', batch_size=1))
plt.imshow(x[0].astype('uint8'));

Zoom

generator = tf.keras.preprocessing.image.ImageDataGenerator(
    
    zoom_range=[0.2,3.0]
)
x, y = next(generator.flow_from_directory('images', batch_size=1))
plt.imshow(x[0].astype('uint8'));

Décalage de canal

generator = tf.keras.preprocessing.image.ImageDataGenerator(
    
    channel_shift_range=180
)
x, y = next(generator.flow_from_directory('images', batch_size=1))
plt.imshow(x[0].astype('uint8'));

Flips

generator = tf.keras.preprocessing.image.ImageDataGenerator(
    
    horizontal_flip=True,
    vertical_flip=True
)
x, y = next(generator.flow_from_directory('images', batch_size=1))
plt.imshow(x[0].astype('uint8'));

Il y a beaucoup d'autres possibilités, mais contentons nous uniquement de celles ci pour l'instant.

Le mot de la fin

Pfiou, nous en avons fini avec le prétraitement des données. Dans le prochain article nous pourrons enfin nous attaquer aux choses sérieuses avec la régression !

Laisser un commentaire

Premium - 15€/mois

L'accès à des articles inédits, à une multitude de ressources, à de nouveaux projets, mais également à des vidéos explicatives, découvrez ici pourquoi passer premium.

Articles liés

Catégories

Ressources

Retrouvez une collection de ressources (des scripts, des fiches résumé, des images...) liées aux articles du blog ou au Python.
Voir

Contact

contact@propython.fr
Se connecter pour envoyer un message directement depuis le site.

Navigation

AccueilSe connecterCréer un compteRessourcesPremium

Catégories

Pages légales

Politique de confidentialitéMentions légalesConditions générales de vente