<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Mit Datenanalysen Probleme in der Entwicklung aufzeigen
<small>Java User Group Hessen, Kassel, 25.04.2019</small>
<b>Markus Harrer</b>, Software Development Analyst
Twitter
Step1:  Was haben wir hier eigentlich?
Step2:  <b>1</b> DataFrame (~ programmierbares Excel-Arbeitsblatt), <b>4</b> Series (= Spalten), <b>5665947</b> Rows (= Einträge)
III. Bereinigen
Daten sind oft nicht so, wie man sie braucht
Datentypen passen teilweise noch nicht
Wir wandeln die Zeitstempel um
Step3:  Wir berechnen uns das Alter jeder Codezeilenänderung
Step4:  IV. Anreichern
Vorhandenen Daten noch zusätzlich mit anderen Datenquellen verschneiden
Aber auch
Step5:  <br/> <small><i>String-Operationen...die dauern. Gibt aber diverse Optimierungsmöglichkeiten!</i></small>
V. Aggregieren
Vorhandene Daten sind oft zu viel für manuelle Sichtung
Neue Einsichten über Problem aber oft auf hoher Flugbahn möglich
Wir fassen nach Komponenten zusammen und arbeiten mit der jeweils jüngsten Zeilenänderung weiter
Step6:  IV. Visualisieren
Grafische Darstellung geben Analysen den letzten Schliff
Probleme können Außenstehenden visuell dargestellt besser kommuniziert werden
Wir bauen ein Diagramm mit Min-Alter pro Komponente
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
log = pd.read_csv("../dataset/linux_blame_log.csv.gz")
log.head()
Explanation: Mit Datenanalysen Probleme in der Entwicklung aufzeigen
<small>Java User Group Hessen, Kassel, 25.04.2019</small>
<b>Markus Harrer</b>, Software Development Analyst
Twitter: @feststelltaste
Blog: feststelltaste.de
<img src="../resources/innoq_logo.jpg" width=20% height="20%" align="right"/>
Das Problem mit den Problemen in der Softwareentwicklung
Der typische Software-Problemverlauf
<img src="../resources/schuld4.png" width=85% align="center"/>
Das eigentliche Problem
<img src="../resources/kombar0.png" width=95% align="center"/>
<img src="../resources/kombar3.png" width=95% align="center"/>
Wie Daten analysieren?
<div align="center">
<h3>The <span class="yellow">ultimate</span>, <span class="green">super</span> <span class="red">awesome</span><br/> Quality Management Dashboard</h3>
<img src="../resources/Sonarqube-nemo-dashboard_small.png">
    </div>
Häufigkeit von Fragen vs. deren Risiken
<img src="../resources/risk4.png" width=95% align="center"/>
Es braucht zusätzliche, situations-spezifische Datenanalysen!
Wie machen es andere Disziplinen?
Data Science!
Was ist Data Science?
"<b><span class="green">Datenanalysen</span></b> auf nem Mac."
<br/>
<br/>
<div align="right"><small>Frei nach https://twitter.com/cdixon/status/428914681911070720</small></div>
Meine Definition von Data Science
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 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>Data Science:</b> Perfect <b><span class="green">match</span></b>!
Was an Daten analysieren?
Softwaredaten!
Alles was aus der Entwicklung und dem Betrieb der Softwaresysteme so anfällt: 
* Statische Daten
* Laufzeitdaten
* Chronologische Daten
* Daten aus der Software-Community
Zwischenfazit
Data Science <span class="red">&#10084;</span> Software Data <span style="color:white">= <b>Software Analytics</b></span>
Zwischenfazit
Data Science <span class="red">&#10084;</span> Software Data = <b>Software Analytics</b>
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>
Wie Software Analytics umsetzen?
Der Leitgedanke
[(Daten + Code + Ergebnis) * gedanklichen Schritt]  + komplette Automatisierung
Schlüsselelement: Computational notebooks
Der Notebook-Ansatz
<br/>
<div align="center"><img src="../resources/notebook_approach.jpg"></div>
Technologie (1/2)
Klassischer Data-Science-Werkzeugkasten
* Jupyter
* Python 3
* pandas
* matplotlib
Technologie (2/2)
Jupyter funktioniert und integriert sich auch mit
* Cypher / Neo4j / jQAssistant
* JVM-Sprachen über beakerx / Tablesaw
* bash
* ...
Beispiele für gezielte Datenanalysen
Performance-Bottlenecks
Verborgene Teamkommunikation
Architektur-/Design-/Code-Smells
<b>No-Go-Areas in Altanwendungen</b>
...
Praktischer Teil
Erstes Hands-On
No-Go-Areas in Altanwendungen
Der Patient
Linux
Betriebsystem-Kernel
Hat verschiedene Treiberkomponenten
Fast ausschließlich in C geschrieben
Entwickelt von über 800.000 Entwicklern
I. Idee (1/2)
<b>Fragestellung</b>
* Gibt es besonders alte Komponenten, wo sich niemand mehr auskennt (No-Go-Areas)?  
<b>Heuristik</b>
* Wann waren die letzten Änderungen innerhalb einer Komponente?
I. Idee (2/2)
Umsetzung
Werkzeuge: Jupyter, Python, pandas, matplotlib
Datenquelle: Git Blame Log
Meta-Ziel: Grundfunktionen anhand eines einfachen Show-Cases sehen.
Ausgangsdaten: <b>Git Blame Log</b>
<div align="center">
    <img src ="../resources/linux_1.gif" align="center"/>
</div>
Ausgangsdaten: <b>Git Blame Log</b>
<div align="center">
    <img src ="../resources/linux_2.gif" align="center"/>
</div>
Ausgangsdaten: <b>Git Blame Log</b>
<div align="center">
    <img src ="../resources/linux_3_static.gif" align="center"/>
</div>
II. Datenbeschaffung
Wir laden Git Blame Daten aus einer CSV-Datei
End of explanation
log.info()
Explanation: Was haben wir hier eigentlich?
End of explanation
log['timestamp'] = pd.to_datetime(log['timestamp'])
log.head()
Explanation: <b>1</b> DataFrame (~ programmierbares Excel-Arbeitsblatt), <b>4</b> Series (= Spalten), <b>5665947</b> Rows (= Einträge)
III. Bereinigen
Daten sind oft nicht so, wie man sie braucht
Datentypen passen teilweise noch nicht
Wir wandeln die Zeitstempel um
End of explanation
log['age'] = pd.Timestamp('today') - log['timestamp']
log.head()
Explanation: Wir berechnen uns das Alter jeder Codezeilenänderung
End of explanation
log['component'] = log['path'].str.split("/").str[:2].str.join(":")
log.head()
Explanation: IV. Anreichern
Vorhandenen Daten noch zusätzlich mit anderen Datenquellen verschneiden
Aber auch: Teile aus vorhanden Daten extrahieren
=> Dadurch werden mehrere <b>Perspektiven</b> auf ein Problem möglich
Wir ordnen jeder Zeilenänderung einer Komponente zu
End of explanation
age_per_component = log.groupby('component')['age'].min().sort_values()
age_per_component.head()
Explanation: <br/> <small><i>String-Operationen...die dauern. Gibt aber diverse Optimierungsmöglichkeiten!</i></small>
V. Aggregieren
Vorhandene Daten sind oft zu viel für manuelle Sichtung
Neue Einsichten über Problem aber oft auf hoher Flugbahn möglich
Wir fassen nach Komponenten zusammen und arbeiten mit der jeweils jüngsten Zeilenänderung weiter
End of explanation
age_per_component.plot.bar(figsize=[20,5]);
Explanation: IV. Visualisieren
Grafische Darstellung geben Analysen den letzten Schliff
Probleme können Außenstehenden visuell dargestellt besser kommuniziert werden
Wir bauen ein Diagramm mit Min-Alter pro Komponente
End of explanation
<END_TASK>