<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Data Science meets Software Data
<b>Markus Harrer</b>, Software Development Analyst
@feststelltaste
<small>JavaLand 2019, Phantasialand, Brühl, 19.03.2019</small>
<img src="../resources/innoq_logo.jpg" width=20% height="20%" align="right"/>
Data Science
Was ist Data Science?
"Statistik auf nem <b><span class="green">Mac</span></b>."
<br/>
<br/>
<div align="right"><small>Nach https
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:  IV. Anreichern
Vorhandenen Daten noch zusätzlich mit anderen Datenquellen verschneiden
Aber auch
Step4:  Wir ordnen jeder Zeilenänderung einer Komponente zu
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: Data Science meets Software Data
<b>Markus Harrer</b>, Software Development Analyst
@feststelltaste
<small>JavaLand 2019, Phantasialand, Brühl, 19.03.2019</small>
<img src="../resources/innoq_logo.jpg" width=20% height="20%" align="right"/>
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>
<div align="center">
    <img src ="../resources/trollface.jpg" align="center"/>
</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 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 & Software Data:</b> Perfect <b><span class="green">match</span></b>!
Software Data
Was ist Software Data?
Statisch
Laufzeit
Chronologisch
Community
<b>=> Krass viel!</b>
Beispiele für Analysen
Performance-Bottlenecks
Verborgene Teamkommunikation
No-Go-Areas
Architektur-/Design-/Code-Smells
...
Vorgehen
Fragestellung
Datenbeschaffung
Modellierung
Interpretation
Kommunikation
<b>=> vom <strong>Problem</strong> über die <span class="green">Daten</span> zur <span class="blue" style="background-color: #FFFF00">Erkenntnis</span>!</b>
Grundprinzip
<code>
(Data + Code + Ergebnis) * Automatisierung
= Reproduzierbare Analysen</code>
Schlüssel: Computational notebooks
Der Notebook-Ansatz
<br/>
<div align="center"><img src="../resources/notebook_approach.jpg"></div>
Technik
Technologie (1/2)
Klassischer Data-Science-Werkzeugkasten
* Jupyter (mit RISE)
* Python 3
* pandas
* matplotlib
Technologie (2/2)
Jupyter funktioniert und integriert sich auch mit
* Cypher / Neo4j / jQAssistant
* JVM-Sprachen über beakerx / Tablesaw
* bash
* ...
Praktischer Teil
Erstes Hands-On
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 (No-Go-Areas)?
I. Idee (2/2)
Umsetzung
Werkzeuge: Jupyter, Python, pandas, matplotlib
Datenquelle: Git Blame Log
Meta-Ziel: Grundfunktionen anhand eines einfachen Show-Cases sehen.
<b>Git Blame Log</b>
<div align="center">
    <img src ="../resources/linux_1.gif" align="center"/>
</div>
<b>Git Blame Log</b>
<div align="center">
    <img src ="../resources/linux_2.gif" align="center"/>
</div>
<b>Git Blame Log</b>
<div align="center">
    <img src ="../resources/linux_3.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: 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 berechnen uns das Alter jeder Codezeilenänderung
End of explanation
log['component'] = log['path'].str.split("/").str[:2].str.join(":")
log.head()
Explanation: 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=[15,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>