rco / ajouter_binuh.py
Phitographix's picture
Upload 387 files
ba733c5 verified
Raw
History Blame Contribute Delete
3.37 kB
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())