Skip to content
Snippets Groups Projects
Commit 0e87b3d0 authored by BENOIT MICHAUD's avatar BENOIT MICHAUD
Browse files

vérifier la mensualisation

parent c8b2c17a
No related branches found
No related tags found
1 merge request!152Integration de la mensualisation
......@@ -346,7 +346,7 @@ def mensualiser_revenus(
# copier la df avec uniquement noindiv
df_mois = df.copy()
df_mois = df_mois[["noindiv"]]
df_mois = df_mois[["noindiv", "person_id"]]
# variables activité
cols_activite = [
......@@ -370,7 +370,7 @@ def mensualiser_revenus(
df_mois[col_chomage] = np.where(
df["nb_mois_avec_chomage"] > 0,
(df[col_chomage] / df["nb_mois_avec_chomage"]).where(
df[col_mois] == 1, 0
df[col_mois] == 2, 0
),
df[col_chomage] / 12,
)
......@@ -381,7 +381,7 @@ def mensualiser_revenus(
df_mois[col_retraite] = np.where(
df["nb_mois_avec_retraite"] > 0,
(df[col_retraite] / df["nb_mois_avec_retraite"]).where(
df[col_mois] == 1, 0
df[col_mois] == 3, 0
),
df[col_retraite] / 12,
)
......@@ -407,6 +407,9 @@ def mensualiser_revenus(
# --- Ajuster les horaires temps plein ---
df_mois = heures_temps_plein(df_mois)
# --- Ranger par ordre croissant de noindiv ---
df_mois = df_mois.sort_values(["person_id"]).reset_index()
# --- Enregistrer la table dans la survey ---
nom_fichier_export = f"individu_{annee_table}_{str(i).zfill(2)}"
......@@ -468,6 +471,48 @@ def heures_temps_plein(df):
return df
def verifier_mensualisation(df_annee, dossier_export, annee_table):
# variables mensualisées à vérifier
variables = [
"salaire_de_base",
"chomage_brut",
"retraite_brute",
"traitement_indiciaire_brut",
"primes_fonction_publique",
]
# boucle : pour chaque variable
for var in variables:
# initialiser array
variable_mensualisee_somme = []
# boucle : pour chaque mois
for i_mois in range(1, 13):
# importer la table mensuelle
df_mois = pd.read_parquet(
f"{dossier_export}/individu_{annee_table}_{str(i_mois).zfill(2)}.parquet"
)
# additionner dans l'array les valeurs de la variable pour chaque mois
if i_mois == 1:
variable_mensualisee_somme = df_mois[var]
else:
variable_mensualisee_somme = variable_mensualisee_somme + df_mois[var]
# --- Vérifier l'égalité des arrays (annuel et mensuel) ---
# arrondir les arrays (annuel et mensuel)
arrondi = 0
array_annuel = df_annee[var].round(arrondi)
array_mensuel = variable_mensualisee_somme.round(arrondi)
# vérifier que les arrays sont identiques (en tenant compte de l'arrondi)
assert (abs(array_annuel - array_mensuel) <= 1).all()
def mensualiser(
collection,
survey_name,
......@@ -498,15 +543,21 @@ def mensualiser(
# reconstruction de la table avec SPRXX
df_mens = pd.merge(
df_indiv,
table_leximpact[["noindiv", "date_naissance"] + variables],
table_leximpact[["noindiv", "person_id", "date_naissance"] + variables],
on="noindiv",
)
assert len(df_mens) == len(
table_leximpact
), "La table issue du merge n'a pas le même nombre de lignes que la table LexImpact."
# --- Mettre en cohérence l'activité
df_mens = coherence_retraites(df_mens, annee_table)
df_mens = coherence_activite_manquante_vectorise(df_mens, annee_table)
# classer par ordre croissant de person_id
df_mens = df_mens.sort_values(["person_id"]).reset_index()
# --- Mensualiser les revenus et variables catégorielles ---
mensualiser_revenus(
collection,
......@@ -517,6 +568,11 @@ def mensualiser(
config_files_directory,
)
# --- Test : vérifier la mensualisation ---
verifier_mensualisation(
df_annee=df_mens, dossier_export=dossier_export, annee_table=annee_table
)
if __name__ == "__main__":
mensualiser(collection="leximpact", survey_name="leximpact_2025", annee_table=2025)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment