import pandas as pd SRC_BINUH = "binuh-scstats.csv" SRC_CONSOLIDE = "Dataset_Haiti_Consolide_v5.csv" DST = "Dataset_Haiti_Consolide_v6.csv" bi = pd.read_csv(SRC_BINUH, low_memory=False) print("BINUH brut :", bi.shape) # ------------------------------------------------------------------ mois -> annee MOIS = {"Jan": 1, "Feb": 2, "Mar": 3, "Apr": 4, "May": 5, "Jun": 6, "Jul": 7, "Aug": 8, "Sep": 9, "Oct": 10, "Nov": 11, "Dec": 12} bi["mois_num"] = bi["month"].map(MOIS) # ------------------------------------------------------------------ colonnes -> indicateurs # Indicateurs classés par TYPE (Homicides, Meurtre, Lynchage, Enlèvement/ # Kidnapping) ; la répartition Hommes/Femmes/mineurs devient une simple # Désagrégation à l'intérieur de chaque type, au lieu d'indicateurs séparés. COLONNES = { "ih_total": ("Homicides intentionnels (BINUH)", "Total"), "ih_male": ("Homicides intentionnels (BINUH)", "Sexe: Hommes"), "ih_male_minor": ("Homicides intentionnels (BINUH)", "Sexe: Hommes mineurs"), "ih_female": ("Homicides intentionnels (BINUH)", "Sexe: Femmes"), "ih_female_minor": ("Homicides intentionnels (BINUH)", "Sexe: Femmes mineures"), "ih_murder": ("Homicides intentionnels - Meurtre (BINUH)", "Total"), "ih_lynching": ("Homicides intentionnels - Lynchage (BINUH)", "Total"), "kidnap_total": ("Enlèvements / Kidnapping (BINUH)", "Total"), "kidnap_male": ("Enlèvements / Kidnapping (BINUH)", "Sexe: Hommes"), "kidnap_male_minor": ("Enlèvements / Kidnapping (BINUH)", "Sexe: Hommes mineurs"), "kidnap_female": ("Enlèvements / Kidnapping (BINUH)", "Sexe: Femmes"), "kidnap_female_minor": ("Enlèvements / Kidnapping (BINUH)", "Sexe: Femmes mineures"), } morceaux = [] for col, (indicateur, desag) in COLONNES.items(): sub = bi[bi[col].notna()][["year", "mois_num", col]].copy() sub = sub.rename(columns={col: "Valeur"}) sub["Indicateur"] = indicateur sub["Désagrégation"] = desag morceaux.append(sub) long_ = pd.concat(morceaux, ignore_index=True) long_["Thématique"] = "Justice et Sécurité" long_["Source"] = "BINUH" long_["Échelle"] = "National" long_["Unité"] = "Personnes" # ------------------------------------------------------------------ agrégation annuelle (somme, cohérent avec le reste du dataset) annuel = (long_.groupby(["Thématique", "Source", "Indicateur", "Désagrégation", "Échelle", "year", "Unité"], as_index=False)["Valeur"].sum()) annuel = annuel.rename(columns={"year": "Période"}) annuel = annuel[["Thématique", "Source", "Indicateur", "Désagrégation", "Échelle", "Période", "Valeur", "Unité"]] print("BINUH annualisé :", annuel.shape) print(annuel.head(10).to_string()) # ------------------------------------------------------------------ fusion avec le dataset consolidé base = pd.read_csv(SRC_CONSOLIDE, encoding="utf-8-sig", low_memory=False) print("Consolidé avant fusion :", base.shape) final = pd.concat([base, annuel], ignore_index=True) final.to_csv(DST, index=False, encoding="utf-8-sig") print("Consolidé après fusion :", final.shape) print("\nRépartition Source (Justice et Sécurité) :") print(final[final["Thématique"] == "Justice et Sécurité"]["Source"].value_counts())