web-dev-qa-db-fra.com

R vs Python pour l'analyse des données

Je programme depuis environ un an et je suis vraiment intéressé par l'analyse des données et le machine learning. 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 pour savoir si je dois ou non me concentrer sur une langue (et si oui laquelle)) ou continuer avec les deux; sont-ils complémentaires autre?

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

60
The_Cthulhu_Kid

J'utilise à la fois Python (pour l'analyse des données de cours, y compris numpy et scipy) et R côte à côte. Cependant, j'utilise exclusivement R pour effectuer une 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 d'ordinateur).

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 bon 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 de cela. Vous semblez être principalement intéressé par l'analyse des données, pas par le génie logiciel. Je choisirais R et m'en tiendrai à cela. Cela dit, je pense que choisir pour Python + numpy + scipy + scikit est définitivement un excellent choix, c'est juste que je pense que R est juste un peu plus excellent.

Je voudrais également jeter un coup d'œil autour de vous sur ce que vos collègues et d'autres personnes dans votre domaine utilisent. S'ils utilisent tous, disons, Python, il serait logique de s'y tenir afin d'en apprendre plus facilement et d'échanger du code.

Avertissement: Notez que je suis un gros utilisateur de R, donc mon opinion pourrait être biaisée, bien que j'aie essayé de garder ma réponse aussi objective que possible. De plus, je n'ai pas beaucoup utilisé Python + numpy, bien que je connaisse des collègues qui y effectuent toutes leurs analyses de données.

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

pps: ou cette citation de cet article :

J'utilise R et Python pour toutes mes recherches (avec Rcpp ou Cython au besoin), mais je préfère éviter d'écrire en C ou C++ si je peux l'éviter. R est un langage merveilleux, 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 de la langue; Je considère que c'est une caractéristique majeure du langage et une grande raison pour laquelle il ne sera pas remplacé de si tôt. Python est généralement un meilleur langage global, surtout si l'on considère son mélange de programmation fonctionnelle avec l'orientation des objets. Combiné avec Scipy/Numpy, Pandas et les modèles de statistiques, cela fournit une combinaison puissante. Mais Python manque encore d'une communauté sérieuse de statisticiens/mathématiciens.

39
Paul Hiemstra

Contexte: Je suis data scientist dans une startup à Austin, et je viens de l'école doctorale (physique). J'utilise Python au jour le jour pour l'analyse des données, mais j'utilise un peu R. J'utilise également C # /. NET et Java (presque tous les jours), j'ai beaucoup utilisé C++ à l'école.

Je pense que le principal problème avec l'utilisation de Python pour les chiffres (sur R) est la taille de la communauté d'utilisateurs. Depuis que la langue 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écapitulatives sont utiles. Vous lui donnez des résultats et il sait quelles parcelles vous voulez. Tous les complots courants que vous voudriez faire sont là, même certains assez ésotériques que vous devrez rechercher sur Wikipédia. Aussi agréable 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 sur 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 une orientation d'objet intégrée, contrairement à R où cela ressemble à une sorte de réflexion après coup (parce que c'est le cas). Il y a d'autres choses que Python fait bien aussi: le threading et le traitement parallèle sont assez faciles, et je ne sais pas si c'est le cas dans R. Et l'apprentissage de Python vous donne un script puissant outil aussi. 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 Je connais R Studio, ce qui est plutôt bien, mais pas aussi bon que PyDev + Eclipse, d'après mon expérience.

J'ajouterai ceci comme un petit coup de pied: puisque vous êtes encore à l'école, vous devriez 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 quelque sorte tombés du ciel. Si vous connaissez très bien R, il y a quelques endroits où vous pourrez capitaliser cette compétence (Revolution Analytics, par exemple), mais beaucoup de magasins semblent utiliser Python. Même dans le domaine de l'analyse des données/science des données, plus de gens semblent se tourner vers Python.

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

Enfin, cela peut sembler superficiel, mais je pense que la documentation de Python et les conventions de dénomination (qui sont religieusement respectées, il se trouve) est beaucoup plus agréable que la doc R utilitaire. Cela fera l'objet de vifs débats, j'en suis sûr, mais l'accent mis dans Python est la lisibilité. Cela signifie que les arguments des fonctions Python ont des noms que vous pouvez lire, et cela 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' quand 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 les pages de manuel Linux --- si c'est ce qui fait flotter votre bateau, alors plus de puissance pour vous. Lorsque j'ai une question sur le fonctionnement de quelque chose dans R, j'évite la documentation de R, alors que je COMMENCE avec le doc Python quand je suis confus à propos de Python.

Tout cela étant dit, je suggère ce qui suit (qui est également mon flux de travail typique): puisque vous connaissez Python, utilisez-le comme votre premier outil. Lorsque vous constatez que Python manque, apprenez suffisamment de R pour faire ce que vous voulez, puis:

  1. Écrivez des scripts dans 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 remplissez les lacunes avec l'une des options ci-dessus. Ceci est mon flux de travail normal --- J'utilise habituellement R pour tracer les choses et Python pour le levage de charges lourdes.

Donc, pour résumer: en raison de l'accent mis par Python sur la lisibilité (recherchez google sur "Pythonic"), la disponibilité de bons IDE gratuits, le fait qu'il se trouve dans la famille de langues C, la plus grande possibilité que vous puissiez capitaliser les compétences et le style de documentation du langage, je suggère de faire de Python votre référence, et de ne compter sur R que lorsque cela est nécessaire.


Ok, c'est (de loin) ma réponse la plus populaire sur un site de pile, et ce n'est même pas # 1 :) J'espère que cela a aidé quelques personnes le long du chemin.

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

Ce n'est probablement pas la bonne question à poser.

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

  1. Changements technologiques. Vous devrez toujours apprendre une autre technologie. Si vous allez travailler sur Twitter, ils exécutent Scala. Certains endroits sont Python magasins. Certains endroits s'en moquent. Vous n'allez pas être embauché parce que vous connaissez ou ne connaissez pas une technologie particulière - si vous ne pouvez pas apprendre une nouvelle technologie, vous pouvez (et devriez) être licencié. C'est comme si une nouvelle clé à pipe sort et que vous êtes un plombier et que vous ne pouvez pas comprendre comment fonctionne la nouvelle clé à pipe, vous êtes probablement un plombier assez moche.
  2. Étant donné le choix de "Dois-je apprendre cette technologie" ou "Dois-je passer plus de temps à résoudre de vrais problèmes", vous devez toujours choisir ce dernier, sans exception.

En tant que data scientist, votre travail consiste à résoudre des problèmes. Ce peu de sagesse est presque toujours perdu à chaque conférence ou réunion à laquelle vous allez - chaque conférence sur le "big data" que j'ai jamais vue s'est concentrée sur la technologie, pas sur la résolution de problèmes. La résolution réelle des problèmes est généralement reléguée à quelques diapositives à la fin:

[Talk title = "Deep learning at Cool New Startup"] ... [45 minutes de diagrammes et de techno-babel pendant lesquels je zappe 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 Python, ou R, mais que vous êtes vraiment mauvais en résolvant des problèmes vous ferez un scientifique des données moche.

Paco Nathan était à Austin il y a quelques mois lors d'une conférence d'une journée sur le "big data" et a dit quelque chose comme "La chimie ne concerne pas les tubes à essai". Cela résume à peu près tout - la science des données ne concerne pas Scala, ni Hadoop, ni Spark, ni aucune autre technologie du jour n'apparaît. À la fin de la journée, je veux embaucher des gens qui pensent, pas des gens qui savent utiliser Stack Overflow pour apprendre des boîtes à outils.

De même, si vous allez à un entretien d'embauche et qu'ils ne vous embauchent pas simplement parce que vous ne connaissez pas un langage de programmation, alors cette entreprise craint. Ils ne comprennent pas ce que signifie "data scientist", 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 appréciez vraiment le côté technique des choses, ou que l'apprentissage de la technologie est ce que vous aimez vraiment (encore une fois, soyez honnête), alors apprenez beaucoup de technologie. Vous pourrez toujours trouver des rôles de type "ingénieur de données" qui correspondent à votre ensemble de 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 est similaire à l'architecte logiciel par rapport à l'équipe de développement.)

36
BenDundee

Donc, j'ai principalement fait l'analyse de données dans Matlab, mais j'en ai fait en Python (et plus utilisé Python à des fins générales)) et j'ai aussi commencé un peu de R. Je vais aller à contre-courant ici et vous suggérer d'utiliser Python. La raison en est que vous effectuez une analyse des données du point de vue du Machine Learning, pas des statistiques (où R est dominant) ou du traitement du signal numérique (où Matlab est dominant).

Il y a évidemment un chevauchement important entre l'apprentissage automatique et les statistiques. Mais le chevauchement n'est pas une identité. Le 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 couvrant minimal dans R. Cela peut cependant ressembler à un désordre laid. Les personnes apprenant automatiquement supposeront que vous avez un accès facile aux tables de hachage, aux arbres de recherche binaires, etc. Il est plus facile dans mon esprit d'implémenter un algorithme de statistiques à nouveau lorsque cela est nécessaire, que d'essayer de décortiquer ce qui est fondamentalement un langage spécifique à un domaine dans un langage de programmation général.

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

Je suppose que je regarderais d'abord certains des papiers et verrais dans quelle langue ils publient du code. Si ce n'est pas dans R, alors ne l'utilisez pas.

12
Nir Friedman

En tant que scientifique de la vieille école (plus de 50 ans) qui a utilisé et continue d'utiliser un certain nombre de ces outils, j'ajouterai mes deux cents. J'ai travaillé avec des collègues qui écrivent toujours chaque morceau de code dans Fortran, des tâches d'analyse de données ponctuelles triviales au code qui domine certains des superordinateurs du monde. Les dialectes Fortran récents (F90, F95, F2003, F2008) sont à mon humble avis, certaines des langues les mieux conçues qui existent. Des décennies d'expérience en informatique hautes performances ont conduit à un développement de langage assez impressionnant.

Je n'ai utilisé que Python parfois, et je le revisiterai (principalement à cause de Sage) mais j'utilise une suite de langages testés dans le temps qui fonctionnent bien pour moi. Fortran, C, Perl, R, et Scheme (avec tcl pour l'écriture de scripts VMD). Je trouve que la combinaison de R et Fortran et C est très confortable. Contrairement aux autres commentaires faits sur le modèle objet dans R, c'est un bon modèle objet pour le travail interactif, basé sur le concept CLOS des fonctions génériques et de la répartition des méthodes Lorsque vous travaillez de manière interactive avec un nouveau package, vous pouvez souvent compter sur des fonctions génériques comme "imprimer" et "tracer" pour faire quelque chose de productif.

L'API de Fortran et C est très facile à utiliser. Si vous avez l'habitude de travailler à Fortran et C pour la modélisation et l'analyse de données, c'est un gros plus. La possibilité de générer dynamiquement du code R et de l'évaluer, bien que pas aussi propre que les systèmes de macro dans LISP et C, est très utile lors de l'élaboration 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 CS d'appeler par valeur, la programmation dans le monde réel avec de grandes données numériques nécessite une certaine forme d'appel par référence (notez l'importance des blocs communs Fortran dans un code plus ancien ou des données de module dans un code plus récent). L'approche adoptée par PDL (Perl Data Language) est particulièrement élégante à cet égard. (Les Pdls sont essentiellement appelés par référence, sauf si vous en demandez une copie. Les sous-pdl font référence à une sous-section d'un pdl parent, dans une syntaxe beaucoup plus nette que celle de Fortran ou C).

Il est bon d'apprendre de nombreuses langues. Python est sans aucun doute un langage important, mais R l'est aussi dans son domaine. Mais quand le caoutchouc a vraiment besoin de suivre la route en science, Fortran et C (et C++ pour certains) seront difficiles à déplacer.

7
John Daschbach

Une caractéristique clé de R est qu'il s'agit d'une bibliothèque de packages, autant que d'un langage de programmation. Chaque rédacteur de package a en principe accès à ce qui se trouve dans tous les autres packages. Cela réduit considérablement le besoin de réinventer, de re-documenter, de ré-apprendre. Cela s'applique aussi bien aux auteurs de packages qu'aux utilisateurs. Bien sûr, cette infrastructure a un coût. Les auteurs de packages doivent s'adapter à des normes qui deviennent de plus en plus exigeantes avec le temps. Une partie de cela peut déborder sur ce que les utilisateurs rencontrent.

Si je comprends bien, Python ne dispose pas d'un système de gestion des packages. Il n'y a pas d'équivalent du réseau complet d'archives R de R ( http://cran.r-project.org ), et aucun équivalent direct des vues de tâches R ( http: // cran .csiro.au/web/views / ). C'est donc, dans une mesure qui n'est pas le cas pour R, un outil pour les programmeurs travaillant à peu près seuls plutôt que dans le cadre d'un effort communautaire pour s'appuyer sur ce qui est déjà disponible.

Pour l'analyse des données et l'apprentissage automatique, la demande est sûrement, dans une très large mesure, de s'appuyer sur les capacités déjà en place et d'en tirer parti. Pour des tâches de programmation plus génériques, Python peut avoir des avantages. Allez-vous faire ce type de travail suffisamment pour justifier l'effort impliqué dans l'apprentissage de Python?

1
John Maindonald