Transformation et Préparation des Données
La transformation des données conditionne la qualité de vos analyses et la performance de vos modèles. Ce chapitre vous guide à travers les méthodes incontournables de manipulation, de nettoyage et d’enrichissement des jeux de données, pour les rendre pleinement exploitables.
Vous apprendrez à structurer vos données de manière efficace, à en extraire les informations pertinentes, et à les préparer pour des usages avancés en machine learning, visualisation ou modélisation statistique.
Ce que vous allez apprendre dans ce chapitre :
Filtrage des données
- Filtrer avec
query()
: Utilisezquery()
pour filtrer les données d’un DataFrame selon des conditions logiques en utilisant une syntaxe de requête basée sur des chaînes de caractères. - Filtrer avec
loc[]
(par étiquette) : Utilisezloc[]
pour filtrer des lignes et des colonnes par leurs étiquettes ou noms dans un DataFrame. - Filtrer avec
iloc[]
(par position) : Utiliseziloc[]
pour filtrer des lignes et des colonnes en utilisant leurs positions indexées dans le DataFrame (par position entière).
Tri et classement
- Trier les valeurs d’une colonne (
sort_values(by='colonne')
) : Utilisezsort_values()
pour trier les valeurs d’une colonne spécifique dans un DataFrame. - Trier les valeurs par ordre décroissant (
sort_values(by='colonne', ascending=False)
) : Utilisez l’argumentascending=False
pour trier les valeurs par ordre décroissant. - Trier par plusieurs colonnes (
sort_values(by=['colonne1', 'colonne2'])
) : Utilisezsort_values()
pour trier un DataFrame par plusieurs colonnes, dans l’ordre que vous souhaitez. - Gérer les valeurs manquantes lors du tri (
sort_values(by='colonne', na_position='first'/'last')
) : Utilisezna_position='first'
ouna_position='last'
pour décider où les valeurs manquantes doivent être placées lors du tri (au début ou à la fin). - Trier un DataFrame en fonction de l’index (
sort_index()
) : Utilisezsort_index()
pour trier un DataFrame selon son index, que ce soit par ligne ou par colonne.
Regroupement et agrégation
- Regrouper les données par une colonne (
groupby('colonne')
) : Utilisezgroupby()
pour regrouper les données par une colonne spécifique, permettant ainsi de travailler sur des sous-ensembles de données. - Appliquer une fonction d’agrégation sur un groupe : Après avoir effectué un
groupby()
, appliquez une fonction d’agrégation commesum()
,mean()
, oucount()
sur chaque groupe pour résumer les données. - Regrouper par plusieurs colonnes : Utilisez
groupby(['colonne1', 'colonne2'])
pour effectuer un regroupement selon plusieurs colonnes, ce qui permet une analyse plus détaillée des relations entre différentes variables. - Accéder aux groupes individuellement : Vous pouvez accéder à un groupe spécifique en utilisant
get_group()
sur un objetGroupBy
pour analyser un groupe particulier après le regroupement. - Transformer les données après regroupement : Utilisez
transform()
pour appliquer une fonction à chaque groupe et retourner un DataFrame ayant la même forme que l’original. - Créer un tableau croisé dynamique : Utilisez
pivot_table()
pour créer des tableaux croisés dynamiques qui résument les données en fonction de plusieurs variables, avec des options d’agrégation personnalisées. - Gérer les valeurs manquantes dans un
pivot_table()
: Utilisez l’argumentfill_value
danspivot_table()
pour remplir les cellules vides (valeurs manquantes) avec une valeur par défaut, comme 0 ou la moyenne.
Création de nouvelles colonnes
- Créer une nouvelle colonne avec une opération simple : Ajoutez une nouvelle colonne en effectuant une opération simple, comme une somme, une soustraction ou une multiplication entre des colonnes existantes.
- Appliquer une transformation avec
apply()
sur une colonne : Utilisez la méthodeapply()
pour appliquer une fonction personnalisée à chaque valeur d’une colonne spécifique. - Appliquer
apply()
sur plusieurs colonnes : Utilisezapply()
pour appliquer une fonction sur plusieurs colonnes à la fois, en passant une ligne entière ou des colonnes comme argument. - Utiliser
map()
pour transformer une colonne : La méthodemap()
permet de transformer les valeurs d’une colonne en les remplaçant selon un dictionnaire, une fonction ou une série. - Utiliser
lambda
pour créer une nouvelle colonne : Créez une nouvelle colonne en appliquant une fonction anonymelambda
à une ou plusieurs colonnes. - Créer une colonne conditionnelle avec
np.where()
: Utiliseznp.where()
pour créer une colonne avec des valeurs conditionnelles, en fonction de critères logiques sur d’autres colonnes. - Créer une colonne conditionnelle avec
apply()
etlambda
: Créez une colonne conditionnelle en utilisantapply()
et une fonctionlambda
qui prend une décision basée sur des conditions spécifiques.
Encodage des variables catégorielles
- Encodage avec
LabelEncoder
: UtilisezLabelEncoder
de scikit-learn pour transformer les catégories en valeurs numériques, en attribuant un label unique à chaque catégorie. - Encodage avec
map()
pour un mapping manuel : Utilisezmap()
pour remplacer les catégories par des valeurs numériques ou des chaînes en définissant un mapping personnalisé. - Encodage avec
pd.Categorical().codes
: Utilisezpd.Categorical().codes
pour encoder les variables catégorielles en utilisant les codes numériques associés aux catégories. - Encodage One-Hot avec
pd.get_dummies()
: Appliquez l’encodage One-Hot avecpd.get_dummies()
, qui crée une colonne binaire pour chaque catégorie d’une variable catégorielle. - Encodage One-Hot avec
OneHotEncoder
: UtilisezOneHotEncoder
de scikit-learn pour effectuer un encodage One-Hot sur une ou plusieurs colonnes de variables catégorielles. - Encodage des variables ordinales avec
OrdinalEncoder
: AppliquezOrdinalEncoder
de scikit-learn pour encoder des variables ordinales, en conservant l’ordre des catégories tout en les transformant en valeurs numériques.
Standardisation et normalisation
- Différence entre standardisation et normalisation : La standardisation transforme les données pour qu’elles aient une moyenne nulle et un écart-type de 1, tandis que la normalisation met les données dans une plage de valeurs spécifiques, souvent entre 0 et 1.
- Normalisation des données avec
MinMaxScaler
: UtilisezMinMaxScaler
de scikit-learn pour normaliser les données dans une plage définie, généralement entre 0 et 1. - Standardisation des données avec
StandardScaler
: AppliquezStandardScaler
de scikit-learn pour standardiser les données, de manière à ce que chaque caractéristique ait une moyenne nulle et un écart-type égal à 1. - Appliquer une transformation uniquement sur certaines colonnes : Utilisez des sélecteurs de colonnes pour appliquer une normalisation ou une standardisation uniquement sur les colonnes spécifiques d’un DataFrame.
- Inverser la transformation pour retrouver les valeurs originales : Utilisez les méthodes
inverse_transform()
deMinMaxScaler
ouStandardScaler
pour inverser la transformation et retrouver les valeurs originales. - Standardisation et normalisation avec
Pipeline
: Créez unPipeline
avec scikit-learn pour intégrer la standardisation ou la normalisation dans un flux de prétraitement d’un modèle, en enchaînant plusieurs étapes. - Utilisation de
RobustScaler
pour les données avec outliers : UtilisezRobustScaler
de scikit-learn pour appliquer une normalisation robuste aux outliers, en réduisant leur influence sur la transformation.
Feature Engineering
- Gestion des valeurs inconnues avec
handle_unknown
dansOneHotEncoder
: Utilisez l’optionhandle_unknown
dansOneHotEncoder
de scikit-learn pour gérer les valeurs inconnues dans les données lors de l’encodage One-Hot. - Extraction de l’année, du mois, du jour à partir d’une date : Utilisez les fonctions de pandas pour extraire des informations spécifiques, comme l’année, le mois et le jour à partir de colonnes de type date.
- Extraction des caractéristiques textuelles (longueur, présence de mots-clés, etc.) : Appliquez des méthodes de traitement de texte pour extraire des informations comme la longueur des chaînes ou la présence de certains mots-clés dans des colonnes textuelles.
- Création de variables binaires basées sur une condition : Créez des variables binaires en fonction de conditions logiques, comme si une valeur dépasse un certain seuil ou si une condition particulière est remplie.
- Utilisation de
PolynomialFeatures
pour générer des interactions : Générer des interactions entre les variables avecPolynomialFeatures
de scikit-learn pour augmenter la complexité du modèle, en particulier pour les modèles linéaires. - Discrétisation des valeurs continues (
pd.cut
,pd.qcut
) : Divisez une variable continue en intervalles discrets avec les fonctionspd.cut()
oupd.qcut()
de pandas. - Encodage des variables temporelles (sinus et cosinus pour les cycles) : Transformez les variables temporelles comme les heures, les jours ou les mois en utilisant les fonctions sinus et cosinus pour capturer les effets cycliques dans les données temporelles.
- Feature Selection (sélection des variables pertinentes) : Appliquez des méthodes comme l’importance des caractéristiques, les tests statistiques ou les algorithmes d’apprentissage automatique pour sélectionner les variables les plus pertinentes pour votre modèle.
Transformation de texte
- Tokenization avec
split()
(approche basique) : Divisez un texte en mots (tokens) à l’aide de la méthode de chaînesplit()
, une approche simple pour séparer les mots par des espaces. - Tokenization avec
nltk.word_tokenize()
: Utilisez la fonctionword_tokenize()
de la bibliothèquenltk
pour effectuer une tokenisation plus sophistiquée qui gère les ponctuations et les abréviations. - Tokenization avec
spacy
: Appliquez le modèle de tokenisation despacy
, qui permet une tokenisation rapide et efficace avec la prise en compte du contexte linguistique. - Stemming avec
nltk.PorterStemmer
: Appliquez le stemmer de Porter denltk
pour réduire les mots à leur racine, utile pour le traitement des textes avant l’analyse. - Stemming avec
nltk.SnowballStemmer
: Utilisez le Snowball Stemmer denltk
pour un stemming plus efficace sur plusieurs langues, comme l’anglais, le français, et d’autres. - Lemmatization avec
nltk.WordNetLemmatizer
: Appliquez la lemmatisation avec leWordNetLemmatizer
denltk
pour réduire les mots à leur forme de base en tenant compte du contexte grammatical. - Lemmatization avec
spacy
: Utilisez la lemmatisation dansspacy
, qui est rapide et précise, pour convertir les mots en leur forme canonique (par exemple, « running » devient « run »). - Suppression des stopwords avec
nltk
: Retirez les mots fréquents et peu significatifs, comme « le », « et », « de », en utilisant la liste de stopwords intégrée denltk
. - Vectorisation avec
CountVectorizer
(Bag of Words) : Convertissez un texte en une matrice de comptage des mots avecCountVectorizer
de scikit-learn, une méthode populaire pour le modèle Bag of Words. - Vectorisation avec
TfidfVectorizer
(TF-IDF) : AppliquezTfidfVectorizer
de scikit-learn pour transformer un texte en une matrice de fréquences, en tenant compte de l’importance relative des mots dans un corpus avec la méthode TF-IDF.
💡 Une transformation efficace des données peut faire toute la différence dans la qualité de vos analyses et la précision de vos modèles.