Julia: Bilanz ziehen, wie es gelaufen ist

19

Ich bin auf eine Frage aus dem Jahr 2012 gestoßen, die eine sehr gute Diskussion über Julia als Alternative zu R / Python für verschiedene Arten von statistischer Arbeit hatte.

Hier liegt die ursprüngliche Frage von 2012 über Julias Versprechen

Leider war Julia damals sehr neu und die für die statistische Arbeit benötigten Toolkits waren etwas primitiv. Wanzen wurden ausgebügelt. Distributionen waren schwierig zu installieren. Und so weiter.

Jemand hatte einen sehr treffenden Kommentar zu dieser Frage:

Allerdings wird es noch 5 Jahre dauern, bis diese Frage im Nachhinein beantwortet werden kann. Ab sofort fehlen Julia die folgenden kritischen Aspekte eines statistischen Programmiersystems, die mit R für alltägliche Benutzer konkurrieren könnten:

Das war im Jahr 2012. Jetzt, da es 2015 ist und drei Jahre vergangen sind, habe ich mich gefragt, wie die Leute denken, dass Julia das getan hat.

Gibt es eine reichhaltigere Erfahrung mit der Sprache selbst und dem gesamten Julia-Ökosystem? Ich würde gerne wissen.

Speziell:

  1. Würden Sie neuen Benutzern statistischer Tools raten, Julia über R zu lernen?
  2. In welchen Statistik-Anwendungsfällen würden Sie jemandem raten, Julia zu verwenden?
  3. Wenn R bei einer bestimmten Aufgabe langsam ist, ist es sinnvoll, zu Julia oder Python zu wechseln?

Hinweis: Zuerst veröffentlicht am 14. Juni 2015.

curious_cat
quelle
2
Ich habe kürzlich einen Blick darauf geworfen und war von der Tiefe ihrer Statistikpakete unbeeindruckt. Wenn ich mich nicht irre, wird Python auch so interpretiert, dass es ähnliche Einschränkungen wie R gibt. Die Anziehungskraft von Julia war meines Erachtens das Versprechen von zusätzlicher Geschwindigkeit und besserem Zugang zur Parallelisierung.
DWin
3
Ich denke, das Problem mit Julia ist, dass SciPy immer besser wird, und jetzt haben wir auch Torch im Mix. Niemand möchte eine dritte (oder vierte oder fünfte) wissenschaftliche Computersprache lernen, auch wenn diese schnell ist und coole Funktionen bietet, die die Funktionen überladen.
Shadowtalker
4
Julia ist eine gut gestaltete, nette Sprache, aber meiner Meinung nach ist sie zu spät gekommen. Der Einzelknoten-Matrix-Berechnungszug ist lange vorbei. Julia ist im Wesentlichen Fortran 2.0 mit einigen netten Features, aber da wir zunehmend in das Cloud-Computing übergehen, hat es gegenüber funktionalen Sprachen wie Scala, Clojure und sogar Python in gewissem Maße wenig zu bieten. Wäre Julia vor 10 Jahren in ihrem jetzigen Zustand gewesen, hätte es ein enormer Erfolg werden können.
Marc Claesen
2
Python und Rcpp entwickeln sich sehr dynamisch, R gewinnt immer mehr an Aufmerksamkeit (R-Konsortium, Microsoft usw.), so dass es für Julia schwierig zu sein scheint, aufzuholen ...
Tim
1
Ich habe den Business Case für Julia nicht gesehen und weiß es immer noch nicht. Es schien ein überflüssiger Versuch der Programmierer zu sein, etwas neu zu erstellen, was bereits existiert.
Aksakal

Antworten:

15

Ich bin zu Julia gewechselt, und hier sind meine pragmatischen Gründe:

  • Es kann wirklich gut Code kleben. Ich habe viel älteren Code in MATLAB, und die Installation von MATLAB.jl hat 5 Minuten gedauert , funktioniert einwandfrei und verfügt über eine prägnante Syntax, die es natürlich macht, MATLAB-Funktionen zu verwenden. Julia hat auch das gleiche für R, Python, C, Fortran und viele andere Sprachen.
  • Julia macht Parallelität wirklich gut. Ich spreche nicht nur von Parallelität mit mehreren Prozessoren (gemeinsam genutztem Speicher), sondern auch von Parallelität mit mehreren Knoten. Ich habe Zugriff auf einen HPC-Knoten, der nicht allzu oft verwendet wird, da jeder sehr langsam ist. Deshalb habe ich beschlossen, es mit Julia zu versuchen. Ich habe @parallel zu einer Schleife hinzugefügt, indem ich ihr die Maschinendatei mitteilte und bam, dass alle 5 Knoten verwendet wurden. Versuchen Sie dies in R / Python. In MPI würde es eine Weile dauern, bis es funktioniert (und das mit dem Wissen, was Sie tun), nicht ein paar Minuten, wenn Sie es zum ersten Mal versuchen!
  • Julias Vektorisierung ist schnell (in vielen Fällen schneller als jede andere höhere Sprache) und sein devektorisierter Code ist fast C-schnell. Wenn Sie also wissenschaftliche Algorithmen schreiben, schreiben Sie diese in der Regel zuerst in MATLAB und dann in C. Mit Julia können Sie sie einmal schreiben, sie dann mit Compiler-Codes versehen und 5 Minuten später ist sie schnell. Selbst wenn Sie dies nicht tun, bedeutet dies, dass Sie den Code einfach so schreiben, wie es sich natürlich anfühlt, und er wird gut funktionieren. In R / Python muss man manchmal ziemlich viel nachdenken, um eine gute vektorisierte Version zu erhalten (was später schwer zu verstehen sein kann).
  • Die Metaprogrammierung ist großartig. Denken Sie an die Häufigkeit, mit der Sie "Ich wünschte, ich könnte ______ in der Sprache" geschrieben haben. Schreiben Sie ein Makro dafür. Normalerweise hat jemand schon.
  • Alles ist auf Github. Der Quellcode. Die Pakete. Super einfach, den Code zu lesen, Probleme an die Entwickler zu melden, mit ihnen zu sprechen, um herauszufinden, wie man etwas macht, oder sogar Pakete selbst zu verbessern.
  • Sie haben einige wirklich gute Bibliotheken. Für Statistiken wären Sie wahrscheinlich an deren Optimierungspaketen interessiert (JuliaOpt ist eine Gruppe, die diese verwaltet). Die numerischen Pakete sind bereits erstklassig und verbessern sich nur.

Trotzdem liebe ich Rstudio immer noch sehr, aber das neue Juno on Atom ist wirklich nett. Wenn es sich nicht mehr in starker Entwicklung befindet und stabil ist, kann ich es aufgrund der einfachen Plugins als besser als Rstudio ansehen (Beispiel: Es hat ein gutes Plugin zur Anpassung an HIDPI-Bildschirme). Ich denke also, Julia ist eine gute Sprache, um jetzt zu lernen. Für mich hat es bisher gut geklappt. YMMV.

Chris Rackauckas
quelle
Stört es Sie, diese Antwort zu aktualisieren, seit mehr als 3 Jahren vergangen sind?
Bayequentist
1
Ich habe hier eine aktualisierte Antwort gegeben: scicomp.stackexchange.com/questions/10922/… . Vielleicht sollte das kopiert werden.
Chris Rackauckas
11

Ich denke, "Lerne X über Y" ist nicht der richtige Weg, um die Frage zu formulieren. In der Tat können Sie beides lernen (zumindest die Grundlagen) und je nach konkreter Aufgabe das richtige Werkzeug auswählen. Und da Julia den größten Teil ihrer Syntax und Konzepte von anderen Sprachen geerbt hat, sollte es wirklich einfach sein, sie zu verstehen (ebenso wie Python, obwohl ich nicht sicher bin, ob dies auch für R gilt).

Welche Sprache ist für welche Aufgabe besser geeignet? Aufgrund meiner Erfahrung mit diesen Tools würde ich sie wie folgt bewerten:

  • Für reine statistische Untersuchungen , die mit REPL und einigen Skripten durchgeführt werden können, scheint R die perfekte Wahl zu sein. Es wurde speziell für Statistikzwecke entwickelt, verfügt über die längste Tool-Historie und wahrscheinlich den größten Satz statistischer Bibliotheken.

  • Wenn Sie Statistiken (oder zum Beispiel maschinelles Lernen) in das Produktionssystem integrieren möchten , scheint Python eine viel bessere Alternative zu sein: Als universelle Programmiersprache verfügt es über einen fantastischen Webstack, Bindungen zu den meisten APIs und Bibliotheken für alles. vom Scrappen des Webs bis zum Erstellen von 3D-Spielen .

  • Hochleistungsalgorithmen sind in Julia viel einfacher zu schreiben . Wenn Sie nur vorhandene Bibliotheken wie SciKit Learn oder e1071, die von C / C ++ unterstützt werden , verwenden oder kombinieren müssen , sind Sie mit Python und R in Ordnung. Wenn es jedoch um schnelles Backend selbst geht, wird Julia echt zeitsparend: Es ist viel schneller als Python oder R und erfordert keine zusätzlichen Kenntnisse in C / C ++. Beispielsweise wird Mocha.jl in das reine Julia-Deep-Learning-Framework Caffe neu implementiert , das ursprünglich in C ++ mit einem Wrapper in Python geschrieben wurde.

  • Vergessen Sie auch nicht, dass einige Bibliotheken nur in einigen Sprachen verfügbar sind. ZB nur Python reifen Ökosystem für Computer Vision hat, einige Formanpassung und trasnformation Algorithmen nur in Julia implementiert und ich habe für die Statistik in der Medizin in R. von einigen einzigartigen Pakete gehört

3 Umdrehungen
quelle
Ich würde sagen, dass die meisten Leute versuchen sollten, eine zu wählen und dabei zu bleiben - zumindest für mich, wenn ich mehrere Sprachen verwende, mische ich sie und verliere so viel Zeit ...
kjetil b halvorsen
1
Ein paradoxes Problem beim Schreiben von Hochleistungsalgorithmen ist, dass Sie, obwohl sie einfacher in einer höheren Sprache wie R oder Julia zu schreiben sind, wahrscheinlich sowieso gerne etwas wie C ++ verwenden, wenn Sie tatsächlich Hochleistungsalgorithmen schreiben. Oder vielleicht bin das nur ich.
Cliff AB
3

(b) In welcher Art von Statistik-Anwendungsfällen würden Sie jemandem raten, Julia zu verwenden

(c) Wenn R bei einer bestimmten Aufgabe langsam ist, ist es sinnvoll, zu Julia oder Python zu wechseln?

Hochdimensionale und rechenintensive Probleme.

  • Multiprozessing. Julias Single Node Parallel-Funktionen ( @spawnat) sind viel praktischer als die in Python. In Python können Sie beispielsweise keinen Map-Reduction-Multiprocessing-Pool auf dem REPL verwenden, und für jede Funktion, die Sie parallelisieren möchten, ist viel Boilerplate erforderlich.

  • Cluster-Computing. Julias ClusterManagersPaket können Sie einen Compute - Cluster verwenden fast , als würden Sie eine einzelne Maschine mit mehreren Kernen. [Ich habe damit gespielt, dass sich dies mehr wie ein Skript in ClusterUtils anfühlt ]

  • Geteilte Erinnerung. Julias SharedArrayObjekte sind den entsprechenden Shared-Memory-Objekten in Python überlegen.

  • Geschwindigkeit. Meine Julia-Implementierung ist (auf einer Maschine) schneller als meine R-Implementierung bei der Zufallszahlengenerierung und bei der linearen Algebra (unterstützt Multithread-BLAS).
  • Interoperabilität. Mit Julias PyCallModul können Sie ohne Wrapper auf das Python-Ökosystem zugreifen - z. B. für pylab. Es gibt etwas Ähnliches für R, aber ich habe es nicht ausprobiert. Es gibt auch ccallfür C / Fortran-Bibliotheken.
  • GPU. Julias CUDA-Wrapper sind weitaus weiter entwickelt als die in Python (Rs waren bei meiner Überprüfung fast nicht vorhanden). Ich vermute, dass dies auch weiterhin der Fall sein wird, da es in Julia viel einfacher ist, externe Bibliotheken aufzurufen als in Python.

  • Ökosystem. Das PkgModul verwendet Github als Backend. Ich glaube, dass dies einen großen Einfluss auf die Langzeitwartbarkeit von Julia-Modulen haben wird, da es viel einfacher ist, Patches anzubieten oder die Verantwortung der Besitzer zu übertragen.

  • σ

Das Schreiben von schnellem Code für große Probleme wird zunehmend vom parallelen Rechnen abhängen. Python ist von Natur aus parallel und unfreundlich (GIL), und native Mehrfachverarbeitung in R ist keine AFAIK. Julia verlangt nicht, dass Sie sich zu C begeben, um performanten Code zu schreiben, während Sie das Gefühl von Python / R / Matlab beibehalten.

Der Hauptnachteil von Julia, der von Python / R ausgeht, ist der Mangel an Dokumentation außerhalb der Kernfunktionalität. Python ist sehr ausgereift, und was Sie in den Dokumenten nicht finden können, ist normalerweise Stackoverflow. Das Dokumentationssystem von R ist im Vergleich ziemlich gut.

(a) Würden Sie neuen Nutzern statistischer Tools raten, Julia über R zu lernen?

Ja, wenn Sie die Anwendungsfälle in Teil (b) einfügen. Wenn Ihr Anwendungsfall eine Menge heterogener Arbeit beinhaltet

Vermutungen
quelle