diff --git a/lms_statistische-analyse.py b/lms_statistische-analyse.py index bc3c1b1..13fdd14 100644 --- a/lms_statistische-analyse.py +++ b/lms_statistische-analyse.py @@ -1,14 +1,13 @@ +import os, re, sys, unicodedata, subprocess +from pathlib import Path import pandas as pd import plotly.graph_objs as go -import os -import re -import unicodedata -import subprocess +from collections import defaultdict from config_lms import plotly_theme, export_fig_visual, export_fig_png -import sys -sys.path.append("/Users/jochen_hanisch-johannsen/Documents/scripte/Jochen-Hanisch/CI/ci_template") -from plotly_template import get_standard_layout, get_colors, set_theme -from pathlib import Path +from ci_template.plotly_template import ( + get_standard_layout, get_colors, set_theme, + plot_table_from_dict, plot_table_from_dataframe +) set_theme(plotly_theme) # --- Hilfsfunktionen für Export und Slugify --- @@ -44,8 +43,6 @@ def export_figure(fig, name, export_flag_html, export_flag_png): except Exception as e: print("❌ Fehler beim PNG-Export:", str(e)) -# PNG-Exportpfad definieren -png_export_path = Path(__file__).parent.parent.parent / "Allgemein beruflich" / "Research" / "Charité - Universitätsmedizin Berlin" / "Dissertation" / "Abbildungen" # Ursprüngliche Datentabelle (bitte bei Bedarf anpassen) df = pd.DataFrame({ @@ -80,9 +77,11 @@ df = pd.DataFrame({ ] }) +# Zentrale Definition der Themenbereiche +THEMENBEREICHE = ["medizinisch", "rettungsdienstlich", "bezugswissenschaftlich", "Einführung/Prüfung"] + # --- Automatische Berechnung Themenbereichsanteile pro Kurs --- # Ausschließlich systematische APrV-Zuordnung aus lms-verteilung.xlsx und zuordnung_praezise verwenden -from collections import defaultdict zuordnung_praezise = { # Medizinisch @@ -162,10 +161,6 @@ apr_kompetenz_df = pd.DataFrame({ "Anteil (%)": [24, 15, 11, 50] }) - - - - # Umbenennung "unbekannt" → "Einführung/Prüfung" für valide Kategorisierung df["Themenbereich"] = df["Themenbereich"].replace("unbekannt", "Einführung/Prüfung") @@ -196,18 +191,13 @@ gruppe = df.groupby("Themenbereich").agg({ gruppe.columns = ['Ø Aufgaben', 'SD Aufgaben', 'Anzahl Kurse', 'Ø Dauer', 'SD Dauer'] print("\nStatistik nach Themenbereich:\n", gruppe) - def plot_boxplots(df): colors = get_colors() - # Spezifische Reihenfolge: medizinisch, rettungsdienstlich, bezugswissenschaftlich, Einführung/Prüfung + # Spezifische und dokumentierte Reihenfolge der Boxplots kategorie_order = [] - for k in ["medizinisch", "rettungsdienstlich", "bezugswissenschaftlich", "Einführung/Prüfung"]: - if k in df["Themenbereich"].unique(): - kategorie_order.append(k) - # Ergänze ggf. andere Kategorien (falls weitere vorkommen) - for k in sorted(df["Themenbereich"].unique()): - if k not in kategorie_order: - kategorie_order.append(k) + for kategorie in ["medizinisch", "rettungsdienstlich", "bezugswissenschaftlich", "Einführung/Prüfung"]: + if kategorie in df["Themenbereich"].unique(): + kategorie_order.append(kategorie) # Aufgaben-Boxplot fig1 = go.Figure() @@ -247,7 +237,6 @@ def plot_boxplots(df): export_figure(fig2, fig2.layout.title.text, export_fig_visual, export_fig_png) fig2.show() - def plot_aprv_pies(): colors = get_colors() @@ -286,7 +275,6 @@ def plot_aprv_pies(): export_figure(fig2, fig2.layout.title.text, export_fig_visual, export_fig_png) fig2.show() - def plot_vergleich_lehrplan_aprv(): # Gruppierung der Kursdauer nach Themenbereich nfsh_theme = df.groupby("Themenbereich")["Dauer [d]"].sum().reset_index() @@ -314,9 +302,6 @@ def plot_vergleich_lehrplan_aprv(): export_figure(fig, fig.layout.title.text, export_fig_visual, export_fig_png) fig.show() - - - def plot_vergleich_kompetenz_aprv(): # Automatische Zuordnung der Kompetenzbereiche basierend auf CSV-Datei kuerzel_df = pd.read_csv(Path(__file__).parent / "APrV-Kuerzel_zu_Kompetenzbereichen.csv") @@ -373,9 +358,14 @@ def plot_vergleich_kompetenz_aprv(): fig.show() + # --- Visualisierungen aufrufen --- # Alle Visualisierungen in sinnvoller Reihenfolge aufrufen plot_aprv_pies() plot_vergleich_lehrplan_aprv() plot_vergleich_kompetenz_aprv() plot_boxplots(df) + +# Tabellen-Visualisierungen nach bisherigen Plots aus ci_template aufrufen +plot_table_from_dict(gesamt_stats, "Gesamtstatistik der curricularen Struktur", export_figure, export_fig_visual, export_fig_png) +plot_table_from_dataframe(gruppe, "Themenbereich", "Gruppierte Statistik nach Themenbereichen", export_figure, export_fig_visual, export_fig_png)