Parmi Matlab et Python, quel langage est bon pour l'analyse statistique?

17

Parmi Matlab et Python, quel langage est bon pour l'analyse générale des données statistiques? Quels sont les avantages et les inconvénients, autres que l'accessibilité, pour chacun?

1102
la source
2
Cela devrait être le wiki de la communauté, l'OMI.
Shane
Pourriez-vous expliquer pourquoi vous ne pouvez pas également regarder R?
Dirk Eddelbuettel
@DirK: J'ai à peine entendu parler de R. De plus, je voulais apprendre un langage de programmation comme Python, et là encore, je ne pense pas que R soit proche de python, IMO. J'espère que cela répond à votre question.
2
Fouillez un peu ici et à StackOverflow en termes de ce que les gens recommandent pour l'analyse statistique et la programmation . Beaucoup d'entre nous pensent qu'il n'y a pas de véritable alternative à R. Mais tout comme la beauté, c'est dans l'œil du spectateur, alors bonne chance.
Dirk Eddelbuettel
En termes de géostatistique (dans laquelle j'ai fait ma thèse), je pense que R est très bien équipé (voir gstat, geoR etc). Au moins, je ne connais pas une telle couverture complète des techniques géostatistiques en python. Et pourquoi R "est-il loin d'être proche de python"? J'ai utilisé les deux et pour les géostats, je pense que R est clairement supérieur.
Paul Hiemstra

Réponses:

29

En tant qu'utilisateur inconditionnel de Matlab depuis plus de 10 ans, je vous recommande d'apprendre Python. Une fois que vous êtes suffisamment compétent dans une langue, lorsque vous travaillez dans une langue que vous apprenez, il semble que vous ne soyez pas assez productif et vous vous retrouvez à utiliser votre meilleure langue par défaut. À tout le moins, je vous suggère d'essayer de devenir également compétent dans un certain nombre de langues (je suggère également R).

Ce que j'aime chez Matlab:

  • J'en suis compétent.
  • C'est la lingua franca des analystes numériques.
  • l'outil de profilage est très bon. C'est la seule raison pour laquelle j'utilise Matlab au lieu d'octave.
  • Il existe un clone gratuit, octave, qui respecte bien l'implémentation de référence.

Ce que je n'aime pas chez Matlab:

  • Il n'y a pas de bon système pour gérer les packages et scripts tiers (gratuits ou non). Mathworks contrôle l '«échange de fichiers central» et l'installation de modules complémentaires semble très maladroite, rien de tel que l'excellent système de R. En outre, Mathworks n'a aucune incitation à améliorer cette situation, car ils font de l'argent sur la vente de boîtes à outils, qui sont en concurrence avec les packages de logiciels gratuits;
  • Les licences pour le calcul parallèle dans Matlab sont incroyablement chères;
  • Une grande partie du m-code, y compris de nombreuses fonctions de la boîte à outils, et certains éléments intégrés, ont été conçus pour être évidemment corrects, au détriment de l'efficacité et / ou de la convivialité. L'exemple le plus flagrant de cela est la medianfonction de Matlab , qui effectue une sorte de données, puis prend la valeur médiane . Cela a été le mauvais algorithme depuis les années 70.
  • enregistrer des graphiques dans un fichier est au mieux douteux dans Matlab.
  • Je n'ai pas trouvé que mon expérience utilisateur s'est améliorée au cours des 5 dernières années (quand j'ai commencé à utiliser Matlab au lieu d'octave), même si Mathworks continue d'ajouter des cloches et des sifflets. Cela indique que je ne suis pas leur client cible, mais plutôt qu'ils cherchent à accroître leur part de marché en aggravant les choses pour les utilisateurs expérimentés.
  • Il y a maintenant 2 façons de faire de la programmation orientée objet dans Matlab, ce qui est au mieux déroutant. Le code hérité utilisant l'ancien style persistera pendant un certain temps.
  • L'interface utilisateur Matlab est écrite en Java, qui a des idées désagréables sur la gestion de la mémoire.
shabbychef
la source
+1, bons points. Sur ceci: "idées désagréables sur la gestion de la mémoire" .. intéressant, pouvez-vous élaborer?
ars
1
ma mémoire va quelque part ; mon expérience avec Java en dehors de l'utilisation de Matlab indique que c'est probablement le coupable, et le fait de courir -nojvmsemble aider ...
shabbychef
Mon exemple préféré de codes intégrés étranges MATLAB est la lecture aléatoire, qui réorganise les données avec l'ordre retourné en triant un vecteur aléatoire fraîchement créé.
1
@mbq: shufflepeut être dans une boîte à outils, n'est pas un matlab en stock. pourrait difficilement être pire que la fonction intégrée randpermqui renvoie l'indice de tri d'un vecteur aléatoire. Encore une fois, c'est probablement le mauvais algorithme (je viens d'apprendre le mélange Knuth-Fisher-Yates ici sur stats.SE) ..
shabbychef
1
@mbq: l'autre bonne partie randpermest qu'elle est affectée par l'ensemencement de randn, alors qu'une version mexique de Knuth-Fisher-Yates ne peut peut-être pas accéder à la graine randn `` en interne '', et une version .m pure de shuffle serait probablement être trop lent.
shabbychef
11

Permet de le décomposer en trois domaines (du haut de ma tête) où la programmation rencontre les statistiques: analyse des données, routines numériques (optimisation et autres) et bibliothèques statistiques (modélisation, etc.).

Sur le premier, la plus grande différence est que Python est un langage de programmation à usage général. Matlab est génial tant que votre monde est à peu près isomorphe à un tableau numérique fortran. Une fois que vous commencez à traiter le transfert de données et les problèmes connexes, Python surpasse Matlab. Par exemple, consultez le livre de Greg Wilson: Data Crunching: Solve Everyday Problems Using Java, Python, and more .

Sur le second, Matlab brille vraiment avec le travail numérique. Une grande partie de la communauté de recherche l'utilise et si vous cherchez, par exemple, un algorithme lié à un document en détection compressée, vous êtes beaucoup plus susceptible de trouver une implémentation dans Matlab. D'autre part, Matlab est une sorte de PHP de l'informatique scientifique - il s'efforce d'avoir une fonction pour tout sous le soleil. L'esthétique et l'architecture qui en résultent sont exaspérantes si vous êtes un geek du langage de programmation, mais en termes utilitaires, cela fait le travail. Une grande partie de cela est devenue moins pertinente avec la montée en puissance de Numpy / Scipy, vous êtes tout aussi susceptible de trouver des bibliothèques d'optimisation et d'apprentissage automatique disponibles pour Python. L'interfaçage avec C est à peu près aussi simple dans les deux langues.

En ce qui concerne la disponibilité de bibliothèques statistiques pour la modélisation et autres, les deux manquent quelque peu par rapport à quelque chose comme R. (Bien que je soupçonne que les deux répondront aux besoins de 80% des personnes effectuant des travaux statistiques.) Pour le côté Python, voir cette question : Python comme un établi de statistiques . Pour le côté Matlab, je sais qu'il y a une boîte à outils de statistiques, mais je vais laisser quelqu'un plus compétent remplir les blancs (mon expérience avec Matlab se limite à un travail numérique sans rapport avec les statistiques).

ars
la source
Les boîtes à outils statistiques de Matlab sont assez amusantes. Y a-t-il quelque chose de similaire pour R, où par exemple vous pouvez rapidement essayer un tas d'ajustements de fonction différents (régressions)?
Alex R.
6

Je suis également un grand utilisateur de Matlab depuis plus de 10 ans. Pendant plusieurs de ces années, je n'avais aucune raison de travailler au-delà de la boîte à outils que j'avais créée pour mon travail. Bien que de nombreuses fonctions aient été créées pour une boîte à outils, j'ai souvent eu besoin de créer des algorithmes pour une analyse rapide des délais d'exécution. Étant donné que ces algorithmes utilisent souvent des mathématiques matricielles, Matlab était un candidat idéal pour mon travail. En plus de ma boîte à outils Matlab de code, d'autres membres de mon groupe ont beaucoup travaillé en Java car il y avait une interopérabilité claire entre les langages. Pendant des années, j'étais complètement satisfait de Matlab, mais il y a environ 3 ans, j'ai décidé de commencer la transition lente loin de Matlab et heureux de dire que je ne l'ai pas ouvert depuis environ un an maintenant. Voici la raison de mon déménagement:

  • Je travaille avec des systèmes informatiques en ligne et hors ligne, le système de licence a toujours été un casse-tête. Il semblait toujours arriver que lorsque nous avions le plus besoin de Matlab, la licence expirait ou avait soudainement des problèmes. C'était toujours un casse-tête. De plus, si nous avions besoin de partager du code et que l'autre partie n'avait pas de licences pour les mêmes boîtes à outils, cela créait un casse-tête. Ce n'est pas gratuit
  • J'ai souvent besoin de créer des présentations. Même si Matlab fournit des outils étendus pour créer des figures, ce qui le rend très puissant pour la conception d'algorithmes, mais enregistrer la figure de telle sorte qu'elle puisse être insérée dans une présentation et être belle n'est pas une tâche simple. J'ai souvent dû insérer un fichier EPS dans Adobe illustrator pour supprimer toutes les ordures, corriger les polices et nettoyer les lignes. Il existe cependant quelques outils pour aider à cela sur l'échange de fichiers (export_fig.m).
  • Je reçois souvent du code Matlab des autres. Lorsque cela se produit, je le réécris presque toujours parce que: leur API n'est pas compatible avec mes données, leur code n'a pas de sens, il est lent, il ne produit pas ce dont j'ai besoin, ... Fondamentalement, les gens qui développent dans Matlab sont pas des ingénieurs logiciels et Matlab n'encourage aucun type de principe de conception.
  • Je suis un grand utilisateur. J'aime les terminaux. Je déteste l'interface graphique - je déteste ça. Et quand ils ont ajouté le ruban de style "windows", je l'ai détesté encore plus. Fondamentalement, leurs ajustements à l'interface graphique et la gestion de la mémoire terrible ont poussé mon dernier bouton et j'ai décidé de partir. L'utilisation de l' -nodesktopoption est bonne la plupart du temps, mais a ses problèmes.
  • De nombreuses possibilités de conception de fonctions (en utilisant OO, ou conception fonctionnelle), mais aucune ne se sent bien, la plupart se sentent adhoc. Je ne reçois pas de satisfaction de concevoir de bonnes fonctions dans Matlab
  • La communauté est grande, mais n'est pas facile à partager et à trouver un bon code. L'échange de fichiers n'est pas terrible.

Ce ne sont que quelques-uns de mes nombreux reproches à Matlab. C'est un attribut brillant: c'est facile, vraiment facile d'écrire du code rapidement (sinon moche). Je l'ai laissé cependant et ma quête m'a conduit à travers Clojure-> JavaScript-> Python <-> Julia; ouais, je suis partout.

  • Clojure: beau langage fonctionnel. Ma raison d'utiliser Clojure était sa capacité à script Java. Une grande partie de notre "grande" base de code est en Java, donc cela avait beaucoup de sens. À l'époque, beaucoup de traitements scientifiques n'étaient pas facilement disponibles, et pas beaucoup de visualisation non plus. Mais je pense que cela change.
  • Javascript: après avoir vu les benchmarks sur http://julialang.org/ , et comme j'étais vraiment intéressé par la capacité de visualisation de D3 , j'ai décidé d'essayer JavaScript. JavaScript est étonnamment très rapide. Mais si vous voulez vraiment vous haïr, apprenez JavaScript.
  • Python: Python a une communauté incroyable et a beaucoup de grands projets en cours. Le bloc-notes IPython est incroyable pour de nombreuses raisons (l'une d'entre elles étant une simple copie / copie des figures dans PowerPoint). Des projets comme NumPy / SciPy / Scikit-Learn / Pandas ont vraiment rendu Python amusant et facile à utiliser. Il est si facile à utiliser sur plusieurs cœurs ou clusters. Je suis vraiment content du changement.
  • Julia: Julia est incroyable. Surtout pour les utilisateurs de Matlab. C'est à ses balbutiements, donc beaucoup de changements sont en cours. L'un des inconvénients majeurs de Python est qu'il n'a pas toutes les fonctionnalités intégrées de Matlab. Bien sûr, NumPy / SciPy apportent cette fonctionnalité, mais elle n'est pas intégrée et vous devez décider si ce sont des objets python purs ou des objets numpy. Julia a essentiellement tout ce que vous souhaiteriez que Python vienne de Matlab. J'attendrais, mais c'est la meilleure option pour les utilisateurs de Matlab à l'avenir.
Justin
la source