Ein kleiner Technologiestack für DataScience-Heimprojekte

Ich bin jetzt ziemlich weit damit, den Mailhaufen abzuarbeiten, den ich im Nachgang zu meinem BahnMining-Vortrag gekriegt habe. Die mit Abstand am häufigsten gestellte Frage, die mich erreicht hat, war die nach einer kurzen Beschreibung meines Techstacks, bzw. einer verallgemeinerten kurzen Beschreibung, wie man technisch an sowas herangeht. Also gibt es hierfür vorweg mal einen eigenen Blogpost. Ich unterteile die vier Phasen Download, Parsing, Zusammenführung, und zum Schluss die Analyse an sich. Alsdann:

Download

Mache ich auf dediziertem Server (in meinem Fall Debiankisten, aber das ist Geschmackssache) mit möglichst einfachen, wartbaren Pythonscripten (ich verwende übergreifend die Pythondistribution Anaconda). Zum Scrapen nehme ich die Python-Library Requests.

Bedenkt, dass das der Teil ist, der wirklich funktionieren muss. Der Rechner muss Bandbreiten- aber nicht CPU-Stark sein. Die Rohdaten werden zunächst in SQLite-Files gespeichert. Ich beginne jeden Tag eine neue Datenbank, das erlaubt mir, Deltas mit vertretbarem Aufwand runterzuladen.

Ich nehme SQLite, weil es unglaublich lightweight ist und ich nur ein einziger User bin. Den ganzen Netzwerk-Multiuser-Shizzle und Setup-Aufwand kann ich mir so komplett schenken. Außerdem reduziert sich der Datentransfer auf den Transfer einiger Dateien. Wann immer ihr es euch leisten könnt, speichert alle Rohdaten ab. Aussortieren könnt ihr später immer noch, gelöschtes wiederherstellen nicht.

Parsing

Die Rohdaten-Datenbanken werden dann auf einen anderen Rechner kopiert, bei dem die Bandbreite relativ egal ist, aber er sollte IO-, CPU- und RAM-Stark sein. Eine dicke SSD lohnt. Es ist in der Regel nicht sinnvoll, Download und Parsing in demselben Schritt abzuhandeln.

Hier verwende ich weitere Pythonscripte, die die ganzen heruntergeladenen Daten aus den Rohdaten-SQLite-Files laden und alles in eine tatsächlich tabellarische Form parsen. Die geparsten, nun tabellarischen Daten wandern in eine weitere Datenbank (bei mir in diesem Fall auch SQLite). Die Scripte dürfen komplexer sein, hier darf ja auch mal was schief gehen, denn im Zweifel wird einfach neu geparst.

Zusammenführen, erweitern, Bereinigung

Gibt es mehrere Tabellen mit geparsten Daten, kann es notwendig werden, verschiedene zusammengeführte Datensätze aus diesen zu erstellen. Vor dem Zusammenführen müssen grundsätzlich alle Spalten aller Tabellen mal untersucht werden darauf, was für Werte sie überhaupt annehmen, was für Löcher darin sind, und ob offensichtliche Anomalien darin sind. Es lohnt sich in diesem Schritt außerdem, formelle Annahmen (Assertions) auf die Daten einzuführen, so dass die Scripte crashen, wenn die Daten anders aussehen, als man annimmt. Maßgebliche Tools hier sind Pythonscripte in Form von Jupyter Notebooks, sowie die Python-Library Pandas.

Die fertigen Zieldatensätze für die Analyse kann man dann je nach dem, was man damit vorhat, in spezialisierten Formaten speichern. Will ich z.B. mit einem externen Visualisierungstool ran, nehme ich oft CSV, das ist aber in jeder Hinsicht ineffizient. Bei Datensätzen, die ich sowieso nur wieder in einem anderen Jupyter Notebook in einen Pandas DataFrame importiere, nehme ich gerne Feather. Liest und schreibt sich unglaublich flott.

Analyse und Exploration

Ein Jupyter Notebook pro größerer Analyse. Ich mache viel mit Pandas selbst, insbesondere für die erste Exploration. Pandas bietet auch nette, einfache Plotting-Mechanismen aus Basis von Matplotlib. Ansonsten lohnt sich natürlich auch Matplotlib selbst und darauf aufbauend Seaborn.

Wenn es Machine Learning-Anteile im Projekt gibt, nutze ich SciKit-Learn und für Deep Learning Keras auf Basis von TensorFlow (ich habe eine dicke GPU für sowas).

Für große und kleine Graphen (wie z.B. meinen riesigen Graphen der Spiegelthemen) eignet sich das Gratistool Gephi.

Bis hier war alles kostenfrei, an kostenpflichtigen Tools ist Tableau nett für die Visualisierung. Es kann natürlich weniger als wenn ihr selbst mit Matplotlib coded, aber ihr kommt wesentlich schneller an Ergebnisse. Tableau ist gut zum visualisieren, aber ungeeignet für die Analytik selbst. Weiter ist SAS JMP ein tolles Tool. Es kann nicht nur Visualisierung, sondern auch Analytik in nahezu jeder Form, ist aber teurer.