Gérer les données catégorielles pour optimiser la mémoire

Fonctions :

  • Optimiser la mémoire

    Les données catégorielles, lorsqu'elles sont utilisées correctement, permettent de réduire l'utilisation de la mémoire pour les colonnes contenant un nombre limité de valeurs distinctes. Cela est particulièrement utile lorsque vous avez des colonnes avec des chaînes de caractères répétitives (par exemple, des catégories, des labels ou des états). La conversion de ces colonnes en type category dans pandas peut améliorer non seulement la gestion de la mémoire, mais aussi la performance des calculs comme les agrégations ou les filtrages.

    Importation :

    import pandas as pd

    Attributs :

    Pourquoi utiliser les données catégorielles ?

    • Réduction de la mémoire : Les colonnes contenant un grand nombre de chaînes de caractères identiques prennent plus de mémoire que les colonnes catégorielles. Lorsqu'une colonne de type chaîne est convertie en type catégoriel, pandas remplace les chaînes par des codes d'entiers, ce qui prend moins de mémoire.
    • Optimisation des performances : Les opérations comme le filtrage, le regroupement, ou la jointure sont plus rapides avec des colonnes catégorielles.

    Exemple de code :

    import pandas as pd
    
    # Création d'un DataFrame avec une colonne de données textuelles répétitives
    data = pd.DataFrame({
        'produit': ['Pommes', 'Bananes', 'Pommes', 'Oranges', 'Bananes', 'Oranges', 'Pommes', 'Pommes']
    })
    
    # Vérification de l'utilisation de la mémoire avant la conversion
    print("Mémoire avant conversion :")
    print(data.memory_usage(deep=True))
    
    # Conversion de la colonne 'produit' en type catégoriel pour optimiser la mémoire
    data['produit'] = data['produit'].astype('category')
    
    # Vérification de l'utilisation de la mémoire après la conversion
    print("\nMémoire après conversion :")
    print(data.memory_usage(deep=True))

    Explication du code :

    • Création du DataFrame : Un DataFrame est créé avec une colonne 'produit' contenant des chaînes représentant des produits. Cette colonne contient beaucoup de répétitions.
    • Vérification de la mémoire avant la conversion : La méthode memory_usage(deep=True) affiche la mémoire utilisée par chaque colonne. Cela permet de comparer la consommation mémoire avant et après la conversion.
    • Conversion en type catégoriel : La colonne 'produit' est convertie en type catégoriel à l'aide de astype('category'). Cela remplace chaque chaîne par un code d'entier, réduisant ainsi la taille en mémoire.
    • Vérification de la mémoire après la conversion : Après la conversion, on vérifie de nouveau la mémoire utilisée. La colonne catégorielle occupera moins de mémoire.