<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Diese Folie ist absichtlich leer
Data Science meets <br/> Software Data
<b>Markus Harrer</b>
@feststelltaste
<small>The Architecture Gathering, 17.10.2019</small>
<img src="../resources/innoq_logo.jpg" width=20% height="20%" align="right"/>
Über mich
<img src="../resources/ueber_mich.png" style="width
Step1:  Wir erkunden die geladenen Daten.
Step2:  <b>1</b> DataFrame (~ programmierbares Excel-Arbeitsblatt), <b>6</b> Series (= Spalten), <b>1128819</b> Rows (= Einträge)
Wir wandeln die Zeitstempel von Texte in Objekte um.
Step3:  Wir sehen uns nur die jüngsten Änderungen an.
Step4:  Wir wollen nur Java-Code verwenden.
Step5:  III. Formale Modellierung
Neue Sichten auf das Vorhandene schaffen
Zusätzliche Informationen hinzuziehen
Wir aggregieren die Zeilen sowie die Anzahl der Änderungen pro Datei.
Step6:  Wir holen Infos über die Code-Zeilen hinzu...
Step7:  ...und verschneiden diese mit den vorhandenen Daten.
Step8:  VI. Interpretation
Ergebnismenge reduzieren
Kernaussagen klar herausarbeiten
Wir zeigen die TOP 10 Hotspots an.
Step9:  V. Kommunikation
Ergebnisse managementtauglich darstellen
Nächste Schritte lostreten
Wir plotten die TOP 10 Liste als XY-Diagramm.
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
log = pd.read_csv("../dataset/git_log_intellij.csv.gz")
log.head()
Explanation: Diese Folie ist absichtlich leer
Data Science meets <br/> Software Data
<b>Markus Harrer</b>
@feststelltaste
<small>The Architecture Gathering, 17.10.2019</small>
<img src="../resources/innoq_logo.jpg" width=20% height="20%" align="right"/>
Über mich
<img src="../resources/ueber_mich.png" style="width:85%;" >
Datenanalysen in der Softwareentwicklung?
Das (Tr|D)auerthema
<img src="../resources/kombararch_0.png" width=95% align="center"/>
Das (Tr|D)auerthema
<img src="../resources/kombararch_1.png" width=95% align="center"/>
Das (Tr|D)auerthema
<img src="../resources/kombararch_2.png" width=95% align="center"/>
Lösung:
<br/>
Data Science meets <span class="blue">Software Data</span>?
Data Science
Was ist Data Science?
"Statistik auf nem <b><span class="green">Mac</span></b>."
<br/>
<br/>
<div align="right"><small>Nach https://twitter.com/cdixon/status/428914681911070720</small></div>
Meine Definition
Was bedeutet "data"?
"Without data you‘re just another person with an opinion."
<br/>
<div align="right"><small>W. Edwards Deming</small></div>
<b>=> Belastbare Erkenntnisse mittels <span class="green">Fakten</span> liefern</b>
Was bedeutet "science"?
"The aim of science is to seek the simplest explanations of complex facts."
<br/>
<div align="right"><small>Albert Einstein</small></div>
<b>=> Neue Erkenntnisse <span class="green">verständlich</span> herausarbeiten</b>
Was hat das mit Softwareentwicklung zu tun?
Was ist ein Data Scientist?
"Jemand, der mehr Ahnung von Statistik<br/>
&nbsp;&nbsp;hat als ein <b><span class="green">Softwareentwickler</span></b><br/>
&nbsp;&nbsp;und mehr Ahnung von <b><span class="green">Softwareentwicklung</span></b><br/>
&nbsp;&nbsp;als ein Statistiker."
<br/>
<br/>
<div align="right"><small>Nach zu https://twitter.com/cdixon/status/428914681911070720</small></div>
<b>=> Wir sind gar nicht so weit weg!</b>
<span class="blue">Software Data</span>
Welche Arten von Softwaredaten?
Alles was aus der Entwicklung und dem Betrieb der Softwaresysteme so anfällt: 
* Statische Daten
* Laufzeitdaten
* Historische Daten
* Daten aus der Software-Community
<b>=> Eine sehr große Auswahl!</b>
Software Analytics
Definition "Software Analytics"
"Software Analytics is analytics on software data for managers and <b class="green">software engineers</b> with the aim of empowering software development individuals and teams to gain and share insight from their data to <b>make better decisions</b>."
<br/>
<div align="right"><small>Tim Menzies and Thomas Zimmermann</small></div>
Das (Tr|D)auerthema
<img src="../resources/kombararch_2.png" width=95% align="center"/>
<strike>Das (Tr|D)auerthema</strike>
<img src="../resources/kombararch_3.png" width=95% align="center"/>
Aber: Hier gibt es ein Problem!
Thomas Zimmermann in "One size does not fit all":
<br/><br/>
<div align="center">
"Even if you find models that work for most, they will not work for everyone. There is much <strong>academic research</strong> into <strong>general models</strong>. In contrast, <b><span class="green">industrial practitioners</span></b> are often fine with <b><span class="green">models that just work for their data</span></b> if the model provides some insight or allows them to work more efficiently."<br/>
</div>
Beispiele für Analysen aus der Praxis
Vorhandenen Modularisierungsschnitt analysieren
Performance-Probleme in verteilten Systemen identifizieren
Potenzielle Wissensverluste ermitteln
Eingesetzte Open-Source-Projekte bewerten
...
"Es kommt drauf an!" aka Kontext
<div align="center">
<img src="../resources/context.png" style="width:70%;" /></div>
<b>Individuelle Systeme => individuelle Probleme => individuelle Analysen => individuelle Erkenntnisse!</b>
<strike>Das (Tr|D)auerthema</strike>
<img src="../resources/kombararch_4.png" width=95% align="center"/>
<strike>Das (Tr|D)auerthema</strike>
<img src="../resources/kombararch_5.png" width=95% align="center"/>
<br/><br/>
<div align="center">
    <h1><strong>Data Science</strong> mit <span class="blue">Softwaredaten</span>
    <br/><br/></h1>
      <h2>  <span style="font-weight: normal;">Eine leichtgewichtige Umsetzung von </span><b><span class="green">Software Analytics</span></b></h2>
</div>
Best Practices
Bewährtes Vorgehen
<small>Nach Roger Pengs "Stages of Data Analysis"</small><br/>
I. Fragestellung
II. Explorative Datenbeschaffung
III. Formale Modellierung
IV. Interpretation
V. Kommunikation  
<b>=> von der <strong>Frage</strong> über die <span class="green">Daten</span> zur <span class="blue" style="background-color: #FFFF00">Erkenntnis</span>!</b>
Literate Statistical Programming
(Intent + Code + Data + Results)<br />
* Logical Step<br />
+ Automation<br />
= Literate Statistical Programming
Implementierung: Computational notebooks
Computational Notebooks
<br/>
<div align="center"><img src="../resources/notebook_approach.jpg"></div>
Flexible Standardwerkzeuge (1/2)
Klassischer Data-Science-Werkzeugkasten
* Jupyter (mit RISE)
* Python 3
* pandas
* matplotlib
Flexible Standardwerkzeuge (2/2)
Jupyter funktioniert und integriert sich auch mit
* jQAssistant / Cypher / Neo4j 
* JVM-Sprachen über beakerx / Tablesaw
* bash
* ...
Praktischer Teil
Erste Demo
Fallbeispiel
IntelliJ IDEA
IDE für die Java-Entwicklung
Vieles in Java geschrieben
Großes und lang entwickeltes Projekt
I. Fragestellung (1/3)
Offene Frage explizit niederschreiben
Analyseidee verständlich darstellen
I. Fragestellung (2/3)
<b>Frage</b>
* Welche Quellcodedateien sind besonders komplex und änderten sich in letzter Zeit häufig?
I. Fragestellung (3/3)
Umsetzungsidee
Werkzeuge: Jupyter, Python, pandas, matplotlib
Heuristiken:
"komplex": Lines of Code 
"letzter Zeit": Letzte 90 Tage
"häufig": Anzahl Git Commits
Meta-Ziel: Grundmechaniken kennenlernen.
II. Explorative Datenbeschaffung
Daten in Data-Science-Welt laden
Rohdaten bereinigen und filtern
Wir laden Git Log Daten eines Git Repos.
End of explanation
log.info()
Explanation: Wir erkunden die geladenen Daten.
End of explanation
log['timestamp'] = pd.to_datetime(log['timestamp'])
log.head()
Explanation: <b>1</b> DataFrame (~ programmierbares Excel-Arbeitsblatt), <b>6</b> Series (= Spalten), <b>1128819</b> Rows (= Einträge)
Wir wandeln die Zeitstempel von Texte in Objekte um.
End of explanation
recent = log[log['timestamp'] > log['timestamp'].max() - pd.Timedelta('90 days')]
recent.head()
Explanation: Wir sehen uns nur die jüngsten Änderungen an.
End of explanation
java = recent[recent['filename'].str.endswith(".java")]
java.head() 
Explanation: Wir wollen nur Java-Code verwenden.
End of explanation
changes = java.groupby('filename')[['sha']].count()
changes.head()
Explanation: III. Formale Modellierung
Neue Sichten auf das Vorhandene schaffen
Zusätzliche Informationen hinzuziehen
Wir aggregieren die Zeilen sowie die Anzahl der Änderungen pro Datei.
End of explanation
loc = pd.read_csv("../dataset/cloc_intellij.csv.gz", index_col=1)
loc.head()
Explanation: Wir holen Infos über die Code-Zeilen hinzu...
End of explanation
hotspots = changes.join(loc[['code']]).dropna(subset=["code"])
hotspots.head()
Explanation: ...und verschneiden diese mit den vorhandenen Daten.
End of explanation
top10 = hotspots.sort_values(by="sha", ascending=False).head(10)
top10
Explanation: VI. Interpretation
Ergebnismenge reduzieren
Kernaussagen klar herausarbeiten
Wir zeigen die TOP 10 Hotspots an.
End of explanation
# %load ugly_plotting_code.py
ax = top10.plot.scatter('sha', 'code');
for k, v in top10.iterrows():
    ax.annotate(k.split("/")[-1], v)
Explanation: V. Kommunikation
Ergebnisse managementtauglich darstellen
Nächste Schritte lostreten
Wir plotten die TOP 10 Liste als XY-Diagramm.
End of explanation
<END_TASK>