Fusion et Manipulation Avancée
À mesure que les données se complexifient, leur fusion et leur réorganisation deviennent indispensables pour produire des analyses pertinentes. Ce chapitre vous plonge dans des techniques avancées de transformation, de gestion de structures complexes et d’adaptation aux contraintes des séries temporelles et des jeux de données déséquilibrés.
Vous apprendrez à combiner, restructurer et adapter vos datasets avec finesse pour répondre aux besoins spécifiques de vos analyses ou de vos modèles.
Ce que vous allez apprendre dans ce chapitre :
Concaténation et fusion de datasets
- Concaténation verticale de DataFrames : Utilisez la fonction
concat()
de pandas pour empiler des DataFrames sur les lignes, en ajoutant les nouvelles lignes à la fin de l’existant. - Concaténation horizontale de DataFrames : Utilisez
concat()
avec l’argumentaxis=1
pour empiler des DataFrames côte à côte, ajoutant des colonnes aux DataFrames existants. - Fusion de DataFrames avec
merge()
sur une colonne commune : Fusionnez deux DataFrames sur une colonne partagée avec la fonctionmerge()
, similaire à une jointure SQL. - Fusion sur plusieurs colonnes avec
merge()
: Fusionnez plusieurs DataFrames en utilisant plusieurs colonnes clés de correspondance dansmerge()
, en spécifiant une liste de colonnes à fusionner. - Utilisation de
join()
pour fusionner sur l’index : Utilisez la méthodejoin()
pour fusionner des DataFrames en fonction de leur index, pratique lorsque l’index est la clé de jointure. - Gérer les doublons après une fusion (
drop_duplicates()
) : Éliminez les doublons résultant de la fusion avec la fonctiondrop_duplicates()
, afin de garder uniquement les lignes uniques dans le DataFrame fusionné. - Remplissage des valeurs manquantes après une fusion (
fillna()
) : Utilisez la méthodefillna()
pour remplir les valeurs manquantes (NaN) après une fusion, en spécifiant des valeurs ou des méthodes de remplacement adaptées.
Transposition et pivotement
- Transposer un DataFrame (
.T
) : Utilisez la méthode.T
pour transposer un DataFrame, c’est-à-dire échanger les lignes et les colonnes. - Passer d’un format large à un format long avec
melt()
: La fonctionmelt()
permet de convertir un DataFrame d’un format large (avec de nombreuses colonnes) en un format long (avec des valeurs de colonnes sous forme de lignes). - Utiliser
pivot_table()
pour l’agrégation des données : Créez une table pivot avecpivot_table()
, qui permet d’agréger des données selon des critères spécifiques en utilisant une fonction d’agrégation comme la somme ou la moyenne. - Réinitialiser l’index après un pivotement (
reset_index()
) : Utilisezreset_index()
pour réinitialiser l’index d’un DataFrame après un pivotement, ce qui peut être nécessaire pour restaurer une structure de données plus classique. - Convertir plusieurs colonnes en une seule avec
melt()
:melt()
permet de convertir plusieurs colonnes d’un DataFrame en une seule colonne, en divisant les valeurs dans des lignes distinctes, ce qui est utile pour certaines analyses ou visualisations. - Gérer les valeurs manquantes après un pivotement (
fillna()
) : Après un pivotement, il est courant de rencontrer des valeurs manquantes. Utilisezfillna()
pour remplacer ces valeurs manquantes par une valeur spécifiée ou selon une méthode de remplissage (comme la moyenne ou la méthode de propagation).
Manipulation des séries temporelles
- Conversion en format datetime : Utilisez
pd.to_datetime()
pour convertir une colonne ou une série en format datetime afin d’effectuer des opérations de manipulation temporelle. - Indexer un DataFrame par une colonne de dates : Pour manipuler facilement des séries temporelles, vous pouvez définir une colonne de dates comme index avec
set_index()
pour effectuer des opérations temporelles plus intuitives. - Décalage des valeurs avec
shift()
: Utilisez la méthodeshift()
pour décaler les valeurs d’un DataFrame ou d’une série d’une période spécifiée, utile pour des analyses sur les variations temporelles. - Appliquer une fenêtre glissante avec
rolling()
: La méthoderolling()
permet d’appliquer une fenêtre glissante sur une série temporelle pour effectuer des calculs sur des sous-ensembles de données successifs. - Fenêtre glissante avec des fonctions d’agrégation (moyenne, somme, etc.) : Appliquez des fonctions d’agrégation comme la moyenne, la somme, la médiane, etc., sur des fenêtres glissantes pour obtenir des statistiques calculées sur des périodes données.
- Fenêtre glissante avec une taille variable (dynamique) : Il est possible d’ajuster dynamiquement la taille de la fenêtre glissante en fonction des critères définis, permettant une analyse plus flexible des séries temporelles.
- Appliquer une fonction personnalisée sur une fenêtre glissante avec
apply()
: Utilisezapply()
pour appliquer une fonction personnalisée à chaque fenêtre glissante, offrant une grande flexibilité pour effectuer des calculs complexes. - Utiliser des méthodes de resampling pour regrouper les données temporelles : Avec
resample()
, vous pouvez regrouper les données temporelles selon une nouvelle fréquence (par exemple, quotidienne, mensuelle), et effectuer des agrégations sur les nouvelles périodes. - Gérer les valeurs manquantes avec des séries temporelles : Lors de la manipulation de séries temporelles, il est important de gérer les valeurs manquantes, que ce soit en les remplissant avec des valeurs spécifiques (par exemple,
fillna()
) ou en les interpolant selon un modèle temporel.
Regroupement multi-index
- Création d’un MultiIndex avec
pd.MultiIndex.from_tuples()
: Utilisez cette fonction pour créer un MultiIndex à partir de tuples, ce qui permet d’organiser vos données selon plusieurs niveaux d’index. - Définir un MultiIndex sur un DataFrame avec
set_index()
: Pour définir un MultiIndex sur un DataFrame, utilisezset_index()
en spécifiant les colonnes que vous souhaitez utiliser comme niveaux d’index. - Accéder aux éléments d’un MultiIndex avec
loc[]
: Une fois le MultiIndex défini, vous pouvez accéder aux données en utilisantloc[]
pour spécifier des indices multiples dans votre DataFrame. - Utilisation de
stack()
pour empiler les colonnes en lignes :stack()
permet de transformer les colonnes d’un DataFrame en une nouvelle hiérarchie de lignes, facilitant ainsi la manipulation des données avec plusieurs niveaux d’index. - Utilisation de
unstack()
pour transformer un index en colonnes :unstack()
est l’opposé destack()
; il permet de convertir un niveau d’un MultiIndex en colonnes, facilitant ainsi l’analyse des données. - Fusionner et regrouper des DataFrames avec MultiIndex : Vous pouvez regrouper et fusionner plusieurs DataFrames qui ont un MultiIndex, en utilisant des méthodes comme
merge()
etgroupby()
pour effectuer des agrégations ou des jointures complexes. - Manipulation des niveaux d’un MultiIndex : Vous pouvez manipuler les niveaux d’un MultiIndex, notamment en les réorganisant, en les renommant ou en les supprimant, pour une gestion plus flexible des données multidimensionnelles.
- Réinitialiser un MultiIndex avec
reset_index()
: Si vous souhaitez aplatir un MultiIndex et revenir à un DataFrame avec un index simple, utilisezreset_index()
pour réinitialiser les niveaux d’index. - Accéder à un niveau spécifique d’un MultiIndex avec
xs
: Utilisez la méthodexs()
pour accéder à un niveau spécifique d’un MultiIndex, ce qui permet d’extraire une sous-partie de vos données selon un des niveaux d’index. - Utilisation de
sort_index()
pour trier un DataFrame avec MultiIndex : Le tri d’un DataFrame avec un MultiIndex peut être effectué avecsort_index()
, permettant de trier les données par niveau d’index ou selon un ordre spécifique.
Gestion des données déséquilibrées
- Introduction à l’imbalance des classes : Lorsque les classes dans un jeu de données sont déséquilibrées, certaines classes sont beaucoup plus représentées que d’autres, ce qui peut nuire à la performance des modèles de machine learning.
- Sous-échantillonnage (Undersampling) des classes majoritaires avec
RandomUnderSampler
deimblearn
: Le sous-échantillonnage consiste à réduire le nombre d’exemples dans les classes majoritaires pour équilibrer les classes et éviter qu’elles dominent l’apprentissage du modèle. - Sur-échantillonnage (Oversampling) des classes minoritaires avec
RandomOverSampler
deimblearn
: Le sur-échantillonnage augmente le nombre d’exemples dans les classes minoritaires en répliquant les instances existantes ou en générant de nouvelles instances similaires. - Sur-échantillonnage avec SMOTE : Le SMOTE (Synthetic Minority Over-sampling Technique) génère des exemples synthétiques pour les classes minoritaires, afin d’améliorer l’équilibre entre les classes.
- Sous-échantillonnage avec NearMiss : NearMiss est une technique de sous-échantillonnage qui sélectionne les instances de la classe majoritaire les plus proches des instances de la classe minoritaire pour créer un échantillon équilibré.
- Équilibrage des classes avec ADASYN : ADASYN (Adaptive Synthetic Sampling) est similaire à SMOTE, mais il se concentre davantage sur la génération de données synthétiques pour les classes minoritaires qui sont mal classifiées par le modèle.
- Analyse des effets des méthodes d’échantillonnage sur la performance du modèle : Il est important d’analyser l’impact de l’échantillonnage sur les performances du modèle, en comparant les résultats avant et après l’application de ces méthodes.
- Équilibrage des classes en utilisant des poids : L’attribution de poids plus élevés aux classes minoritaires pendant l’entraînement permet de compenser leur faible représentation, en forçant le modèle à accorder plus d’attention aux classes moins fréquentes.
- Évaluation des modèles avec des données déséquilibrées : Il est essentiel d’évaluer les modèles sur des métriques adaptées aux données déséquilibrées, comme la précision, le rappel, et le F1-score, plutôt que simplement la précision globale.
- Visualisation des classes avant et après échantillonnage : Visualisez la distribution des classes avant et après l’échantillonnage pour évaluer l’impact des méthodes de rééquilibrage, en utilisant des graphiques comme les histogrammes ou les diagrammes en boîte.
💡 Une manipulation avancée des données permet d’extraire des insights précieux et de garantir la qualité des modèles créés.