In vielen Tutorials oder Handbüchern scheint die Erzählung zu implizieren, dass R und Python als komplementäre Komponenten des Analyseprozesses nebeneinander existieren. Für mein ungeübtes Auge scheint es jedoch so, als ob beide Sprachen das Gleiche tun.
Meine Frage ist also, ob es wirklich spezialisierte Nischen für die beiden Sprachen gibt oder ob es nur eine persönliche Präferenz ist, die eine oder die andere zu verwenden?
Antworten:
Sie ergänzen sich. Es stimmt , dass beide können die gleichen Dinge tun, aber dies kann von den meisten Sprachen gesagt werden. Jeder hat seine Stärken und Schwächen. Die allgemeine Ansicht scheint zu sein, dass Python am besten für die Datenerfassung und -aufbereitung sowie für die Textanalyse geeignet ist. R wird für die Datenanalyse als das Beste angesehen, da es in erster Linie eine statistische Sprache ist.
R hat eine Fülle von Paketen für alles, was Sie sich vorstellen können, aber das Wichtigste ist die statistische Analyse - von der einfachen Chi-Quadrat-Analyse über die Faktoranalyse bis hin zu den Gefährdungsmodellen ist es einfach und robust. Einige der größten Namen in der Statistik erstellen R-Pakete, und es gibt eine lebhafte Community, die Ihnen bei jedem Bedarf hilft.
ggplot2
ist ein Standard in der Datenvisualisierung (Grafiken etc ..). R ist eine vektorisierte Sprache, die zum effizienten Durchlaufen von Daten entwickelt wurde. Es speichert auch alle Daten im RAM, einem zweischneidigen Schwert - es ist bissig bei kleineren Datenmengen (obwohl manche mit mir streiten), aber es kann nicht gut mit großen Datenmengen umgehen (obwohl es Pakete hat, um dies zu umgehen , wieff
).Python ist wesentlich einfacher zu erlernen als R - insbesondere für diejenigen, die bereits Programmiererfahrung haben. R ist nur ... komisch. Python eignet sich hervorragend zum Abrufen von Daten und ist die Sprache, die für das Web-Scraping (mit dem Erstaunlichen
beautifulsoup
) verwendet wird. Python ist bekannt für seine Stärke beim Parsen von Zeichenfolgen und bei der Textbearbeitung.pandas
ist eine großartige Bibliothek zum Manipulieren, Zusammenführen, Transformieren usw. von Daten und ist schnell (und wahrscheinlich von R inspiriert).Python ist großartig, wenn Sie etwas programmieren müssen. Dies ist nicht überraschend, da es sich um eine Allzwecksprache handelt. R wurde jedoch mit all seinen Erweiterungen von Statistikern für Statistiker gebaut. Während Python bei vielen Anwendungen einfacher und besser und schneller ist, ist R die ideale Plattform für statistische Analysen.
quelle
data.table
Paket in R speziell für die effiziente Arbeit mit großen Datenmengen und für die verteilte Verarbeitung gedacht.data.table
; Ich freue mich auch sagen zu können, dassrvest
es ein AUSGEZEICHNETES Tool für die meisten Schabeaufgaben ist und viel einfacher in Betrieb zu nehmen ist alsbeautifulsoup
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:
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 undMySQLdb
für Python reibungslos arbeiten, nicht wirklich viel hinzuzufügen). Wenn es um das Lesen externer CSV-Dateien geht, bietet dasdata.table
Paket für R die Funktionfread
, 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 SQLdt[i, j, fun_by]
, wo dies beabsichtigt istdt[where_condition, select_column, grouped_by (or the like)]
. Benutzerdefinierte Funktionen können sowohl dort als auch in derj
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-Methodenapply, 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 Strukturpd.DataFrame
(die Python aus irgendeinem mir noch unbekannten Grund fehlt), die die Daten so behandelt, wie sie sind, nämlich Datenrahmen (anstelle von einigennumpy 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 Pythonapply
oder eine beliebige benutzerdefinierte Funktion auf einen gruppierten Datensatz oder eine Teilmenge des Frames anwendenlambda
. Ich persönlich mag es nichtdf[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 haltenscikit-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 seinenshiny 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.quelle
Python ist eine allgemeine Programmiersprache. Daher eignet es sich neben der Datenanalyse auch für viele andere Aufgaben. Wenn wir beispielsweise die Modellausführung im Produktionsserver automatisieren möchten, ist Python eine wirklich gute Wahl. Andere Beispiele sind die Verbindung mit Hardware / Sensoren zum Lesen von Daten, die Interaktion mit Datenbanken (relationale oder nicht strukturierte Daten wie JSON), das Parsen von Daten, die Netzwerkprogrammierung (TCP / IP), die grafische Benutzeroberfläche, die Interaktion mit der Shell usw. (Nun, Warum möchte ein Datenwissenschaftler so viele dieser Aufgaben ausführen, die wenig mit Vorhersagemodellen zu tun haben? Ich denke, die Menschen haben unterschiedliche Definitionen. Was ist ein Datenwissenschaftler?In einigen Organisationen ist das Parsen der Daten und das Durchführen der deskriptiven Analyse mit dem Dashboard für das Geschäft ausreichend und die Daten sind nicht ausgereift genug, um Vorhersagemodelle zu erstellen. Auf der anderen Seite kann man in vielen kleinen Unternehmen erwarten, dass Datenwissenschaftler viel Software-Engineering betreiben. Wenn Sie Python kennen, sind Sie von anderen Software-Ingenieuren unabhängig.)
R hat eine Menge statistischer Pakete, die viel besser sind als Python oder MATLAB. Durch die Verwendung von R kann man wirklich auf Modellebene statt auf Implementierungsdetailebene denken. Dies ist ein großer Vorteil bei der Entwicklung statistischer Modelle. Beispielsweise implementieren viele Menschen neuronale Netze manuell in Python. Wenn Sie solche Arbeiten ausführen, verstehen Sie möglicherweise nicht, warum neuronale Netze funktionieren. Befolgen Sie jedoch einfach das Rezept, um die Arbeit anderer zu duplizieren und zu überprüfen, ob sie funktioniert. Wenn wir in R arbeiten, können wir uns leicht auf die Mathematik hinter dem Modell konzentrieren, anstatt auf Implementierungsdetails.
In vielen Fällen benutzen die Leute sie zusammen. Das Erstellen von Software ist in Python einfach und das Erstellen von Modellen in R besser. Wenn wir ein Modell in der Produktion liefern möchten, aber kein Papier, benötigen wir möglicherweise beides. Wenn in Ihrem Unternehmen viele Softwareentwickler beschäftigt sind, benötigen Sie möglicherweise mehr R. Wenn in Ihrem Unternehmen viele Forscher beschäftigt sind, benötigen Sie möglicherweise mehr Python.
quelle
scikit-learn
? scikit-learn.org/stableProgrammierer aller Klassen unterschätzen, wie viel Sprachauswahl kulturell ist . Webentwickler wie Node.js. Wissenschaftler wie Python. Als polygloter Softwareentwickler, der mit der Fließfähigkeit von Javascript und der Starrheit von Java trotzdem umgehen kann, habe ich festgestellt, dass es keinen eigentlichen Grund gibt, warum diese Sprachen für die Arbeit des anderen schlecht sind - nur die enorme Menge an Paketen, Dokumentationen, Communities, Büchern, usw. um sie herum.
(Aus intrinsischen Gründen ist eine zufällige Sprache besser als eine andere Sprache, siehe die bevorstehenden Kommentare zu dieser Antwort.)
Meine persönliche Vorhersage ist, dass Python der Weg der Zukunft ist, weil es alles kann, was R kann - oder vielmehr genug von dem, was engagierte Programmierer tun, um die Lücken zu füllen - und eine weitaus bessere Software-Engineering-Sprache ist. Software Engineering ist eine Disziplin, die sich mit Folgendem befasst:
Ehrlich gesagt ist Python leichter zu lernen.
Wissenschaftler und Statistiker werden erkennen, dass sie Stakeholder einer guten Softwareentwicklungspraxis sind, nicht eines unabhängigen und ungestörten Berufs. Nur meine Meinung, aber Papiere, die die Sprödigkeit des akademischen Codes belegen, werden dies unterstützen.
Diese Antwort ist meine ganze Meinung - aber Sie haben eine sehr begründete Frage gestellt, und da sie bisher gut aufgenommen wurde, hatte ich das Gefühl, dass Sie eine unprätentiöse, vernünftig informierte (ich hoffe!) Stellungnahme als Antwort verdient haben. Es gibt ein ernstes Argument für Python über R auf der ganzen Linie und ich würde nicht versuchen, eine unparteiische Antwort zu posten, wenn die Realität selbst parteiisch sein könnte.
quelle
Ich bin ein R-Benutzer, aber ich denke, Python ist die Zukunft (ich glaube nicht, dass es die Syntax ist)
Python ist die Zukunft
Der Vorteil von Python liegt darin, dass andere bereits die viel umfassendere Unterstützung und für Programmierer eine logischere Syntax erwähnt haben.
Auch die Fähigkeit, Ergebnisse aus Ihrer Analyse in ein Produktionssystem zu übersetzen, ist viel einfacher.
Vielleicht liegt es daran, dass Python ein universeller Zweck ist und R nicht, aber selbst ich hebe die Augenbrauen, wenn ich eine produzierte R-Pipeline sehe.
Aber nicht nur das, auch für fortgeschrittene Anwendungen holt Python schnell auf (Scikit-Learn, PyBrain, Tensorflow usw.), und während R immer noch die Verkehrssprache in der Wissenschaft ist, wie statistische Methoden implementiert werden können, hat Python aufgrund dessen im professionellen Bereich eine enorme Bedeutung erlangt das Aufkommen fortgeschrittener Fachbibliotheken.
Aber R ist nicht schlecht
Viele Leute scheinen auf den Zug "R hat schlechte Syntax" zu springen.
Ich möchte vorschlagen, dass die Syntax von R eine gute Sache ist!
Zuweisungsfunktionen, verzögerte Auswertung, nicht standardmäßige Auswertung und Formeln sind enorme Vorteile bei der Verwendung von R.
Es spart so viel Zeit, sich keine Gedanken über das Entkommen von Variablennamen machen zu müssen, auf die in Ihrer Zusammenfassung verwiesen wird, oder darüber, wie die Logik erstellt wird, was gegen was oder modelliert wird Namen mit
names()
ansehen und dann durch Hinzufügen neue Namen vergeben<- c("A", "B", "C")
.Wenn sich Leute über Rs seltsame Syntax beschweren, betrachten sie sie als Programmiersprache, nicht als datenwissenschaftliches Werkzeug.
Als jemand, der aus R kommt und Dplyr liebt, finde ich die Syntax von Pandas im Vergleich etwas ungeschickt.
Ja, es ist etwas flexibler, aber für die meisten Aufgaben müssen Sie viel mehr Tastenanschläge ausführen als in R, nur um Pythons Parser zu befriedigen und nicht um Ihre Idee auszudrücken.
Fazit
Natürlich ist es ratsam, beides zu wissen, und während Python dorthin kommt, vereinfachen die domänenspezifischen Designoptionen von R die Ad-hoc-Arbeit. Der große Nachteil von R ist, dass es schwierig ist, seine Domäne zu verlassen, was Sie im Grunde tun müssen, wenn Sie versuchen, Ihre Ergebnisse auf nachhaltige Weise umzusetzen.
quelle
Wenn Sie R eher als statistisches Werkzeug und nicht als Programmiersprache betrachten, ist es wirklich großartig. Es ist weitaus flexibler als Stata oder SPSS, kann aber auch alles, was sie können. Ich habe Stata während des Studiums gelernt, und R war leicht zu betrachten, da ich bereits die Perspektive des statistischen Tools hatte und keine reine Programmierspracherfahrung, die andere haben könnten.
Ich denke, Frustration über R kommt ins Spiel, wenn diejenigen, die Programmierer sind, versuchen, R zu lernen und zu verstehen. Aber es ist ein großartiges Werkzeug für diejenigen, die aus statistischen Gründen zu R kommen.
Python ist großartig, wenn Sie bereits ein großartiger Programmierer sind. Aber für mich als Anfänger in Programmierung und Statistik war R eine viel bessere Wahl. Es ist wirklich nur eine Vorliebe, welche mehr zu Ihren Fähigkeiten und Interessen passt.
quelle
Hinzufügen zu einigen der vorherigen Antworten:
Nach meiner Erfahrung gibt es nichts Einfacheres, als Rs dplyr + tidyr, ggplot und Rmarkdown zu verwenden, um von Rohdaten zu präsentierbaren Ergebnissen zu gelangen. Python bietet eine Menge und ich benutze es immer mehr, aber ich mag die Art und Weise, wie Hadleys Pakete zusammenpassen.
quelle
Python hat eine breite Akzeptanz außerhalb der Wissenschaft, sodass Sie von all dem profitieren. Wie "Ein wütender Leitfaden für R" hervorhebt, wurde R von einer Community entwickelt, die in erster Linie keine Softwareentwickler hatte.
Ich würde sagen, dass R heute zwei Hauptstärken hat: einige wirklich ausgereifte hochspezialisierte Pakete in einigen Bereichen und hochmoderne, reproduzierbare Forschungspakete.
Python scheint für alles andere besser geeignet zu sein.
Das ist natürlich eine Meinung, wie fast alles in diesem Thread. Ich bin ein bisschen erstaunt, dass dieser Thread noch lebt.
quelle
Wie in anderen Antworten beschrieben, ist Python eine gute Programmiersprache für allgemeine Zwecke, wohingegen R als Programmiersprache schwerwiegende Mängel aufweist, aber eine größere Anzahl von Datenanalysebibliotheken enthält. In den letzten Jahren hat Python mit der Entwicklung ausgereifter Datenanalysebibliotheken wie Scikit-Learn R eingeholt, während R niemals repariert werden wird. In der Praxis verwende ich Python (eigentlich Hy ) für fast alles und wende mich nur für relativ esoterische Methoden wie die Quantil-Regression (deren Implementierung in Pythons Statistikmodellen nicht funktioniert) an R. Es gibt verschiedene Möglichkeiten, R von Python aus aufzurufen. PypeR ist so einfach, dass ich es in so feindlichen Umgebungen wie einem Windows-Server einsetzen kann.
Edit : Ich ermutige jeden, der sich darüber weiter streiten möchte, mit den Autoren des verlinkten Aufsatzes zu sprechen, anstatt diese Antwort zu kommentieren.
quelle