- Le blog participatif de bioinformatique francophone depuis 2012 -

Julia : le successeur de R ?

julia_logo
Logo du lan­gage Julia.
Source : http://​julia​lang​.org/

Actuel­le­ment le lan­gage R est incon­tour­nable pour qui veut mani­pu­ler des don­nées en bio­in­for­ma­tique, en par­ti­cu­lier pour l'analyse sta­tis­tique. Mais un suc­ces­seur est en passe de s'imposer : Julia, com­bi­nant puis­sance du lan­gage avec les fonc­tion­na­li­tés de R, et com­blant les nom­breux défauts de ce der­nier — mais plus encore ! Voi­ci une pré­sen­ta­tion de ce tout nou­veau lan­gage.

À l'origine

La prin­ci­pale rai­son du suc­cès de R est le sys­tème de "packages" qui a per­mis à chaque labo d'écrire et de rendre faci­le­ment récu­pé­rable le code qui résout son pro­blème par­ti­cu­lier. Aujourd'hui c'est la grande force de R : vous avez un pro­blème ? Quelqu'un l'a déjà réso­lu, télé­char­gez le package, écri­vez trois lignes et appuyez sur le bou­ton : c'est fait. Le type "data frame" pour mani­pu­ler les tableaux de don­nées est éga­le­ment très appré­cié.

Bien sûr il arrive que vous ayez un nou­veau pro­blème, ou que vous sou­hai­tiez écrire votre propre pro­gramme. Si, à l'usure, on arrive à peu près tou­jours à ce qu'on veut, on est quand même obli­gé de remar­quer que le lan­gage souffre de nom­breux défauts : sa docu­men­ta­tion déplo­rable, sa len­teur, sa syn­taxe lourde, la dif­fi­cul­té à débu­guer, les fonc­tions redon­dantes, etc. Mais énu­mé­rons les alter­na­tives :

  • SAS, S+, Mat­lab, etc. sont payants et donc pas bien adap­tés au monde aca­dé­mique.
  • Sci­py, librai­rie de Python, est pas mal mais n'est pas aus­si com­plète et pose sou­vent des pro­blèmes d'installation.
  • Qui a osé dire Excel ?…
  • Julia ?

Qu'est-ce que Julia ?

Julia est un lan­gage de pro­gram­ma­tion écrit en C par Jeff Bezan­son, Ste­fan Kar­pins­ki, Viral Shah et Alan Edel­man. Il est gra­tuit et open source, ins­pi­ré de la syn­taxe et des fonc­tion­na­li­tés de Python/​Ruby, mais qui vise le même champ d'applications que R : la mani­pu­la­tion de don­nées et les ana­lyses sta­tis­tiques.

Tout en repre­nant des avan­tages de l'un et de l'autre, il est presque aus­si rapide que C lui-même — Python est des dizaines de fois plus lent, R des cen­taines. En effet, Julia est un lan­gage com­pi­lé ce qui lui per­met d'être très rapide. Mais pour gar­der la flexi­bi­li­té du typage dyna­mique, il est com­pi­lé "Just In Time". Par exemple, pour trier une liste (rela­ti­ve­ment à C ; exemple tiré de la page d'accueil) :

C For­tran Julia Python Mat­lab R Javas­cript
quick­sort 1.00 1.65 1.37 69.20 133.46 708.76 4.95

Du lan­gage R, il reprend le type "data frame" pour les don­nées tabu­lées (le package "Data­Frames"), les faci­li­tés à pro­duire des graphes ("Cai­ro", "Wins­ton" ou "Gad­fly"), et tout ce qui a trait aux sta­tis­tiques (comme les "Dis­tri­bu­tions"). De Python/​Ruby, il reprend l'élégance de la syn­taxe, la com­pré­hen­sion de liste, la nota­tion vec­to­rielle, les ité­ra­teurs, etc. Les déve­lop­peurs s'attèlent main­te­nant à repro­duire un maxi­mum de packages sta­tis­tiques, en par­ti­cu­lier pour les GLM et les MCMC.

A vrai dire, les déve­lop­peurs n'entendent pas vrai­ment rem­pla­cer R ou Mat­lab, mais seule­ment créer le lan­gage ultime de l'analyse de don­nées. Quelques cita­tions tra­duites de la page "Pour­quoi nous avons créé Julia" :

Nous vou­lons un lan­gage open-source, avec une licence libre. Nous vou­lons la vitesse de C avec le dyna­misme de Ruby. […] Nous vou­lons un lan­gage pour un usage aus­si géné­ral que Python, aus­si facile pour les stats que R, aus­si natu­rel que Perl pour le par­sing, aus­si puis­sant que Mat­lab pour l'algèbre linéaire, aus­si bon que le shell à chaî­ner des pro­grammes. Quelque chose de simple à apprendre mais qui ren­dra quand même les hackers heu­reux. Nous le vou­lons inter­ac­tif et nous le vou­lons com­pi­lé. […] Mal­gré toute sa puis­sance, nous vou­lons un lan­gage simple et propre.

Voi­ci un exemple de code en Julia (exer­cice : trou­vez à quoi il sert) :

Ajou­tons encore que les déve­lop­peurs sont très actifs et à l'écoute, j'en veux pour preuve que suite à ma requête concer­nant l'incompatibilité avec OSX 10.6, j'ai reçu un mail immé­dia­te­ment me disant que quelqu'un s'y colle… et un ins­tal­leur com­pa­tible deux heures plus tard.

Un exemple d'application en bioinfo

Nous allons créer un MA-plot à par­tir de don­nées RNA-seq : l'expression de gènes dans deux condi­tions. On sup­pose que vous avez réus­si à ins­tal­ler Julia et à le lan­cer en ligne de com­mande (en prin­cipe, en tapant "julia" dans votre console). Ce script a été tes­té sous OSX Lion.

Tout d'abord voi­ci un fichier de test. Mais tout autre fichier conte­nant 2 colonnes de nombres sépa­rées par des tabu­la­tions fera l'affaire. Ensuite on va ins­tal­ler les packages néces­saires : Data­Frames et Wins­ton, comme suit :

Il est pos­sible que l'installeur vous demande de faire d'abord de même avec cer­taines dépen­dances, comme "Home­brew" ou "Cai­ro". Une fois les packages ins­tal­lés, ce n'est bien sûr plus néces­saire par la suite. Par contre il faut les impor­ter au début de vos scripts les uti­li­sant :

On va se ser­vir de la fonc­tion "read­table" de Data­Frames pour lire et par­ser le fichier, en indi­quant que le sépa­ra­teur est une tabu­la­tion et que la pre­mière ligne ne doit pas faire par­tie des don­nées — mais sera uti­li­sée pour nom­mer les colonnes, qui seront alors acces­sibles par ce nom :

Pour voir ce qu'il y a dedans, on visionne juste les pre­mières lignes avec "head" :

qui devrait affi­cher quelque chose comme ça :

Ensuite on va pro­duire un vec­teur de ratios et un vec­teur de moyennes (géo­mé­triques) à par­tir des colonnes :

Notez le "." devant les opé­ra­tions, pour indi­quer que l'opération se fait terme par terme entre les vec­teurs (contrai­re­ment au simple * par exemple qui serait un pro­duit sca­laire).

Fina­le­ment on va ini­tia­li­ser le graphe, y col­ler nos points, et rajou­ter quelques options comme les labels des axes, le titre et l'intervalle cou­vert par cha­cun des axes :

Et voi­là le fabu­leux résul­tat :

maplot

Conclusion

Pour le moment, Julia est encore en déve­lop­pe­ment, même s'il est uti­li­sable — et uti­li­sé — et se rap­proche de sa pre­mière sor­tie offi­cielle. On peut suivre son évo­lu­tion sur son blog et ses forums , ou sim­ple­ment le télé­char­ger et essayer !

Qu'à terme il s'impose dépen­dra du nombre de déve­lop­peurs s'impliquant dans la créa­tion de packages sta­tis­tiques, de la faci­li­té de codage/​débugage et de la docu­men­ta­tion.

Et vous, déjà convain­cus ?

Site offi­ciel : http://​julia​lang​.org/

 Mer­ci à bilou­web et Yoann M. pour leur relec­ture.




Commentaires

19 réponses à “Julia : le successeur de R ?”

  1. Avatar de Yohann Nédélec
    Yohann Nédélec

    Mer­ci pour cet article, je ne connais­sais pas Julia.

    La syn­taxe est très jolie dans ton pre­mier exemple.
    Par contre pour le plot, ça a l'air inuti­le­ment lourd.
    Le top serait que Had­ley Wick­ham s'intéresse au lan­guage et adapte ggplot2.

    1. Avatar de Ahmadou Dicko
      Ahmadou Dicko

      Je pense que beau­coup d'utilisateurs de R sont intri­gués par Julia et cer­tains sont même deve­nu des cores deve­lop­peurs de Julia (John Myles White, Dou­glas Bates, etc.).

      Had­ley Wick­ham pour l'instant ne semble pas trop s'y inté­res­ser et je suis content qu'il conti­nue d'ailleurs à concen­trer ses efforts pour rendre R meilleur (regarde par exemple ce qu'il fait actuel­le­ment avec dplyr — https://​github​.com/​h​a​d​l​e​y​/​d​p​lyr).

      Par contre si tu aimes ggplot2, il existe un package Julia appe­lé Gad­fly qui est lar­ge­ment ins­pi­ré de la gram­maire des gra­phiques de Wil­kin­son et de ggplot2. (https://​github​.com/​d​c​j​o​n​e​s​/​G​a​d​f​l​y​.jl)

      Je crois qu'une rai­son qui fait que beau­coup d'utilisateur de R (dont moi) ont Julia ins­tal­lé sur leur machine, c'est le poten­tiel de Julia. Mais R à trop de packages utiles et par exemple Rcpp est une bonne rai­son de res­ter sur R sur­tout pour ceux qui cherchent des superbes perf avec R.

      1. Oui, j'ai essayé Gad­fly au début, mais je n'arrivais pas à pro­duire le plot dans une fenêtre X11 et je suis pas­sé à Wins­ton pour lequel j'avais trou­vé un exemple. Fina­le­ment je n'ai pas réus­si dans Wins­ton non plus (mais pas essayé long­temps). C'est là qu'on voit que ça dépend beau­coup de la doc et de la capa­ci­té de la librai­rie à répondre intui­ti­ve­ment.
        C'est sûre­ment très facile, quelqu'un sait com­ment ?

  2. Vive­ment que Julia soit aus­si four­ni que R !
    La syn­taxe de R est un vrai patch­work. Il faut tant et tant de com­pli­ca­tions pour avoir de bonnes per­for­mances…
    Vitesse, RAM, mani­pu­la­tion, cal­cul dis­tri­bué : très vite tout demande la connais­sance d'un package spé­ci­fique et rela­ti­ve­ment bas niveau. Au moins les graphes sont beaux (jetez un oeil à Big­Vis, aus­si de Had­ley W !) et il est aisé d'exporter des graphes/​présentations en HTML5/​JS/​CSS (rCharts, sli­di­fy…).

    Je suis très curieux de la suite tant il y a d'efforts sur R et tant le tra­vail sur Julia est de qua­li­té.

    Pour info, les pytho­nistes peuvent pro­fi­ter de Julia depuis Python (et inver­se­ment) sans peine, c'est idéal pour démar­rer 🙂

  3. Avatar de Aurelou

    De la balle ! A quand un tuto Julia pour débu­tant pres­sé ?

  4. Oooh ça a l'air pro­met­teur ! R me filant encore et tou­jours des bou­tons, j'espère que Julia sera une alter­na­tive moins aller­gène ! 🙂

  5. Hâte de voir une ver­sion release.
    Com­bi­ner une syn­taxe natu­relle, des struc­tures de don­nées adap­tées et des per­for­mances proches des lan­gages bas niveau don­ne­rait un nou­veau souffle au déve­lop­pe­ment d'applications en bio infor­ma­tique. Plus besoin de jon­gler en Python, R et C/​C++ ou Java.

    1. Avatar de manjakab
      manjakab

      Bah oui bien sûr, il fau­dra jon­gler entre Python, R, C/​C++, Java, Perl… et Julia en plus !

      1. Seule­ment avec ce qui est déjà fait, tant que c'est pas encore refait.
        Si on jongle c'est parce que
        — C est plus rapide (Julia=C)
        — Python est plus lisible (Julia=Python)
        — R sait tra­vailler avec des tables et faire des stats (Julia=R)
        — Perl est plus … ??
        — Java j'ai jamais com­pris et jamais eu besoin.
        Alors pour­quoi jon­gler ensuite ?

        1. Avatar de manjakab
          manjakab

          "A vrai dire, les déve­lop­peurs n'entendent pas vrai­ment rem­pla­cer R ou Mat­lab", ce qui sug­gère qu'il fau­dra tout de même jon­gler.

          Sinon pour Perl : on peut le citer pour sa sim­pli­ci­té, et pour Java : indis­pen­sable à l'analyse d'image à mon sens, cepen­dant ce n'est pas le sujet.

          1. Ils disent qu'ils n'ont pas comme but de rem­pla­cer tel ou tel lan­gage, mais de creer le lan­gage gene­rique ultime.
            "Each one is a trade-off. We are gree­dy : we want more. […] "
            http://​julia​lang​.org/​b​l​o​g​/​2​0​1​2​/​0​2​/​w​h​y​-​w​e​-​c​r​e​a​t​e​d​-​j​u​l​ia/

  6. Mer­ci pour les exemples. je débarque en R!…
    Je lis qu'il existe Sweave() pour des édi­tion Latex
    Une liai­son JULIA-LATEX pour l'édition ?

  7. […] Logo du lan­gage Julia. Source : http://​julia​lang​.org/ Actuel­le­ment le lan­gage R est incon­tour­nable pour qui veut mani­pu­ler des don­nées en bio­in­for­ma­tique, en par­ti­cu­lier pour l'analyse sta­tis­tique.  […]

  8. […] Julia : le suc­ces­seur de R ? […]

  9. Avatar de Pierre-Louis Tharaux
    Pierre-Louis Tharaux
  10. Très inté­res­sant, mais je doute quand même que Julia prenne rapi­de­ment la place de R. Sur­tout qu'il faut faire atten­tion avec les fai­blesses qui sont sou­vent impu­tées à R. Sou­vent, les pro­blèmes de vitesse sont sim­ple­ment cau­sés par de la mau­vaise pro­gram­ma­tion (voir par exemple : http://​pre​dic​ti​vee​co​lo​gy​.org/​2​0​1​5​/​0​4​/​2​8​/​I​s​-​R​-​f​a​s​t​-​e​n​o​u​g​h​-​0​2​.​h​tml). R a tel­le­ment une fon­da­tion solide d'utilisateurs, de packages, de forums et de tuto­riels sur inter­net qu'il va être dif­fi­cile à délo­ger.

  11. […] Com­pa­rai­son avec R […]

Laisser un commentaire