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érer les données d'une sorte de source (très probablement une base de données SQL / noSQL ou des fichiers .csv).
- Analyser les données dans un format correct et raisonnable (trame de données) afin que l’on puisse effectuer des opérations et y penser.
- Appliquer certaines fonctions aux données (regrouper, supprimer, fusionner, renommer).
- Appliquer une sorte de modèle aux données (régression, regroupement, réseau de neurones ou toute autre théorie plus ou moins compliquée).
- Déployer / présenter vos résultats à un public plus ou moins technique.
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 et MySQLdb
pour Python fonctionne bien, pas grand chose à ajouter). Lorsqu'il s'agit de lire des fichiers .csv externes, le data.table
package pour R fournit la fonction fread
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 Rdata.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 SQL dt[i, j, fun_by]
, où cela est censé être dt[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 la j
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 standard apply, 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 structure pd.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 certains numpy 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 Python apply
ou lambda
. Personnellement, je n'aime pas la grammaire df[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
et scikit-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 ses shiny 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.