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.
python
machine-learning
r
The_Cthulhu_Kid
quelle
quelle
Antworten:
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 :
quelle
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:
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:
Die Frage "Soll ich diese spezielle Technologie erlernen?" Ist eine schlechte Frage. Warum?
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:
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.)
quelle
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.
quelle
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.
quelle
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?
quelle