src.pipeline.cleaner

cleaner.py — Nettoyage des données sinistres pour le pipeline PySpark

Contient des fonctions de nettoyage métier :

  • montant négatif ou null → remplacé par la médiane
  • age hors bornes → remplacé par défaut
  • date future ou null → remplacée par référence
  • type de sinistre invalide → remplacé par 'Autre'
 1"""
 2cleaner.py — Nettoyage des données sinistres pour le pipeline PySpark
 3
 4Contient des fonctions de nettoyage métier :
 5- montant négatif ou null → remplacé par la médiane
 6- age hors bornes → remplacé par défaut
 7- date future ou null → remplacée par référence
 8- type de sinistre invalide → remplacé par 'Autre'
 9"""
10
11from pyspark.sql import DataFrame
12from pyspark.sql.functions import col, lit, when
13
14
15def nettoyer_montant(df: DataFrame, mediane: int) -> DataFrame:
16    return df.withColumn(
17        "montant_clean", when((col("montant") < 0) | col("montant").isNull(), lit(mediane)).otherwise(col("montant"))
18    )
19
20
21def nettoyer_age(df: DataFrame, age_defaut=18, age_min=18, age_max=80) -> DataFrame:
22    return df.withColumn(
23        "age_clean",
24        when((col("age") < age_min) | (col("age") > age_max) | col("age").isNull(), lit(age_defaut)).otherwise(
25            col("age")
26        ),
27    )
28
29
30def nettoyer_date(df: DataFrame, date_reference: str) -> DataFrame:
31    return df.withColumn(
32        "date_sinistre_clean",
33        when(col("date_sinistre") > lit(date_reference) | col("date_sinistre").isNull(), lit(date_reference)).otherwise(
34            col("date_sinistre")
35        ),
36    )
37
38
39def nettoyer_type_sinistre(df: DataFrame, types_valides, type_defaut="Autre") -> DataFrame:
40    return df.withColumn(
41        "type_sinistre_clean",
42        when(col("type_sinistre").isin(types_valides), col("type_sinistre")).otherwise(lit(type_defaut)),
43    )
44
45
46def clean_dataframe(df: DataFrame) -> DataFrame:
47    """
48    Nettoie le DataFrame brut en appliquant les règles métier :
49    - montant → montant_clean
50    - age → age_clean
51    - date_sinistre → date_sinistre_clean
52    - type_sinistre → type_sinistre_clean
53
54    Args:
55        df (DataFrame): DataFrame brut
56
57    Returns:
58        DataFrame: DataFrame nettoyé
59    """
60    mediane = 8000
61    types_valides = ["vol", "accident", "bris de glace", "incendie", "catastrophe naturelle"]
62
63    df = nettoyer_montant(df, mediane)
64    df = nettoyer_type_sinistre(df, types_valides)
65
66    return df
def nettoyer_montant( df: pyspark.sql.dataframe.DataFrame, mediane: int) -> pyspark.sql.dataframe.DataFrame:
16def nettoyer_montant(df: DataFrame, mediane: int) -> DataFrame:
17    return df.withColumn(
18        "montant_clean", when((col("montant") < 0) | col("montant").isNull(), lit(mediane)).otherwise(col("montant"))
19    )
def nettoyer_age( df: pyspark.sql.dataframe.DataFrame, age_defaut=18, age_min=18, age_max=80) -> pyspark.sql.dataframe.DataFrame:
22def nettoyer_age(df: DataFrame, age_defaut=18, age_min=18, age_max=80) -> DataFrame:
23    return df.withColumn(
24        "age_clean",
25        when((col("age") < age_min) | (col("age") > age_max) | col("age").isNull(), lit(age_defaut)).otherwise(
26            col("age")
27        ),
28    )
def nettoyer_date( df: pyspark.sql.dataframe.DataFrame, date_reference: str) -> pyspark.sql.dataframe.DataFrame:
31def nettoyer_date(df: DataFrame, date_reference: str) -> DataFrame:
32    return df.withColumn(
33        "date_sinistre_clean",
34        when(col("date_sinistre") > lit(date_reference) | col("date_sinistre").isNull(), lit(date_reference)).otherwise(
35            col("date_sinistre")
36        ),
37    )
def nettoyer_type_sinistre( df: pyspark.sql.dataframe.DataFrame, types_valides, type_defaut='Autre') -> pyspark.sql.dataframe.DataFrame:
40def nettoyer_type_sinistre(df: DataFrame, types_valides, type_defaut="Autre") -> DataFrame:
41    return df.withColumn(
42        "type_sinistre_clean",
43        when(col("type_sinistre").isin(types_valides), col("type_sinistre")).otherwise(lit(type_defaut)),
44    )
def clean_dataframe(df: pyspark.sql.dataframe.DataFrame) -> pyspark.sql.dataframe.DataFrame:
47def clean_dataframe(df: DataFrame) -> DataFrame:
48    """
49    Nettoie le DataFrame brut en appliquant les règles métier :
50    - montant → montant_clean
51    - age → age_clean
52    - date_sinistre → date_sinistre_clean
53    - type_sinistre → type_sinistre_clean
54
55    Args:
56        df (DataFrame): DataFrame brut
57
58    Returns:
59        DataFrame: DataFrame nettoyé
60    """
61    mediane = 8000
62    types_valides = ["vol", "accident", "bris de glace", "incendie", "catastrophe naturelle"]
63
64    df = nettoyer_montant(df, mediane)
65    df = nettoyer_type_sinistre(df, types_valides)
66
67    return df

Nettoie le DataFrame brut en appliquant les règles métier :

  • montant → montant_clean
  • age → age_clean
  • date_sinistre → date_sinistre_clean
  • type_sinistre → type_sinistre_clean

Args: df (DataFrame): DataFrame brut

Returns: DataFrame: DataFrame nettoyé