<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!
Step1:  Einführung in<br/> Software Analytics
<b>Markus Harrer</b>
@feststelltaste
<small>rheinJUG, 19. November 2019</small>
<img src="../../demos/resources/innoq_logo.jpg" width=20% height="20%" align="right"/>
Über mich
<img src="../../demos/resources/ueber_mich.png" style="width
Step2:  "100" == max. Beliebtheit!
Große (Online-)Community
Kostenlose Online-Kurse, -Videos und Tutorials (z. B. DataCamp mit über 4,6 Mio. Mitgliedern)
Direkte Hilfestellungen (z. B. Stack Overflow oder Blog-Artikel)
Lernen mit anderen durch Online-Herausforderungen (z. B. Kaggle)
Wiederverwendbarkeit
Analyse von Geschäftsdaten oder Softwaredaten? Fast das Gleiche!
Vorgehen für Analysen? Bewährt!
Best Practices für Analysen? Frei Haus!
Visualisierungen! (spart immens Zeit!)
Wie weit weg sind <span class="green">SoftwareentwicklerInnen</span></b><br/> von <strong>Data Science</strong>?
Was ist ein Data Scientist?
"A data scientist is someone who<br/>
&nbsp;&nbsp;is better at statistics<br/>
&nbsp;&nbsp;than any <b><span class="green">software engineer</span></b><br/>
&nbsp;&nbsp;and better at <b><span class="green">software engineering</span></b><br/>
&nbsp;&nbsp;than any statistician."
<br/>
<br/>
<div align="right"><small>From https
Step3:  Wir sehen uns Basisinfos über den Datensatz an.
Step4:  <b>1</b> DataFrame (~ programmierbares Excel-Arbeitsblatt), <b>6</b> Series (= Spalten), <b>1128819</b> entries (= Reihen)
Wir wandeln die Zeitstempel von Texte in Objekte um.
Step5:  Wir sehen uns nur die jüngsten Änderungen an.
Step6:  Wir wollen nur Java-Code verwenden.
Step7:  III. Formale Modellierung
Schaffe neue Sichten
Verschneide weitere Daten
Wir zählen die Anzahl der Änderungen je Datei.
Step8:  Wir holen Infos über die Code-Zeilen hinzu...
Step9:  ...und verschneiden diese mit den vorhandenen Daten.
Step10:  VI. Interpretation
Erarbeite das Kernergebnis der Analyse heraus
Mache die zentrale Botschaft / neuen Erkenntnisse deutlich
Wir zeigen nur die TOP 10 Hotspots im Code an.
Step11:  V. Kommunikation
Transformiere die Erkenntnisse in eine verständliche Visualisierung
Kommuniziere die nächsten Schritte nach der Analyse
Wir erzeugen ein XY-Diagramm aus der TOP 10 Liste.
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline
import pandas as pd
Explanation: Diese Folie ist absichtlich leer!
End of explanation
pd.read_csv("../dataset/google_trends_datascience.csv", index_col=0).plot();
Explanation: Einführung in<br/> Software Analytics
<b>Markus Harrer</b>
@feststelltaste
<small>rheinJUG, 19. November 2019</small>
<img src="../../demos/resources/innoq_logo.jpg" width=20% height="20%" align="right"/>
Über mich
<img src="../../demos/resources/ueber_mich.png" style="width:85%;" >
<div align="center"><h2 class="blink">LATEST NEWS</h2>
<img src="../resources/cyberjug_logo_url.jpg" style="width:75%;" >
</div>
Datenanalysen in der Softwareentwicklung?
Warum?
... ein typischer Projektverlauf
... ein typischer Projektverlauf
<img src="../../demos/resources/schuld1.png" style="width:95%;" align="center"/>
... ein typischer Projektverlauf
<img src="../../demos/resources/schuld2.png" style="width:95%;" align="center"/>
... ein typischer Projektverlauf
<img src="../../demos/resources/schuld3.png" style="width:95%;" align="center"/>
... ein typischer Projektverlauf
<img src="../../demos/resources/schuld4.png" style="width:95%;" align="center"/>
"Die Definition von Wahnsinn ist, immer wieder das Gleiche zu tun und andere Ergebnisse zu erwarten."
<br/>
<div align="right">&ndash; Albert Einstein</div>
Das (Tr|D)auerthema
<img src="../../demos/resources/kombar0.png" style="width:95%;" align="center"/>
Das (Tr|D)auerthema
<img src="../../demos/resources/kombar4.png" style="width:95%;" align="center"/>
Software Analytics
Definition "Software Analytics"
"Software Analytics is analytics on <b>software data</b> 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>
Welche Arten von Softwaredaten?
Alles was aus der Entwicklung und dem Betrieb der Softwaresysteme so anfällt: 
* Statische Daten
* Laufzeitdaten
* Chronologische Daten
* Daten aus der Software-Community
<b>Sehr große Auswahl == sehr große Möglichkeiten?</b>
<div align="center">
    <h1>"Software Analytics" heutzutage</h1>
</div>
<div align="center"><span style="font-size:180px">
😥
</span>
<br/><br/>
Markus traurig</div>
Unsere derzeitiges "Software Analytics"<img src="../../demos/resources/risk2.png" style="width:80%;" align="center"/>
Unsere derzeitiges "Software Analytics"<img src="../../demos/resources/risk3.png" style="width:80%;" align="center"/>
Unsere derzeitiges "Software Analytics"<img src="../../demos/resources/risk4.png" style="width:80%;" align="center"/>
<div align="center">
    <h1>"Software Analytics" heutzutage</h1>
</div>
Leider Option 1: Wir verpennen Risiken
Es fehlt Option 2: Situationsspezifische Analysen
"Es kommt drauf an!" aka Kontext
<div style="margin-left:160px;margin-top:80px;">
<img src="../../demos/resources/context.png" style="width:70%;" /></div>
<b>Individuelle Systeme == Individuelle Probleme => Individuelle Analysen => Individuelle Erkenntnisse!</b>
<br/><br/>
<div align="center">
    Situationsspezifische Analysen mit Mitteln aus dem
    <h1><strong>Data Science</strong>
    <br/><br/></h1>
      <h2>  <i style="font-weight: normal;">= Eine leichtgewichtige Umsetzung von </i><b><span class="blue">Software Analytics</span></b></h2>
</div>
Data Science
Was is Data Science?
"Statistics on a <b><span class="green">Mac</span></b>."
<br/>
<br/>
<div align="right"><small>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>
Warum Data Science?
Data Science liegt immer noch im Trend!
End of explanation
log = pd.read_csv("../dataset/git_log_intellij.csv.gz")
log.head()
Explanation: "100" == max. Beliebtheit!
Große (Online-)Community
Kostenlose Online-Kurse, -Videos und Tutorials (z. B. DataCamp mit über 4,6 Mio. Mitgliedern)
Direkte Hilfestellungen (z. B. Stack Overflow oder Blog-Artikel)
Lernen mit anderen durch Online-Herausforderungen (z. B. Kaggle)
Wiederverwendbarkeit
Analyse von Geschäftsdaten oder Softwaredaten? Fast das Gleiche!
Vorgehen für Analysen? Bewährt!
Best Practices für Analysen? Frei Haus!
Visualisierungen! (spart immens Zeit!)
Wie weit weg sind <span class="green">SoftwareentwicklerInnen</span></b><br/> von <strong>Data Science</strong>?
Was ist ein Data Scientist?
"A data scientist is someone who<br/>
&nbsp;&nbsp;is better at statistics<br/>
&nbsp;&nbsp;than any <b><span class="green">software engineer</span></b><br/>
&nbsp;&nbsp;and better at <b><span class="green">software engineering</span></b><br/>
&nbsp;&nbsp;than any statistician."
<br/>
<br/>
<div align="right"><small>From https://twitter.com/cdixon/status/428914681911070720</small></div>
<b>Nicht so weit weg wie gedacht!</b>
Einige individuellen Analysen aus der Praxis
Vorhandenen Modularisierungsschnitt analysieren
Performance-Probleme in heterogenen, verteilten Systemen identifizieren
Potenzielle Wissensverluste ermitteln
Eingesetzte Open-Source-Projekte bewerten
...
Wie <span class="green">Software Analytics</span> mit <strong>Data Science</strong>  beginnen?
Bewährte Ansätze nutzen
<small>Roger Pengs "Stages of Data Analysis"</small>
I. Fragestellung
II. Explorative Datenanalyse
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>
Gedanken zur Analyse strukturieren
<br/>
<img src="../../demos/resources/canvas.png" style="width:85%;" >
Wie nachvollziehbar umsetzen?
Verwende Literate Statistical Programming
(Intent + Code + Data + Results)<br />
* Logical Step<br />
+ Automation<br />
= Literate Statistical Programming
Vehikel: Computational notebooks
Beispiel "Computational Notebook"
<br/>
<div align="center"><img src="../../demos/resources/notebook_approach.jpg"></div>
Nutze Data Science Standardwerkzeuge
z. B. einen der populärsten Stacks
Jupyter Notebook
Python 3
pandas
matplotlib
Andere Technologien
Jupyter Notebook arbeitet auch mit anderen Technologieplattformen zusammen, z. B. mit
* jQAssistant Scanner / Neo4j Graphdatenbank
* JVM-Sprachen via beakerx / Tablesaw
* bash
<b><span class="green">=> Also auch was für Javaianer dabei!</span></b>
Hands-On
Programmierbeispiel
Fallbeispiel
IntelliJ IDEA
IDE für Java-Entwickler
Fast komplett in Java geschrieben
Großes und lang aktives Projekt
I. Fragestellung (1/3)
Schreibe die Frage explizit auf
Erkläre die Anayseidee verständlich
I. Fragestellung (2/3)
<b>Frage</b>
* Welche Quellcodedateien sind besonders komplex und änderten sich in letzter Zeit häufig?
I. Fragestellung (3/3)
Umsetzungsideen
Werkzeuge: Jupyter, Python, pandas, matplotlib
Heuristiken:
"komplex": viele Quellcodezeilen
"ändert ... häufig": hohe Anzahl Commits
"in letzter Zeit": letzte 90 Tage
Meta-Ziel: Grundmechaniken kennenlernen.
II. Explorative Datenanalyse
Finde und lade mögliche Softwaredaten
Bereinige und filtere die Rohdaten
Wir laden einen Datenexport aus einem Git-Repository.
End of explanation
log.info()
Explanation: Wir sehen uns Basisinfos über den Datensatz an.
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> entries (= Reihen)
Wir wandeln die Zeitstempel von Texte in Objekte um.
End of explanation
# use log['timestamp'].max() instead of pd.Timedelta('today') to avoid outdated data in the future
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")].copy()
java.head() 
Explanation: Wir wollen nur Java-Code verwenden.
End of explanation
changes = java.groupby('filename')[['sha']].count()
changes.head()
Explanation: III. Formale Modellierung
Schaffe neue Sichten
Verschneide weitere Daten
Wir zählen die Anzahl der Änderungen je 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()
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
Erarbeite das Kernergebnis der Analyse heraus
Mache die zentrale Botschaft / neuen Erkenntnisse deutlich
Wir zeigen nur die TOP 10 Hotspots im Code an.
End of explanation
ax = top10.plot.scatter('sha', 'code');
for k, v in top10.iterrows():
    ax.annotate(k.split("/")[-1], v)
Explanation: V. Kommunikation
Transformiere die Erkenntnisse in eine verständliche Visualisierung
Kommuniziere die nächsten Schritte nach der Analyse
Wir erzeugen ein XY-Diagramm aus der TOP 10 Liste.
End of explanation
<END_TASK>