ERP-Kung-Fu mit Pandas

ERP-Kung-Fu mit Pandas

Wir können uns die Möglichkeiten moderner Analytics-Bibliotheken zunutze machen, um detailliertere Einsichten über Projekte zu erlangen als uns das ERP dies von Haus aus erlauben würde. Insbesondere die Python-Bibliothek pandas erfreut sich derzeit großer Beliebtheit und findet im Analytics-Bereich häufig Anwendung.

Sie erlaubt es unmittelbar, Excel-Exports des ERPs zu laden, geeignet zu transformieren und zu visualisieren. Einen nutzbaren ExcelExport aus dem ERP erhält man, indem man in der Projektverwaltung unter Verwalten/Gebuchte Posten die Option zum Öffnen in Office verwendet. Es wird die aktuell sichtbare Ansicht exportiert. Je nach Anwendungsfall kann es notwendig sein, weitere Felder (wie die Aktivitätsnummer oder die Stundenmenge) vor dem Export einzublenden.

Unleash the Pandas

Wir laden den ERP-Export als pandas.DataFrame:

import pandas as pd
df = pd.read_excel("Projektbuchungen_636843550793374935.xlsx")

Wir interessieren uns für den Verlauf der gebuchten Stunden, aufgespaltet nach verschiedenen Attributen. Das Ziel ist, einen neuen DataFrame zu erstellen, der nur die darzustellenden Zeitreihen enthält. Dieser soll einen Zeitindex verwenden, der den betrachteten Zeitraum umfasst. Wir spalten die Daten über die groupby-Operation nach dem Wert einer Spalte auf, gruppieren die Stundenmenge nach Datum, summieren die Einträge je eines Tages und reindizieren, so dass sich jede neue Zeitreihe über den gleichen Zeitraum erstreckt. Dann fassen wir alle Zeitreihen zu einem DataFrame zusammen und plotten diesen:

def plot_hours_by_column(df, col, cumulative, plot_kind):
    dates = df["Datum"]
    full_index = pd.DatetimeIndex(start=min(dates), end=max(dates), freq='1D')
    series = {}
    for key, pdf in df.groupby(df[col]):
        hours = pdf["Menge"].groupby(pdf["Datum"]).sum() \
            .reindex(index=full_index, fill_value=0)
        hours = hours.cumsum() if cumulative else hours
        series[key] = hours
    pd.DataFrame(series).plot(kind=plot_kind)

Diese Funktion können wir verwenden, um die von den einzelnen Teammitgliedern („Ressourcen“, Namen verändert) akkumulierten Stunden über die Zeit zu plotten:

plot_hours_by_column(df, "Ressourcenname", True, "area")
Unleash the Pandas

Als nächstes plotten wir den Verlauf der Arbeitszeit, die auf die verschiedenen Aktivitäten entfallen ist. Da das ERP nur die Aktivitätsnummern exportieren kann, bilden wir diese vorher auf die entsprechenden Namen ab.

activity_names = {"AK0005412": "Vorhersage", "AK0005413": "Optimierung", "AK0005415": "PM", "AK0005414": "Meetings"}
df["Aktivität"] = [activity_names.get(n, n) for n in df["Aktivitätsnummer"]]
plot_hours_by_column(df, "Aktivität", True, "line")
ERP Kung Fu with Pandas

Ferner interessieren wir uns für die Verteilung der Arbeitsstunden über die Wochentage:

df["Menge"].groupby(df["Datum"].dt.weekday_name).sum() \
    .sort_values().plot(kind='barh')
Python library pandas

Autoren

Dominik Jain / Senior Software Architect & Kristof Schröder / Software Architect / Business Division New Business

---

Zum Toilet Paper #108: ERP-Kung-Fu mit Pandas (pdf)

ERP Kung Fu with Pandas

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.