R vs Python pour l'analyse des données [fermé]

60

Je programme depuis environ un an et je m'intéresse beaucoup à l'analyse de données et à l'apprentissage automatique. Je participe à quelques cours en ligne et je lis quelques livres.

Tout ce que je fais utilise R ou Python et je cherche des suggestions sur la question de savoir si je devrais ou non me concentrer sur une langue (et si oui, laquelle) ou poursuivre avec les deux; se complètent-ils?

- Je dois mentionner que j'utilise C # à l'école mais que Python est familier grâce à l'auto-apprentissage.

The_Cthulhu_Kid
la source
Voici peut-être un lien intéressant: coursera.org/course/compdata
Giorgio

Réponses:

39

J'utilise à la fois Python (pour l'analyse des données, y compris numpy et scipy) et R l'un à côté de l'autre. Cependant, j'utilise exclusivement R pour l'analyse des données et Python pour des tâches de programmation plus génériques (par exemple, le contrôle du flux de travail d'un modèle informatique).

En termes d'opérations de base, disons, les opérations sur les tableaux et le tri, R et Python + numpy sont très comparables. C’est dans la très grande bibliothèque de fonctions statistiques que R a un avantage. De plus, matplotlib ne semble pas être aussi performant que ggplot2, mais je n’ai pas beaucoup utilisé matplotlib. De plus, je me concentrerais d'abord sur une langue et deviendrais bon dans les détails. Vous semblez être principalement intéressé par l'analyse de données, pas par l'ingénierie logicielle. Je choisirais R et m'en tenir à cela. Cela dit, je pense que choisir Python + numpy + scipy + scikit est un excellent choix. C’est juste que j’ai le sentiment que R est un peu plus excellent.

Je jetterais également un coup d’œil autour de vous sur ce que vos collègues et d’autres personnes de votre domaine utilisent. S'ils utilisent tous, disons, Python, il serait logique de s'en tenir à cela pour apprendre plus facilement d'eux et échanger du code.

Clause de non-responsabilité: notez que je suis un gros utilisateur de R; mon avis peut donc être biaisé, même si j’ai essayé de garder ma réponse aussi objective que possible. De plus, je n’ai pas beaucoup utilisé Python + numpy, même si je connais des collègues qui y font toute l’analyse de données.

ps: Ce lien peut être intéressant: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps: ou cette citation de ce post :

J'utilise R et Python pour toutes mes recherches (avec Rcpp ou Cython si nécessaire), mais je préfère éviter d'écrire en C ou C ++ si je peux l'éviter. R est une langue merveilleuse, en grande partie à cause de l'incroyable communauté d'utilisateurs. Il a été créé par des statisticiens, ce qui signifie que l'analyse des données est au cœur même du langage. Je considère cela comme une caractéristique majeure de la langue et une des principales raisons pour lesquelles elle ne sera pas remplacée de si tôt. Python est généralement un meilleur langage global, en particulier si l’on tient compte de sa combinaison de programmation fonctionnelle et d’orientation objet. Combiné avec Scipy / Numpy, Pandas et statsmodels, ceci fournit une combinaison puissante. Mais Python manque toujours d’une communauté sérieuse de statisticiens / mathématiciens.

Paul Hiemstra
la source
3
Dire que R est plus fort que Python, voulez-vous dire Python + numpy / blaze + scipy ou simplement Python?
9000 le
5
Je veux dire Python + numpy oui, sinon le choix serait encore plus facile. Je pense qu'en termes d'opérations de base, disons, les opérations sur les tableaux et le type, R et Python + numpy sont très comparables. C’est dans la très grande bibliothèque de fonctions statistiques que R a un avantage. De plus, matplotlib ne semble pas être aussi performant que ggplot2, mais je n’ai pas beaucoup utilisé matplotlib.
Paul Hiemstra
Cela dit, je pense que choisir Python + numpy + scipy + scikit est un excellent choix. C’est juste que j’ai le sentiment que R est un peu plus excellent.
Paul Hiemstra
@PaulHiemstra - Dans vos commentaires, vous faites ressortir quelques points intéressants qui amélioreraient probablement votre réponse - si la question est ouverte à nouveau et que vous avez cette possibilité.
psr
@ psr J'ai édité dans mes commentaires, apparemment pas besoin que la question soit ouverte si je veux l'éditer (peut-être que je peux l'éditer ...).
Paul Hiemstra
36

Contexte: Je suis informaticien dans une start-up à Austin et je viens d’un programme d’études supérieures (Physique). J'utilise Python au quotidien pour l'analyse des données, mais j'utilise un peu R. J'utilise aussi C # / .NET et Java (presque tous les jours), j'ai beaucoup utilisé le C ++ à l'université.

Je pense que le principal problème avec l'utilisation de Python pour les nombres (sur R) est la taille de la communauté d'utilisateurs. Depuis que le langage existe depuis toujours, beaucoup de gens ont fait des choses que vous voudrez probablement faire. Cela signifie que, face à un problème difficile, vous pouvez simplement télécharger le package et vous mettre au travail. Et R "fonctionne": vous lui donnez un jeu de données et il sait quelles statistiques résumées sont utiles. Vous lui donnez des résultats et il sait quelles parcelles vous voulez. Tous les complots que vous voudriez faire sont là, même certains assez ésotériques que vous devrez regarder sur Wikipedia. Aussi bien que scipy / numpy / pandas / statsmodels / etc. sont pour Python, ils ne sont pas au niveau de la bibliothèque standard R.

Le principal avantage de Python over R est qu’il s’agit d’un véritable langage de programmation dans la famille C. Il évolue facilement, il est donc concevable que tout ce que vous avez dans votre bac à sable puisse être utilisé en production. Python a orienté objet, par opposition à R où il se sent comme une sorte de réflexion après coup (parce que c'est le cas). Python fait également bien d'autres choses: le threading et le traitement parallèle sont assez faciles, et je ne suis pas sûr que ce soit le cas dans R. Et apprendre Python vous fournit également un puissant outil de script. Il existe également de très bons IDE (gratuits) pour Python, bien meilleurs si vous êtes prêt à payer (moins de 100 $), et je ne suis pas sûr que ce soit le cas pour R - le seul R IDE que je connaisse est R Studio, qui est très bon, mais n’est pas aussi bon que PyDev + Eclipse, d’après mon expérience.

J'ajouterai ceci comme un coup de pied: puisque tu es toujours à l'école, tu devrais penser à des emplois. Vous trouverez plus d'offres d'emploi pour les développeurs Python hautement qualifiés que pour les développeurs R hautement qualifiés. À Austin, les emplois pour les développeurs de Django sont en train de tomber du ciel. Si vous connaissez très bien R, il existe quelques endroits où vous pourrez capitaliser cette compétence (Revolution Analytics, par exemple), mais de nombreux magasins semblent utiliser Python. Même dans le domaine de l'analyse des données / de la science des données, de plus en plus de personnes semblent se tourner vers Python.

Et ne sous-estimez pas le fait que vous puissiez travailler avec / pour des personnes qui ne connaissent que (disons) Java. Ces personnes pourront lire votre code Python assez facilement. Ce ne sera pas nécessairement le cas si vous faites tout votre travail en R. (Cela vient de l'expérience.)

Enfin, cela peut sembler superficiel, mais je pense que la documentation de Python et les conventions de nommage (auxquelles on adhère religieusement, s’avère) est beaucoup plus agréable que le documentaire utilitaire R doc. Je suis sûr que cela fera l'objet d'un débat animé, mais Python met l'accent sur la lisibilité. Cela signifie que les arguments des fonctions Python ont des noms que vous pouvez lire, ce qui signifie quelque chose. Dans R, les noms d'arguments sont souvent tronqués - j'ai trouvé cela moins vrai en Python. Cela peut sembler pédant, mais cela me rend fou d’écrire des choses comme 'xlab' alors que vous pourriez tout aussi facilement nommer un argument 'x_label' (juste un exemple) --- cela a un effet énorme lorsque vous essayez d'apprendre un nouvelle API module / package. Lire R doc, c'est comme lire des pages de manuel Linux --- si c'est ce qui flotte dans votre bateau, vous avez plus de pouvoir.

Tout cela étant dit, je suggérerais ce qui suit (qui est aussi mon flux de travail typique): puisque vous connaissez Python, utilisez-le comme premier outil. Lorsque vous trouvez Python insuffisant, apprenez assez de R pour faire ce que vous voulez, puis:

  1. Écrivez des scripts en R et exécutez-les à partir de Python à l'aide du module de sous-processus, ou
  2. Installez le module RPy.

Utilisez Python pour ce que Python est bon et comblez les lacunes avec l’un des éléments ci-dessus. Ceci est mon flux de travail normal --- J'utilise habituellement R pour les graphiques, et Python pour les gros travaux.

Donc, pour résumer: en raison de l'accent mis par Python sur la lisibilité (recherchez google dans "Pythonic"), la disponibilité de bons IDE gratuits, le fait que ce soit dans la famille des langages C, la plus grande possibilité que vous puissiez capitaliser les compétences et le meilleur style de documentation du langage, je suggérerais de choisir Python comme point de référence et de ne faire confiance à R que lorsque cela est nécessaire.


Ok, c’est (de loin) ma réponse la plus populaire à ce jour sur un site stack, et elle n’est même pas n ° 1 :) J'espère que cela a aidé quelques personnes tout au long du chemin.

En tout cas, je suis arrivé à la conclusion suivante après plusieurs années dans le domaine:

C'est probablement la mauvaise question à poser.

Demander "devrais-je apprendre cette technologie particulière" est une mauvaise question. Pourquoi?

  1. Changements de technologie. Vous devrez toujours apprendre une autre technologie. Si vous allez travailler sur Twitter, ils exécutent Scala. Certains endroits sont des magasins Python. Certains endroits ne s'en soucient pas. Vous ne serez pas embauché parce que vous connaissez ou ne connaissez pas un élément technologique particulier. Si vous ne pouvez pas apprendre une nouvelle technologie, vous pouvez (et devriez) être licencié. C'est comme si, si une nouvelle clé à pipe sortait et que vous étiez un plombier, et vous ne pouvez pas comprendre comment la nouvelle clé à pipe fonctionne, vous êtes probablement un assez mauvais plombier.
  2. Étant donné le choix entre "Est-ce que j'apprends cette technologie" ou "Est-ce que je passe plus de temps à résoudre de vrais problèmes", vous devriez toujours choisir ce dernier, sans exception.

En tant qu’informaticien, votre travail consiste à résoudre des problèmes . Cette sagesse est à peu près toujours perdue à chaque conférence ou réunion à laquelle vous assistez - chaque discours sur les «données volumineuses» que j'ai jamais vu porte sur la technologie, pas sur la résolution de problèmes. La résolution du problème est généralement reléguée à quelques diapositives à la fin:

[Talk title = "Apprendre en profondeur chez Cool New Startup"] ... [45 minutes de diagrammes et de techno-babel pendant lesquels je zone et vérifie mon téléphone] ... Et, après avoir implémenté notre cluster Hadoop et [Ben zones out encore une fois] nous pouvons exécuter notre routine d’apprentissage en profondeur, [réveillez-vous: c’est pourquoi je suis venu!] dont les détails sont exclusifs. Des questions?

Cela donne une mauvaise impression que le domaine concerne la technologie, et ce n'est tout simplement pas vrai. Si vous êtes vraiment bon en Scala, ou en Python, ou en R, mais que vous êtes vraiment mauvais pour résoudre les problèmes, vous ferez un scientifique moche .

Paco Nathan était à Austin il y a quelques mois lors d'une conférence "Big Data" qui a duré toute la journée. Cela résume assez bien - la science des données ne concerne pas Scala, ni Hadoop, ni Spark, ou tout ce que l’autre technologie du jour apparaît. En fin de compte, je souhaite embaucher des personnes qui pensent, et non des personnes qui savent utiliser Stack Overflow pour apprendre les kits d’outils.

De même, si vous passez un entretien d'embauche et qu'ils ne vous embauchent pas simplement parce que vous ne connaissez pas certains langages de programmation, cette entreprise craint . Ils ne comprennent pas ce que «scientifique des données» signifie, et c'est probablement mieux pour vous si cela ne fonctionne pas.

Enfin, si vos capacités de résolution de problèmes sont marginales (soyez honnête avec vous-même), ou si vous aimez vraiment le côté technologique, ou si vous apprenez la technologie, c'est ce que vous aimez vraiment (encore une fois, soyez honnête), puis apprenez beaucoup de technologie. Vous serez toujours en mesure de trouver des rôles de type "ingénieur de données" qui correspondent à vos compétences. Ce n’est pas une mauvaise chose, les ingénieurs de données graissent les roues et vous permettent de faire votre travail en tant que data scientist. (La différence s'apparente à l'architecte logiciel par rapport à l'équipe de développement.)

BenDundee
la source
3
Je dirai cependant que si je travaillais dans une salle des marchés et que le négociant principal me proposait un csv de prix d’options, il voulait que je les ajuste avec une distribution log-linéaire et supprime la moyenne et l’écart type, Je ne considérerais même pas Python. Je pense que c'est comme trois lignes de code pour faire cela dans R.
BenDundee
12

J'ai donc principalement analysé les données dans Matlab, mais en Python (et plus couramment, Python à des fins générales). J'ai aussi commencé un peu par R. Python. La raison en est que vous analysez les données dans une perspective d'apprentissage automatique, et non les statistiques (où R est dominant) ou le traitement du signal numérique (où Matlab est dominant).

Il existe manifestement un important chevauchement entre Machine Learning et Stats. Mais le chevauchement n'est pas l'identité. Machine Learning utilise des idées de CS que je ne voudrais pas implémenter dans R. Bien sûr, vous pouvez calculer un arbre de recouvrement minimal dans R. Cela peut toutefois sembler être un désordre odieux. Les personnes qui apprennent automatiquement penseront que vous avez facilement accès aux tables de hachage, aux arbres de recherche binaires, etc. Il est plus facile dans mon esprit d'implémenter à nouveau si nécessaire un algorithme de statistiques, plutôt que d'essayer de transformer en langage de programmation général ce qui est fondamentalement un langage spécifique à un domaine.

Les avantages secondaires de Python pour l'analyse des données sont également beaucoup plus importants. Vous apprendrez en même temps un vrai langage de programmation, capable de gérer les scripts, de créer des applications plus volumineuses, etc. R est vraiment un langage de niche de la communauté des statistiques, même Matlab est beaucoup plus largement utilisé.

J'imagine que je regarderais d'abord certains des journaux et verrais dans quelle langue ils affichent le code. Si ce n'est pas dans R, alors ne l'utilisez pas.

Nir Friedman
la source
1
Merci beaucoup. Je suis définitivement plus intéressé par le côté ML des choses.
The_Cthulhu_Kid
1
Juste un ajout mineur: je suis sûr que R peut le faire aussi, mais Python est bien connu pour sa capacité à appeler C ou à compiler des fonctions en C en utilisant Cython avec un minimum de temps système. Ainsi, vous pouvez généralement aller plus vite avec moins d’effort, ce qui est un facteur important pour examiner des données réelles. Autre note (finale) exotique: Java possède de très bonnes bibliothèques d’apprentissage automatique (comme WEKA). Cependant, ce qui est cool, c'est que vous pouvez aussi appeler ces derniers depuis Python, en utilisant Jython :-)
Nir Friedman
7

En tant que scientifique chevronné (plus de 50 ans) qui utilise et continue d’utiliser un certain nombre de ces outils, j’ajouterai deux centimes. J'ai travaillé avec des collègues qui écrivent toujours chaque élément de code dans Fortran, qu'il s'agisse d'analyses de données ponctuelles ou de tâches ponctuelles ou de codes qui dominent certains supercalculateurs du monde. Les dialectes Fortran récents (F90, F95, F2003, F2008) sont à mon humble avis, parmi les langues les mieux conçues qui soient. Des décennies d'expérience dans l'informatique haute performance ont conduit à un développement du langage assez impressionnant.

Je n'ai utilisé que parfois Python et je le reverrai (principalement à cause de Sage), mais j'utilise une suite de langages testés qui fonctionnent bien pour moi. Fortran, C, Perl, R et Scheme (avec tcl pour le scripting VMD). Je trouve la combinaison de R et Fortran et C très confortable. Contrairement aux autres commentaires formulés à propos du modèle d'objet dans R, il s'agit d'un bon modèle d'objet pour le travail interactif, basé sur le concept CLOS de fonctions génériques et d'envoi de méthode. Lorsque vous travaillez de manière interactive avec un nouveau package, vous pouvez souvent vous fier à des fonctions génériques telles que «imprimer» et «tracer» pour réaliser des tâches productives.

L'API à Fortran et C est très facile à utiliser. Si vous aviez l'habitude de travailler dans Fortran et C pour la modélisation et l'analyse de données, c'est un gros plus. La capacité à générer et à évaluer le code R de manière dynamique, bien que beaucoup moins nette que les systèmes de macros de Lisp et C, est très utile pour la mise en place d’ensembles de données dynamiques.

Certaines limitations de R pour les données réelles incluent l'approche appel par valeur. Bien qu'il existe des raisons pour CS d'appeler par valeur, la programmation dans le monde réel avec des données numériques volumineuses nécessite une forme d'appel par référence (notez l'importance des blocs communs de Fortran dans le code plus ancien ou des données de module dans le code plus récent). L’approche adoptée par PDL (Perl Data Language) est particulièrement élégante à cet égard. (Les Pdls sont essentiellement des appels par référence, à moins que vous ne demandiez une copie. Sub-pdl fait référence à une sous-section d'un pdl parent, dans une syntaxe bien plus nette que celle fournie par Fortran ou C).

C'est bien d'apprendre plusieurs langues. Le python est sans aucun doute un langage important, mais R appartient aussi à son domaine. Mais quand le caoutchouc aura vraiment besoin de rencontrer la voie de la science, Fortran et C (et C ++ pour certains) seront difficiles à remplacer.

John Daschbach
la source
1

Une caractéristique clé de R est qu’il s’agit d’une bibliothèque de paquetages, ainsi que d’un langage de programmation. Chaque auteur de paquet a accès, en principe, à ce qui est dans chaque autre paquet. Cela réduit considérablement le besoin de réinventer, de documenter, de réapprendre. Ceci s’applique aussi bien aux auteurs de paquets qu’aux utilisateurs. Bien sûr, cette infrastructure a un coût. Les auteurs de colis doivent s'adapter à des normes qui deviennent de plus en plus difficiles avec le temps. Une partie de ces problèmes peut se répercuter sur ce que les utilisateurs rencontrent.

Si je comprends bien, Python n’a pas de système de gestion de paquets. Il n'y a pas d'équivalent du réseau d'archivage complet R de R ( http://cran.r-project.org ), ni d'équivalent direct aux vues de tâche R ( http://cran.csiro.au/web/views/ ). Il s’agit donc, dans une certaine mesure, que ce n’est pas le cas pour R, un outil pour les programmeurs travaillant assez seuls plutôt que dans le cadre d’un effort communautaire visant à exploiter ce qui est déjà disponible.

Pour l’analyse de données et l’apprentissage automatique, il est certain que la demande doit s’appuyer dans une très large mesure sur les compétences déjà en place et les exploiter. Pour des tâches de programmation plus génériques, Python peut présenter des avantages. Ferez-vous ce type de travail suffisamment pour justifier l'effort nécessaire à l'apprentissage de Python?

John Maindonald
la source
3
Python a un système de gestion de paquets appelé pip. Il ne fait pas partie de la bibliothèque standard, mais il sera livré avec Python standard à partir de Python 3.4, qui sera publié le mois prochain (mars 2014).
Cody Piersall
2
L'équivalent Python du réseau complet d'archives R est PyPI: pypi.python.org/pypi
Wilfred Hughes