<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Idee
Anhand der Git-Commits der Studierenden wollen wir ansehen, ob diese eher frühzeitig Übungsaufgaben zum Kurs erledigen oder auf den letzten Drücker arbeiten.
Daten
In der CSV-Datei stecken alle Commits aller GitHub-Repositories, welche ein bestimmtes GitHub-Repository geforkt haben. Diese Daten habe ich per GitHub-API gezogen (das gleiche ginge auch mit einer Reihe von normalen Git-Repositories).
Beim ursprünglichen Repository (https
Step1:  Aggregation
Von den ganzen Daten wird nicht viel gebraucht. Lediglich das Datum der Commits sowie die Anzahl der Commits von den "Forkern" (alle GitHub-User außer authman, von dem das Root-Repository stammt) sind relevant. Die Commits werden hier ersteinmal täglich zusammengezählt.
Step2:  Visualisierung
Aber hier zeige ich nur skizzenhaft, was mit den Daten angestellt werden könnte. Ich erstelle eine Grafik mit der Anzahl der Commits (blaue Linie) sowie den (geschätzten) Abgabeterminen (rote, vertikale Linien) innerhalb des Kurszeitraums.
Damit ist grob ersichtlich, wann die Studierenden an ihren Aufgaben erledigt haben.
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
csv_data = pd.read_csv("commits_of_all_repos.csv")
csv_data.head()
Explanation: Idee
Anhand der Git-Commits der Studierenden wollen wir ansehen, ob diese eher frühzeitig Übungsaufgaben zum Kurs erledigen oder auf den letzten Drücker arbeiten.
Daten
In der CSV-Datei stecken alle Commits aller GitHub-Repositories, welche ein bestimmtes GitHub-Repository geforkt haben. Diese Daten habe ich per GitHub-API gezogen (das gleiche ginge auch mit einer Reihe von normalen Git-Repositories).
Beim ursprünglichen Repository (https://github.com/authman/DAT210x) handelt es sich um den Code eines Data-Science-Kurses, welche alle paar Wochen gefordert hatte, zu einem bestimmten Zeitpunkt Übungen abzugeben (Achtung: Abgabe über ein Web-Formular, nicht als Commit! Daher ist folgende Analyse nicht 100%ig richtig modelliert).
End of explanation
%matplotlib inline
csv_data['commit.author.date'] = pd.to_datetime(csv_data['commit.author.date'])
csv_data = csv_data[csv_data['author.login'] != "authman"]
commits_per_time = csv_data.set_index('commit.author.date').resample("D").count()
commits_per_time.head()
Explanation: Aggregation
Von den ganzen Daten wird nicht viel gebraucht. Lediglich das Datum der Commits sowie die Anzahl der Commits von den "Forkern" (alle GitHub-User außer authman, von dem das Root-Repository stammt) sind relevant. Die Commits werden hier ersteinmal täglich zusammengezählt.
End of explanation
import matplotlib.pyplot as plt
course_end = pd.Timestamp("Sep 30, 2016")
course_start = course_end - pd.DateOffset(weeks=6)
dates = pd.date_range(course_start, course_end, freq="2W", closed="right")
exam_time = commits_per_time[commits_per_time.index <= course_end]
fig, ax = plt.subplots()
ax = exam_time['url'].plot()
for date in dates:
    ax.axvline(date, color="red", alpha=0.3) 
ax.axvline(course_end, color="red") 
plt.show()
Explanation: Visualisierung
Aber hier zeige ich nur skizzenhaft, was mit den Daten angestellt werden könnte. Ich erstelle eine Grafik mit der Anzahl der Commits (blaue Linie) sowie den (geschätzten) Abgabeterminen (rote, vertikale Linien) innerhalb des Kurszeitraums.
Damit ist grob ersichtlich, wann die Studierenden an ihren Aufgaben erledigt haben.
End of explanation
<END_TASK>