Diese Folie ist absichtlich leer
"Statistik auf nem Mac."
=> Belastbare Erkenntnisse mittels Fakten liefern
=> Neue Erkenntnisse verständlich herausarbeiten
=> Wir sind gar nicht so weit weg!
=> Eine sehr große Auswahl!
Thomas Zimmermann in "One size does not fit all":
Individuelle Systeme => individuelle Probleme => individuelle Analysen => individuelle Erkenntnisse!
=> von der Frage über die Daten zur Erkenntnis!
Implementierung: Computational notebooks
Meta-Ziel: Grundmechaniken kennenlernen.
Wir laden Git Log Daten eines Git Repos.
In [1]:
import pandas as pd
log = pd.read_csv("../dataset/git_log_intellij.csv.gz")
log.head()
Out[1]:
Wir erkunden die geladenen Daten.
In [2]:
log.info()
1 DataFrame (~ programmierbares Excel-Arbeitsblatt), 6 Series (= Spalten), 1128819 Rows (= Einträge)
Wir wandeln die Zeitstempel von Texte in Objekte um.
In [3]:
log['timestamp'] = pd.to_datetime(log['timestamp'])
log.head()
Out[3]:
Wir sehen uns nur die jüngsten Änderungen an.
In [4]:
recent = log[log['timestamp'] > log['timestamp'].max() - pd.Timedelta('90 days')]
recent.head()
Out[4]:
Wir wollen nur Java-Code verwenden.
In [5]:
java = recent[recent['filename'].str.endswith(".java")]
java.head()
Out[5]:
Wir aggregieren die Zeilen sowie die Anzahl der Änderungen pro Datei.
In [6]:
changes = java.groupby('filename')[['sha']].count()
changes.head()
Out[6]:
Wir holen Infos über die Code-Zeilen hinzu...
In [7]:
loc = pd.read_csv("../dataset/cloc_intellij.csv.gz", index_col=1)
loc.head()
Out[7]:
...und verschneiden diese mit den vorhandenen Daten.
In [8]:
hotspots = changes.join(loc[['code']]).dropna(subset=["code"])
hotspots.head()
Out[8]:
Wir zeigen die TOP 10 Hotspots an.
In [9]:
top10 = hotspots.sort_values(by="sha", ascending=False).head(10)
top10
Out[9]:
Wir plotten die TOP 10 Liste als XY-Diagramm.
In [10]:
# %load ugly_plotting_code.py
ax = top10.plot.scatter('sha', 'code');
for k, v in top10.iterrows():
ax.annotate(k.split("/")[-1], v)