Cet article de blog explore comment utiliser Pandas avec la Programmation Orientée Objet pour améliorer l’organisation du code.
Pandas est l’une des bibliothèques d’analyse de données les plus utilisées en Python. Elle fournit des outils puissants pour travailler avec des données structurées (des DataFrames et des séries), qui sont essentiels pour les tâches d’analyse de données.
La programmation Orientée Objet (POO) est un paradigme de programmation qui organise le code en classes réutilisables et modulaires. La POO offre plusieurs avantages, tels que l’encapsulation, l’héritage et le polymorphisme, qui facilitent la maintenance et l’extension du code.
Création d’une classe DataFrame Pandas
L’une des façons d’utiliser Pandas avec la Programmation Orientée Objet (POO) est de créer une classe qui encapsule un DataFrame Pandas. La classe peut fournir des méthodes pour manipuler le dataFrame, comme l’ajout ou la suppression de lignes ou de colonnes, le filtrage et le tri. Voici un exemple :
Tout d’abord, nous allons ajouter un paramètre columns à notre méthode __init__ afin de pouvoir spécifier l’ordre des colonnes dans notre DataFrame :
class MyDataFrame: def __init__(self, data, columns): self.df = pd.DataFrame(data, columns=columns)
Ensuite, nous ajouterons une méthode to_dict qui nous permettra de convertir notre DataFrame en une liste de dictionnaires, une structure de données couramment utilisée dans de nombreuses applications Python :
class MyDataFrame: def __init__(self, data, columns): self.df = pd.DataFrame(data, columns=columns) def to_dict(self): return self.df.to_dict(orient='records')
Nous ajouterons également une méthode from_csv qui nous permettra de créer une nouvelle instance de notre classe à partir d’un fichier CSV :
class MyDataFrame: def __init__(self, data, columns): self.df = pd.DataFrame(data, columns=columns) def to_dict(self): return self.df.to_dict(orient='records') @classmethod def from_csv(cls, file_path, columns): data = pd.read_csv(file_path) return cls(data.to_dict(orient='records'), columns)
Enfin, nous ajouterons une méthode save_csv qui nous permettra d’enregistrer notre base de données dans un fichier CSV :
class MyDataFrame: def __init__(self, data, columns): self.df = pd.DataFrame(data, columns=columns) def to_dict(self): return self.df.to_dict(orient='records') @classmethod def from_csv(cls, file_path, columns): data = pd.read_csv(file_path) return cls(data.to_dict(orient='records'), columns) def save_csv(self, file_path): self.df.to_csv(file_path, index=False)
Grâce à ces méthodes supplémentaires, notre classe MyDataFrame est désormais plus avancée et plus robuste, et peut être utilisée dans une plus grande variété d’applications. Voici un exemple d’utilisation de notre classe avec ces nouvelles méthodes :
data = [ {"Name": "John", "Age": 25, "Gender": "Male"}, {"Name": "Jane", "Age": 30, "Gender": "Female"}, {"Name": "Bob", "Age": 40, "Gender": "Male"}, {"Name": "Alice", "Age": 35, "Gender": "Female"} ] columns = ["Name", "Age", "Gender"] my_data = MyDataFrame(data, columns) print(my_data.df) my_data.add_row({"Name": "Sarah", "Age": 28, "Gender": "Female"}) print(my_data.df) my_data.remove_row(2) print(my_data.df) my_data.filter_by_age(30, 40) print(my_data.df) my_data.sort_by_age() print(my_data.df) dict_data = my_data.to_dict() print(dict_data) my_data.save_csv('my_data.csv') new_data = MyDataFrame.from_csv('my_data.csv', columns) print(new_data.df)
Comme nous pouvons le constater, notre classe est désormais capable de lire et d’écrire des fichiers CSV, et de convertir notre DataFrame en une liste de dictionnaires, ce qui peut s’avérer utile dans de nombreuses applications Python. En incorporant ces méthodes supplémentaires, notre classe MyDataFrame est maintenant plus avancée et peut être utilisée dans une plus grande variété d’applications.
Héritage
Une autre façon d’utiliser Pandas avec la Programmation Orientée Objet (POO) est de créer une sous-classe de la classe DataFrame et d’ajouter de nouvelles méthodes ou de remplacer les méthodes existantes. Cette approche vous permet de réutiliser les fonctionnalités existantes de la classe DataFrame et d’ajouter vos propres méthodes personnalisées. Voici un exemple :
import pandas as pd class MyDataFrame(pd.DataFrame): def filter_by_column(self, column_name, value): return self[self[column_name] == value] @property def mean_column(self, column_name): return self[column_name].mean()
Cette propriété utilise la syntaxe d’indexation Pandas DataFrame pour renvoyer les valeurs de la colonne spécifiée, puis calcule la valeur moyenne de ces valeurs.
Grâce à ces nouvelles méthodes et propriétés, notre classe MyDataFrame est désormais plus avancée et peut être utilisée dans une plus grande variété d’applications. Voici un exemple d’utilisation de notre classe avec ces nouvelles méthodes :
data = { "Name": ["John", "Jane", "Bob", "Alice"], "Age": [25, 30, 40, 35], "Gender": ["Male", "Female", "Male", "Female"] } my_data = MyDataFrame(data) filtered_data = my_data.filter_by_column("Gender", "Female") print(filtered_data) mean_age = my_data.mean_column("Age") print(mean_age)
Comme nous pouvons le voir, notre classe est maintenant capable de filtrer notre DataFrame par la valeur d’une colonne spécifique et de calculer la valeur moyenne pour une colonne spécifique. En utilisant l’héritage pour créer une nouvelle classe qui étend les fonctionnalités de la classe Pandas DataFrame, nous pouvons créer des DataFrames plus avancés et spécialisés qui peuvent être utilisés dans une variété d’applications.
Tu peux également lire un autre article sur la Programmation Orientée Objet avec Python. Et si tu t’intéresses à la Data Science, ce programme Python pour la Data Science traite de l’utilité de la POO pour la Data Science !