MATLAB als Programmiersprache: Der ultimative Vergleich für Ökonomen und Finanzexperten

Balkendiagramm zur Ausführungsgeschwindigkeit der GARCH Log-Likelihood-Funktion im Vergleich der Programmiersprachen C, Rcpp, Numba, Julia, MATLAB, R und Python

Während eine große Anzahl von Allzweck-Programmiersprachen in der Wirtschaftsforschung eingesetzt wird, vermuten wir, dass Julia, R, MATLAB und Python die vier häufigsten sind. Als wir dies vor zwei Jahren hier auf VoxEU (Danielsson und Fan 2018) zuletzt betrachteten, kamen wir zu dem Schluss, dass R in den meisten Fällen die beste Wahl war. Ist R angesichts all der Entwicklungen seitdem immer noch führend?

Natürlich gibt es keine einzige Antwort auf diese Frage – je nach Projekt könnte jede der vier Sprachen die beste Wahl sein.

Um die Frage einzugrenzen, haben wir drei separate Kriterien im Sinn, die alle aus unserer Arbeit stammen.

Erstens hat einer von uns ein Buch mit dem Titel Financial Risk Forecasting (Danielsson 2011) geschrieben, das von der praktischen Implementierung in allen vier Sprachen begleitet wird. Dies bietet den idealen Testfall für die Leistungsfähigkeit der für Forscher verfügbaren Bibliotheken.

Wir haben zwei zusätzliche Kriterien, die in der Datenwissenschaft üblich sind: der Import eines sehr großen Datensatzes und eine rechenintensive Unterroutine. Die Analyse der Matlab Programmiersprache im Vergleich zu ihren Konkurrenten ist hierbei besonders aufschlussreich.

Die Qualität der Programmiersprache

MATLAB existiert seit fast einem halben Jahrhundert und ist seitdem ein zuverlässiges Arbeitspferd für Wirtschaftsforscher. Obwohl es langsam neue Funktionen hinzufügt, wird es immer noch durch schlechte Designentscheidungen gebremst.

R, in Form seines Vorläufers SPlus, stammt ebenfalls aus den 1970er Jahren. Es wurde ursprünglich als Sprache für statistische Berechnungen und Datenvisualisierungen konzipiert. Ähnlich wie MATLAB wird es durch schlechtes Design behindert, aber der Reichtum seiner Bibliotheken macht es vielleicht zur nützlichsten der vier Sprachen heute.

Python begann, anders als die anderen drei, als Allzweck-Programmiersprache, die für Dateiverwaltung und Textverarbeitung verwendet wurde. Es ist auch sehr gut in der Interaktion mit externen Bibliotheken – der Grund, warum es in der maschinellen Lernforschung weit verbreitet ist.

Es ist jedoch keine gute Sprache für allgemeine numerische Programmierung. Die wichtigsten numerischen und Datenbibliotheken wurden ungeschickt darauf gepfropft, sodass die Arbeit damit unnatürlich, schwierig und anfällig für Fehler ist, die schwer zu diagnostizieren sind. Angenommen, Sie haben beispielsweise zwei Matrizen, X und Y, und möchten diese miteinander multiplizieren. Sie müssen schreiben:

np.matmul(X,Y)

während in MATLAB und Julia die Zeile einfach lautet:

X * Y

Julia ist mit nur acht Jahren der Neuling, und das zeigt sich. Es hat keine historischen Altlasten, und infolgedessen ist der Code sauber, schnell und weniger fehleranfällig als bei den anderen. Es überrascht nicht, dass es in hochwertigen Projekten wie Perla et al. (2020) eingesetzt wurde.

Ein Vorteil ist, dass es Unicode in Gleichungen zulässt, was die Verwendung griechischer Buchstaben und anderer Zeichen in Berechnungen ermöglicht. Zum Beispiel:

μ = 1 + 2 * θ + ε

Bei der Bewertung der intrinsischen Eignung der vier Sprachen für numerische Berechnungen halten wir Julia für die beste, gefolgt von R, dann MATLAB, wobei Python am schlechtesten abschneidet.

Ausführungsgeschwindigkeit

Julia wurde mit Blick auf Geschwindigkeit entwickelt, nutzt moderne Compiler-Techniken und ist im Allgemeinen die schnellste der vier Sprachen.

Folglich muss der Programmierer keine komplizierten Techniken zur Beschleunigung des Codes anwenden, was dazu führt, dass Julias Code sowohl lesbarer als auch schneller ist.

Die langsamste der vier Sprachen ist Python, aber es bietet einen hervorragenden Just-in-Time-Compiler, Numba, der Berechnungen, bei denen er angewendet werden kann, erheblich beschleunigen kann (leider ist dies nur bei sehr einfachen Berechnungen der Fall).

Um die Geschwindigkeit zu bewerten, führen wir auch drei Experimente durch.

Das erste ist ein Experiment mit der GARCH-Log-Likelihood-Funktion. Da diese sowohl iterativ als auch dynamisch ist, erfasst sie eine große Klasse von numerischen Problemen, die in der Praxis auftreten. Bei der Verwendung von Python verwenden wir sowohl reines Python als auch eine mit Numba vorkompilierte Version. Für R haben wir sowohl reines R als auch eine C++-Implementierung (Rcpp) ausprobiert. Zum Vergleich führen wir auch eine C-Implementierung durch.

Balkendiagramm zur Ausführungsgeschwindigkeit der GARCH Log-Likelihood-Funktion im Vergleich der Programmiersprachen C, Rcpp, Numba, Julia, MATLAB, R und PythonBalkendiagramm zur Ausführungsgeschwindigkeit der GARCH Log-Likelihood-Funktion im Vergleich der Programmiersprachen C, Rcpp, Numba, Julia, MATLAB, R und Python

Unsere Ergebnisse zeigen, dass C am schnellsten ist, Rcpp dicht dahinter, gefolgt von Numba und Julia. Alle diese zeigen eine ausgezeichnete Geschwindigkeit. MATLAB ist deutlich langsamer, gefolgt von R, wobei Python bei weitem am langsamsten ist.

Das zweite Experiment misst die Ladezeit für einen sehr großen CSV-Datensatz, CRSP, der unkomprimiert fast 8 GB und komprimiert über 1 GB groß ist. Wir lesen zuerst sowohl die komprimierten als auch die unkomprimierten Dateien ein.

Balkendiagramm zur Ladezeit eines großen CSV-Datensatzes (CRSP) im Vergleich von R, Python, Julia und MATLABBalkendiagramm zur Ladezeit eines großen CSV-Datensatzes (CRSP) im Vergleich von R, Python, Julia und MATLAB

In diesem Experiment ist R mit Abstand am schnellsten, gefolgt von Python und Julia, wobei MATLAB hinterherhinkt.

Das letzte Experiment erfasst die Verarbeitungszeit für eine typische Berechnung, bei der wir den jährlichen Mittelwert und die Volatilität jeder Aktie in der CRSP-Datenbank ermitteln.

Balkendiagramm zur Verarbeitungszeit für die Berechnung von Jahresmittelwert und Volatilität von Aktien in CRSP mit Julia, R und MATLABBalkendiagramm zur Verarbeitungszeit für die Berechnung von Jahresmittelwert und Volatilität von Aktien in CRSP mit Julia, R und MATLAB

In diesem Experiment ist Julia am schnellsten, gefolgt von R, wobei MATLAB erneut stark hinterherhinkt. Diese Ergebnisse stimmen mit den Erkenntnissen von Arouba und Fernández-Villaverde (2018) überein.

Details und Code finden Sie in unserem Web-Anhang (Aguirre und Danielsson 2020).

Zusammenfassend lässt sich sagen, dass Julia im Allgemeinen am schnellsten ist und den geringsten Aufwand an kniffligem Code erfordert, um schnell zu laufen. Jede der anderen könnte die zweitbeste sein, abhängig von der Anwendung und den Fähigkeiten des Programmierers.

Umgang mit Daten

Forscher müssen sich oft mit großen Datenmengen auseinandersetzen, die aus einer Reihe verschiedener Formate gelesen und geschrieben werden, darunter Textdateien, CSV-Dateien, Excel, SQL-Datenbanken, NoSQL-Datenbanken und proprietäre Datenformate, entweder lokal oder remote.

Man könnte meinen, dass Python hierbei brillieren würde, aber zu unserer Überraschung war dies nicht der Fall. Obwohl es Bibliotheken gibt, die fast jede gängige Datenaufgabe bewältigen können, sind sie umständlich und unnatürlich. Wenn wir zum Beispiel auf ein Element in einem DataFrame M zugreifen (lesen/schreiben) möchten, muss man Folgendes verwenden:

M.iloc[1,1]

In R oder Julia lautet die Zeile einfach:

M[1,1]

MATLAB bot traditionell nur numerische Matrizen an und konnte Zeichenketten nicht gut verarbeiten. Obwohl es sich in den letzten Jahren erheblich verbessert hat, ist es immer noch viel eingeschränkter als die anderen drei.

Zusammenfassend lässt sich sagen, dass von den vier Sprachen R die beste für die Arbeit mit verschiedenen Datenformaten ist, gefolgt von Julia, dann Python und MATLAB an letzter Stelle steht.

Bibliotheken

Während jede der vier Sprachen eine grundlegende Basis für Berechnungen bietet, werden die meisten Forscher letztendlich auf Bibliotheken von Drittanbietern zurückgreifen.

Bei den Bibliotheken werden Netzwerkeffekte am wichtigsten: Forscher, die neue Berechnungstechniken entwickeln, bevorzugen die beliebtesten Plattformen, und diejenigen, die forschen, tendieren zu den Plattformen mit den meisten Bibliotheken. Dieser positive Kreislauf hat R stark begünstigt.

Obwohl MATLAB viele integrierte Funktionen bietet, ist es in Bezug auf externe Bibliotheken das schwächste der vier, da es proprietär ist und Bibliotheksentwickler offene Sprachen bevorzugen.

Python hingegen hat bei weitem die beste Auswahl an Bibliotheken für den Umgang mit Dateisystemen, Text, Web-Scraping, Datenbanken und maschinellem Lernen. Es verfügt jedoch über nur wenige statistische Bibliotheken, die in der Wirtschaftsforschung nützlich wären.

Julia, als Neuling, holt noch auf. Obwohl es sein Universum an Bibliotheken, die für die Wirtschaftsforschung nützlich sind, schnell erweitert hat und im Allgemeinen reichhaltigere Bibliotheken als sowohl MATLAB als auch Python besitzt, wird es immer noch von R übertroffen.

R ist bei weitem am reichhaltigsten. Es gibt eine Bibliothek für fast jede erdenkliche statistische Berechnung. Der Nachteil ist, dass einige davon alt, von geringer Qualität, schlecht dokumentiert und oft mit mehreren Paketen für dieselbe Funktionalität versehen sind.

Allerdings können Python, Julia und R Funktionen voneinander aufrufen. So können Bibliotheken in einer Sprache in allen verwendet werden. Wir raten jedoch davon ab, sich zu sehr auf solche sprachübergreifenden Funktionen zu verlassen, da dies das Potenzial für Instabilität und schwer zu diagnostizierende Fehler birgt. Es ist viel natürlicher und robuster, nur in einer Sprache zu arbeiten.

Daher ist R in Bezug auf Bibliotheken die beste Wahl, gefolgt von Julia, dann Python und schließlich MATLAB.

Grafikfähigkeiten

Während alle vier Sprachen in der Lage sind, hochwertige Grafiken auszugeben, ist R unserer Ansicht nach den anderen dreien um Längen voraus. Es überrascht nicht, dass sowohl die New York Times als auch die BBC R für ihre Grafiken verwenden, und Sie können sogar die Bibliothek der BBC herunterladen (BBC 2020).

Die anderen drei unterscheiden sich kaum. Es ist recht einfach, hochwertige Diagramme in MATLAB zu erstellen, aber die Optionen sind begrenzt.

In Python und Julia stehen mehr Optionen zur Verfügung, aber die Bedienung ist umständlich und instabil.

Daher ist R für Grafiken die beste Wahl, gefolgt von Python und Julia, wobei MATLAB erneut an letzter Stelle liegt.

Benutzerfreundlichkeit

MATLAB war traditionell die am einfachsten zu bedienende Sprache. Es verfügt über eine hochwertige integrierte Entwicklungsumgebung (IDE) und bei weitem die beste Dokumentation der vier Sprachen.

R liegt in Bezug auf integrierte Entwicklungsumgebungen (IDEs) nicht weit zurück. Seine Dokumentation ist jedoch nicht so gut. Sowohl Python als auch Julia bieten IDEs an, aber diese sind nicht so gut wie die von MATLAB und R.

Daher sind in Bezug auf die Benutzerfreundlichkeit, insbesondere für Anfänger, MATLAB und R die besten, gefolgt von Julia, wobei Python an letzter Stelle steht.

Lizenzierung

Drei dieser Sprachen (Julia, Python und R) sind Open Source, während MATLAB kommerziell ist. Informationen zur Preisgestaltung finden Sie bei Mathworks (2020). Dies bedeutet, dass die ersten drei auf fast jeder Plattform verfügbar sind und ohne Bezahlung oder Genehmigung installiert werden können.

Daher ist in Bezug auf Lizenzierung und Kosten MATLAB die schlechteste Option, und die anderen drei sind gleichwertig.

Fazit und Empfehlungen

Keine der vier Sprachen ist universell die beste. Die empfohlene Sprache ist immer noch die, mit der der Forscher am vertrautesten ist.

Für neue Projekte und insbesondere für neue Forscher, die sich noch keiner Sprache verschrieben haben, ändert sich das Bild jedoch.

MATLAB und R profitieren davon, Veteranen zu sein. Man kann damit fast alles machen, was man möchte. Ihr Alter zeigt sich jedoch, und MATLAB konnte insbesondere nicht mithalten. Folglich können wir es für neue Projekte nicht empfehlen. R bleibt aufgrund seiner unvergleichlichen Bibliotheken eine ausgezeichnete Wahl, die Sprache selbst lässt jedoch zu wünschen übrig.

Python wurde für andere Zwecke entwickelt, in denen es hervorragend ist, aber wir können es nicht für die allgemeine numerische Programmierung empfehlen, außer in Anwendungen, die seine Stärken ausspielen, wie z.B. maschinelles Lernen.

Was ist mit Julia? Es ist die modernste Sprache, elegant und schnell, mit einer schnell wachsenden Bibliotheksunterstützung. Die Gefahr bei einer neuen Sprache wie Julia ist, dass sie wieder verschwindet; nachdem man erhebliche Zeit und Energie in eine Sprache investiert hat, ist es frustrierend zu sehen, wie sie an Bedeutung verliert.

Als wir diesen Vergleich vor zwei Jahren durchführten, empfahlen wir R, sagten aber, dass Julia die Sprache sei, die man im Auge behalten sollte. Damals entwickelte sich Julia sehr schnell, so dass der Code zwischen den Releases brach, und ihre langfristige Überlebensfähigkeit war fraglich. Julia hat sich nun stabilisiert, und ihre langfristige Zukunft ist zunehmend gesichert.

Als Konsequenz ist Julia die Sprache, die wir jetzt für neue Projekte bevorzugen und generell empfehlen.

Anmerkung der Autoren: Wir danken dem Economic and Social Research Council (UK) [Projektnummer ES/K002309/1] und dem Engineering and Physical Sciences Research Council (UK) [Projektnummer EP/P031730/1] für ihre Unterstützung.

Referenzen

Aguirre, A und J Danielsson (2020), „Web appendix to Which programming language is best for economics and finance research: Julia, Matlab, Python or R?

Arouba, S und J Fernández-Villaverde (2018), „A Comparison of Programming Languages in Economics: An Update“.

BBC (2020), https://github.com/bbc/bbplot.

Danielsson, J und J R Fan (2018), „Which numerical computing language is best: Julia, MATLAB, Python or R?“, voxEU.org, 9. Juli.

Danielsson, J (2011), Financial Risk Forecasting, Hoboken: Wiley.

Perla, J, T Sargent und J Stachurski (2020), „Quantitative Economics with Julia“.