Python oder R?

Data Scientist soll angeblich darüber sprechen, welche Programmiersprache für Data Science am besten ist. Nämlich Python oder R. Ich benutze beide und deshalb kenne ich Vorteile und Nachteile für beide Programmiersprachen. In diesem Eintrag möchte ich äußern, wie man eine Programmiersprache für ein Data-Science-Projekt auswählen sollte.

Data Science

Bevor ich über Data Science schreibe, möchte ich klar machen, was ich unter Data Science verstehe. Data Science ist ein Bereich, in dem man in Daten etwas Wertvolles findet. Darin gibt es verschiedenen Vorgänge:

  1. Daten abholen
  2. Daten verarbeiten
  3. Statistik (einschließlich Hypothesentests) berechnen
  4. Mathematische Modelle, Maschinelles Lernen, Bayesianische Analyse verwenden
  5. Ergebnis darstellen

In diesem Eintrag behalte ich die obigen Vorgänge im Kopf.

Geschwindigkeit ist gar nicht die Hauptsache

Oft gesagt, dass Python schneller als R ist. Das kommt darauf an, was für ein Code man schreibt. Außerdem bin ich überzeugt davon, dass die Vergleichung der Geschwindigkeit sinnlos ist. Das liegt daran, dass die beiden Programmiersprache langsam sind.

Die beiden sind Skriptsprachen, deshalb sind sie viel langsamer als C, C++, FORTRAN, Java, Scala, usw. Wenn man die Programmiersprache selbst entwickelt, kann ihm die Geschwindigkeit wichtig sein. Aber sonst ist der Unterschied der Geschwindigkeit nur eine Kleinigkeit. Wenn die Geschwindigkeit die Hauptsache ist, sollten Sie unbedingt auf Python und R verzichten.

Was man beachten soll, ist nicht die Geschwindigkeit der Implementierung der Programmiersprache, sondern wie schnell/leicht man ein Skript schreiben kann.

Die Hauptsache: die verfügbaren Bibliotheken

Oft gesagt, dass man oft Windows statt Linux auswählt, nicht, weil Windows besser als Linux ist, sondern weil nötige Applikationen nur auf Windows laufen können.

Die gleiche Logik gilt auch, wenn man eine Programmiersprache auswählt: Die Bibliotheken, die in der Programmiersprache zur Verfügung stehen. Was man mit der Programmiersprache leicht erledigen kann, ist komplett abhängig von den Bibliotheken.

Ich habe oben die fünf Vorgänge geschrieben. In den 3. und 4. Punkten gibt es keinen großen Unterschied zwischen Python und R, weil die beiden gute Bibliotheken für mathematische Berechnung haben.

Abholung von Daten

Ich wähle kaum R aus, um Daten abzuholen, es sei denn, die Rohdaten kann mit R einfach abgeholt werden. Also nur wenn die Daten durch CSV, RDBMS, REST API oder eine eigene Bibliothek abgeholt werden kann, überlege ich, ob ich R benutzen soll. Zum Beispiel wollte ich nicht R benutzen, wenn die Datenquelle eine SOAP-API ist. Ein der großen Nachteile von R ist, dass saubere Daten vorausgesetzt werden. Deshalb ist es gar nicht bequem, mit R nicht strukturierte Daten abzuholen.

Übrigens, wenn man zur Abholung der Daten eine auf einem Hadoop-Cluster laufende Applikation entwickelt, gibt es keine Möglichkeit, R für die Programmiersprache auszuwählen.

Datenverarbeitung

Dieser Teil ist oft abhängig von der vorherigen Teil, nämlich der Abholung von Daten. Aber wenn ich saubere Daten habe, nehme ich normalerweise R. Das liegt an die Bibliothek dplyr.

dplyr ist wirklich ausgezeichnet und importiere ich die Bibliothek immer, wenn ich mit R ein Skript schreibe. Ohne dplyr wollte ich nicht an die Datenverarbeitung denken.

In Python ist pandas die einzige Bibliothek zur Verarbeitung von Tabellen (DataFrames). Ehrlich gesagt, ich mag wegen der folgenden Gründen die Bibliothek gar nicht:

Darstellung des Ergebnis

Ich wähle auf jeden Fall R aus. Python ist überhaupt nicht geeignet zur Darstellung des Ergebnis. Falls ich nur der Data Scientists das Ergebnis zeige, kann ich Python benutzen, aber sonst verzichte ich auf Python.

Das liegt daran, dass Jupyter die einzige Applikation ist, mit der man das Ergebnis der Analyse auf Python zeigen kann. Das heißt, das geschriebene Code ist immer dabei. Das ist überhaupt nicht geeignet für die Präsentation des Ergebnis.

R Markdown ermöglicht uns, einen Bericht und eine Präsentation mir hoher Qualität zu erstellen. Darüber hinaus bewerbe ich hoch die Bibliothek ggplot2. Damit kann man schnell ein schönes Diagramm erstellen. Die API der Bibliothek ist einheitlich und benutzerfreundlich, deshalb ist Visualisierung in R nicht besonderes.

In Python gibt es leider keine benutzerfreundliche Bibliothek für Visualisierung. matplotlib ist die "default" Bibliothek zur Visualisierung, aber für die Bibliothek muss man die passende Daten vorbereiten. Die Qualität eines Diagramm ist nicht hoch. pandas bietet nur ein bisschen Methode zur Visualisierung, aber Funktionalität ist zu klein. seaborn macht teilweise Visualisierung einfach, aber die Funktionalität ist auch begrenzt. Die Bibliothek namens ggplot steht für Python zur Verfügung, aber nur kleiner Teil von ggplot wurde implementiert.

Die Ausnahme ist vielleicht Web-Entwicklung, aber die ist ein anderes Thema.

Statistik, maschinelles Lernen, Deep Learning

Für Statistik und maschinelles Lernen gibt es keinen großen Unterschied zwischen R und Python. Da R eine Programmiersprache für Statistik ist, stehen mehr Bibliotheken für R zur Verfügung als Python. Darüber hinaus berechnen Bibliotheken für R relative ausführlich. aber mit Python kann man übliche Statistik.

NB. Ich weiß nicht, wie viele es Python-Bibliotheken für Statistik gibt. Aber Scipy bietet viele Funktionen für Statistik, deshalb macht man Statistik in Python mit Scipy und ein paar Bibliotheken. Für gibt es 12108 Bibliotheken. Aber natürlich sind nicht alle für Statistik.

Für maschinelles Lernen in Python ist scikit-learn De-facto-Standard. Es gibt noch mehrere Frameworks von maschinellem Lernen für Python, aber man sollte darauf verzichten, es sei denn, es gibt einen speziellen Grund dafür.

Für R gibt es viele Bibliotheken für Algorithmen von maschinellem Lernen. Das klingt gut, aber eigentlich ist sehr schlimm, dass die API gar nicht einheitlich ist. Deshalb muss man unbedingt eins der guten Frameworks (Wrapper classes) lernen/üben. Meiner Meinung nach sind caret und mlr die beste Auswahl. (Meine Empfehlung ist mlr.)

In Bezug auf Deep Learning gibt es einen großen Unterschied zwischen R und Python: R ist immer die zweite Klasse. Theano, Tensorflow, PyTorch. Mehrere Deep-Learning-Frameworks gibt es für Python, aber nicht für R. Deshalb, wenn man ein kompliziertes neuronales Netz erstellen möchte, sollte man unbedingt Python auswählen.

Aber dank R interface to Keras und Tensorflow for R kann man mit R ein neuronales Netz einfach erstellen. Da ich leider niemals diese Frameworks benutzt habe, kann ich sie nicht bewerben.

Überblick über den Unterschied bezüglich Daten-Analyse

PythonR
Abholung der Daten Viele Bibliotheken mit hoher Qualität Unbequem, es sei denn, die Daten sind unstrukturiert
Datenverwaltung pandas ist OK. dplyr ist ausgezeichnet
Stats/ML Scipy und scikit-learn mlr oder caret
Deep Learning Viele Frameworks keras und Tensorflow sind verfügbar
Visualisierung katastrophal ggplot2 und Rmarkdown sind perfekt

Wie man die Programmiersprache auswählen soll.

Obwohl sowohl R als auch Python uns Daten-Analyse ermöglichen, ist die geeignete Programmiersprache je nach der Situation unterschiedlich. Grob gesagt,

  • Python ist besser zur Analyse von unstrukturierten Daten.
  • Wenn die Daten gut strukturiert sind, ist R besser.

Da die Daten auf ein Hadoop-Cluster normalerweise unstrukturiert sind, ist Python passend für Entwicklung, die mit Hadoop verbunden ist. Hier sollte man Bilder und Töne als unstrukturierte Daten betrachten. Deshalb hat Python einen Vorteil für Deep Learning. Aber sonst ist R viel besser als Python.

Ich entwickle auf Hadoop-Cluster laufende Applikationen, deswegen schreibe ich oft Python-Codes. Aber für Analyse von verarbeiteten Daten benutze ich normalerweise R.

Welche Programmiersprache man zum ersten Mal lernen soll.

Ich bin überzeugt davon, dass alle Data Scientists sowohl Python als auch R beherrschen sollen. Das liegt daran, dass die beiden Programmiersprachen relative einfach sind, solange man Daten analysiert. (Ein normale Software-Entwicklung ist ganz anderes.)

Aber wenn man wenig oder keine Kenntnisse auf eine Programmiersprache hat aber Daten analysieren wollte, empfehle ich R sehr. Wenn man strukturierte Daten hat, ist R wirklich angenehm (im Gegensatz zu Python) und das ist normalerweise der Fall, wenn man Daten-Analyse lernt.

Darüber hinaus ist es sehr einfach, eine Entwicklungsumgebung für R zu installieren. R, RStudio, nötige Bibliotheken (dplyr, ggplot2, data.table, caret, mlr, ...). Der Installationsprozesse ist nicht abhängig vom Betriebssystem. Die Umgebung ist auch nicht. Das ist ein großer Vorteil für einen Anfänger. Außerdem gibt es sehr viel Lernmaterialien für Datenanalyse mit R. Wie ich oben geschrieben habe, sind die R-Bibliotheken für Datenanalyse ausgezeichnet.

Fazit

Wenn es um die Datenanalyse (von strukturierten Daten) geht, ist R immer besser als Python. Vor allem für Visualisierung gibt es keinen Grund dafür, Python auszuwählen. Aber wenn die Daten unstrukturiert sind, kann es viel bequem sein, mit Python Daten zu analysieren.

Share this page on        
Categories: #data-mining