Dans de nombreux tutoriels ou manuels, le récit semble impliquer que R et python coexistent en tant que composants complémentaires du processus d'analyse. À mes yeux, cependant, il semble que les deux langues fassent en quelque sorte la même chose.
Ma question est donc de savoir s’il existe des créneaux vraiment spécialisés pour les deux langues ou si c’est une préférence personnelle que d’utiliser l’une ou l’autre?
Réponses:
Ils sont complémentaires. Il est vrai que les deux peuvent faire la même chose, mais on peut en dire autant de la plupart des langues. Chacun a ses forces et ses faiblesses. La vision commune semble être que Python est le meilleur pour la collecte et la préparation de données, ainsi que pour l'analyse textuelle. R est considéré comme le meilleur pour l'analyse des données, car il s'agit avant tout d'un langage statistique.
R propose une myriade de packages pour tout ce que vous pouvez penser, mais son élément essentiel est l’analyse statistique - du khi-carré de base à l’analyse factorielle et aux modèles de risque, il est simple et robuste. Certains des plus grands noms dans les statistiques créent des packages R, et il existe une communauté vivante pour répondre à tous vos besoins.
ggplot2
est un standard en visualisation de données (graphiques, etc.). R est un langage vectorisé conçu pour effectuer une boucle de données de manière efficace. Il stocke également toutes les données dans la RAM, ce qui est une arme à double tranchant - il est facile à manipuler pour des ensembles de données plus petits (bien que certains puissent se disputer avec moi), mais il ne peut pas gérer correctement les mégadonnées (bien qu'il ait des packages pour le contourner). , tels queff
).Python est considérablement plus facile à apprendre que R - en particulier pour ceux qui ont déjà utilisé la programmation. R est juste ... bizarre. Python est excellent pour la récupération de données et est le langage à utiliser pour le scraping Web (avec l'incroyable
beautifulsoup
). Python est connu pour sa force d'analyse syntaxique et de manipulation de texte.pandas
est une excellente bibliothèque pour la manipulation, la fusion, la transformation, etc. de données, et est rapide (et probablement inspirée de R).Python est idéal lorsque vous devez programmer. Ce n'est pas surprenant car c'est un langage généraliste. R, cependant, avec toutes ses extensions, a été construit par des statisticiens pour des statisticiens. Ainsi, bien que Python soit plus facile, plus performant et plus rapide dans de nombreuses applications, R serait la plate-forme de choix pour l’analyse statistique.
la source
data.table
package dans R est spécifiquement conçu pour un travail efficace autour de grands ensembles de données, et se branche parfaitement au traitement distribué.data.table
; Je suis également heureux de dire quervest
c'est un EXCELLENT outil pour gérer la plupart des tâches de grattage et qu'il est beaucoup plus facile de le faire fonctionnerbeautifulsoup
Je vais essayer de formuler une réponse concernant les points principaux où les deux langues entrent en jeu pour les données science / statistique / analyse des données, etc., en tant que personne utilisant les deux.
Le flux de travail dans l'analyse de données comprend généralement les étapes suivantes:
Récupération des données
99% du temps, le processus de récupération des données revient à interroger une sorte de SQL ou base de données Impala: à la fois Python et R ont des clients ou des bibliothèques spécifiques qui font le travail en peu de temps et tout aussi bien (
RImpala
,RmySQL
pour R etMySQLdb
pour Python fonctionne bien, pas grand chose à ajouter). Lorsqu'il s'agit de lire des fichiers .csv externes, ledata.table
package pour R fournit la fonctionfread
qui lit en un rien de temps des fichiers .csv énormes et compliqués, assortis de toute option d'analyse personnalisée, et transforme le résultat directement en cadres de données avec des noms de colonne et des numéros de ligne.Organiser les trames de données
Nous voulons que les données soient stockées dans une sorte de table afin que nous puissions accéder facilement à n'importe quelle entrée, ligne ou colonne.
Le package R
data.table
offre des moyens imbattables d'étiqueter, de renommer, de supprimer et d'accéder aux données. La syntaxe standard est très semblable à celle de SQLdt[i, j, fun_by]
, où cela est censé êtredt[where_condition, select_column, grouped_by (or the like)]
; des fonctions personnalisées définies par l'utilisateur peuvent être insérées ici ainsi que dans laj
clause, de sorte que vous êtes totalement libre de manipuler les données et d'appliquer toute fonction compliquée ou fantaisiste sur des groupes ou des sous-ensembles (comme prendre la i-ème ligne, k-th élément et additionnez-le à l'élément (k-2) de la ligne (i-1) si et seulement si l'écart-type de la colonne entière est qu'est-ce-que-est, totalement groupé par la dernière colonne). Jetez un coup d’œil aux points de repère et à cette autre question incroyable sur SO. Le tri, la suppression et la modification du nom des colonnes et des lignes font ce qu’ils ont à faire. Les méthodes R vectorisées standardapply, sapply, lapply, ifelse
effectuent des opérations vectorisées sur les colonnes et les trames de données, sans faire de boucle sur chaque élément (rappelez-vous que chaque fois que vous utilisez des boucles dans R, le font très mal).La sous-arme de Python est la
pandas
bibliothèque. Il fournit enfin la structurepd.DataFrame
(qui manque pour une raison encore inconnue de moi en Python standard) qui traite les données pour ce qu’elles sont, à savoir des cadres de données (au lieu de certainsnumpy array, numpy list, numpy matrix
ou autre). Des opérations telles que le regroupement, la modification du nom, le tri, etc. peuvent être facilement réalisées. Dans ce cas également, l'utilisateur peut appliquer toute fonction personnalisée à un ensemble de données groupé ou à un sous-ensemble du cadre à l'aide de Pythonapply
oulambda
. Personnellement, je n'aime pas la grammairedf[df.iloc(...)]
pour accéder aux entrées, mais ce n'est que du goût personnel et pas de problème du tout. Les points de repère pour les opérations de regroupement sont toujours un peu moins bons que R,data.table
mais à moins que vous ne vouliez économiser 0,02 seconde pour la compilation, les performances ne sont pas très différentes.Les cordes
Pour traiter les chaînes, la méthode R consiste à utiliser le
stringr
package qui permet de manipuler facilement du texte, des anagrammes, des expressions rationnelles, des espaces ou des espaces vides. Il peut également être utilisé en combinaison avec des bibliothèques JSON qui décompactent les dictionnaires JSON et retirent la liste de leurs éléments, de sorte que l'on dispose d'un cadre de données final dans lequel les noms de colonne et les éléments sont ce qu'ils doivent être, sans aucun caractère non UTF8 ni espace blanc. dedans là.Les Pandas de Python
.str.
font le même travail en jouant avec les expressions régulières, en traînant ou aussi bons que leurs concurrents, de sorte que même ici, il n’ya pas de grande différence de goût.Appliquer des modèles
Voici où, à mon avis, des différences entre les deux langues apparaissent.
Ra, à ce jour, un ensemble imbattable de bibliothèques qui permettent à l'utilisateur de faire tout ce qu'il veut en une ou deux lignes de code. Les régressions fonctionnelles ou polynomiales standard sont effectuées dans des doublons et produisent des sorties dont les coefficients sont facilement lisibles, accompagnées des intervalles de confiance et des distributions de valeurs p correspondants. Il en va de même pour la classification, de même que pour les modèles de forêt aléatoires, de même que pour les dendogrammes, l'analyse en composantes principales, les décompositions en valeurs singulières, les ajustements logistiques, etc. La sortie de chacun des éléments ci-dessus est très probablement fournie avec une classe de tracé spécifique qui génère des visualisations de ce que vous venez de faire, avec des couleurs et des bulles pour les coefficients et les paramètres. Tests d'hypothèses, tests statistiques, Shapiro,
Python essaie de suivre
SciPy
etscikit-learn
. La plupart des analyses et modèles standard sont également disponibles, mais ils sont légèrement plus longs à coder et moins intuitifs à lire (à mon avis). Des machines plus complexes manquent, bien que certaines puissent être reliées à certaines combinaisons des bibliothèques déjà existantes. Une chose que je préfère faire en Python plutôt qu'en R est l'analyse de texte avec des mots, avec des bi-grammes, des tri-grammes et des ordres plus élevés.Présenter les résultats
Les deux langages ont de beaux outils de traçage, R
ggplot2
avant tout et l’équivalent Python correspondant. Ce n’est pas grand-chose à concurrencer, ils font le travail sains et saufs, bien que je pense que si vous présentez les résultats, vous devrez peut-être utiliser d’autres outils. public avec drag et gouttes rouge et vert fantaisie. R a récemment publié de nombreuses améliorations de sesshiny app
fonctionnalités, qui lui permettent essentiellement de produire des sorties interactives . Je n'ai jamais voulu l'apprendre, mais je sais que c'est là et que les gens l'utilisent bien.Note latérale
En passant, je voudrais souligner que la principale différence entre les deux langages est que Python est un langage de programmation à usage général, créé par et pour l’informatique, la portabilité, les déploiements, etc. C'est génial à ce qu'il fait et est facile à apprendre; il n'y a personne qui n'aime pas le python. Mais c'est un langage de programmation pour faire de la programmation.
Rpour sa part, a été inventé par et pour les mathématiciens, physiciens, statisticiens et informaticiens. Si vous venez de ce milieu, tout est parfaitement logique car cela reflète et reproduit parfaitement les concepts utilisés en statistique et en mathématiques. Mais si, au lieu de cela, vous avez une formation en informatique et souhaitez simuler Java ou C in R, vous allez être déçu; il n'a pas d '"objets" au sens standard (enfin, il a, mais pas ce que l'on pense généralement ...), il n'a pas de classes au sens standard (enfin, il a, mais pas ce qu'on a en général pense qu’ils sont ...), il n’a pas de "pointeurs" ni toutes les autres structures informatiques - mais juste parce qu’il n’en a pas besoin. Dernier mais pas des moindres: la documentation et les packages sont faciles à créer et à lire (si vous utilisez Rstudio); Il existe une communauté nombreuse et passionnée, et il faut littéralement cinq secondes à Google "comment faire pour insérer un problème aléatoire dans R" dont la première entrée vous redirige vers une solution au problème (effectuée par quelqu'un d'autre) avec le code correspondant , en un rien de temps.
La plupart des entreprises industrielles ont leur infrastructure construite en Python (ou dans un environnement compatible Python) qui permet une intégration aisée du code Python (
import myAnalysis
n'importe où et vous avez pratiquement terminé). Cependant, toute technologie moderne, serveur ou plate-forme, exécute facilement le code d’arrière-plan sans aucun problème.la source
Python est un langage de programmation général: il est donc utile pour effectuer de nombreuses tâches en plus de l'analyse des données. Par exemple, si nous voulons automatiser l’exécution de notre modèle sur un serveur de production, python est un très bon choix. D'autres exemples incluent la connexion au matériel / capteurs pour lire des données, interagir avec des bases de données (données relationnelles ou non structurées telles que JSON), analyser des données, programmation réseau (TCP / IP), interface utilisateur graphique, interagir avec un shell, etc. pourquoi un scientifique des données voudrait-il accomplir autant de tâches de ce type, qui ont peu à voir avec des modèles prédictifs? Je pense que les gens ont des définitions différentes Qu'est-ce qu'un scientifique des données?Dans certaines organisations, l'analyse des données et l'analyse descriptive à l'aide du tableau de bord conviennent aux entreprises et les données ne sont pas suffisamment matures pour permettre la modélisation prédictive. Par ailleurs, dans de nombreuses petites entreprises, on peut s’attendre à ce que les scientifiques spécialisés dans les données fassent beaucoup de génie logiciel. Connaître python vous rendra indépendant des autres ingénieurs en logiciel.)
R contient beaucoup de progiciels statistiques bien meilleurs que python ou MATLAB. En utilisant R, on peut vraiment penser au niveau du modèle plutôt qu'au niveau de détail de la mise en œuvre. C'est un avantage énorme dans le développement de modèles statistiques. Par exemple, de nombreuses personnes implémentent manuellement des réseaux de neurones en python; faire ce travail peut ne pas aider à comprendre pourquoi les réseaux de neurones fonctionnent, mais simplement suivre la recette pour dupliquer le travail des autres pour vérifier si cela fonctionne. Si nous travaillons dans R, nous pouvons facilement nous concentrer sur les calculs derrière le modèle, plutôt que sur les détails de la mise en œuvre.
Dans de nombreux cas, les gens les utilisent ensemble. La création de logiciels est facile à faire en python et la construction de modèles est meilleure en R. Si nous voulons livrer un modèle en production mais pas en papier, nous pouvons avoir besoin des deux. Si votre entreprise compte beaucoup d'ingénieurs en logiciel, vous aurez peut-être besoin de plus de R. Et si votre entreprise compte beaucoup de chercheurs, vous aurez peut-être besoin de plus de python.
la source
scikit-learn
? scikit-learn.org/stableLes programmeurs de tous horizons sous-estiment le nombre de choix culturels liés à la langue . Les développeurs Web aiment Node.js. Les scientifiques aiment Python. En tant qu’ingénieur logiciel polyglotte capable de gérer la fluidité de Javascript et la rigidité de Java, j’ai compris qu’il n’existait aucune raison intrinsèque pour que ces langages soient mauvais les uns pour les autres. etc. qui les entoure.
(Pour des raisons intrinsèques, une langue aléatoire est préférable à une autre langue, voir les commentaires à venir pour cette réponse.)
Ma prédiction personnelle est que Python est la voie de l'avenir car il peut faire tout ce que R peut - ou plutôt, assez de R que les programmeurs dédiés travaillent pour combler les lacunes - et constitue un langage de génie logiciel bien meilleur. Le génie logiciel est une discipline qui traite de:
De plus, franchement, Python est plus facile à apprendre.
Les scientifiques et les statisticiens se rendront compte qu'ils sont les acteurs d'une bonne pratique en matière d'ingénierie logicielle, et non une profession indépendante et sans gêne. Juste mon opinion, mais des papiers prouvant la fragilité du code académique vont le soutenir.
Cette réponse est tout ce que je pense - mais vous avez posé une question qui suscite beaucoup d’opinion, et comme il a été bien reçu jusqu’à présent, j’ai estimé que vous méritiez un avis sans prétention, raisonnablement informé (j'espère!). Il y a un argument sérieux en faveur de Python à propos de R dans tous les domaines et je m'en voudrais de tenter de poster une réponse non partisane lorsque la réalité peut elle-même être partisane.
la source
Je suis un utilisateur R mais je pense que Python est l'avenir (je ne pense pas que ce soit la syntaxe)
Python est l'avenir
L'avantage de Python est que d'autres personnes ont déjà mentionné le support beaucoup plus large et, pour les programmeurs, une syntaxe plus logique.
De plus, il est beaucoup plus simple de traduire les résultats de votre analyse en système de production.
Peut-être est-ce dû au fait que Python est à usage général et que R ne l’est pas, mais même moi, je lève les sourcils quand je vois un pipeline R produit.
Mais pas seulement cela, même pour les applications avancées, Python rattrape rapidement son retard (Scikit-learn, PyBrain, Tensorflow, etc.) et, bien que R soit toujours la lingua franca des universitaires sur la manière de mettre en œuvre des méthodes statistiques, Python a acquis une énorme notoriété dans le secteur professionnel en raison de l'avènement de bibliothèques spécialisées avancées.
Mais R n'est pas mauvais
Beaucoup de gens semblent aimer sauter dans le train "R has bad syntax".
Je souhaite proposer que la syntaxe de R soit une bonne chose!
Les fonctions d’attribution, l’évaluation paresseuse, l’évaluation non standard et les formules sont d’ énormes avantages lorsqu’on utilise R.
Cela fait gagner beaucoup de temps. regarder les noms avec
names()
puis assigner de nouveaux noms en ajoutant<- c("A", "B", "C")
.Lorsque les utilisateurs se plaignent de la syntaxe étrange de R, ils la considèrent comme un langage de programmation et non comme un outil de science des données.
En tant que personne venant de R et aimant dplyr, je trouve la syntaxe des pandas un peu maladroite en comparaison.
Oui, c'est un peu plus flexible, mais pour la plupart des tâches, il faut plus de frappes au clavier pour exécuter une commande simple que dans R qui sont simplement là pour satisfaire l'analyseur Python, pas pour exprimer votre idée.
En résumé
Bien sûr, il est sage de connaître les deux et pendant que Python y parvient, les choix de conception spécifiques à un domaine de R simplifient tout simplement le travail ad hoc. L'énorme inconvénient de R est qu'il est difficile de quitter son domaine, ce que vous devez faire une fois que vous essayez d'appliquer vos résultats de manière durable.
la source
Si vous considérez R plus comme un outil statistique et non comme un langage de programmation, c'est vraiment génial. Il offre beaucoup plus de flexibilité que Stata ou SPSS, mais peut également faire tout ce qu'il peut. J'ai appris Stata pendant mes études et R était assez facile à regarder car j'avais déjà la perspective de l'outil statistique et non d'une expérience de langage de programmation pure que d'autres auraient pu avoir.
Je pense que la frustration avec R entre en jeu lorsque ceux qui sont programmeurs essaient d'apprendre et de comprendre R; mais c'est un excellent outil pour ceux qui viennent à R grâce à un contexte statistique.
Python est génial si vous êtes déjà un grand programmeur. mais pour moi en tant que débutant en programmation et en statistiques à peine sorti de l'université, R était un bien meilleur choix. C'est simplement la préférence de celui qui correspond le mieux à vos compétences et à vos intérêts.
la source
Ajout à certaines des réponses précédentes:
D'après mon expérience, il n'y a rien de plus facile que d'utiliser dplyr + tidyr, ggplot et Rmarkdown de R pour obtenir des données brutes en résultats présentables. Python en offre beaucoup, et je l'utilise de plus en plus, mais j'adore la façon dont les paquets de Hadley sont liés.
la source
Python a une large adoption en dehors de la science, alors vous bénéficiez de tout cela. Comme le souligne "Un guide en colère de R", R a été développé par une communauté, qui devait au premier ordre zéro développeur de logiciels.
Je dirais qu’aujourd’hui, R a deux atouts principaux: des progiciels hautement spécialisés très aboutis dans certains domaines et un progiciel de recherche reproductible de pointe, knitr.
Python semble être mieux adapté pour tout le reste.
Ceci est une opinion bien sûr, comme presque tout dans ce fil. Je suis un peu surpris que ce fil est toujours en vie.
la source
Comme décrit dans d'autres réponses, Python est un bon langage de programmation général, alors que R a de graves défauts en tant que langage de programmation, mais qu'il contient un ensemble plus riche de bibliothèques d'analyse de données. Ces dernières années, Python a rattrapé R avec le développement de bibliothèques d’analyse de données matures telles que scikit-learn, alors que R ne sera jamais réparé. En pratique, j'utilise Python (en fait Hy ) pour presque tout et ne me tourne vers R que pour des méthodes relativement ésotériques telles que la régression quantile (dont la mise en œuvre dans les modèles de statistiques de Python semble être interrompue). Il existe plusieurs façons d’appeler R depuis Python; PypeR en est un qui est assez simple pour que je puisse le faire fonctionner dans des environnements hostiles comme un serveur Windows.
Edit : J'encourage tous ceux qui souhaitent discuter plus avant à ce sujet à parler aux auteurs de l'essai lié au lieu de commenter cette réponse.
la source