diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 1bdcae45..f2ef2000 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -108,6 +108,22 @@ IMPUTER_FILE = "median_imputer.pkl" PATTERNS_FILE_TXT = "technician_patterns.txt" # Alt (Optional beibehalten) PATTERNS_FILE_JSON = "technician_patterns.json" # Neu (Empfohlen) +def load_branch_mapping(file_path='Branchen.csv'): + try: + df_mapping = pd.read_csv(file_path, sep=';', usecols=['Branch Group', 'Branch']) + # Erstelle ein Dictionary: { 'Branch-Detail': 'Branch-Group' } + # .str.strip() um führende/endende Leerzeichen zu entfernen + branch_map_dict = pd.Series(df_mapping['Branch Group'].values, index=df_mapping['Branch'].str.strip()).to_dict() + logger.info(f"Branchen-Mapping aus '{file_path}' erfolgreich geladen ({len(branch_map_dict)} Einträge).") + return branch_map_dict + except Exception as e: + logger.error(f"FEHLER beim Laden der Branchen-Mapping-Datei '{file_path}': {e}") + return {} + +# In Config-Klasse oder global aufrufen: +BRANCH_MAPPING = load_branch_mapping() + + # --- Globale Konfiguration Klasse --- class Config: """Zentrale Konfigurationseinstellungen.""" @@ -9110,7 +9126,20 @@ class DataProcessor: # Greife auf 'branche_ki' zu und weise das Ergebnis auch wieder 'branche_ki' zu df_filtered.loc[:, branche_col_internal] = df_filtered[branche_col_internal].astype(str).fillna('Unbekannt').str.strip() + + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + # +++ NEU: Mapping von Detail-Branche zu Branch-Group +++++++++++++++++++ + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + # Wende das Mapping an. Wenn eine Branche nicht im Mapping ist, wird sie als 'Sonstige' oder 'Unbekannt' behandelt. + # Verwende das global geladene BRANCH_MAPPING Dictionary + df_filtered.loc[:, 'Branchen_Gruppe'] = df_filtered[branche_col_internal].map(BRANCH_MAPPING).fillna('Sonstige') + self.logger.info("Mapping zu 'Branchen_Gruppe' durchgeführt.") + self.logger.debug(f"Verteilung der Branchen-Gruppen:\n{df_filtered['Branchen_Gruppe'].value_counts(normalize=True).sort_index().round(3)}") + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + # +++ ENDE NEUER BLOCK ++++++++++++++++++++++++++++++++++++++++++++++++++++ + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + # Verwende den korrekten internen Namen für das One-Hot Encoding df_encoded = pd.get_dummies(df_filtered, columns=[branche_col_internal], prefix='Branche', dummy_na=False) self.logger.info(f"One-Hot Encoding fuer '{branche_col_internal}' durchgefuehrt...")