Welche Sprache eignet sich bei Matlab und Python für statistische Analysen?
17
Welche Sprache eignet sich unter Matlab und Python für die allgemeine statistische Datenanalyse? Was sind die Vor- und Nachteile außer der Barrierefreiheit für jeden?
Möchtest du erklären, warum du R nicht auch ansehen konntest?
Dirk Eddelbuettel
@DirK: Ich habe kaum von R gehört. Außerdem wollte ich eine Programmiersprache wie Python lernen, und andererseits glaube ich auch nicht, dass R irgendwo in der Nähe von Python liegt, IMO. Ich hoffe es beantwortet deine Frage.
2
Schauen Sie sich hier und bei StackOverflow um, was die Leute für die statistische Analyse und Programmierung empfehlen . Viele von uns glauben, dass es keine wirkliche Alternative zu R gibt. Aber genau wie Schönheit ist dies im Auge des Betrachters, also viel Glück.
Dirk Eddelbuettel
In Bezug auf die Geostatistik (in der ich promoviert habe) denke ich, dass R sehr gut ausgestattet ist (siehe gstat, geoR usw.). Zumindest kenne ich eine solche vollständige Abdeckung der geostatistischen Techniken in Python nicht. Und warum ist R "bei weitem nicht in der Nähe von Python"? Ich habe beides benutzt und für Geostaten denke ich, dass R ganz klar überlegen ist.
Paul Hiemstra
Antworten:
29
Als eingefleischter Matlab-Benutzer seit über 10 Jahren empfehle ich Ihnen, Python zu lernen. Wenn Sie eine Sprache ausreichend beherrschen und in einer Sprache arbeiten, die Sie gerade lernen, scheint es, als ob Sie nicht produktiv genug sind, und Sie werden auf Ihre Standardsprache zurückgreifen. Zumindest würde ich vorschlagen, dass Sie versuchen, eine Reihe von Sprachen gleichermaßen zu beherrschen (ich würde auch R vorschlagen).
Was ich an Matlab mag:
Ich beherrsche es.
Es ist der Verkehrssprache unter den numerischen Analysten.
Das Profilierungswerkzeug ist sehr gut. Dies ist der einzige Grund, warum ich Matlab anstelle von Octave verwende.
Es gibt einen Freeware-Klon, Octave, der gut mit der Referenzimplementierung übereinstimmt.
Was ich an Matlab nicht mag:
Es gibt kein gutes System, um Pakete und Skripte von Drittanbietern (kostenlos oder anderweitig) zu verwalten. Mathworks kontrolliert den 'zentralen Dateiaustausch', und die Installation von Add-On-Paketen scheint sehr umständlich zu sein. Darüber hinaus hat Mathworks keinen Anreiz, diese Situation zu verbessern, da sie mit dem Verkauf von Toolboxen, die mit Freeware-Paketen konkurrieren, Geld verdienen.
Lizenzen für die parallele Berechnung in Matlab sind wahnsinnig teuer;
Ein Großteil des m-Codes, einschließlich vieler Toolbox-Funktionen und einiger eingebauter Funktionen, wurde auf Kosten der Effizienz und / oder Benutzerfreundlichkeit als offensichtlich korrekt konzipiert. Das eklatanteste Beispiel dafür ist die Matlab- medianFunktion, die eine Art von Daten ausführt und dann den mittleren Wert annimmt . Dies ist seit den 70er Jahren der falsche Algorithmus.
Das Speichern von Grafiken in einer Datei ist in Matlab bestenfalls schwierig.
Ich habe nicht festgestellt, dass sich meine Benutzererfahrung in den letzten 5 Jahren verbessert hat (als ich anfing, Matlab anstelle von Octave zu verwenden), obwohl Mathworks immer wieder neue Akzente setzt. Dies zeigt, dass ich nicht ihr Zielkunde bin, sondern dass sie versuchen, ihren Marktanteil zu vergrößern, indem sie die Situation für Power-User verschlechtern.
In Matlab gibt es jetzt zwei Möglichkeiten, objektorientiertes Programmieren durchzuführen, was bestenfalls verwirrend ist. Legacy-Code, der den alten Stil verwendet, bleibt für einige Zeit erhalten.
Die Matlab-Benutzeroberfläche ist in Java geschrieben, was unangenehme Vorstellungen zur Speicherverwaltung beinhaltet.
+1, gute Punkte. Dazu: "Unangenehme Ideen zum Speichermanagement". Interessant, können Sie näher darauf eingehen?
ars
1
Meine Erinnerung geht irgendwohin . Meine Erfahrung mit Java außerhalb der Matlab-Nutzung zeigt, dass dies der wahrscheinliche Schuldige ist, und es -nojvmscheint hilfreich zu sein, sich
einzulassen
Mein Lieblingsbeispiel für seltsame MATLAB-Codes ist "shuffle", bei dem die Daten mit der zurückgegebenen Reihenfolge neu geordnet werden, indem ein frisch erstellter Zufallsvektor sortiert wird.
1
@mbq: shuffleMöglicherweise in einer Toolbox, ist nicht auf Lager Matlab. könnte kaum schlimmer sein als builtin, randpermdas den Sortierindex eines zufälligen Vektors zurückgibt. Auch dies ist wahrscheinlich der falsche Algorithmus (ich habe gerade über die Knuth-Fisher-Yates-Shuffle hier auf stats.SE erfahren) ..
Shabbychef
1
@mbq: Der andere gute Teil randpermist, dass es von der Aussaat betroffen ist randn, während eine mexikanische Version von Knuth-Fisher-Yates möglicherweise nicht 'intern' auf den Randn-Samen zugreifen kann und eine reine .m-Version von shuffle wahrscheinlich sei zu langsam.
Shabbychef
11
Lassen Sie es uns in drei Bereiche aufteilen (von Kopf bis Fuß), in denen Programmierung und Statistik zusammentreffen: Datenverarbeitung, numerische Routinen (Optimierung usw.) und statistische Bibliotheken (Modellierung usw.).
Der größte Unterschied besteht darin, dass Python eine universelle Programmiersprache ist. Matlab ist großartig, solange Ihre Welt ungefähr isomorph zu einem fortran numerischen Array ist. Sobald Sie anfangen, sich mit Data Munging und verwandten Problemen zu befassen, überstrahlt Python Matlab. Ein Beispiel hierfür ist Greg Wilsons Buch: Data Crunching: Lösen alltäglicher Probleme mit Java, Python und mehr .
Auf der zweiten Seite glänzt Matlab wirklich mit numerischer Arbeit. Ein Großteil der Forschungsgemeinschaft nutzt es und wenn Sie nach einem Algorithmus suchen, der sich auf ein Papier mit komprimierter Abtastung bezieht, sind Sie weit davon entfernt Wahrscheinlichkeit, dass Sie eine Implementierung in Matlab finden höher. Andererseits ist Matlab eine Art PHP des wissenschaftlichen Rechnens - es strebt danach, für alles unter der Sonne eine Funktion zu haben. Die daraus resultierende Ästhetik und Architektur sind verrückt, wenn Sie ein Programmiersprachenfreak sind, aber in nützlicher Hinsicht erledigt es die Arbeit. Vieles davon ist mit dem Aufstieg von Numpy / Scipy weniger relevant geworden. Es ist genauso wahrscheinlich, dass Sie Optimierungs- und Maschinelle Lernbibliotheken für Python finden. Die Schnittstelle zu C ist in beiden Sprachen ungefähr so einfach.
In Bezug auf die Verfügbarkeit statistischer Bibliotheken für die Modellierung und ähnliches fehlt es beiden im Vergleich zu R etwas. (Obwohl ich vermute, dass beide den Bedarf von 80% der statistisch arbeitenden Personen decken werden.) Was die Python-Seite angeht, sehen Sie sich diese Frage an : Python als Statistik-Workbench . Ich weiß, dass es für Matlab eine Statistik-Toolbox gibt, aber ich lasse die Lücken von einem Fachmann ausfüllen (meine Erfahrung mit Matlab beschränkt sich auf statistikunabhängige numerische Arbeiten).
Die Statistik-Toolboxen in Matlab machen Spaß. Gibt es etwas Ähnliches für R, wo Sie zum Beispiel schnell eine Reihe verschiedener Funktionsanpassungen (Regressionen) ausprobieren können?
Alex R.
6
Ich bin außerdem seit über 10 Jahren begeisterter Matlab-Benutzer. Viele dieser Jahre hatte ich keinen Grund, über den für meinen Job erstellten Werkzeugkasten hinaus zu arbeiten. Obwohl viele Funktionen für eine Toolbox erstellt wurden, musste ich häufig Algorithmen für eine schnelle Analyse der Bearbeitungszeit erstellen. Da diese Algorithmen häufig Matrixmathematik verwenden, war Matlab ein idealer Kandidat für meinen Job. Zusätzlich zu meiner Matlab-Code-Toolbox arbeiteten andere in meiner Gruppe intensiv in Java, da eine klare Interoperabilität zwischen den Sprachen bestand. Ich war jahrelang sehr zufrieden mit Matlab, aber vor ungefähr 3 Jahren habe ich beschlossen, den langsamen Übergang weg von Matlab zu beginnen, und bin froh zu sagen, dass ich ihn seit ungefähr einem Jahr nicht mehr geöffnet habe. Hier sind die Gründe für meinen Umzug:
Ich arbeite mit Online- und Offline-Computersystemen, das Lizenzsystem bereitete mir immer Kopfzerbrechen. Es schien immer vorzukommen, dass die Lizenz ablief oder plötzlich Probleme auftraten, wenn wir Matlab am dringendsten benötigten. Dies war immer Kopfschmerzen. Auch wenn wir jemals Code teilen mussten und die andere Partei keine Lizenzen für die gleichen Toolboxen hatte, verursachte dies Kopfschmerzen. Es ist nicht kostenlos
Ich muss oft Präsentationen erstellen. Obwohl Matlab umfangreiche Tools zum Erstellen von Zahlen bietet, ist es für das Algorithmus-Design sehr leistungsfähig, speichert die Zahl jedoch so, dass sie in eine Präsentation eingefügt werden kann und gut aussieht, ist keine einfache Aufgabe. Ich musste oft eine EPS-Datei in Adobe Illustrator einfügen, um den gesamten Müll zu entfernen, die Schriftarten zu reparieren und die Linien zu bereinigen. Es gibt jedoch einige Tools, die beim Dateiaustausch helfen (export_fig.m).
Ich bekomme oft Matlab-Code von anderen. Wenn dies passiert, schreibe ich es fast immer neu, weil: Ihre API nicht mit meinen Daten kompatibel ist, ihr Code keinen Sinn ergibt, langsam ist, nicht das ausgibt, was ich brauche, ... Grundsätzlich sind es Leute, die sich in Matlab entwickeln keine Software-Ingenieure und Matlab unterstützt keinerlei Designprinzipien.
Ich bin ein Poweruser. Ich mag Terminals. Ich hasse die GUI - hasse es. Und als sie das "Windows" -Stilband hinzufügten, hasste ich es noch mehr. Grundsätzlich drückten ihre Verbesserungen an der Benutzeroberfläche und die schreckliche Speicherverwaltung meinen letzten Knopf und ich beschloss zu gehen. Die -nodesktopOption zu verwenden ist die meiste Zeit gut, hat aber Probleme.
Viele Möglichkeiten zur Gestaltung von Funktionen (mit OO oder funktionalem Design), aber keine fühlen sich richtig an, die meisten fühlen sich adhoc. Ich bin nicht zufrieden damit, gute Funktionen in Matlab zu entwickeln
Die Community ist groß, aber es ist nicht einfach, guten Code zu teilen und zu finden. Der Dateiaustausch ist nicht so toll.
Dies sind nur einige meiner vielen Probleme mit Matlab. Es ist ein herausragendes Merkmal: Es ist einfach, Code schnell zu schreiben (wenn nicht sogar hässlich). Ich habe es jedoch verlassen und meine Suche führte mich durch Clojure-> JavaScript-> Python <-> Julia; Ja, ich war überall.
Clojure: schöne funktionale Sprache. Mein Grund für die Verwendung von Clojure war die Fähigkeit, Java zu schreiben. Ein Großteil unserer "großen" Codebasis ist in Java, daher ergab dies einen großen Sinn. Zu dieser Zeit war nicht viel wissenschaftliche Verarbeitung verfügbar, und auch nicht viel mit Visualisierung. Aber ich denke, das ändert sich.
Javascript: Nachdem ich die Benchmarks unter http://julialang.org/ gesehen habe und mich definitiv für die Visualisierungsfähigkeit von D3 interessiert habe , entschied ich mich für JavaScript. JavaScript ist überraschend schnell. Aber wenn Sie sich wirklich hassen wollen, lernen Sie JavaScript.
Python: Python hat eine großartige Community und viele großartige Projekte, die gerade laufen. Das IPython-Notizbuch ist aus vielen Gründen erstaunlich (eine davon ist das einfache Kopieren / Veröffentlichen von Zahlen in Powerpoint). Projekte wie NumPy / SciPy / Scikit-Learn / Pandas haben Python wirklich unterhaltsam und benutzerfreundlich gemacht. Es ist so einfach, es auf mehreren Kernen oder Clustern zu verwenden. Ich habe mich sehr über den Wechsel gefreut.
Julia: Julia ist unglaublich. Speziell für Matlab-Benutzer. Es steckt jedoch noch in den Kinderschuhen, so dass viele Änderungen stattfinden. Einer der Hauptnachteile von Python ist, dass es nicht alle in Matlab integrierten Funktionen bietet. Sicher, NumPy / SciPy bietet diese Funktionalität, ist jedoch nicht integriert und Sie müssen entscheiden, ob es sich um reine Python-Objekte oder um numpy-Objekte handelt. Julia hat im Grunde alles, was Sie sich wünschen, dass Python von Matlab kommt. Ich würde warten, aber dies ist in Zukunft die beste Option für Matlab-Benutzer.
Antworten:
Als eingefleischter Matlab-Benutzer seit über 10 Jahren empfehle ich Ihnen, Python zu lernen. Wenn Sie eine Sprache ausreichend beherrschen und in einer Sprache arbeiten, die Sie gerade lernen, scheint es, als ob Sie nicht produktiv genug sind, und Sie werden auf Ihre Standardsprache zurückgreifen. Zumindest würde ich vorschlagen, dass Sie versuchen, eine Reihe von Sprachen gleichermaßen zu beherrschen (ich würde auch R vorschlagen).
Was ich an Matlab mag:
Was ich an Matlab nicht mag:
median
Funktion, die eine Art von Daten ausführt und dann den mittleren Wert annimmt . Dies ist seit den 70er Jahren der falsche Algorithmus.quelle
-nojvm
scheint hilfreich zu sein, sichshuffle
Möglicherweise in einer Toolbox, ist nicht auf Lager Matlab. könnte kaum schlimmer sein als builtin,randperm
das den Sortierindex eines zufälligen Vektors zurückgibt. Auch dies ist wahrscheinlich der falsche Algorithmus (ich habe gerade über die Knuth-Fisher-Yates-Shuffle hier auf stats.SE erfahren) ..randperm
ist, dass es von der Aussaat betroffen istrandn
, während eine mexikanische Version von Knuth-Fisher-Yates möglicherweise nicht 'intern' auf den Randn-Samen zugreifen kann und eine reine .m-Version von shuffle wahrscheinlich sei zu langsam.Lassen Sie es uns in drei Bereiche aufteilen (von Kopf bis Fuß), in denen Programmierung und Statistik zusammentreffen: Datenverarbeitung, numerische Routinen (Optimierung usw.) und statistische Bibliotheken (Modellierung usw.).
Der größte Unterschied besteht darin, dass Python eine universelle Programmiersprache ist. Matlab ist großartig, solange Ihre Welt ungefähr isomorph zu einem fortran numerischen Array ist. Sobald Sie anfangen, sich mit Data Munging und verwandten Problemen zu befassen, überstrahlt Python Matlab. Ein Beispiel hierfür ist Greg Wilsons Buch: Data Crunching: Lösen alltäglicher Probleme mit Java, Python und mehr .
Auf der zweiten Seite glänzt Matlab wirklich mit numerischer Arbeit. Ein Großteil der Forschungsgemeinschaft nutzt es und wenn Sie nach einem Algorithmus suchen, der sich auf ein Papier mit komprimierter Abtastung bezieht, sind Sie weit davon entfernt Wahrscheinlichkeit, dass Sie eine Implementierung in Matlab finden höher. Andererseits ist Matlab eine Art PHP des wissenschaftlichen Rechnens - es strebt danach, für alles unter der Sonne eine Funktion zu haben. Die daraus resultierende Ästhetik und Architektur sind verrückt, wenn Sie ein Programmiersprachenfreak sind, aber in nützlicher Hinsicht erledigt es die Arbeit. Vieles davon ist mit dem Aufstieg von Numpy / Scipy weniger relevant geworden. Es ist genauso wahrscheinlich, dass Sie Optimierungs- und Maschinelle Lernbibliotheken für Python finden. Die Schnittstelle zu C ist in beiden Sprachen ungefähr so einfach.
In Bezug auf die Verfügbarkeit statistischer Bibliotheken für die Modellierung und ähnliches fehlt es beiden im Vergleich zu R etwas. (Obwohl ich vermute, dass beide den Bedarf von 80% der statistisch arbeitenden Personen decken werden.) Was die Python-Seite angeht, sehen Sie sich diese Frage an : Python als Statistik-Workbench . Ich weiß, dass es für Matlab eine Statistik-Toolbox gibt, aber ich lasse die Lücken von einem Fachmann ausfüllen (meine Erfahrung mit Matlab beschränkt sich auf statistikunabhängige numerische Arbeiten).
quelle
Ich bin außerdem seit über 10 Jahren begeisterter Matlab-Benutzer. Viele dieser Jahre hatte ich keinen Grund, über den für meinen Job erstellten Werkzeugkasten hinaus zu arbeiten. Obwohl viele Funktionen für eine Toolbox erstellt wurden, musste ich häufig Algorithmen für eine schnelle Analyse der Bearbeitungszeit erstellen. Da diese Algorithmen häufig Matrixmathematik verwenden, war Matlab ein idealer Kandidat für meinen Job. Zusätzlich zu meiner Matlab-Code-Toolbox arbeiteten andere in meiner Gruppe intensiv in Java, da eine klare Interoperabilität zwischen den Sprachen bestand. Ich war jahrelang sehr zufrieden mit Matlab, aber vor ungefähr 3 Jahren habe ich beschlossen, den langsamen Übergang weg von Matlab zu beginnen, und bin froh zu sagen, dass ich ihn seit ungefähr einem Jahr nicht mehr geöffnet habe. Hier sind die Gründe für meinen Umzug:
-nodesktop
Option zu verwenden ist die meiste Zeit gut, hat aber Probleme.Dies sind nur einige meiner vielen Probleme mit Matlab. Es ist ein herausragendes Merkmal: Es ist einfach, Code schnell zu schreiben (wenn nicht sogar hässlich). Ich habe es jedoch verlassen und meine Suche führte mich durch Clojure-> JavaScript-> Python <-> Julia; Ja, ich war überall.
quelle