R vs Python für die Datenanalyse [geschlossen]

60

Ich programmiere seit ungefähr einem Jahr und interessiere mich sehr für Datenanalyse und maschinelles Lernen. Ich nehme an ein paar Online-Kursen teil und lese ein paar Bücher.

Alles, was ich tue, verwendet entweder R oder Python und ich suche nach Vorschlägen, ob ich mich auf eine Sprache konzentrieren soll (und wenn ja, welche) oder mit beiden weitermachen soll. ergänzen sie sich?

- Ich sollte erwähnen, dass ich C # in der Schule benutze, aber mit Python durch Selbststudium vertraut bin.

The_Cthulhu_Kid
quelle
Hier ist vielleicht ein interessanter Link: coursera.org/course/compdata
Giorgio

Antworten:

39

Ich benutze sowohl Python (für die Datenanalyse natürlich einschließlich numpy und scipy) als auch R nebeneinander. Ich verwende jedoch R ausschließlich zur Datenanalyse und Python für allgemeinere Programmieraufgaben (z. B. Workflow-Steuerung eines Computermodells).

In Bezug auf Grundoperationen, sagen wir Operationen auf Arrays und die Sortierung, sind R und Python + numpy sehr vergleichbar. In der sehr großen Bibliothek statistischer Funktionen hat R einen Vorteil. Darüber hinaus scheint matplotlib nicht so gut zu sein wie ggplot2, aber ich habe matplotlib nicht so oft verwendet. Außerdem würde ich mich zuerst auf eine Sprache konzentrieren und mich mit den Besonderheiten dieser Sprache auskennen. Sie scheinen in erster Linie an Datenanalyse interessiert zu sein, nicht an Software-Engineering. Ich würde R wählen und mich daran halten. Das heißt, ich denke, die Wahl für Python + Numpy + Scipy + Scikit ist auf jeden Fall eine ausgezeichnete Wahl. Ich habe nur das Gefühl, dass R nur ein bisschen besser ist.

Ich würde mich auch umschauen, was Ihre Kollegen und andere Leute in Ihrem Bereich gebrauchen. Wenn sie alle beispielsweise Python verwenden, ist es sinnvoll, sich daran zu halten, um leichter von ihnen zu lernen und Code auszutauschen.

Haftungsausschluss: Beachten Sie, dass ich ein starker R-Benutzer bin, so dass meine Meinung möglicherweise voreingenommen ist, obwohl ich versucht habe, meine Antwort so objektiv wie möglich zu halten. Außerdem habe ich Python + numpy nicht ausgiebig benutzt, obwohl ich Collegues kenne, die alle ihre Datenanalysen darin durchführen.

ps: Dieser Link könnte interessant sein: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps: oder dieses Zitat aus diesem Beitrag :

Ich benutze R und Python für alle meine Recherchen (mit Rcpp oder Cython nach Bedarf), aber ich würde lieber vermeiden, in C oder C ++ zu schreiben, wenn ich es vermeiden kann. R ist eine wunderbare Sprache, zum großen Teil wegen der unglaublichen Benutzergemeinschaft. Es wurde von Statistikern erstellt, was bedeutet, dass die Datenanalyse im Herzen der Sprache liegt. Ich halte dies für ein wichtiges Merkmal der Sprache und für einen wichtigen Grund, warum sie so schnell nicht ersetzt wird. Python ist im Allgemeinen eine bessere Gesamtsprache, insbesondere wenn man die Mischung aus funktionaler Programmierung und Objektorientierung betrachtet. In Kombination mit Scipy / Numpy, Pandas und Statistikmodellen bietet dies eine leistungsstarke Kombination. Aber Python fehlt immer noch eine ernsthafte Gemeinschaft von Statistikern / Mathematikern.

Paul Hiemstra
quelle
3
Wenn Sie sagen, dass R stärker als Python ist, meinen Sie Python + Numpy / Blaze + Scipy oder einfaches Python?
9000
5
Ich meine Python + Numpy ja, sonst wäre die Auswahl noch einfacher. Ich denke, in Bezug auf grundlegende Operationen, sagen wir, Operationen auf Arrays und die Sortierung, R und Python + Numpy sind sehr vergleichbar. In der sehr großen Bibliothek statistischer Funktionen hat R einen Vorteil. Außerdem scheint matplotlib nicht so gut zu sein wie ggplot2, aber ich habe matplotlib nicht so oft verwendet.
Paul Hiemstra
Das heißt, ich denke, die Wahl für Python + Numpy + Scipy + Scikit ist auf jeden Fall eine ausgezeichnete Wahl. Ich habe nur das Gefühl, dass R nur ein bisschen besser ist.
Paul Hiemstra
@PaulHiemstra - Sie machen einige nette Punkte in Ihren Kommentaren, die Ihre Antwort wahrscheinlich verbessern würden - wenn die Frage erneut geöffnet wird und Sie diese Gelegenheit haben.
PSR
@psr habe ich in meinen Kommentaren bearbeitet, anscheinend muss die Frage nicht offen sein, wenn ich sie bearbeiten möchte (vielleicht kann nur ich sie bearbeiten ...).
Paul Hiemstra
36

Hintergrund: Ich bin ein Datenwissenschaftler bei einem Startup in Austin und komme von der Grad-Schule (Physik). Ich verwende täglich Python für die Datenanalyse, benutze aber etwas R. Ich benutze auch C # /. NET und Java (fast täglich). In der Grundschule habe ich C ++ sehr oft verwendet.

Ich denke, das Hauptproblem bei der Verwendung von Python für numerische Zeichen (über R) ist die Größe der Benutzergemeinschaft. Da es die Sprache schon immer gibt, haben viele Leute Dinge getan, die Sie wahrscheinlich tun möchten. Dies bedeutet, dass Sie bei einem schwierigen Problem das Paket einfach herunterladen und an die Arbeit gehen können. Und R "funktioniert einfach": Sie geben ihm einen Datensatz und wissen, welche zusammenfassenden Statistiken nützlich sind. Sie geben ihm einige Ergebnisse, und er weiß, welche Handlungen Sie wollen. Alle gängigen Pläne, die Sie machen möchten, sind vorhanden, auch einige ziemlich esoterische, die Sie in Wikipedia nachschlagen müssen. So schön wie scipy / numpy / pandas / statsmodels / etc. sind für Python, sie sind nicht auf der Ebene der R-Standardbibliothek.

Der Hauptvorteil von Python gegenüber R ist, dass es eine echte Programmiersprache in der C-Familie ist. Es lässt sich leicht skalieren, sodass es denkbar ist, dass alles, was Sie in Ihrer Sandbox haben, in der Produktion verwendet werden kann. In Python ist die Objektorientierung eingebettet, im Gegensatz zu R, wo es sich wie ein nachträglicher Einfall anfühlt (weil es so ist). Es gibt noch andere Dinge, die Python gut macht: Threading und parallele Verarbeitung sind ziemlich einfach, und ich bin mir nicht sicher, ob dies bei R der Fall ist. Wenn Sie Python lernen, erhalten Sie auch ein leistungsfähiges Skript-Tool. Es gibt auch wirklich gute (kostenlose) IDEs für Python, viel bessere, wenn Sie bereit sind zu zahlen (weniger als 100 US-Dollar), und ich bin mir nicht sicher, ob dies für R der Fall ist - die einzige mir bekannte R-IDE ist R Studio, das ist ziemlich gut, aber meiner Erfahrung nach nicht so gut wie PyDev + Eclipse.

Ich füge das als Kicker hinzu: Da du noch in der Schule bist, solltest du über Jobs nachdenken. Sie finden mehr Stellenangebote für hochqualifizierte Python-Entwickler als für hochqualifizierte R-Entwickler. In Austin fallen Jobs für Django-Entwickler vom Himmel. Wenn Sie R wirklich gut kennen, gibt es einige Stellen, an denen Sie diese Fähigkeit nutzen können (z. B. Revolution Analytics), aber viele Geschäfte scheinen Python zu verwenden. Selbst auf dem Gebiet der Datenanalyse / Datenwissenschaft scheinen sich immer mehr Menschen Python zuzuwenden.

Und unterschätzen Sie nicht, dass Sie mit / für Leute arbeiten dürfen, die nur Java kennen (sagen wir). Diese Leute können Ihren Python-Code ziemlich leicht lesen. Dies ist nicht unbedingt der Fall, wenn Sie Ihre gesamte Arbeit in R ausführen. (Dies beruht auf Erfahrung.)

Schließlich mag dies oberflächlich klingen, aber ich denke, dass die Python-Dokumentations- und Namenskonventionen (die religiös befolgt werden, wie sich herausstellt) viel besser sind als die nützlichen R-Docs. Ich bin mir sicher, dass dies heiß diskutiert wird, aber der Schwerpunkt in Python liegt auf der Lesbarkeit. Das bedeutet, dass Argumente für Python-Funktionen Namen haben, die Sie lesen können und die etwas bedeuten. In R werden Argumentnamen oft abgeschnitten - ich habe dies in Python als weniger zutreffend empfunden. Das mag pedantisch klingen, aber es macht mich verrückt, Dinge wie 'xlab' zu schreiben, wenn man ein Argument genauso einfach 'x_label' nennen könnte (nur ein Beispiel) - dies hat einen enormen Effekt, wenn man versucht, a zu lernen neues Modul / Paket API. Das Lesen von R doc ist wie das Lesen von Linux-Handbuchseiten - wenn das Ihr Boot schwimmt, haben Sie mehr Kraft.

Abgesehen davon würde ich Folgendes vorschlagen (was auch mein typischer Arbeitsablauf ist): Da Sie Python kennen, verwenden Sie dieses Tool als erstes. Wenn Sie feststellen, dass Python fehlt, lernen Sie genug R, um das zu tun, was Sie wollen, und dann entweder:

  1. Schreiben Sie Skripte in R und führen Sie sie in Python mit dem Unterprozessmodul aus, oder
  2. Installieren Sie das RPy-Modul.

Verwenden Sie Python für das, was Python gut kann, und füllen Sie die Lücken mit einem der oben genannten. Dies ist mein normaler Arbeitsablauf. Normalerweise verwende ich R zum Zeichnen von Dingen und Python für das schwere Heben.

Zusammenfassend lässt sich sagen: Aufgrund der Betonung der Lesbarkeit von Python (gooogle nach "Pythonic" suchen), der Verfügbarkeit guter, kostenloser IDEs, der Tatsache, dass es sich um die C-Sprachfamilie handelt, ist die Wahrscheinlichkeit größer, dass Sie in der Lage sind, Kapital zu schlagen Ich würde empfehlen, Python zu Ihrem Favoriten zu machen und sich nur dann auf R zu verlassen, wenn dies erforderlich ist.


Ok, dies ist (bei weitem) meine beliebteste Antwort auf einer Stack-Site, und es ist noch nicht einmal die Nummer 1 :) Ich hoffe, dies hat einigen Leuten auf dem Weg geholfen.

Jedenfalls bin ich nach einigen Jahren auf diesem Gebiet zu folgendem Ergebnis gekommen:

Dies ist wahrscheinlich die falsche Frage.

Die Frage "Soll ich diese spezielle Technologie erlernen?" Ist eine schlechte Frage. Warum?

  1. Technologie verändert sich. Sie müssen immer eine andere Technologie lernen. Wenn Sie bei Twitter arbeiten, wird Scala ausgeführt. Einige Orte sind Python-Läden. Manche Orte kümmern sich nicht darum. Sie werden nicht eingestellt, weil Sie eine bestimmte Technologie kennen oder nicht kennen. Wenn Sie keine neue Technologie erlernen können, können (und sollten) Sie entlassen werden. Wenn ein neuer Rohrzangenschlüssel herauskommt und Sie ein Klempner sind und nicht herausfinden können, wie der neue Rohrzangenschlüssel funktioniert, sind Sie wahrscheinlich ein ziemlich mieser Klempner.
  2. Bei der Auswahl von "Erlerne ich diese Technologie" oder "Verbringe ich mehr Zeit mit der Lösung realer Probleme" sollten Sie ausnahmslos die letztere auswählen.

Als Datenwissenschaftler haben Sie die Aufgabe, Probleme zu lösen . Diese Weisheit geht bei jeder Konferenz oder jedem Meeting, an dem Sie teilnehmen, so gut wie immer verloren - jeder "Big Data" -Rede, den ich je gesehen habe, hat sich auf Technik konzentriert, nicht auf das Lösen von Problemen. Die eigentliche Problemlösung wird normalerweise am Ende auf ein paar Folien verlagert:

[Diskussionstitel = "Deep Learning bei Cool New Startup"] ... [45 Minuten Diagramme und Techno-Babel, in denen ich mein Telefon auslagere und überprüfe] ... Und nach der Implementierung unseres Hadoop-Clusters und [Ben-Zonen auslagere wieder] können wir unsere tiefe Lernroutine ablaufen lassen, [wach auf: deshalb bin ich gekommen!] deren Details urheberrechtlich geschützt sind. Fragen?

Dies gibt einen schlechten Eindruck, dass es auf dem Gebiet um Technologie geht, und es ist einfach nicht wahr. Wenn Sie wirklich gut in Scala, Python oder R sind, aber Probleme nicht lösen können, werden Sie zu einem miesen Datenwissenschaftler .

Paco Nathan war vor einigen Monaten in Austin auf einer tagelangen "Big Data" -Konferenz und sagte etwas wie "Chemie dreht sich nicht um Reagenzgläser". Das fasst es so ziemlich zusammen - in der Datenwissenschaft geht es nicht um Scala, Hadoop, Spark oder was auch immer-sonst-auf-dem-Weg-erscheint. Letztendlich möchte ich Leute einstellen, die denken, und nicht Leute, die sich mit Stack Overflow auskennen, um Toolkits zu lernen.

Ebenso, wenn Sie zu einem Vorstellungsgespräch gehen und Sie nicht eingestellt werden, nur weil Sie keine Programmiersprache beherrschen, ist diese Firma zum Kotzen . Sie verstehen nicht, was "Data Scientist" bedeutet, und es ist wahrscheinlich besser für Sie, wenn es nicht geklappt hat.

Schließlich, wenn Ihre Fähigkeiten zur Problemlösung am Rande sind (seien Sie ehrlich zu sich selbst), oder Sie wirklich nur die technische Seite der Dinge genießen oder Technik zu lernen das ist, was Sie wirklich lieben (wieder ehrlich zu sein), dann lernen Sie viel Technik. Sie finden immer Rollen vom Typ "Dateningenieur", die zu Ihren Fähigkeiten passen. Das ist keine schlechte Sache. Dateningenieure schmieren die Räder und ermöglichen es Ihnen, Ihre Arbeit als Datenwissenschaftler zu erledigen. (Der Unterschied ist vergleichbar mit dem von Software Architect im Vergleich zum Entwicklungsteam.)

BenDundee
quelle
3
Ich werde jedoch sagen, dass, wenn ich an einem Börsenparkett arbeite und der Headtrader mit einem CSV von Optionspreisen zu mir kam und wollte, dass ich sie mit einer logarithmischen linearen Verteilung ausstattete und den Mittelwert und die Standardabweichung herausrechnete. Ich würde Python nicht einmal in Betracht ziehen. Ich denke, es ist wie drei Codezeilen, um dies in R. zu tun
BenDundee
12

Also habe ich in erster Linie Datenanalysen in Matlab durchgeführt, aber einige in Python (und mehr in Python für allgemeine Zwecke) und ich habe auch ein bisschen mit R begonnen. Ich werde hier gegen den Strich gehen und vorschlagen, dass Sie es verwenden Python. Der Grund dafür ist, dass Sie Datenanalysen aus Sicht des maschinellen Lernens durchführen, nicht Statistiken (wobei R dominiert) oder digitale Signalverarbeitung (wobei Matlab dominiert).

Es gibt offensichtlich starke Überschneidungen zwischen Maschinellem Lernen und Statistik. Überlappung ist jedoch keine Identität. Maschinelles Lernen verwendet CS-Ideen, die ich in R nicht implementieren möchte. Sicher, Sie können in R einen minimalen Spannbaum berechnen. Es kann jedoch hässlich aussehen. Leute, die maschinell lernen, gehen davon aus, dass Sie einfachen Zugriff auf Hash-Tabellen, binäre Suchbäume usw. haben. In meinen Augen ist es einfacher, einen Statistikalgorithmus bei Bedarf neu zu implementieren, als zu versuchen, eine im Grunde genommen domänenspezifische Sprache in eine allgemeine Programmiersprache umzuwandeln.

Die Nebeneffekte von Python für die Datenanalyse sind ebenfalls viel höher. Gleichzeitig lernst du eine echte Programmiersprache, mit der du Skripte erstellen, größere Anwendungen erstellen usw. kannst. R ist wirklich eine Nischensprache der Statistik-Community, sogar Matlab wird viel häufiger verwendet.

Ich schätze, ich würde mir zuerst einige der Zeitungen ansehen und sehen, in welcher Sprache sie die Postleitzahl haben. Wenn es nicht in R ist, dann benutze es nicht.

Nir Friedman
quelle
1
Vielen Dank. Ich interessiere mich definitiv mehr für die ML-Seite der Dinge.
The_Cthulhu_Kid
1
Nur ein kleiner Zusatz: Ich bin sicher, dass R dies auch in gewisser Weise kann, aber Python ist bekannt für seine Fähigkeit, C aufzurufen oder Funktionen mit Cython mit minimalem Overhead in C zu kompilieren. So können Sie in der Regel mit weniger Aufwand schneller werden - eine wichtige Überlegung für die Betrachtung realer Daten. Noch eine (letzte) exotische Anmerkung: Java hat einige wirklich gute Bibliotheken für maschinelles Lernen (wie WEKA). Was jedoch cool ist, ist, dass Sie diese auch von Python aus mit Jython aufrufen können :-)
Nir Friedman
7

Als Wissenschaftler der alten Schule (über 50), der eine Reihe dieser Werkzeuge hat und weiterhin verwendet, werde ich meine zwei Cent addieren. Ich habe mit Kollegen zusammengearbeitet, die immer noch jeden Code in Fortran schreiben, von einfachen einmaligen Datenanalysejobs bis hin zu Code, der einige der Supercomputer der Welt beherrscht. Aktuelle Fortran-Dialekte (F90, F95, F2003, F2008) sind meiner Meinung nach einige der am besten gestalteten Sprachen, die es gibt. Jahrzehntelange Erfahrung mit High Performance Computing hat zu einer beeindruckenden Sprachentwicklung geführt.

Ich habe Python nur gelegentlich verwendet und werde es (hauptsächlich wegen Sage) noch einmal besuchen, aber ich verwende eine bewährte Suite von Sprachen, die für mich gut funktionieren. Fortran, C, Perl, R und Schema (mit tcl für die Skripterstellung von VMD). Ich finde die Kombination von R und Fortran und C sehr angenehm. Im Gegensatz zu anderen Kommentaren zum Objektmodell in R ist es ein gutes Objektmodell für die interaktive Arbeit, das auf dem CLOS-Konzept der generischen Funktionen und des Methodenversands basiert. Wenn Sie interaktiv mit einem neuen Paket arbeiten, können Sie sich häufig auf allgemeine Funktionen wie "Drucken" und "Plotten" verlassen, um etwas Produktives zu erreichen.

Die API für Fortran und C ist sehr einfach zu bedienen. Wenn Sie es gewohnt sind, in Fortran und C für die Modellierung und Datenanalyse zu arbeiten, ist dies ein großes Plus. Die Fähigkeit, R-Code dynamisch zu generieren und auszuwerten, ist zwar nicht annähernd so sauber wie die Makrosysteme in Lisp und C, aber sehr nützlich bei der Bearbeitung dynamischer Datensätze.

Einige Einschränkungen von R für reale Daten umfassen den Call-by-Value-Ansatz. Während es CS-Gründe für Call-by-Value gibt, erfordert die Programmierung in der realen Welt mit großen numerischen Daten eine Form von Call-by-Reference (beachten Sie die Bedeutung von Fortran-Common-Blöcken in älterem Code oder von Moduldaten in neuerem Code). Der Ansatz von PDL (Perl Data Language) ist in dieser Hinsicht besonders elegant. (Pdls werden im Wesentlichen als Referenz bezeichnet, es sei denn, Sie fordern eine Kopie an. Sub-pdls Referenz sind ein Unterabschnitt einer übergeordneten pdl in einer weitaus saubereren Syntax als Fortran oder C).

Es ist gut, viele Sprachen zu lernen. Python ist zweifellos eine wichtige Sprache, aber R ist auch in ihrer Domäne. Aber wenn der Kautschuk wirklich die Straße in der Wissenschaft erfüllen muss, werden Fortran und C (und C ++ für einige) schwer zu verdrängen sein.

John Daschbach
quelle
1

Ein Schlüsselmerkmal von R ist, dass es eine Bibliothek von Paketen ist, genauso wie es eine Programmiersprache ist. Jeder Paketschreiber hat im Prinzip Zugriff auf das, was in jedem anderen Paket enthalten ist. Dies reduziert die Notwendigkeit, neu zu erfinden, neu zu dokumentieren und neu zu lernen, dramatisch. Dies gilt sowohl für Paketautoren als auch für Benutzer. Natürlich ist diese Infrastruktur mit Kosten verbunden. Paketautoren müssen Standards berücksichtigen, die im Laufe der Zeit immer kniffliger werden. Ein Teil davon kann sich auf das auswirken, was den Benutzern begegnet.

Python verfügt meines Wissens nicht über ein Paketverwaltungssystem. Es gibt kein Äquivalent zu Rs Comprehensive R Archive Network ( http://cran.r-project.org ) und kein direktes Äquivalent zu den R-Task-Ansichten ( http://cran.csiro.au/web/views/ ). Insofern handelt es sich in einem für R nicht zutreffenden Ausmaß um ein Tool für Programmierer, die eher auf sich allein gestellt als im Rahmen einer gemeinschaftlichen Anstrengung arbeiten, um auf dem aufzubauen, was bereits verfügbar ist.

Für die Datenanalyse und das maschinelle Lernen ist es sicherlich in hohem Maße erforderlich, vorhandene Fähigkeiten auszubauen und zu nutzen. Für allgemeinere Programmieraufgaben kann Python durchaus Vorteile haben. Wirst du diese Art von Arbeit genug machen, um den Aufwand für das Erlernen von Python zu rechtfertigen?

John Maindonald
quelle
3
Python hat ein Paketverwaltungssystem namens pip. Es ist nicht Teil der Standardbibliothek, wird jedoch mit Standard-Python ausgeliefert, beginnend mit Python 3.4, das nächsten Monat (März 2014) veröffentlicht wird.
Cody Piersall
2
Das Python-Äquivalent zum Comprehensive R Archive Network ist PyPI: pypi.python.org/pypi
Wilfred Hughes