import pandas as pd
log = pd.read_csv("../dataset/git_log_refactoring_simple.csv", parse_dates=[3])
log.head()

"""
Explanation: Nachweis der Umstellung von JDBC auf JPA
Jupyter Notebook Demo mit Python, pandas und matplotlib.
Kontext
Diese Analyse weist die Umbauarbeiten aus dem Technical Requirement AB311 nach. Hier soll die Standardisierung hin zu JavaEE 8 vorgenommen werden. In diesem Zuge soll die Datenbankzugriffstechnologie JPA* statt JDBC** genutzt werden.
<sub><sup>*JPA: Java Persistence API (neuere Zugriffsmöglichkeit auf eine Datenbank)</sub></sup><br/>
<sub><sup>**JDBC: Java Database Connectivity (klassische Zugriffsmöglichkeit auf Datenbank)</sub></sup>
Idee
Tracking der Änderungen über das Versionskontrollsystem
Einlesen der Entwicklungshistorie mit Projektstand vom 15.01.2019 aus dem Versionskontrollsystem der Software.
<sup>Bitte beachte dass es sich hierbei um synthetische / generierte Daten handelt, da der echte Datenbestand nicht verfügbar ist. Weitere Details zur Generierung siehe Notebook.</sup>
End of explanation
"""


log['tech'] = log['file'].str.extract("/(jpa|jdbc)/")
log = log.dropna()
log.head()

"""
Explanation: Erkennung der Framework-Komponenten
Mit Hilfe eines regulären Ausdrucks können die beiden Datenbankzugriffstechnologien aus dem Dateipfad extrahiert werden. Alle sonstigen Dateien werden mittels dropna() herausgefiltert.
End of explanation
"""


log['lines'] = log['additions'] - log['deletions']
log.head()

"""
Explanation: Analyse
Arbeitsfortschritt
Um den Fortschritt nachvollziehen zu können, berechnen wir als Annäherung die geänderten Quellcodezeilen.
End of explanation
"""


log_timed = log.groupby(['timestamp', 'tech']).lines.sum()
log_timed.head()

"""
Explanation: Zeitliche Zusammenführung
Die jeweiligen Fortschritte werden nach ihren Zeitstempeln zusammengeführt.
End of explanation
"""


log_progress = log_timed.unstack().fillna(0).cumsum()
log_progress.head()

"""
Explanation: Darstellung
Für den Vergleich der Fortschritte werden beide Technologien nebeneinander aufgeführt.
End of explanation
"""


log_progress.plot(figsize=[15,8]);

"""
Explanation: Derzeitiger Stand der Technologieumstellung
Dargestellt nach den Zeilenänderungen je Technologie.
End of explanation
"""


