Niklas Merz

March 13, 2021

DB Regio Data Hack - Endlich bekomme ich mal Daten

Es ist 3 Uhr nachts und wir sind bei einem Hackathon der Deutschen Bahn. Die letzten Stunden habe ich mit riesigen CSV-Dateien und zusammengehackten NodeJS-Scripten verbracht.

Big Data und Machine Learning sind Buzz Words die ich schon lange höre aber mich als Entwickler nie wirklich berührt haben bisher. Wie der Name des Hackathons schon sagt, bekommen wir von der Bahn viele Daten zur Verfügung gestellt mit denen wir experimentieren können.

Die ganzen APIs sind schon sehr spannend aber in der kurzen Zeit etwas Gutes damit umzusetzen (was es auch nicht schon längst gibt) ist schwer. Ein paar große Dateien mit Datensätzen aus der Sammlung finde ich aber sehr spannend.

In diesen ZIP-Dateien finden sich drei CSV-Dateien, die jeweils 5 GB groß sind und Millionen von Push-Nachrichten der App "DB Streckenagent" enthalten. Nachrichten wie:

  • Der Anschluss RE 70 Biblis (10.12.2020 17:59+2) -> RB 62 (Richtung Worms Hbf) Biblis (10.12.2020 18:04) wird voraussichtlich nicht erreicht.
  • Die Ankunft von Bus 501 in Hauptbahnhof, Kiel (09.12.2020 21:45) Kreuzung Pries/K17, Kiel nach Hauptbahnhof, Kiel findet unplanmäßig auf Gleis C2 statt.
  • Die Verbindung von Reichenberg(Unterfr) (07.12.2020 07:10) nach Würzburg Hbf verspätet sich um +8 Minuten bei Ankunft in Würzburg Hbf (RE 8). Verzögerungen im Betriebsablauf

Das sind keine strukturierte Daten, aber ich möchte sie trotzdem für meine Experimente nutzen auch wenn die Erkenntnisse daraus wahrscheinlich sehr unzuverlässig sind.

Mein erster Plan war es die Daten in eine SQL-Datenbank zu importieren und mit ein paar Abfragen mal versuchen irgendwelche Informationen zu gewinnen. Mit Google Big Query konnte ich das CSV einfach in eine Tabelle importieren und dann Abfragen bauen die beispielsweise zählen wie vielen Benachrichtigungen pro Tag mit dem Wort "verspätet" versendet werden. Big Query hatte auch eine nützliche Funktion auf Grundlage von diesen Daten Visualisierungen zu machen. Das war mal eine gute Gelegenheit mal wieder eine Cloud SQL Datenbank zu testen und ich werden später nochmal darauf zurück kommen.

Als nächstes kam mir der Gedanke mit diesen Daten Machine Learning auszuprobieren. Da die Google Cloud auch das anbietet habe ich mich kurz eingelesen wie ich die Daten vorbereiten muss. Ich habe mir ein Script geschrieben was aus einem kleinen Teil der Daten nur die Nachrichteninhalte aus dem CSV in einzelne Text-Dateien schreibt. Diese Dateien habe ich dann mit einem weiteren Script in Ordner verschoben, um sie zu "labeln". Es gibt jetzt die Klassifizierungen Anschluss, Bauarbeiten, Gleiswechsel und Verspätung. Mit diesen Labels will ich ein Gefühl kriegen welche Art von Meldungen häufig vom DB Streckenagent versendet werden. Die Ordner habe ich in ein ZIP gepackt und damit das Training eines Machine Learning Modells gestartet.

Das Training läuft jetzt ein paar Stunden und dann mal schauen was ich mit dem Modell anfangen kann. Ich möchte schauen wie sich die Benachrichtigungen auf meine Kategorien aufteilen. Das will ich dann mit Abfragen auf die Daten in der SQL-Datenbank vergleichen. Bringt hier Machine Learning wirklich was oder kann man ein ähnliches Ergebnis auch mit simplen Abfragen erreichen?

Ich möchte das Machine Learning auch nochmal mit einem der bekannten Frameworks wie Tensorflow oder Pytorch auf meinem PC mit eigenem Code selbst trainieren, um die Details dahinter besser zu verstehen.

Update folgt....