Gaëlle Lelandais et Pierre Poulain
Qui sommes-nous ?
Tous les deux passionnés par l’enseignement, les problématiques de big data et d’analyse de données en biologie, nous nous côtoyons professionnellement depuis 15 ans, avec écoute et bienveillance. Si l’étiquette de « bioinformaticien » nous est souvent attribuée, nous sommes pourtant très différents.
Je (Gaëlle) travaille sur des problématiques de génomique fonctionnelle des champignons. Je me considère comme une analyste de données « omiques » (transcriptomique essentiellement). J’aime les statistiques et (un peu) l’informatique. Sans surprise, mon langage de programmation préféré est R.
Je (Pierre) travaille sur des problématiques d’analyse et de recyclage des données en biologie (en protéomique notamment). Je développe des outils logiciels facilitant le travail aux interfaces entre les scientifiques. J’aime l’informatique et (un peu) les statistiques. Sans surprise, mon langage de programmation préféré est Python.
Dans ce contexte, notre association, que ce soit en enseignement ou en recherche, a toujours été très pertinente. En un mot, nous sommes complémentaires.
Pourquoi cet article ?
Pour ceux qui débutent une formation en bioinformatique, la question du choix d’un langage de programmation est à la fois récurrente et importante. Nous avons développé chacun(e) des ressources pédagogiques pour accompagner nos étudiants dans leur apprentissage du langage de programmation R (Gaëlle) ou Python (Pierre). Celles-ci sont disponibles sur internet et ont été utilisées par des centaines d’apprenants, en formation initiale ou continue. Si idéalement la maîtrise des deux langages de programmation, R et Python, nous semble pertinente, dans la pratique, cela est compliqué. Ainsi, s’il fallait former les futurs scientifiques en bioinformatique / analyse de données / data science à un seul langage de programmation, lequel faudrait-il privilégier ? Dans cet article, nous partageons nos réflexions sur ce sujet. Nous sollicitons la participation du lecteur pour compléter cette discussion, et nous faire découvrir des points de vue qui nous auraient échappés*.
Découvertes respectives des langages R et Python
Je (Gaëlle) me souviens parfaitement de ma découverte du langage R. J’étais alors étudiante dans le DEA « Analyse des Génomes et Modélisation Moléculaire » (année 2001 — 2002, Université Paris Diderot). Nous suivions une formation intensive en programmation et après une première série de cours en C, l’enseignant avait changé ce matin-là. Il nous a salué et a immédiatement demandé « d’ouvrir un terminal, et de taper air ». Mes collègues de promotion et moi étions perplexes, mais l’une d’entre nous a dit « c’est la lettre R qu’il faut taper ». Elle connaissait déjà, en effet, ce logiciel, grâce à sa formation d’ingénieure agronome. Me voilà donc face à mon premier terminal R, pour la matinée. Le formateur nous a parlé de calculs vectoriels et matriciels, de fonctions d’optimisation numérique, etc. Son cours avait une coloration très mathématiques. J’étais perdue. Pour conclure la séance, il nous a dit, « voici une matrice bruitée, et pour vous entraîner, je vous demande d’écrire une procédure de lissage† ». Facile (ou pas !). « C’est obligatoire comme travail ? », avons-nous posé comme question. « Non » a répondu l’enseignant qui se voulait gentil à notre égard. « Ouf » ai-je pensé, « je vais pouvoir vite passer à autre chose ». Mais 20 ans après cette journée, je ne suis toujours pas passée à autre chose…
Je (Pierre) ai débuté en programmation avec du Windev, puis du Fortran, du Java, du C++ et du Perl en master. Pendant les 3 ans de ma thèse (2003 — 2006), j’ai simulé le comportement de peptides par des algorithmes Monte Carlo. J’ai développé un logiciel en C++ pour réaliser ces simulations. Je créais aussi de petits programmes pour analyser mes résultats, toujours en C++. Ce n’était pas très optimal d’utiliser ce langage de programmation pour calculer une moyenne ou formater des tableaux de données. Un jour, un collègue enseignant-chercheur qui travaillait dans mon bureau m’a parlé de Python. Il utilisait ce langage pour analyser ses données. Il s'agissait de Python 2.6 à l’époque (nous étions en 2005), mais quelle découverte ! Je n’avais plus besoin de compiler mes programmes et les étapes laborieuses de transformation de données étaient facilitées par les ancêtres du module NumPy (Numeric et numarray). Étant dans un labo de physique, je réalisais mes figures avec des outils comme gnuplot (en ligne de commande) ou xmgrace (avec une interface graphique, mais aussi scriptable). Lors de mon arrivée en post-doc dans un laboratoire de bioinformatique (2006), à ma grande surprise, tout le monde me parlait de R pour faire des figures. « C’est quoi R ? », ai-je demandé.
Principaux usages des langages R et Python
Au quotidien, mon travail (Gaëlle) se résume essentiellement à exploiter des tableaux de données. Au plus, ces tableaux sont composés de quelques milliers de lignes et quelques dizaines de colonnes. Je suis bien loin des volumes du big data, tels que les data scientists peuvent les rencontrer aujourd’hui. Je travaille le plus souvent en local sur mon ordinateur. J’utilise R via l’interface RStudio et je crée des rapports d’analyses de données avec R Mardown. Mes librairies les plus utilisées sont FactoMineR, igraph, marray, limma, DESeq2, bPeaks et plus récemment dplyr, ggplot2, mixOmics ou ade4. Les seules limites que je ressens parfois dans mon utilisation de R concernent le traitement de fichiers de données non structurées, en particulier ceux qui comportent des informations textuelles‡. Je me dis alors qu’il faudrait que je puisse utiliser Python. C’est d’ailleurs pour cette raison que j'ai suivi en 2012, une formation Python. À l’époque, je commençais à travailler avec des fichiers de données FASTQ, et il se disait que « R ne passerait pas le cap du traitement des données de séquençage haut débit »§. Mais finalement, ma formation Python a été bien vite oubliée, car une fois de plus, R a gardé toute sa pertinence dans mes activités de recherche. J’ai également pu compter sur la présence au laboratoire de mes premiers étudiants en thèse, très bien formés en Python.
Au quotidien, mon travail (Pierre) consiste à développer des algorithmes et des outils pour l’analyse de données, depuis la bioinformatique structurale jusqu’à la protéomique. J’utilise des modules comme NumPy et pandas pour le traitement de données et les statistiques descriptives, Matplotlib, Seaborn et Plotly pour la visualisation, Scipy pour les tests statistiques, scikit-learn pour faire un peu de machine learning, pytest pour les tests et l’intégration continue, flask pour le développement d’applications web, Voilà et Streamlit pour les tableaux de bord (dashboards) et les applications web très simples. Au-delà de Python à proprement dit, j’utilise beaucoup Jupyter Lab pour l’exploration de données et git et GitHub pour conserver la trace des différentes modifications apportées au code, et surtout, pour le travail collaboratif et la gestion de projet. Je package aussi la plupart des outils que je développe sous forme de paquets Python (dans PyPI), conda (dans Bioconda) ou Docker (dans Biocontainers). Pour autant, R ne m’est pas étranger. Certains de mes collègues y étant attachés, j’ai appris ce langage et je l’ai utilisé pour générer les figures d’un article publié en 2010. Je me suis aussi formé en participant à un MOOC R en 2014 et j’ai ainsi pu accompagner le travail d’un biostatisticien de 2014 à 2016 (lui travaillant avec STATA, moi avec R).
De nouvelles perspectives
En 2021, je (Gaëlle) décide de m’inscrire au diplôme universitaire de Bioinformatique Intégrative (DU DUBii), formation continue proposée par l’Université Paris et l’IFB. Après une année bouleversée par la crise COVID-19, mes motivations sont multiples. L’une d’elle est mon souhait de me (re)former à la programmation Python. En effet, dans mon université, la décision a été prise d’initier les étudiants de licence à la programmation informatique en utilisant Python (et non plus R comme cela était le cas depuis quelques années). J’avais soutenu cette volonté de changement, car je n’ai pas oublié mes débuts difficiles avec R et je sais à quel point ce langage peut être déroutant. Je sais également que je vais retrouver Pierre pour ces apprentissages. Je suis curieuse de vivre ses enseignements comme apprenante et j’en profite aussi (quand même…) pour le mettre au défi de me montrer que « Python vaut bien R » en analyse de données (Note de Pierre : « Challenge accepted »). J’aborde donc cette nouvelle formation en Python avec enthousiasme et application, soutenue par une équipe pédagogique dont l’encadrement est impeccable. Je retrouve assez facilement mes acquis de 2012 et je me dis que je vais pouvoir sereinement encadrer des étudiants de licence l’année prochaine, en TP de Python. Objectif atteint donc. Mais voilà que les deux derniers jours de la formation arrivent, avec au programme : « NumPy » et « pandas ». Des noms de modules familiers, mais que je n’avais pas expérimentés lors de ma précédente formation. Je découvre alors (et je comprends enfin) que la communauté des développeurs Python, par le biais de la data science, développe des solutions qui se rapprochent beaucoup de mes usages de R. Il est possible de manipuler des vecteurs et des tableaux, de façon très simple. Les représentations de données sont facilitées, ainsi que la mise en application des méthodes statistiques telle que l’ACP (un comble !). Bref, je constate que depuis ma dernière formation, Python a bien changé. R aussi a également beaucoup évolué. L’ensemble des librairies « tidyverse » est devenu incontournable, modifiant en profondeur la syntaxe classiquement utilisée dans le « R‑base » et permettant l’obtention de graphiques élégants et interactifs. Alors R ou Python, Python ou R ? Que choisir en 2021 ? Les discussions ont été nombreuses et parfois vives entre les participants de la formation¶…
Utilisateur et formateur Python depuis de nombreuses années, je (Pierre) ai été témoin de l’évolution de Python depuis son utilisation dans des disciplines scientifiques comme la physique et la bioinformatique jusqu’à son adoption massive en data science. L'essor de la bibliothèque pandas au début des années 2010 a révolutionné la manière dont un tableau de données peut être analysé, aussi simplement qu’avec R. Des évolutions de pandas, comme Vaex supportent la manipulation de tableaux de données de plusieurs millions de lignes, quasiment instantanément. Les bibliothèques graphiques comme Bokeh et Plotly produisent des graphiques interactifs. L’écosystème Jupyter, depuis les notebooks (ou bloc-code) jusqu’à l’environnement d’analyse Jupyter Lab, ont aussi grandement contribué à la diffusion de ce langage de programmation. Plus récemment, les bibliothèques Voilà et surtout Streamlit, sont devenus de sérieux compétiteurs de Shiny en R#.
Bilan : nécessité de différencier formation initiale et formation continue, importance de la communauté de recherche
Finalement, notre analyse commune (Gaëlle et Pierre) est que derrière les langages de programmation R et Python, deux communautés de scientifiques différentes se regroupent. Les mathématiques / statistiques pour R et l’informatique / physique pour Python. Assez naturellement, chacun rejoint sa communauté comme nous l’avons fait l’un et l’autre. Les échanges sont facilités si vous avez (comme nous) un(e) bon(ne) ami(e) dans l’autre communauté, les limitations ponctuelles sont alors vite réglées.
Ainsi, je (Gaëlle) vais continuer à travailler avec R en recherche et utiliser ponctuellement Python (surtout en enseignement). Je pense que mes 20 années d’expérience avec R ont encore une valeur supérieure aux améliorations récentes de Python. Mais, je sais maintenant qu’il est possible de faire la plupart de mes analyses avec Python, c’est une évolution de pensée importante. Je choisis donc de conserver R pour mes activités de recherche, car pour moi, c’est plus simple ainsi. Mais, que faut-il proposer aux nouveaux apprenants ? Ceux qui n’ont pas 20 ans d’expériences avec l’un ou l’autre de ces langages de programmation.
Pour répondre à cette question, il est nécessaire de différencier les contextes de formation. En formation continue (professionnelle), nos apprenants appartiennent à une communauté de chercheurs « omiques », qui utilisent pour la très grande majorité d’entre eux R. Cette situation a certainement vocation à évoluer (voir ci-dessous), mais pour le moment, elle est ainsi. Nous pensons donc que dans ce contexte et si « un seul langage » doit être choisi, il est utile de privilégier R (avec une attention particulière portée sur les solutions récentes comme « tidyverse »). Bien sûr, si le temps de formation le permet, Python est alors un bon complément. Par contre, en formation initiale, la situation est différente. Python est aujourd’hui le langage de programmation abordé au lycée et nos étudiants, particulièrement ceux de licence, ne rentreront dans le monde professionnel que dans 3 à 5 ans. Il est nécessaire d’anticiper ce que seront alors R et Python**. Il nous semble que les évolutions de la biologie vers la data science sont en faveur de Python††. Aussi, nous recommandons de former tous les étudiants de licence à Python. Ceux qui deviendront les data scientists de demain verront ensuite s’ils ont besoin de compétences complémentaires en R. Quels que soient leurs choix, la formation continue devra s’adapter en conséquence. Nous y serons prêts !
Pour nous retrouver :
Gaëlle Lelandais : https://twitter.com/glelandais
Pierre Poulain : https://twitter.com/pierrepo
- *Nous remercions Olivier Dameron, Guillaume Devailly et Yoann Mouscaz pour leurs premiers retours (très constructifs) sur ce texte. Certaines de leurs remarques ont été prises en compte, les autres sont évoquées en note de bas de page (pour ne pas perdre une miette de réflexions sur le sujet :).
- †Le principe était de mettre en application une méthode de lissage d’une signal par une stratégie de moyenne mobile.
- ‡Sur ce point, nos relecteurs nous indiquent ne pas comprendre les limites de R dans le traitement des fichiers non structurés. Je (Gaëlle) leurs réponds que les limites ne viennent pas de R, mais de moi (!). En clair, je n'ai jamais pris le temps de bien regarder les solutions existantes. Merci de me donner l'opportunité de cette clarification !
- §Je décide de garder ma source de l’époque anonyme 🙂
- ¶Nos relecteurs nous font remarquer que la question "s'il fallait n'en choisir qu'un" pourrait être modifier en "par lequel commencer ?". En effet, un élément important à prendre en compte est qu'une fois qu'un premier langage de programmation est maitrisé, le coût d'apprentissage d'un deuxième est fortement diminué (un peu comme l'apprentissage des langues étrangères — enfin, il paraît !).
- #Nos relecteurs nous font remarquer qu'apprendre un langage de programmation, c'est à la fois en apprendre une syntaxe et des principes. Dans ce contexte, Python et R font partie de la même famille des langages de scripts en programmation impérative. Les principes généraux sont globalement les mêmes et c'est une des raisons pour lesquelles finalement, leurs usages convergent…
- **Sur ce point une ressource intéressante nous a été pointée par nos relecteurs : https://insights.stackoverflow.com/survey/2020#most-popular-technologies.
- ††Cette affirmation a fait bondir un de nos relecteurs. Je (Gaëlle) reconnais être sans doute sous l'influence de Pierre sur ce point ! Pierre est beaucoup plus avancé et au courant des innovations en Python que je ne le suis avec R (souvenez-vous que j'aime seulement "un peu" l'informatique). Nous aurions une grande curiosité à lire une réponse documentée sur ce sujet. A vos claviers donc les "vrais" codeurs en R 🙂
Laisser un commentaire