R et Python
Une polémique stérile, mais une vraie question : R ou Python ?
Assembleur, Fortran, Basic, APL, Cobol, C, C++, SQL, Lisp, Pascal, Java, JavaScript, Python, Go ainsi que les différents langages de commande ou les shells Unix comme le Bash, forment une liste non exhaustive des langages que nous avons pratiqués avec enthousiasme et détermination. Aujourd’hui s’imposent à nous quelques éléments de conclusion sur le choix personnel d’un langage de programmation :
-
Quand on adopte un langage, on adopte surtout son biotope.
-
Il est aisé d’apprendre un nouveau langage quand on en maîtrise déjà un.
-
Cela peut sembler paradoxal, mais l’étude d’un nouveau langage permet d’améliorer ses pratiques sur les autres.
-
Mieux vaut utiliser le langage qui vous permettra de produire ce que vous voulez produire dans les meilleures conditions (biotope et outils, adaptation de ce biotope à votre objectif, plaisir, rapidité d’exécution…).
Pour ce qui est de l’aspect "carrière" ou de la gestion de l’attractivité de votre CV, la problématique du choix du langage est complexe, mais nous soumettons les points suivants à votre réflexion :
-
Plus un langage est rare, moins on trouve d’opportunités le concernant, mais plus celles-ci sont en général rémunératrices.
-
Il est indispensable d’acquérir une connaissance, au moins partielle, de plusieurs langages pour pouvoir s’insérer dans les équipes.
-
À terme, c’est la fiabilité de votre écriture, sa rapidité, la qualité de la documentation et la prévisibilité du comportement de votre code, ainsi que le respect des critères de qualité appréciés par vos pairs qui vous apporteront leur estime.
-
Dans le strict cadre des data sciences, les personnes issues de l’informatique...
Exemples de codes R et Python comparables
Nous allons mettre en évidence qu’à la lecture du code, R et Python se ressemblent. Évidemment, à l’écriture du code, ou pour des codes spécialisés, il n’est pas toujours trivial de passer de l’un à l’autre sans erreur.
R et Python sont deux langages qui implémentent bien les paradigmes des langages fonctionnels. Les deux langages permettent de traiter les paradigmes de l’objet de façon similaire (nous l’avons d’ailleurs démontré plus haut dans l’ouvrage en ce qui concerne R). En data sciences, comme en programmation mathématique, la programmation objet n’est pas prépondérante.
Un algorithme classique s’appuie sur une structure de données (vecteurs, tenseurs/arrays), des scalaires et des booléens. En Python comme en R, les structures de liste sont très utilisées pour la programmation de haut niveau, quand de bonnes performances sont exigées, mais de nombreux data scientists n’ont jamais eu à les utiliser réellement (sauf à les lire ou à les construire quand une fonction l’exige).
Par ailleurs, les deux langages savent exploiter avec efficacité des structures spécifiques de données gérées en tant que dataframe (en Python on utilise le package pandas pour cela).
Dans cette section, nous avons choisi de vous montrer qu’il est possible d’adopter un style de programmation proche en Python et en R afin de vous convaincre que de nombreux réflexes de programmation acquis dans un des deux contextes pourront se transférer dans l’autre.
On peut utiliser cette section et la suivante comme les bases du minimum syntaxique à connaître dans l’un ou l’autre des langages.
1. Codes triviaux
Les deux codes suivants sont presque identiques : dans le code R on a utilisé la flèche d’assignation car c’est une bonne pratique, mais le même signe égal qu’en Python aurait parfaitement fonctionné.
# >>>> un code R <<<<
a <- 1
b <- 10
c <- 2 * a + b
c
##> [1] 12
c**2
##> [1] 144
# >>>> un code Python <<<< ...
Accéder à Python à partir de R
1. Installation et initialisation du contexte technique
N’hésitez pas à faire le point sur votre contexte avant de commencer votre travail, en vérifiant votre configuration Python et son bon fonctionnement.
getwd() # où suis-je ?
library(reticulate) # chargement de reticulate
Python est-il disponible ?
py_available(initialize = FALSE)
Quel Python suis-je en train d’utiliser sur ma machine ?
py_config() # la configuration python locale
python: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate/python.exe
libpython: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate/python36.dll
pythonhome: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate
version: 3.6.13 (default, Feb 19 2021, 05:17:09) [MSC v.1916
64 bit (AMD64)]
Architecture: 64bit
numpy: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate/Lib/site-packages/numpy
numpy_version: 1.19.4
Quels environnements virtuels conda sont à ma disposition ?
conda_list() # éventuelle configuration conda
tf-gpu-initial C:\\Users\\boss-hp\\.conda\\envs\\tf-gpu-
initial\\python.exe
r-reticulate C:\\Users\\boss-hp\\AppData\\Local\\r-miniconda\\envs\\
r-reticulate\\python.exe
Vérifiez si votre environnement fonctionne :
os <- reticulate::import("os") # un petit test de fonctionnement
os$listdir(".") # si tout va bien : dir local
[1] "00 R et ML.lnk"
[2] "00 LIVRE3 EN COURS.lnk"
C’est bon, vous êtes tout à fait opérationnel !
2. Interactions R et Python, du point de vue R
a. Partage de variables et exécution de code Python dans le biotope R
Tous les codes que vous voyez ici ont été exécutés sous RStudio, dans des fichiers Rmarkdown ; nous vous conseillons de procéder de même.
Nous allons tout d’abord créer...
Considérations sur les cas difficiles
Nous avons utilisé comme exemple des librairies NLP afin de compléter les éléments donnés plus haut dans l’ouvrage. L’installation et l’usage de ces librairies Python n’ont pas posé de problème, d’autant qu’elles ne possèdent pas d’interface graphique.
La traduction des formats de données et de fonctions est assurée automatiquement par le package reticulate dans la plupart des cas. Pour les cas difficiles, ou si vous voulez directement créer des structures Python et les échanger (comme les dictionnaires Python qui sont des structures agréables), vous pouvez utiliser : r_to_py et py_to_r, py_dict, py_save_object et py_load_object qui utilisent le format Python pickle, ainsi que py_eval, py_run_xxx, py_set_item/py_get_item, py_func, py_call... Vous n’aurez sans doute pas souvent besoin de ces fonctions, pourtant simples à utiliser, mais il faut connaître leur existence afin de traiter certains rares cas particuliers ou quand vous souhaitez créer vous-même une interface particulière avec un module Python.
On peut capter la sortie standard d’un programme Python en utilisant py_capture_output.
Quand le package Python possède une interface graphique, les choses se compliquent parfois suivant les cas :
-
Le package est un package utilisé...