In [1]:
import pandas as pd
git_blame = pd.read_csv("linux_blame_log.csv")
git_blame.head()
Out[1]:
Wir haben X Einträge. Es wird viel Speicher belegt, wenn wir die Daten roh einlesen
In [2]:
git_blame.info(memory_usage='deep')
Wir können zuerst einmal noch bei den verwendeten Datentypen nachhelfen.
Categorical == kategoriale Variablen, also Variablen, die nur eine limitierte Anzahl an Werten annehmen können. Werte in den Spalten werden dann zu Referenzen, die auf die eigentlichen Werte zeigen. AKA => Auswertungn werden schneller. Hat bei sehr vielen Daten wie hier viel Sinn.
In [3]:
git_blame.path = pd.Categorical(git_blame.path)
git_blame.author = pd.Categorical(git_blame.author)
git_blame.timestamp = pd.to_datetime(git_blame.timestamp)
git_blame.info(memory_usage='deep')
Einfach Auswertung dieser Art bringt nichts, müssen unseren Kontext beachten. Linus Torvalds hat den initialen Git-Commit mit dem alten Bestandscode vorgenommen, deshalb ist diese Auswertung nicht korrekt:
In [4]:
git_blame.author.value_counts().head(10)
Out[4]:
In [5]:
git_blame.head()
Out[5]:
Was ist eigentlich Wissen? Unsere Annäherung / Modell: Geänderte Codezeilen im letzten Jahr
In [6]:
a_year_ago = pd.Timestamp("today") - pd.DateOffset(years=1)
a_year_ago
Out[6]:
In [7]:
(git_blame.timestamp >= a_year_ago).head()
Out[7]:
In [8]:
git_blame['knowing'] = git_blame.timestamp >= a_year_ago
git_blame.head()
Out[8]:
In [9]:
%matplotlib inline
git_blame.knowing.value_counts().plot.pie()
Out[9]:
In [10]:
knowledge = git_blame[git_blame.knowing]
knowledge.head()
Out[10]:
In [11]:
knowledge_carrier = knowledge.author.value_counts() / len(knowledge)
knowledge_carrier.head(10)
Out[11]:
In [12]:
git_blame.head()
Out[12]:
Komponenten können aus dem Pfad gewonnen werden
In [13]:
git_blame.path.value_counts().head()
Out[13]:
Split Schritt für Schritt auf bauen
In [14]:
git_blame['component'] = git_blame.path.str.split("/").str[:2].str.join(":")
git_blame.head()
Out[14]:
Nun können wir unsere Daten nach den Komponenten gruppieren.
In [15]:
knowledge_per_component = git_blame.groupby('component')[['knowing']].mean()
knowledge_per_component.head()
Out[15]:
In [16]:
knowledge_per_component.knowing.sort_values().plot.barh(figsize=[3,20])
Out[16]:
Unnützes Wissen: arch:arc -Prozessor steck im SuperFX-Chip von Super Nintentdo Spielemodulen drin. Vielleicht wollte jdm da ja mal Linux drauf laufen lassen...
In [ ]: