Dans la plupart des domaines de l’informatique, que ce soit celui du Big Data, l’apprentissage automatique ou encore l’intelligence artificielle (IA), il existe diverses préférences ou recommandations quant aux outils (technologies et langages de programmation) à utiliser pour rendre le travail plus ou moins facile. Dans le domaine de la science des données, on retrouve les langages de programmation Python et R qui sont utilisés pour l’analyse de données. Alors entre ces deux langages, lequel est le meilleur pour l’analyse de données ? Norm Matloff nous propose son avis sur la question.
La science des données (en anglais data science) est une discipline qui s'appuie sur des outils mathématiques, de statistiques, d'informatique et de visualisation des données. Son développement s’est accentué au cours de ces 20 dernières années notamment avec l’essor du Big Data et l’apprentissage automatique, les entreprises produisant de plus en plus de données. Elle est en plein développement dans le secteur privé et le secteur public ainsi que dans le monde universitaire.
Dans l’analyse de données, les experts en mégadonnées reconnaissent l’utilité et les potentiels qu’offrent les langages de programmation Python et R. Ce sont des langages de programmation open source avec une grande communauté. De nouveaux outils sont ajoutés en permanence à leur catalogue respectif. Le langage R est principalement utilisé pour l’analyse statistique, tandis que Python fournit une approche plus générale. De plus, les experts en mégadonnées utilisent R et Python pour le fait qu'il s'agisse de langages interprétés, ce qui est beaucoup plus adapté que les langages compilés pour faire de l’analyse de données.
Expliqué autrement, un langage interprété va permettre de visualiser directement le résultat de chaque étape de l’analyse. Les analyses nécessitent beaucoup d’allers-retours et de modifications des instructions, ce qui rend un langage interprété définitivement plus adapté. Un autre aspect de la chose est que les langages R et Python ont un ensemble d’instructions (de fonctions) déjà toutes faites et bien adaptées à l’analyse de données, d’où leur popularité en science des données. Même si l’utilisation de R et de Python mène le plus souvent au même résultat, la question de savoir lequel d’entre eux est le plus adapté à la science des données n’est pas exclue et il existe plusieurs comparaisons et avis sur le sujet.
Norm Matloff, professeur d'informatique et de statistique à l'université de Californie, a réalisé une petite comparaison des deux langages et a une attirance plus élevée pour R que pour le langage Python. Dans sa comparaison, il s’est penché sur des aspects tels que l’élégance des langages, la courbe d’apprentissage, les bibliothèques disponibles pour les deux langages, l’exactitude statistique, le calcul parallèle, l’interfaçage avec d’autres langages tels que le C et le C++, les structures de données, les apports dans les domaines comme celui de l’apprentissage automatique et les aides en ligne disponibles pour chacun des deux langages.
Pour Matloff, certes, Python est bien plus élégant dans sa syntaxe que le langage R, mais sa courbe d’apprentissage est plus compliquée que celle de R, ce qui ne joue pas forcément en sa faveur. Pour même commencer à utiliser Python pour la science de données, dit-il, il faut apprendre beaucoup de choses qui ne sont pas en Python de base, par exemple, NumPy, Pandas et matplotlib. En revanche, les types de matrices et les graphiques de base sont intégrés à la base au langage R. Pour lui, le novice peut effectuer de simples analyses de données en quelques minutes. Les bibliothèques Python peuvent être difficiles à configurer, même pour les utilisateurs avertis, alors que la plupart des packages R fonctionnent immédiatement. Cependant, certains pensent que R ne propose pas de boucle efficace (for serait super lent en R).
Comparant les bibliothèques Python et R disponibles pour l’analyse de données, il a écrit que les bibliothèques spécifiques sont plus nombreuses et facilement trouvables dans R à travers CRAN que Python par l'intermédiaire de PyPI (Python package index). Selon ses explications, ces deux langages possèdent de solides bibliothèques permettant d’écrire de puissants algorithmes de machine learning. À titre illustratif, R possède une pléthore de packages spécifiquement développés pour faire de la science des données. Cela rend la science des données plus simple à effectuer. Notamment, un excellent package nommé Caret (Classification And Regression Training) existe et est spécialisé en machine learning (apprentissage automatique). D'autres pensent toutefois qu'il n'y a pas d'interface commune pour la myriade de paquets R, qu'il faut donc apprendre une nouvelle syntaxe pour chaque algo (contrairement à scikit-learn).
Ce package permet de mener un projet de machine learning de A à Z, en commençant par créer le jeu d'entraînement et de test, en passant par l’exploration et la normalisation des données, jusqu’au tuning des hyperparamètres et la comparaison des modèles pour déterminer celui qui donne les meilleurs résultats sur vos données. Il est extrêmement bien documenté, en anglais bien sûr. De plus, la création de graphiques est simple et puissante grâce au package ggplot2 et la manipulation de données est optimisée grâce au package dplyr. Tout comme R, Python possède des bibliothèques spécifiques pour faciliter l’analyse de données. L’une des bibliothèques les plus populaires est la librairie Panda pour manipuler de grands jeux de données.
Pour ce qui est du machine learning, la librairie la plus populaire est Scikit-Learn qui permet de faire de la classification, de la régression, du clustering ou encore de la réduction de dimension, tout comme R avec le package CARET. La documentation est aussi très bien faite, en anglais encore une fois, mais extrêmement complète et accessible même pour les débutants. Pour ce qui est des graphiques, deux bibliothèques peuvent être utilisées. Matplotlib, qui est très puissante, mais aussi très complexe. Et Bokeh qui se rapproche un peu de Shiny, et qui permet la création de graphiques interactifs pour le web.
Au niveau des bibliothèques pour l’apprentissage automatique, Matloff donne un léger avantage aux bibliothèques de Python. Néanmoins, il estime que la puissance des bibliothèques Python provient de la définition de certaines opérations de lissage d'image qui pourraient facilement être implémentées dans l' encapsuleur Keras de R et pour ce faire, une version purement R de TensorFlow pourrait être développée. À part cela, il a également souligné que R est loin devant Python pour ce qui est de l’exactitude statistique. « Pour être franc, je trouve que les personnes écrivent des algorithmes de machine learning et qui défendent le plus souvent Python ont souvent une compréhension médiocre et parfois même un dédain pour les problèmes statistiques liés au blanchiment de capitaux », s’est-il justifié.
Dans le cas du calcul parallèle, il arrive à la conclusion selon laquelle ni la version de base de R ni celle de Python ne prennent en charge le calcul multicœur, mais il attribue un léger avantage à R sur cet aspect. Les threads en Python sont intéressants pour les E/S, mais leur calcul parallèle est impossible en raison du fameux verrou d'interprète global. Le package de multitraitement de Python n'est pas une bonne solution de contournement, pas plus que le package “parallèle” de R. Les bibliothèques externes prenant en charge le calcul en grappes sont acceptables dans les deux langages. Actuellement, Python a de meilleures interfaces avec les GPU, a-t-il expliqué.
Plus loin dans sa comparaison, Matloff estime que R est également en avance sur Python pour ce qui est de l’interfaçage C/C++ et de la métaprogrammation. Il a souligné que bien qu'il existe des outils comme Swig pour interfacer Python avec le C/C++, rien n'est aussi puissant à distance que Rcpp pour le moment. Le package Pybind11 est en cours de développement. En outre, avance-t-il, la nouvelle philosophie ALTREP pour le langage R offre un grand potentiel d'amélioration des performances et de la convivialité.
En affirmant que R devance légèrement Python dans la métaprogrammation, il donne l’exemple selon laquelle bien que les fonctions soient des objets dans les deux langages, R prend cela plus au sérieux que Python. « Chaque fois que je travaille en Python, je suis ennuyé par le fait que je ne peux pas imprimer une fonction sur le terminal, ce que je fais souvent dans R, Python a juste un paradigme de POO. En R, vous avez le choix entre plusieurs options (S3, S4, R6, etc.), bien que certains puissent en débattre. C’est une bonne chose. Étant donné les fonctions magiques de métaprogrammation de R (code qui produit du code), les informaticiens devraient baver sur R », a-t-il fait savoir.
Il aborde d’autres aspects comme l’unité linguistique et les structures de données liées dans lesquels il déclare que Python arrive en première position. D’après son explication, les structures de données informatiques classiques, par exemple les arbres binaires, sont faciles à implémenter en Python. Bien que cela puisse être fait dans R de différentes manières, ce n'est pas aussi bon. Ce n’est pas un gros problème pour la science des données, mais cela se pose dans certains contextes. Maintenant pour ce qui est de l’aide en ligne, il estime que la fonction help() de R est beaucoup plus informative que celle de Python. Et surtout, dit-il, la coutume qui consiste à écrire des vignettes dans des packages R fait de R un gagnant indirect dans cet aspect.
Enfin, en abordant l’interopérabilité R/Python, selon lui, RStudio doit être félicité pour le développement du paquet réticulé qui servira de pont entre Python et R. « C'est un effort remarquable, qui fonctionne bien pour le calcul pur. Mais pour autant que je sache, cela ne résout pas les problèmes épineux qui se posent en Python, par exemple les environnements virtuels. À l'heure actuelle, je ne recommande pas l'écriture de code mixte Python/R », a-t-il conclu.
Source : Norm Matloff
Et vous ?
Quel est votre avis sur le sujet ?
Selon vous, entre R et Python, lequel est plus adapté pour la science des données ? Pourquoi ?
Les raisons avancées par Norm Matloff sont-elles pertinentes ou pas selon vous ? Pourquoi ?
Voir aussi
Science des données : Julia, R ou Python ? Un petit aperçu des avantages et inconvénients du langage Julia
Meilleurs langages en 2018 selon l'IEEE : Python conforte sa place de leader grâce à son ascension dans le machine learning et l'embarqué
R plus prisé que SAS pour l'analyse de données, mais Python est le langage le plus populaire, selon le Data Science Job Report 2017
Sondage : entre R et Python, lequel des deux langages est le plus conseillé
Pour la science des données ?
Sondage : entre R et Python, lequel des deux langages est le plus conseillé
Pour la science des données ?
Le , par Bill Fassinou
Une erreur dans cette actualité ? Signalez-nous-la !