- Le blog participatif de bioinformatique francophone depuis 2012 -

Choisir entre R et Python en bioinformatique ? Regards croisés entre collègues enseignants-chercheurs

Gaëlle Lelan­dais et Pierre Pou­lain

Illustration de Gwenaelle Lemoine.

Qui sommes-nous ?

Tous les deux pas­sion­nés par l’enseignement, les pro­blé­ma­tiques de big data et d’analyse de don­nées en bio­lo­gie, nous nous côtoyons pro­fes­sion­nel­le­ment depuis 15 ans, avec écoute et bien­veillance. Si l’étiquette de « bio­in­for­ma­ti­cien » nous est sou­vent attri­buée, nous sommes pour­tant très dif­fé­rents.

Je (Gaëlle) tra­vaille sur des pro­blé­ma­tiques de géno­mique fonc­tion­nelle des cham­pi­gnons. Je me consi­dère comme une ana­lyste de don­nées « omiques » (trans­crip­to­mique essen­tiel­le­ment). J’aime les sta­tis­tiques et (un peu) l’informatique. Sans sur­prise, mon lan­gage de pro­gram­ma­tion pré­fé­ré est R. 

Je (Pierre) tra­vaille sur des pro­blé­ma­tiques d’analyse et de recy­clage des don­nées en bio­lo­gie (en pro­téo­mique notam­ment). Je déve­loppe des outils logi­ciels faci­li­tant le tra­vail aux inter­faces entre les scien­ti­fiques. J’aime l’informatique et (un peu) les sta­tis­tiques. Sans sur­prise, mon lan­gage de pro­gram­ma­tion pré­fé­ré est Python. 

Dans ce contexte, notre asso­cia­tion, que ce soit en ensei­gne­ment ou en recherche, a tou­jours été très per­ti­nente. En un mot, nous sommes com­plé­men­taires.

Pourquoi cet article ?

Pour ceux qui débutent une for­ma­tion en bio­in­for­ma­tique, la ques­tion du choix d’un lan­gage de pro­gram­ma­tion est à la fois récur­rente et impor­tante. Nous avons déve­lop­pé chacun(e) des res­sources péda­go­giques pour accom­pa­gner nos étu­diants dans leur appren­tis­sage du lan­gage de pro­gram­ma­tion R (Gaëlle) ou Python (Pierre). Celles-ci sont dis­po­nibles sur inter­net et ont été uti­li­sées par des cen­taines d’apprenants, en for­ma­tion ini­tiale ou conti­nue. Si idéa­le­ment la maî­trise des deux lan­gages de pro­gram­ma­tion, R et Python, nous semble per­ti­nente, dans la pra­tique, cela est com­pli­qué. Ain­si, s’il fal­lait for­mer les futurs scien­ti­fiques en bio­in­for­ma­tique /​ ana­lyse de don­nées /​ data science à un seul lan­gage de pro­gram­ma­tion, lequel fau­drait-il pri­vi­lé­gier ? Dans cet article, nous par­ta­geons nos réflexions sur ce sujet. Nous sol­li­ci­tons la par­ti­ci­pa­tion du lec­teur pour com­plé­ter cette dis­cus­sion, et nous faire décou­vrir des points de vue qui nous auraient échap­pés​*​.

Découvertes respectives des langages R et Python

Je (Gaëlle) me sou­viens par­fai­te­ment de ma décou­verte du lan­gage  R. J’étais alors étu­diante dans le DEA « Ana­lyse des Génomes et Modé­li­sa­tion Molé­cu­laire » (année 2001 — 2002, Uni­ver­si­té Paris Dide­rot). Nous sui­vions une for­ma­tion inten­sive en pro­gram­ma­tion et après une pre­mière série de cours en C, l’enseignant avait chan­gé ce matin-là. Il nous a salué et a immé­dia­te­ment deman­dé « d’ouvrir un ter­mi­nal, et de taper air ». Mes col­lègues de pro­mo­tion et moi étions per­plexes, mais l’une d’entre nous a dit « c’est la lettre R qu’il faut taper ». Elle connais­sait déjà, en effet, ce logi­ciel, grâce à sa for­ma­tion d’ingénieure agro­nome. Me voi­là donc face à mon pre­mier ter­mi­nal R, pour la mati­née. Le for­ma­teur nous a par­lé de cal­culs vec­to­riels et matri­ciels, de fonc­tions d’optimisation numé­rique, etc. Son cours avait une colo­ra­tion très mathé­ma­tiques. J’étais per­due. Pour conclure la séance, il nous a dit, « voi­ci une matrice brui­tée, et pour vous entraî­ner, je vous demande d’écrire une pro­cé­dure de lis­sage​†​ ». Facile (ou pas !). « C’est obli­ga­toire comme tra­vail ? », avons-nous posé comme ques­tion. « Non » a répon­du l’enseignant qui se vou­lait gen­til à notre égard. « Ouf » ai-je pen­sé, « je vais pou­voir vite pas­ser à autre chose ». Mais 20 ans après cette jour­née, je ne suis tou­jours pas pas­sée à autre chose…

Je (Pierre) ai débu­té en pro­gram­ma­tion avec du Win­dev, puis du For­tran, du Java, du C++ et du Perl en mas­ter. Pen­dant les 3 ans de ma thèse (2003 — 2006), j’ai simu­lé le com­por­te­ment de pep­tides par des algo­rithmes Monte Car­lo. J’ai déve­lop­pé un logi­ciel en C++ pour réa­li­ser ces simu­la­tions. Je créais aus­si de petits pro­grammes pour ana­ly­ser mes résul­tats, tou­jours en C++. Ce n’était pas très opti­mal d’utiliser ce lan­gage de pro­gram­ma­tion pour cal­cu­ler une moyenne ou for­ma­ter des tableaux de don­nées. Un jour, un col­lègue ensei­gnant-cher­cheur qui tra­vaillait dans mon bureau m’a par­lé de Python. Il uti­li­sait ce lan­gage pour ana­ly­ser ses don­nées. Il s'agissait de Python 2.6 à l’époque (nous étions en 2005), mais quelle décou­verte ! Je n’avais plus besoin de com­pi­ler mes pro­grammes et les étapes labo­rieuses de trans­for­ma­tion de don­nées étaient faci­li­tées par les ancêtres du module Num­Py (Nume­ric et numar­ray). Étant dans un labo de phy­sique, je réa­li­sais mes figures avec des outils comme gnu­plot (en ligne de com­mande) ou xmgrace (avec une inter­face gra­phique, mais aus­si scrip­table). Lors de mon arri­vée en post-doc dans un labo­ra­toire de bio­in­for­ma­tique (2006), à ma grande sur­prise, tout le monde me par­lait de R pour faire des figures. « C’est quoi R ? », ai-je deman­dé.

Principaux usages des langages R et Python

Au quo­ti­dien, mon tra­vail (Gaëlle) se résume essen­tiel­le­ment à exploi­ter des tableaux de don­nées. Au plus, ces tableaux sont com­po­sés de quelques mil­liers de lignes et quelques dizaines de colonnes. Je suis bien loin des volumes du big data, tels que les data scien­tists peuvent les ren­con­trer aujourd’hui. Je tra­vaille le plus sou­vent en local sur mon ordi­na­teur. J’utilise R via l’interface RStu­dio et je crée des rap­ports d’analyses de don­nées avec R Mar­down. Mes librai­ries les plus uti­li­sées sont Fac­to­Mi­neR, igraph, mar­ray, lim­ma, DESeq2, bPeaks et plus récem­ment dplyr, ggplot2, mixO­mics ou ade4. Les seules limites que je res­sens par­fois dans mon uti­li­sa­tion de R concernent le trai­te­ment de fichiers de don­nées non struc­tu­rées, en par­ti­cu­lier ceux qui com­portent des infor­ma­tions tex­tuelles​‡​. Je me dis alors qu’il fau­drait que je puisse uti­li­ser Python. C’est d’ailleurs pour cette rai­son que j'ai sui­vi en 2012, une for­ma­tion Python. À l’époque, je com­men­çais à tra­vailler avec des fichiers de don­nées FASTQ, et il se disait que « R ne pas­se­rait pas le cap du trai­te­ment des don­nées de séquen­çage haut débit »​§​. Mais fina­le­ment, ma for­ma­tion Python a été bien vite oubliée, car une fois de plus, R a gar­dé toute sa per­ti­nence dans mes acti­vi­tés de recherche. J’ai éga­le­ment pu comp­ter sur la pré­sence au labo­ra­toire de mes pre­miers étu­diants en thèse, très bien for­més en Python.

Au quo­ti­dien, mon tra­vail (Pierre) consiste à déve­lop­per des algo­rithmes et des outils pour l’analyse de don­nées, depuis la bio­in­for­ma­tique struc­tu­rale jusqu’à la pro­téo­mique. J’utilise des modules comme Num­Py et pan­das pour le trai­te­ment de don­nées et les sta­tis­tiques des­crip­tives, Mat­plot­lib, Sea­born et Plot­ly pour la visua­li­sa­tion, Sci­py pour les tests sta­tis­tiques, sci­kit-learn pour faire un peu de machine lear­ning, pytest pour les tests et l’intégration conti­nue, flask pour le déve­lop­pe­ment d’applications web, Voi­là et Stream­lit pour les tableaux de bord (dash­boards) et les appli­ca­tions web très simples. Au-delà de Python à pro­pre­ment dit, j’utilise beau­coup Jupy­ter Lab pour l’exploration de don­nées et git et GitHub pour conser­ver la trace des dif­fé­rentes modi­fi­ca­tions appor­tées au code, et sur­tout, pour le tra­vail col­la­bo­ra­tif et la ges­tion de pro­jet. Je package aus­si la plu­part des outils que je déve­loppe sous forme de paquets Python (dans PyPI), conda (dans Bio­con­da) ou Docker (dans Bio­con­tai­ners). Pour autant, R ne m’est pas étran­ger. Cer­tains de mes col­lègues y étant atta­chés, j’ai appris ce lan­gage et je l’ai uti­li­sé pour géné­rer les figures d’un article publié en 2010. Je me suis aus­si for­mé en par­ti­ci­pant à un MOOC R en 2014 et j’ai ain­si pu accom­pa­gner le tra­vail d’un bio­sta­tis­ti­cien de 2014 à 2016 (lui tra­vaillant avec STATA, moi avec R).

De nouvelles perspectives

En 2021, je (Gaëlle) décide de m’inscrire au diplôme uni­ver­si­taire de Bio­in­for­ma­tique Inté­gra­tive (DU DUBii), for­ma­tion conti­nue pro­po­sée par l’Université Paris et l’IFB. Après une année bou­le­ver­sée par la crise COVID-19, mes moti­va­tions sont mul­tiples. L’une d’elle est mon sou­hait de me (re)former à la pro­gram­ma­tion Python. En effet, dans mon uni­ver­si­té, la déci­sion a été prise d’initier les étu­diants de licence à la pro­gram­ma­tion infor­ma­tique en uti­li­sant Python (et non plus R comme cela était le cas depuis quelques années). J’avais sou­te­nu cette volon­té de chan­ge­ment, car je n’ai pas oublié mes débuts dif­fi­ciles avec R et je sais à quel point ce lan­gage peut être dérou­tant. Je sais éga­le­ment que je vais retrou­ver Pierre pour ces appren­tis­sages. Je suis curieuse de vivre ses ensei­gne­ments comme appre­nante et j’en pro­fite aus­si (quand même…) pour le mettre au défi de me mon­trer que « Python vaut bien R » en ana­lyse de don­nées (Note de Pierre : « Chal­lenge accep­ted »). J’aborde donc cette nou­velle for­ma­tion en Python avec enthou­siasme et appli­ca­tion, sou­te­nue par une équipe péda­go­gique dont l’encadrement est impec­cable. Je retrouve assez faci­le­ment mes acquis de 2012 et je me dis que je vais pou­voir serei­ne­ment enca­drer des étu­diants de licence l’année pro­chaine, en TP de Python. Objec­tif atteint donc. Mais voi­là que les deux der­niers jours de la for­ma­tion arrivent, avec au pro­gramme : « Num­Py » et « pan­das ». Des noms de modules fami­liers, mais que je n’avais pas expé­ri­men­tés lors de ma pré­cé­dente for­ma­tion. Je découvre alors (et je com­prends enfin) que la com­mu­nau­té des déve­lop­peurs Python, par le biais de la data science, déve­loppe des solu­tions qui se rap­prochent beau­coup de mes usages de R. Il est pos­sible de mani­pu­ler des vec­teurs et des tableaux, de façon très simple. Les repré­sen­ta­tions de don­nées sont faci­li­tées, ain­si que la mise en appli­ca­tion des méthodes sta­tis­tiques telle que l’ACP (un comble !). Bref, je constate que depuis ma der­nière for­ma­tion, Python a bien chan­gé. R aus­si a éga­le­ment beau­coup évo­lué. L’ensemble des librai­ries « tidy­verse » est deve­nu incon­tour­nable, modi­fiant en pro­fon­deur la syn­taxe clas­si­que­ment uti­li­sée dans le « R‑base » et per­met­tant l’obtention de gra­phiques élé­gants et inter­ac­tifs. Alors R ou Python, Python ou R ? Que choi­sir en 2021 ? Les dis­cus­sions ont été nom­breuses et par­fois vives entre les par­ti­ci­pants de la for­ma­tion​¶​

Uti­li­sa­teur et for­ma­teur Python depuis de nom­breuses années, je (Pierre) ai été témoin de l’évolution de Python depuis son uti­li­sa­tion dans des dis­ci­plines scien­ti­fiques comme la phy­sique et la bio­in­for­ma­tique jusqu’à son adop­tion mas­sive en data science. L'essor de la biblio­thèque pan­das au début des années 2010 a révo­lu­tion­né la manière dont un tableau de don­nées peut être ana­ly­sé, aus­si sim­ple­ment qu’avec R. Des évo­lu­tions de pan­das, comme Vaex sup­portent la mani­pu­la­tion de tableaux de don­nées de plu­sieurs mil­lions de lignes, qua­si­ment ins­tan­ta­né­ment. Les biblio­thèques gra­phiques comme Bokeh et Plot­ly pro­duisent des gra­phiques inter­ac­tifs. L’écosystème Jupy­ter, depuis les note­books (ou bloc-code) jusqu’à l’environnement d’analyse Jupy­ter Lab, ont aus­si gran­de­ment contri­bué à la dif­fu­sion de ce lan­gage de pro­gram­ma­tion. Plus récem­ment, les biblio­thèques Voi­là et sur­tout Stream­lit, sont deve­nus de sérieux com­pé­ti­teurs de Shi­ny en R​#​.

Bilan : nécessité de différencier formation initiale et formation continue, importance de la communauté de recherche

Fina­le­ment, notre ana­lyse com­mune (Gaëlle et Pierre) est que der­rière les lan­gages de pro­gram­ma­tion R et Python, deux com­mu­nau­tés de scien­ti­fiques dif­fé­rentes se regroupent. Les mathé­ma­tiques /​ sta­tis­tiques pour R et l’informatique /​ phy­sique pour Python. Assez natu­rel­le­ment, cha­cun rejoint sa com­mu­nau­té comme nous l’avons fait l’un et l’autre. Les échanges sont faci­li­tés si vous avez (comme nous) un(e) bon(ne) ami(e) dans l’autre com­mu­nau­té, les limi­ta­tions ponc­tuelles sont alors vite réglées. 

Ain­si, je (Gaëlle) vais conti­nuer à tra­vailler avec R en recherche et uti­li­ser ponc­tuel­le­ment Python (sur­tout en ensei­gne­ment). Je pense que mes 20 années d’expérience avec R ont encore une valeur supé­rieure aux amé­lio­ra­tions récentes de Python. Mais, je sais main­te­nant qu’il est pos­sible de faire la plu­part de mes ana­lyses avec Python, c’est une évo­lu­tion de pen­sée impor­tante. Je choi­sis donc de conser­ver R pour mes acti­vi­tés de recherche, car pour moi, c’est plus simple ain­si. Mais, que faut-il pro­po­ser aux nou­veaux appre­nants ? Ceux qui n’ont pas 20 ans d’expériences avec l’un ou l’autre de ces lan­gages de pro­gram­ma­tion.

Pour répondre à cette ques­tion, il est néces­saire de dif­fé­ren­cier les contextes de for­ma­tion. En for­ma­tion conti­nue (pro­fes­sion­nelle), nos appre­nants appar­tiennent à une com­mu­nau­té de cher­cheurs « omiques », qui uti­lisent pour la très grande majo­ri­té d’entre eux R. Cette situa­tion a cer­tai­ne­ment voca­tion à évo­luer (voir ci-des­sous), mais pour le moment, elle est ain­si. Nous pen­sons donc que dans ce contexte et si « un seul lan­gage » doit être choi­si, il est utile de pri­vi­lé­gier R (avec une atten­tion par­ti­cu­lière por­tée sur les solu­tions récentes comme « tidy­verse »). Bien sûr, si le temps de for­ma­tion le per­met, Python est alors un bon com­plé­ment. Par contre, en for­ma­tion ini­tiale, la situa­tion est dif­fé­rente. Python est aujourd’hui le lan­gage de pro­gram­ma­tion abor­dé au lycée et nos étu­diants, par­ti­cu­liè­re­ment ceux de licence, ne ren­tre­ront dans le monde pro­fes­sion­nel que dans 3 à 5 ans. Il est néces­saire d’anticiper ce que seront alors R et Python​**​. Il nous semble que les évo­lu­tions de la bio­lo­gie vers la data science sont en faveur de Python​††​. Aus­si, nous recom­man­dons de for­mer tous les étu­diants de licence à Python. Ceux qui devien­dront les data scien­tists de demain ver­ront ensuite s’ils ont besoin de com­pé­tences com­plé­men­taires en R. Quels que soient leurs choix, la for­ma­tion conti­nue devra s’adapter en consé­quence. Nous y serons prêts !

Pour nous retrou­ver :

Gaëlle Lelan­dais : https://​twit​ter​.com/​g​l​e​l​a​n​d​ais

Pierre Pou­lain : https://​twit​ter​.com/​p​i​e​r​r​epo


  1. ​*​
    Nous remer­cions Oli­vier Dame­ron, Guillaume Devailly et Yoann Mous­caz pour leurs pre­miers retours (très construc­tifs) sur ce texte. Cer­taines de leurs remarques ont été prises en compte, les autres sont évo­quées en note de bas de page (pour ne pas perdre une miette de réflexions sur le sujet :).
  2. ​†​
    Le prin­cipe était de mettre en appli­ca­tion une méthode de lis­sage d’une signal par une stra­té­gie de moyenne mobile.
  3. ​‡​
    Sur ce point, nos relec­teurs nous indiquent ne pas com­prendre les limites de R dans le trai­te­ment des fichiers non struc­tu­ré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 regar­der les solu­tions exis­tantes. Mer­ci de me don­ner l'opportunité de cette cla­ri­fi­ca­tion !
  4. ​§​
    Je décide de gar­der ma source de l’époque ano­nyme 🙂
  5. ​¶​
    Nos relec­teurs nous font remar­quer que la ques­tion "s'il fal­lait n'en choi­sir qu'un" pour­rait être modi­fier en "par lequel com­men­cer ?". En effet, un élé­ment impor­tant à prendre en compte est qu'une fois qu'un pre­mier lan­gage de pro­gram­ma­tion est mai­tri­sé, le coût d'apprentissage d'un deuxième est for­te­ment dimi­nué (un peu comme l'apprentissage des langues étran­gères — enfin, il paraît !).
  6. ​#​
    Nos relec­teurs nous font remar­quer qu'apprendre un lan­gage de pro­gram­ma­tion, c'est à la fois en apprendre une syn­taxe et des prin­cipes. Dans ce contexte, Python et R font par­tie de la même famille des lan­gages de scripts en pro­gram­ma­tion impé­ra­tive. Les prin­cipes géné­raux sont glo­ba­le­ment les mêmes et c'est une des rai­sons pour les­quelles fina­le­ment, leurs usages convergent…
  7. ​**​
    Sur ce point une res­source inté­res­sante nous a été poin­tée par nos relec­teurs : https://​insights​.sta​cko​ver​flow​.com/​s​u​r​v​e​y​/​2​0​2​0​#​m​o​s​t​-​p​o​p​u​l​a​r​-​t​e​c​h​n​o​l​o​g​ies.
  8. ​††​
    Cette affir­ma­tion a fait bon­dir un de nos relec­teurs. Je (Gaëlle) recon­nais être sans doute sous l'influence de Pierre sur ce point ! Pierre est beau­coup plus avan­cé et au cou­rant des inno­va­tions en Python que je ne le suis avec R (sou­ve­nez-vous que j'aime seule­ment "un peu" l'informatique). Nous aurions une grande curio­si­té à lire une réponse docu­men­tée sur ce sujet. A vos cla­viers donc les "vrais" codeurs en R 🙂



Commentaires

3 réponses à “Choisir entre R et Python en bioinformatique ? Regards croisés entre collègues enseignants-chercheurs”

  1. Témoi­gnages, très, très inté­res­sants ! D'autant plus que, per­son­nel­le­ment, je me retrouve tota­le­ment dans le pro­fil de Gaëlle (que je salue, en pas­sant ;)), sans en être à l'étape de reprise de for­ma­tion via le DUBII (pour l'instant auto-for­ma­tion, mais assez peu effi­cace).
    Je com­prends que l'affirmation rela­tive à l'évolution géné­rale en direc­tion de Python ait pu cho­quer un relec­teur, mais tout afi­cio­na­do de R que je sois, je constate la même chose. Entre autres, du fait que R, mal­gré des blocs plus rapides via Rcpp, n'est bien­tôt plus à même de suivre le rythme de la quan­ti­té d'information (consom­ma­tion de RAM…) à gérer par uni­té de temps dans les tech­no­lo­gies omiques nou­velles ou émer­gentes (dans mon cas, l'analyse single cell).

  2. Bien d'accord avec cet article (agréable lec­ture, l'idée du dia­logue R vs python est excel­lente). Python en for­ma­tion ini­tial car plus "infor­ma­tique" et ne ferme pas la porte à la data science. R reste incon­tour­nable et on peut tou­jours s'y for­mer en conti­nu.

  3. Mer­ci pour ce témoi­gnage très inté­res­sant et plus construc­tif que les dis­cus­sions par­ti­sanes habi­tuelles !

    Venant de la phy­sique (d'ailleurs du même labo de thèse que Pierre !), je suis pas­sé par mat­lab, puis R depuis que j'ai "bas­cu­lé" en bio­in­for­ma­tique (les deux lan­gages sont extrê­me­ment proches).

    Grand uti­li­sa­teur de R, et assez peu de Python, j'ai trou­vé l'installation de packages bien plus simple avec R (et je conseille à ceux qui feraient du Python avec win­dows d'installer direc­te­ment Ana­con­da, ça m'aurait évi­té des galères à l'époque…).

    Pour ma part, je reste aus­si à R avec mon expé­rience, mais je conseille­rais aus­si Python en for­ma­tion ini­tiale, car cela s'adapte à plus de domaines… Quitte à apprendre R aus­si dans un labo qui a beau­coup d'expérience en la matière : les pre­miers pas sont rela­ti­ve­ment simples.

Laisser un commentaire