From b0eb5df07ef1bb3fe0a63740742b9288069d56e8 Mon Sep 17 00:00:00 2001 From: Chahrazad650 Date: Tue, 3 Mar 2026 03:18:35 +0100 Subject: [PATCH] ajout : remplac les notes manquantes par la moyenne de l'appellation --- cleaning.py | 32 ++++++++++++++++++++++++++++++-- main.py | 14 ++++++++++---- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/cleaning.py b/cleaning.py index b7c66a4..563c9e6 100644 --- a/cleaning.py +++ b/cleaning.py @@ -1,9 +1,12 @@ #!/usr/bin/env python3 from pandas import DataFrame, to_numeric +import pandas as pd + +SCORE_COLS = ["Robert", "Robinson", "Suckling"] def display_info(df: DataFrame) -> None: - print(df.all()) + df.describe() print(df.info()) print("\nNombre de valeurs manquantes par colonne :") print(df.isna().sum()) @@ -45,4 +48,29 @@ def mean_robinson(df: DataFrame) -> DataFrame: def mean_suckling(df: DataFrame) -> DataFrame: - return mean_score(df, "Suckling") \ No newline at end of file + return mean_score(df, "Suckling") + + +def fill_missing_scores(df: DataFrame) -> DataFrame: + """ + Remplacer les notes manquantes par la moyenne + des vins de la même appellation. + """ + df_copy = df.copy() + df_copy["Appellation"] = df_copy["Appellation"].astype(str).str.strip() + + for score in SCORE_COLS: + df_copy[score] = to_numeric(df_copy[score], errors="coerce") + + temp_cols: list[str] = [] + + for score in SCORE_COLS: + mean_df = mean_score(df_copy, score) + mean_name = f"mean_{score}" + temp_cols.append(mean_name) + + df_copy = df_copy.merge(mean_df, on="Appellation", how="left") + df_copy[score] = df_copy[score].fillna(df_copy[mean_name]) + + df_copy = df_copy.drop(columns=temp_cols) + return df_copy diff --git a/main.py b/main.py index a87f052..4d2e768 100755 --- a/main.py +++ b/main.py @@ -9,7 +9,9 @@ from cleaning import (display_info, drop_empty_appellation, mean_robert, mean_robinson, - mean_suckling) + mean_suckling, + fill_missing_scores, + encode_appellation) def load_csv(filename: str) -> DataFrame: @@ -44,14 +46,18 @@ def main() -> None: robinson_means = mean_robinson(df) save_csv(robinson_means, "mean_robinson_by_appellation.csv") - print("\n===: moyennes Robinson par appellation ===") + print("\n=== moyennes Robinson par appellation ===") print(robinson_means.head(10)) suckling_means = mean_suckling(df) save_csv(suckling_means, "mean_suckling_by_appellation.csv") - print("\n===: moyennes Suckling par appellation ===") + print("\n=== moyennes Suckling par appellation ===") print(suckling_means.head(10)) - + + df_missing_scores = fill_missing_scores(df) + save_csv(df_missing_scores, "donnee_filled.csv") + print("\n=== Après remplissage des notes manquantes ===") + display_info(df_missing_scores) if __name__ == "__main__": try: