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:
- Schreiben Sie Skripte in R und führen Sie sie in Python mit dem Unterprozessmodul aus, oder
- 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?
- 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.
- 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.)