it-swarm.com.de

R vs Python für die Datenanalyse

Ich programmiere seit ungefähr einem Jahr und interessiere mich sehr für Datenanalyse und maschinelles Lernen. Ich nehme an einigen 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 jede andere?

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

60
The_Cthulhu_Kid

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

In Bezug auf grundlegende Operationen, beispielsweise 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. Außerdem 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 die Einzelheiten dieser Sprache gut beherrschen. Sie scheinen in erster Linie an Datenanalyse interessiert zu sein, nicht an Software-Engineering. Ich würde R auswählen und mich daran halten. Trotzdem denke ich, dass die Wahl von Python + numpy + scipy + scikit definitiv und eine ausgezeichnete Wahl ist. 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 verwenden. Wenn sie alle beispielsweise Python verwenden, wäre 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, daher ist meine Meinung möglicherweise voreingenommen, obwohl ich versucht habe, meine Antwort so objektiv wie möglich zu halten. Außerdem habe ich Python + numpy nicht ausgiebig verwendet, obwohl ich Collegaues 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 von dieser Beitrag :

Ich verwende R und Python für alle meine Recherchen (mit Rcpp oder Cython nach Bedarf), aber ich würde es 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 Hauptmerkmal der Sprache und einen wichtigen Grund, warum sie nicht so schnell 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.

39
Paul Hiemstra

Hintergrund: Ich bin Datenwissenschaftler bei einem Startup in Austin und komme aus der Graduiertenschule (Physik). Ich benutze Python Tag für Tag für die Datenanalyse, aber benutze R ein bisschen. Ich benutze auch C # /. NET und Java (fast täglich), ich habe C++ in der Graduiertenschule stark benutzt.

Ich denke, das Hauptproblem bei der Verwendung von Python für Zahlen (ü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 einfach das Paket herunterladen und an die Arbeit gehen können. Und R "funktioniert einfach": Sie geben ihm einen Datensatz und es weiß, welche zusammenfassenden Statistiken nützlich sind. Sie geben ihm einige Ergebnisse und es weiß, welche Handlungen Sie wollen. Alle gängigen Handlungen, die Sie machen möchten, sind vorhanden, sogar einige ziemlich esoterische, die Sie bei Wikipedia nachschlagen müssen. So schön wie scipy/numpy/pandas/statsmodels/etc. sind für Python, sie befinden sich 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 Ihrem Sandkasten haben, in der Produktion verwendet werden kann. Python hat die Objektorientierung eingebrannt, im Gegensatz zu R, wo es sich wie ein nachträglicher Gedanke anfühlt (weil es so ist). Es gibt noch andere Dinge, die Python auch gut macht: Threading und parallele Verarbeitung sind ziemlich einfach, und ich bin mir nicht sicher, ob dies in R der Fall ist. Und wenn Sie Python lernen, erhalten Sie ein leistungsstarkes Scripting Werkzeug auch. 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 bei R der Fall ist - dem einzigen R IDE Ich weiß, dass R Studio ziemlich gut ist, 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 Stellenausschreibungen 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 im Bereich der Datenanalyse/Datenwissenschaft scheinen sich immer mehr Menschen Python zuzuwenden.

Und unterschätzen Sie nicht, dass Sie mit/für Leute arbeiten, die nur Java kennen (sagen wir). Diese Leute können Ihren Python Code ziemlich einfach lesen. Dies ist nicht unbedingt der Fall, wenn Sie Ihre gesamte Arbeit in R erledigen. (Dies kommt aus Erfahrung.)

Schließlich mag dies oberflächlich klingen, aber ich denke, die Python Dokumentations- und Namenskonventionen (die, wie sich herausstellt, religiös eingehalten werden) sind viel schöner als das utilitaristische R-Dokument. 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 festgestellt, dass dies in Python weniger wahr ist. 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 neue Modul-/Paket-API. Das Lesen von R doc ist wie das Lesen von Linux-Manpages - wenn das Ihr Boot schwimmt, dann haben Sie mehr Leistung. Wenn ich eine Frage dazu habe, wie etwas in R funktioniert, vermeide ich die R-Dokumentation, während ich mit dem Python -Dokument beginne, wenn ich über Python verwirrt bin.

Abgesehen davon würde ich Folgendes vorschlagen (was auch mein typischer Workflow ist): Da Sie Python kennen, verwenden Sie dies als Ihr erstes Werkzeug. 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 mit dem Unterprozessmodul oder von Python aus
  2. Installieren Sie das RPy-Modul.

Verwenden Sie Python für das, was Python gut kann, und füllen Sie die Lücken mit einer 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 von Pythons Schwerpunkt auf Lesbarkeit (Google-Suche nach "Pythonic"), der Verfügbarkeit guter, kostenloser IDEs, der Tatsache, dass es sich um die C-Sprachfamilie handelt, ist die Wahrscheinlichkeit größer, dass Sie Kapital schlagen können Aufgrund der Fähigkeiten und des rundum besseren Dokumentationsstils der Sprache würde ich vorschlagen, Python zu Ihrem Ansprechpartner zu machen und sich nur bei Bedarf auf R zu verlassen.


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

Jedenfalls bin ich nach einigen Jahren auf dem Gebiet zu folgendem Schluss gekommen:

Dies ist wahrscheinlich die falsche Frage.

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

  1. Technologische Veränderungen. Sie müssen immer eine andere Technologie lernen. Wenn Sie bei Twitter arbeiten, wird Scala ausgeführt. Einige Orte sind Python Geschäfte. Einige 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 Rohrschlüssel herauskommt und Sie ein Klempner sind und Sie nicht herausfinden können, wie der neue Rohrschlüssel funktioniert, sind Sie wahrscheinlich ein ziemlich mieser Klempner.
  2. Angesichts der Wahl zwischen "Lerne ich diese Technologie" oder "Verbringe ich mehr Zeit damit, echte Probleme zu lösen" sollten Sie sich ausnahmslos für Letzteres entscheiden.

Als Datenwissenschaftler Ihre Aufgabe ist es, Probleme zu lösen. Diese Weisheit geht bei jeder Konferenz oder jedem Treffen, zu dem Sie gehen, so gut wie immer verloren - jedes "Big Data" -Gespräch, das ich je gesehen habe, hat sich auf Technologie konzentriert, nicht auf das Lösen von Problemen. Die eigentliche Problemlösung wird normalerweise auf ein paar Folien am Ende verwiesen:

[Talk title = "Deep Learning bei Cool New Startup"] ... [45 Minuten Diagramme und Techno-Babel, in denen ich mein Telefon auschecke und überprüfe] ... und nach der Implementierung unseres Hadoop-Clusters und [Ben-Zonen aus wieder] können wir unsere Deep-Learning-Routine ausführen, [wach auf: deshalb bin ich gekommen!], deren Details proprietär 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 wirklich schlecht darin sind, Probleme zu lösen Sie werden einen miesen Datenwissenschaftler abgeben.

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

Ebenso, wenn Sie zu einem Vorstellungsgespräch gehen und sie Sie nicht einstellen, nur weil Sie keine Programmiersprache kennen, dann diese Firma ist scheiße. Sie verstehen nicht, was "Datenwissenschaftler" bedeutet, und es ist wahrscheinlich besser für Sie, wenn es nicht geklappt hat.

Wenn Ihre Fähigkeiten zur Problemlösung marginal sind (seien Sie ehrlich zu sich selbst) oder Sie wirklich nur die technische Seite der Dinge genießen oder das Erlernen von Technologie das ist, was Sie wirklich lieben (seien Sie wieder ehrlich), dann lernen Sie viel Technologie. Sie werden immer in der Lage sein, Rollen vom Typ "Dateningenieur" zu finden, die Ihren Fähigkeiten entsprechen. Das ist keine schlechte Sache, Dateningenieure schmieren die Räder und ermöglichen es Ihnen, Ihre Arbeit als Datenwissenschaftler zu erledigen. (Der Unterschied ist ähnlich wie beim Software-Architekten gegenüber dem Entwicklungsteam.)

36
BenDundee

Also habe ich hauptsächlich Datenanalysen in Matlab durchgeführt, aber einige in Python (und mehr verwendet Python für allgemeine Zwecke)) und auch ich habe begonnen ein bisschen von R. Ich werde hier gegen den Strich gehen und vorschlagen, dass Sie Python verwenden. Der Grund dafür ist, dass Sie Datenanalysen aus der Perspektive des maschinellen Lernens durchführen, nicht Statistiken (wo R dominiert) oder digitale Signalverarbeitung (wo Matlab ist dominant).

Es gibt offensichtlich starke Überschneidungen zwischen maschinellem Lernen und Statistiken. Überlappung ist aber keine Identität. Maschinelles Lernen verwendet Ideen von CS, die ich in R nicht implementieren möchte. Sicher, Sie können einen minimalen Spannbaum in R berechnen. Es kann jedoch wie ein hässliches Durcheinander aussehen. Menschen mit maschinellem Lernen gehen davon aus, dass Sie einfachen Zugriff auf Hash-Tabellen, binäre Suchbäume usw. haben. Meiner Meinung nach ist es einfacher, einen Statistikalgorithmus bei Bedarf erneut 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. Sie lernen gleichzeitig eine echte Programmiersprache, die mit Skripten umgehen, größere Anwendungen erstellen usw. kann. R ist wirklich eine Nische In der Sprache der Statistik-Community wird sogar Matlab weitaus häufiger verwendet.

Ich denke, ich würde mir zuerst einige der Papiere ansehen und sehen, in welcher Sprache sie die Postleitzahl posten. Wenn es nicht in R ist, dann benutze es nicht.

12
Nir Friedman

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

Ich habe nur Python manchmal verwendet und werde es erneut besuchen (hauptsächlich wegen Sage), 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 komfortabel. Im Gegensatz zu anderen Kommentaren zum Objektmodell in R ist es ein gutes Objektmodell für interaktives Arbeiten, basierend auf Das CLOS-Konzept für generische Funktionen und Methodenversand. Wenn Sie interaktiv mit einem neuen Paket arbeiten, können Sie sich häufig auf generische Funktionen wie „Drucken“ und „Plotten“ verlassen, um etwas Produktives zu tun.

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 beim Aufarbeiten dynamischer Datensätze sehr nützlich.

Einige Einschränkungen von R für reale Daten umfassen den Call-by-Value-Ansatz. Während es CS-Gründe für den Aufruf nach Wert gibt, erfordert die reale Programmierung mit großen numerischen Daten eine Form des Aufrufs als Referenz (beachten Sie die Bedeutung der gemeinsamen Fortran-Blöcke in älterem Code oder der Moduldaten in neuerem Code). Der von PDL (Perl Data Language) verfolgte Ansatz ist in dieser Hinsicht besonders elegant. (Pdls werden im Wesentlichen als Referenz aufgerufen, es sei denn, Sie fordern eine Kopie an. Die Referenz von Sub-pdl ist ein Unterabschnitt einer übergeordneten PDF-Datei 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 seiner Domäne. Aber wenn der Gummi wirklich den Weg in der Wissenschaft finden muss, werden Fortran und C (und C++ für einige) schwer zu erreichen sein verdrängen.

7
John Daschbach

Ein wesentliches Merkmal von R ist, dass es sich sowohl um eine Paketbibliothek als auch um eine Programmiersprache handelt. Jeder Paketschreiber hat grundsätzlich Zugriff auf das, was in jedem anderen Paket enthalten ist. Dies reduziert die Notwendigkeit, neu zu erfinden, neu zu dokumentieren, 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 Benutzer antreffen.

Python hat meines Wissens kein Paketverwaltungssystem. Es gibt kein Äquivalent zu Rs umfassendem R-Archivnetzwerk ( http://cran.r-project.org ) und kein direktes Äquivalent zu den R-Task-Ansichten ( http: // cran) .csiro.au/web/views / ). In einem Ausmaß, das für R nicht der Fall ist, ist es daher ein Werkzeug für Programmierer, die ziemlich alleine arbeiten und nicht als Teil einer gemeinschaftlichen Anstrengung, auf dem aufzubauen, was bereits verfügbar ist.

Für die Datenanalyse und das maschinelle Lernen besteht sicherlich die Forderung, in hohem Maße auf bereits vorhandenen Fähigkeiten aufzubauen und diese zu nutzen. Für allgemeinere Programmieraufgaben kann Python durchaus Vorteile haben. Werden Sie diese Art von Arbeit genug ausführen, um den Aufwand für das Erlernen von Python zu rechtfertigen?

1
John Maindonald