Ich werde versuchen, eine Antwort zu formulieren, die die Hauptpunkte berührt, in denen die beiden Sprachen für Data Science / Statistik / Datenanalyse und dergleichen ins Spiel kommen, als jemand, der beide verwendet.
Der Workflow in der Datenanalyse besteht in der Regel aus folgenden Schritten:
- Abrufen der Daten aus einer Quelle (höchstwahrscheinlich aus einer SQL / noSQL-Datenbank oder CSV-Dateien).
- Analysieren Sie die Daten in einem anständigen und vernünftigen Format (Datenrahmen), damit Sie Operationen ausführen und darüber nachdenken können.
- Anwenden einiger Funktionen auf die Daten (Gruppieren, Löschen, Zusammenführen, Umbenennen).
- Anwenden eines Modells auf die Daten (Regression, Clustering, ein neuronales Netzwerk oder eine andere mehr oder weniger komplizierte Theorie).
- Bereitstellen / Präsentieren Ihrer Ergebnisse für ein mehr oder weniger technisches Publikum.
Daten abrufen
99% der Zeit, der Prozess die Daten des Abrufens geht um eine Art von SQL oder Impala Datenbank abfragt: beiden Pythons und R haben bestimmte Clients oder Bibliotheken, die die Arbeit in kürzester Zeit zu tun und gleich gut ( RImpala
, RmySQL
für R und MySQLdb
für Python reibungslos arbeiten, nicht wirklich viel hinzuzufügen). Wenn es um das Lesen externer CSV-Dateien geht, bietet das data.table
Paket für R die Funktion fread
, mit der riesige und komplizierte CSV-Dateien mit jeder benutzerdefinierten Analyseoption in kürzester Zeit eingelesen und das Ergebnis direkt in Datenrahmen mit Spaltennamen und Zeilennummern umgewandelt werden kann.
Datenrahmen organisieren
Wir möchten, dass die Daten in einer Art Tabelle gespeichert werden, damit wir problemlos auf jeden einzelnen Eintrag, jede einzelne Zeile oder Spalte zugreifen können.
Das R- Paket data.table
bietet unschlagbare Möglichkeiten zum Beschriften, Umbenennen, Löschen und Zugreifen auf die Daten. Die Standardsyntax ist sehr ähnlich wie bei SQL dt[i, j, fun_by]
, wo dies beabsichtigt ist dt[where_condition, select_column, grouped_by (or the like)]
. Benutzerdefinierte Funktionen können sowohl dort als auch in der j
Klausel eingefügt werden, so dass Sie völlig frei sind, die Daten zu manipulieren und komplizierte oder ausgefallene Funktionen auf Gruppen oder Teilmengen anzuwenden (z. B. die i-te Zeile, k-te) Element und summiere es zu dem (k-2) -ten Element der (i-1) -ten Zeile, wenn die Standardabweichung der gesamten Spalte so ist, wie sie ist (gruppiert nach der letzten Spalte insgesamt). Schauen Sie sich die Benchmarks und diese andere erstaunliche Frage zu SO an. Das Sortieren, Löschen und Umbenennen von Spalten und Zeilen erledigt alles, was sie tun müssen, und die standardmäßigen vektorisierten R-Methoden apply, sapply, lapply, ifelse
führen vektorisierte Operationen für Spalten und Datenrahmen aus, ohne jedes Element zu durchlaufen (denken Sie daran, wann immer Sie Schleifen in R you verwenden) falsch machen).
Pythons Gegenwaffe ist die pandas
Bibliothek. Es liefert schließlich die Struktur pd.DataFrame
(die Python aus irgendeinem mir noch unbekannten Grund fehlt), die die Daten so behandelt, wie sie sind, nämlich Datenrahmen (anstelle von einigen numpy array, numpy list, numpy matrix
oder was auch immer). Vorgänge wie Gruppieren, Umbenennen, Sortieren und dergleichen können problemlos ausgeführt werden, und auch hier kann der Benutzer mithilfe von Python apply
oder eine beliebige benutzerdefinierte Funktion auf einen gruppierten Datensatz oder eine Teilmenge des Frames anwenden lambda
. Ich persönlich mag es nicht df[df.iloc(...)]
, wenn die Grammatik auf die Einträge zugreift, aber das ist nur persönlicher Geschmack und überhaupt kein Problem. Die Benchmarks für Gruppierungsvorgänge sind immer noch etwas schlechter als R, data.table
aber wenn Sie nicht 0,02 Sekunden für die Kompilierung einsparen möchten, gibt es keinen großen Leistungsunterschied.
Streicher
Die R- Methode zum Behandeln von Zeichenfolgen besteht darin, das stringr
Paket zu verwenden, das mühelos beliebige Textmanipulationen, Anagramme, reguläre Ausdrücke, nachgestellte Leerzeichen oder ähnliches ermöglicht. Es kann auch in Kombination mit JSON-Bibliotheken verwendet werden, die JSON-Wörterbücher entpacken und deren Elemente aus der Liste entfernen, sodass ein endgültiger Datenrahmen ohne Nicht-UTF8-Zeichen oder Leerzeichen zur Verfügung steht, in dem die Spaltennamen und die Elemente den Anforderungen entsprechen da drin.
Pythons Pandas .str.
spielen genauso gut mit regulären Ausdrücken wie ihre Konkurrenten, auch hier gibt es keinen großen Unterschied im Geschmack.
Modelle anwenden
Hier ergeben sich meiner Meinung nach Unterschiede zwischen den beiden Sprachen.
Rverfügt seit heute über eine unschlagbare Reihe von Bibliotheken, mit denen der Benutzer im Wesentlichen in ein bis zwei Codezeilen alles tun kann, was er will. Standardmäßige funktionale oder polynomielle Regressionen werden in Einzeilen ausgeführt und erzeugen Ausgaben, deren Koeffizienten leicht lesbar sind, begleitet von ihren entsprechenden Konfidenzintervallen und p-Werteverteilungen. Ebenso für Clustering, ebenso für zufällige Waldmodelle, ebenso für Dendogramme, Hauptkomponentenanalyse, Singulärwertzerlegungen, logistische Anpassungen und vieles mehr. Die Ausgabe für jede der oben genannten Optionen wird höchstwahrscheinlich mit einer bestimmten Plotklasse geliefert, die Visualisierungen der gerade ausgeführten Aktionen mit Farben und Blasen für Koeffizienten und Parameter generiert. Hypothesentests, statistische Tests, Shapiro,
Python versucht mit SciPy
und Schritt zu halten scikit-learn
. Die meisten Standardanalysen und -modelle sind ebenfalls verfügbar, aber für Code etwas länger und für das Lesen weniger intuitiv (meiner Meinung nach). Es fehlen kompliziertere Maschinen, obwohl einige auf einige Kombinationen der bereits vorhandenen Bibliotheken zurückzuführen sind. Eine Sache, die ich lieber in Python als in R mache, ist die Bag-of-Word-Textanalyse mit Bi-Gramm, Tri-Gramm und höheren Ordnungen.
Präsentation der Ergebnisse
Beide Sprachen haben schöne Zeichenwerkzeuge, ggplot2
vor allem R und das entsprechende Python-Äquivalent. Es gibt nicht viel zu konkurrieren, aber sie erledigen ihre Arbeit sicher, obwohl ich der Meinung bin, dass Sie, wenn Sie die Ergebnisse präsentieren , andere Tools verwenden müssen - es gibt ausgefallene farbenfrohe Design-Tools, und weder Python noch R sollen das überraschen Publikum mit schickem rot-grünem Drag & Drop. R hat in letzter Zeit eine Reihe von Verbesserungen an seinen shiny app
Funktionen veröffentlicht, die es ihm grundsätzlich ermöglichen, interaktive Ausgaben zu erstellen . Ich wollte es nie lernen, aber ich weiß, dass es da ist und die Leute es gut gebrauchen.
Randnotiz
Als Randnotiz möchte ich betonen, dass der Hauptunterschied zwischen den beiden Sprachen darin besteht, dass Python eine Allzweck-Programmiersprache ist, die von und für Informatik, Portabilität, Bereitstellungen usw. erstellt wurde. Es ist großartig, was es macht und es ist einfach zu lernen; Es gibt niemanden, der Python nicht mag. Aber es ist eine Programmiersprache, um zu programmieren.
Rwurde von und für Mathematiker, Physiker, Statistiker und Datenwissenschaftler erfunden. Wenn Sie aus diesem Hintergrund kommen, ist alles sinnvoll, da es die in Statistik und Mathematik verwendeten Konzepte perfekt widerspiegelt und reproduziert. Aber wenn Sie stattdessen aus der Informatik kommen und Java oder C in R simulieren möchten, werden Sie enttäuscht sein. Es gibt keine "Objekte" im Standard-Sinne (na ja, es gibt, aber nicht das, was man normalerweise für sie hält ...), es gibt keine Klassen im Standard-Sinne (na ja, es gibt, aber nicht das, was man normalerweise hält) denkt sie sind ...), es hat keine "Zeiger" oder alle anderen Informatikstrukturen - aber nur, weil es sie nicht braucht. Last but not least: Dokumentation und Pakete sind einfach zu erstellen und zu lesen (wenn Sie Rstudio verwenden); Es gibt eine große und leidenschaftliche Community, und es dauert buchstäblich fünf Sekunden, bis Google weiß, wie man ein zufälliges Problem in R einfügt. Der erste Eintrag leitet Sie zu einer Lösung des Problems (von jemand anderem) mit entsprechendem Code weiter in kürzester Zeit.
Die Infrastruktur der meisten Industrieunternehmen ist in Python (oder einer pythonfreundlichen Umgebung) integriert, mit der Python-Code problemlos integriert werden kann (praktisch import myAnalysis
überall, und Sie sind fertig). Auf jeder modernen Technologie, jedem Server oder jeder Plattform kann jedoch problemlos Hintergrund-R-Code ausgeführt werden.