Data Science, Machine Learning und KI
Kontakt
Content Hub
Blog Post

Data Science in Python – Vorschau und Werkzeuge

  • Expert:innen Marvin Taschenberger
  • Datum 16. Februar 2018
  • Thema
  • Format Blog
  • Kategorie Technology
Data Science in Python – Vorschau und Werkzeuge

Teil 0 – Vorschau und Werkzeuge

In Sachen Datenaufbereitung, Datenformatierung und statistischer Auswertung oder kurz Data Science, war (und hier in Deutschland ist immer noch) R die Sprache der Wahl. Global hat Python hier deutlich an Popularität gewonnen und ist mittlerweile sogar vorherrschend in diesem Gebiet (siehe Studie von KDnuggets). Daher soll diese Reihe schon einmal einen Einblick geben „Warum Python?“, und wie die Sprache in Gebieten der „Datenwissenschaft“ funktioniert. Dementsprechend widmen wir uns hier zuerst einmal der Frage „Warum Python?“ sowie einer Beschreibung nützlicher Tools.

Danach folgt ein Blick auf die Datenstruktur in Python mit Pandas, sowie das mathematische Ökosystem mit NumPy und SciPy. Damit wir unsere Beobachtungen oder mathematischen Transformationen auch veranschaulichen können, schauen wir kurz auf Matplotlib. Am interessantesten ist jedoch die Validierung gegebener Hypothesen oder Vermutungen, die wir bezüglich unserer Daten haben, und welche wir mit Hilfe von Statsmodels oder SciKit-Learn (SKLearn) erledigen werden. Problematisch ist bis hier jedoch, dass es sich bei fast all diesen Modulen und Erweiterungen Pythons um sehr grundlegende Frameworks handelt. Mit anderen Worten, wenn man weiß, was man will und diese Werkzeuge einzusetzen weiß, sind sie überaus mächtig. Jedoch setzt dieses eine intensive Auseinandersetzung mit ihren Objekten und Funktionen voraus. Daher haben sich diverse Wrapper um diese Bibliotheken gelegt, um uns das Leben zu vereinfachen.

Was statistische Visualisierung angeht, erledigt Seaborn nun für uns das ‚heavy lifting‘ und wer seine Graphiken lieber interaktiv hat, dem helfen Bokeh und Altair. Selbst für das maschinelle Lernen (Maschine Learning, ML) gibt es zahlreiche Wrapper, wie zum Beispiel MlXtend für den klassischen Bereich oder Keras im Bereich DeepLearning.

Warum Python

Dementsprechend beginnt die Reise mit der Rechtfertigung ihrer selbst – Warum Python? Im Gegensatz zu R ist Python eine Sprache für jeglichen Zweck. Folglich ist Python nicht nur flexibler, was den Umgang mit nicht-numerischen Objekten angeht, sondern bietet durch seinen objektorientierten Programmieransatz (OOP) die Möglichkeit jedes Objekt frei zu manipulieren oder zu kreieren. Diese zeigt sich vor allem dann, wenn ein Datensatz entweder sehr ‚unsauber‘ ist oder die in ihm enthaltenen Informationen nicht ausreichen. In Python stehen einem zahlreiche Bibliotheken offen, um Daten auf nicht konventionelle Methode zu bereinigen oder das World Wide Web direkt nach Informationen zu durchforsten oder zu scrappen. Zwar kann dies auch in R getan werden, allerdings nur unter gehörigem Mehraufwand. Sobald man sich jedoch noch weiter weg von den eigentlichen Daten bewegt (z.B. Einrichtung einer API) muss sich R komplett geschlagen geben.

In diesem Zuge möchte ich noch einmal betonen, was numerische Objekte und den Umgang mit (relativ sauberen) Daten angeht, wird Python immer etwas hinter R hinterherhinken. Zum einen weil R genau für diesen Zweck geschrieben wurde und zum anderen, weil neuste Forschungsergebnisse zuerst in R umgesetzt werden. Genau hier kann man sich entscheiden welche Sprache einem mehr bietet. Will man immer up to date sein, neuste Methoden und Algorithmen anwenden und sich dabei auf das Wesentliche konzentrieren, dann ist wahrscheinlich R die bessere Wahl. Will man jedoch eher Daten-Pipelines bauen, für jedes Problem eine Antwort finden und dabei immer nahe an seinen Daten sein, dann ist man wohl mit Python besser beraten.

Werkzeuge

Bevor wir uns nun Pandas und dem Kernbereich von Data Science widmen, möchte ich noch ein Multifunktionstool vorstellen, welches für mich im Alltag geradezu unentbehrlich geworden ist: Jupyter.

Es ist eine Erweiterung der IPython Konsole und ermöglicht einem seinen Code in verschiedenen Zellen zu schreiben, diesen auszuführen und somit auch lange Skripte effektiv zu unterteilen.

#definition einer Funktion in einer Zelle
def sayhello(to ):
    'Print hello to somboday'
    print(f'Hello {to}')

def returnhello(to):
    'Return a string which says Hello to somboday'
    return f'Hello {to}'    
# Introspektion des Docstrings
returnhello?
# Aufruf dieser Funktion in einer weiteren Zelle 
# Schreibt die Nachricht 
sayhello('Statworx-Blog')
Hello Statworx-Blog
# gibt ein Objekt zurück welches vom Notebook formatiert wird 
returnhello('Statworx-Blog') 
'Hello Statworx-Blog'

Das besondere hierbei ist sowohl das interaktive Element, z.B. kann man sich jederzeit schnell und einfach Feedback geben lassen wie ein Objekt aussieht, als auch IDE Elemente wie die Introspektion durch ?. Jupyter kann vor allem durch seine schöne Visualisierung punkten. Wie man in der dritten Zelle (returnhello('Statworx-Blog')) sehen kann, wird immer das letzte Objekt einer Zelle visualisiert. In diesem Fall mag es nur ein String gewesen sein, den wir natürlich mit print einfach ausgeben lassen können. Jedoch werden wir im weiteren Verlauf sehen, dass gerade diese Visualisierung bei Daten unheimlich nützlich ist. Darüber hinaus können die Blöcke aber auch anderes interpretiert werden. Beispielhaft kann man sie im Rohzustand belassen ohne zu kompilieren oder als Markdown verwenden, um den Code nebenbei zu dokumentieren (oder diesen Beitrag hier zu schreiben).

Da Jupyter Notebooks letzten Endes auf der IPython Shell basieren, können wir natürlich auch sämtliche Features und magics benutzten. Hierdurch können automatische Vervollständigungen genutzt werden. Man erhält Zugang zu den Docstring der einzelnen Funktionen und Klassen sowie die Zeilen- und Zellen-magics in IPython. Einzelne Blöcke sind hierdurch für mehr als nur Python Code verwendbar. Zum Beispiel kann Code schnell und einfach auf seine Geschwindigkeit geprüft werden mit %timeit, die System Shell direkt mit %%bash angesprochen oder deren Output direkt aufgenommen werden mit ! am Anfang der Zeile. Darüber hinaus könnte auch Ruby-Code durch %%ruby, Javascript mit %%js ausgeführt oder sogar zwischen Python2 und Python3 %%python2 & %%python3 in der jeweiligen Zelle gewechselt werden.

%timeit returnhello('Statworx-Blog')
170 ns ± 3.77 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%%bash
ls
Blog_Python.html
Blog_Python.ipynb
Blog_Python.md

Eine Anmerkung, die hier auch nicht fehlen darf, ist, dass Jupyter nicht nur exklusiv für Python ist, sondern auch mit R oder Julia verwendet werden kann. Die jeweiligen Kerne sind zwar nicht ‚Out of the Box‘ enthalten, aber sofern man eine andere Sprache benutzen möchte / soll, ist es in meinen Augen den geringen Aufwand wert.

Wem das Ganze nicht gefällt und lieber eine gute alte IDE für Python haben möchte, dem stehen eine Vielzahl an Möglichkeiten offen. Diverse Multi-Sprachen IDE’s mit einem Python-Plug-In (Visuale Studio, Eclipse, etc.) oder jene, die direkt auf Python zugeschnitten sind. Zum letzteren gehören PyCharm und Spyder.

PyCharm wurde von JetBrains entworfen und ist in zwei Versionen erhältlich, der Community Version (CE) und der Pro-Version. Während die CE ein opensource Projekt mit ’nur‘ intelligentem Editor, graphischen Debugger, VSC-Support und Introspektion ist, enthält die Pro Version gegen ein Entgelt einen Support für Web-Devolopment. Während so die Pflege der IDE gesichert ist, fehlt mir persönlich die Optimierung für Data Science spezifische Anwendung (IPython Konsole). Spyder jedoch, als wissenschaftliches opensource Projekt, bietet alles was man sich wünscht. Ein Editor (nicht ganz so intelligent wie die JetBrains Version) für Skripte, einen Explorer für Variablen und Dateien und eine IPython Konsole.

Das letzte Tool, welches benötigt wird und nicht fehlen darf, ist ein Editor. Dieser sollte vor allem schnell sein, um jede Datei zumindest im Roh-Format öffnen zu können. Nötig ist dieses, da man oft durch einen kurzen Blick z.B. in CSV-files schnell einen Eindruck über die Kodierung bekommt: welches Zeichen trennt Zeilen und welches trennt Spalten. Zum anderen kann man schnell und einfach andere Skripte aufrufen, ohne dass man Warten muss bis die IDE geladen ist.

Vorschau

Da wir nun ein Arsenal an Werkzeugen haben, um uns ins Datamunging zu stürzen, können wir uns im nächsten Teil dieser Reihe direkt mit Pandas, seinen DataFrames und dem mathematischen Ökosystem befassen. Marvin Taschenberger

Erfahre mehr!

Als eines der führenden Unternehmen im Bereich Data Science, Machine Learning und KI begleiten wir Sie in die datengetriebene Zukunft. Erfahren Sie mehr über statworx und darüber, was uns antreibt.
Über uns