Découverte :
Julia: le successeur de R ?

julia_logo

Logo du langage Julia.
Source: http://julialang.org/

Actuellement le langage R est incontournable pour qui veut manipuler des données en bioinformatique, en particulier pour l'analyse statistique. Mais un successeur est en passe de s'imposer : Julia, combinant puissance du langage avec les fonctionnalités de R, et comblant les nombreux défauts de ce dernier - mais plus encore ! Voici une présentation de ce tout nouveau langage.

 

À l'origine

La principale raison du succès de R est le système de "packages" qui a permis à chaque labo d'écrire et de rendre facilement récupérable le code qui résout son problème particulier. Aujourd'hui c'est la grande force de R : vous avez un problème ? Quelqu'un l'a déjà résolu, téléchargez le package, écrivez trois lignes et appuyez sur le bouton : c'est fait. Le type "data frame" pour manipuler les tableaux de données est également très apprécié.

Bien sûr il arrive que vous ayez un nouveau problème, ou que vous souhaitiez écrire votre propre programme. Si, à l'usure, on arrive à peu près toujours à ce qu'on veut, on est quand même obligé de remarquer que le langage souffre de nombreux défauts : sa documentation déplorable, sa lenteur, sa syntaxe lourde, la difficulté à débuguer, les fonctions redondantes, etc. Mais énumérons les alternatives :

  • SAS, S+, Matlab, etc. sont payants et donc pas bien adaptés au monde académique.
  • Scipy, librairie de Python, est pas mal mais n'est pas aussi complète et pose souvent des problèmes d'installation.
  • Qui a osé dire Excel ?...
  • Julia ?

Qu'est-ce que Julia ?

Julia est un langage de programmation écrit en C par Jeff Bezanson, Stefan Karpinski, Viral Shah et Alan Edelman. Il est gratuit et open source, inspiré de la syntaxe et des fonctionnalités de Python/Ruby, mais qui vise le même champ d'applications que R : la manipulation de données et les analyses statistiques.

Tout en reprenant des avantages de l'un et de l'autre, il est presque aussi rapide que C lui-même - Python est des dizaines de fois plus lent, R des centaines. En effet, Julia est un langage compilé ce qui lui permet d'être très rapide. Mais pour garder la flexibilité du typage dynamique, il est compilé "Just In Time". Par exemple, pour trier une liste (relativement à C ; exemple tiré de la page d'accueil) :

C Fortran Julia Python Matlab R Javascript
quicksort 1.00 1.65 1.37 69.20 133.46 708.76 4.95

Du langage R, il reprend le type "data frame" pour les données tabulées (le package "DataFrames"), les facilités à produire des graphes ("Cairo", "Winston" ou "Gadfly"), et tout ce qui a trait aux statistiques (comme les "Distributions"). De Python/Ruby, il reprend l'élégance de la syntaxe, la compréhension de liste, la notation vectorielle, les itérateurs, etc. Les développeurs s'attèlent maintenant à reproduire un maximum de packages statistiques, en particulier pour les GLM et les MCMC.

A vrai dire, les développeurs n'entendent pas vraiment remplacer R ou Matlab, mais seulement créer le langage ultime de l'analyse de données. Quelques citations traduites de la page "Pourquoi nous avons créé Julia" :

Nous voulons un langage open-source, avec une licence libre. Nous voulons la vitesse de C avec le dynamisme de Ruby. [...] Nous voulons un langage pour un usage aussi général que Python, aussi facile pour les stats que R, aussi naturel que Perl pour le parsing, aussi puissant que Matlab pour l'algèbre linéaire, aussi bon que le shell à chaîner des programmes. Quelque chose de simple à apprendre mais qui rendra quand même les hackers heureux. Nous le voulons interactif et nous le voulons compilé. [...] Malgré toute sa puissance, nous voulons un langage simple et propre.

Voici un exemple de code en Julia (exercice : trouvez à quoi il sert) :

Ajoutons encore que les développeurs sont très actifs et à l'écoute, j'en veux pour preuve que suite à ma requête concernant l'incompatibilité avec OSX 10.6, j'ai reçu un mail immédiatement me disant que quelqu'un s'y colle... et un installeur compatible deux heures plus tard.

Un exemple d'application en bioinfo

Nous allons créer un MA-plot à partir de données RNA-seq: l'expression de gènes dans deux conditions. On suppose que vous avez réussi à installer Julia et à le lancer en ligne de commande (en principe, en tapant "julia" dans votre console). Ce script a été testé sous OSX Lion.

Tout d'abord voici un fichier de test. Mais tout autre fichier contenant 2 colonnes de nombres séparées par des tabulations fera l'affaire. Ensuite on va installer les packages nécessaires: DataFrames et Winston, comme suit :

Il est possible que l'installeur vous demande de faire d'abord de même avec certaines dépendances, comme "Homebrew" ou "Cairo". Une fois les packages installés, ce n'est bien sûr plus nécessaire par la suite. Par contre il faut les importer au début de vos scripts les utilisant :

On va se servir de la fonction "readtable" de DataFrames pour lire et parser le fichier, en indiquant que le séparateur est une tabulation et que la première ligne ne doit pas faire partie des données - mais sera utilisée pour nommer les colonnes, qui seront alors accessibles par ce nom :

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

qui devrait afficher quelque chose comme ça :

Ensuite on va produire un vecteur de ratios et un vecteur de moyennes (géométriques) à partir des colonnes :

Notez le "." devant les opérations, pour indiquer que l'opération se fait terme par terme entre les vecteurs (contrairement au simple * par exemple qui serait un produit scalaire).

Finalement on va initialiser le graphe, y coller nos points, et rajouter quelques options comme les labels des axes, le titre et l'intervalle couvert par chacun des axes:

Et voilà le fabuleux résultat :

maplot

Conclusion

Pour le moment, Julia est encore en développement, même s'il est utilisable - et utilisé - et se rapproche de sa première sortie officielle. On peut suivre son évolution sur son blog et ses forums , ou simplement le télécharger et essayer !

Qu'à terme il s'impose dépendra du nombre de développeurs s'impliquant dans la création de packages statistiques, de la facilité de codage/débugage et de la documentation.

Et vous, déjà convaincus ?

Site officiel: http://julialang.org/

 Merci à bilouweb et Yoann M. pour leur relecture.

  • À propos de
  • Bioinformaticien @ CHUV / UNIL
    Diplômé EPFL en mathématiques appliquées.
    Développement software, analyse de données génomiques.

19 commentaires sur “Julia: le successeur de R ?

  1. Merci pour cet article, je ne connaissais pas Julia.

    La syntaxe est très jolie dans ton premier exemple.
    Par contre pour le plot, ça a l\'air inutilement lourd.
    Le top serait que Hadley Wickham s\'intéresse au language et adapte ggplot2.

    • Je pense que beaucoup d\'utilisateurs de R sont intrigués par Julia et certains sont même devenu des cores developpeurs de Julia (John Myles White, Douglas Bates, etc.).

      Hadley Wickham pour l\'instant ne semble pas trop s\'y intéresser et je suis content qu\'il continue d\'ailleurs à concentrer ses efforts pour rendre R meilleur (regarde par exemple ce qu\'il fait actuellement avec dplyr - https://github.com/hadley/dplyr).

      Par contre si tu aimes ggplot2, il existe un package Julia appelé Gadfly qui est largement inspiré de la grammaire des graphiques de Wilkinson et de ggplot2. (https://github.com/dcjones/Gadfly.jl)

      Je crois qu\'une raison qui fait que beaucoup d\'utilisateur de R (dont moi) ont Julia installé sur leur machine, c\'est le potentiel de Julia. Mais R à trop de packages utiles et par exemple Rcpp est une bonne raison de rester sur R surtout pour ceux qui cherchent des superbes perf avec R.

      • Oui, j\'ai essayé Gadfly au début, mais je n\'arrivais pas à produire le plot dans une fenêtre X11 et je suis passé à Winston pour lequel j\'avais trouvé un exemple. Finalement je n\'ai pas réussi dans Winston non plus (mais pas essayé longtemps). C\'est là qu\'on voit que ça dépend beaucoup de la doc et de la capacité de la librairie à répondre intuitivement.
        C\'est sûrement très facile, quelqu\'un sait comment?

  2. Vivement que Julia soit aussi fourni que R !
    La syntaxe de R est un vrai patchwork. Il faut tant et tant de complications pour avoir de bonnes performances...
    Vitesse, RAM, manipulation, calcul distribué : très vite tout demande la connaissance d\'un package spécifique et relativement bas niveau. Au moins les graphes sont beaux (jetez un oeil à BigVis, aussi de Hadley W !) et il est aisé d\'exporter des graphes/présentations en HTML5/JS/CSS (rCharts, slidify...).

    Je suis très curieux de la suite tant il y a d\'efforts sur R et tant le travail sur Julia est de qualité.

    Pour info, les pythonistes peuvent profiter de Julia depuis Python (et inversement) sans peine, c\'est idéal pour démarrer 🙂

  3. […] le successeur de R ?” http://bioinfo-fr.net/julia… via @NerosTie sur le blog de […]

  4. De la balle ! A quand un tuto Julia pour débutant pressé ?

  5. Oooh ça a l\'air prometteur! R me filant encore et toujours des boutons, j\'espère que Julia sera une alternative moins allergène! 🙂

  6. Hâte de voir une version release.
    Combiner une syntaxe naturelle, des structures de données adaptées et des performances proches des langages bas niveau donnerait un nouveau souffle au développement d\'applications en bio informatique. Plus besoin de jongler en Python, R et C/C++ ou Java.

    • Bah oui bien sûr, il faudra jongler entre Python, R, C/C++, Java, Perl... et Julia en plus !

      • Seulement 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 travailler avec des tables et faire des stats (Julia=R)
        - Perl est plus ... ??
        - Java j\'ai jamais compris et jamais eu besoin.
        Alors pourquoi jongler ensuite?

        • \"A vrai dire, les développeurs n\'entendent pas vraiment remplacer R ou Matlab\", ce qui suggère qu\'il faudra tout de même jongler.

          Sinon pour Perl : on peut le citer pour sa simplicité, et pour Java : indispensable à l\'analyse d\'image à mon sens, cependant ce n\'est pas le sujet.

          • Ils disent qu\'ils n\'ont pas comme but de remplacer tel ou tel langage, mais de creer le langage generique ultime.
            \"Each one is a trade-off. We are greedy: we want more. [...] \"
            http://julialang.org/blog/2012/02/why-we-created-julia/

  7. Merci pour les exemples. je débarque en R!...
    Je lis qu\'il existe Sweave() pour des édition Latex
    Une liaison JULIA-LATEX pour l\'édition?

    • On trouve ça dans le forum :
      https://groups.google.com/forum/?fromgroups=#!searchin/julia-users/latex/julia-users/ggJo1ZaqicI/BPaBgnp9nXIJ

      Sinon peut-être avec IJulia.

  8. […] Logo du langage Julia. Source: http://julialang.org/ Actuellement le langage R est incontournable pour qui veut manipuler des données en bioinformatique, en particulier pour l'analyse statistique.  […]

  9. […] Julia: le successeur de R ? […]

  10. Merci de cet article. Connaissez vous Goby? http://campagnelab.org/software/goby/
    Extra

  11. Très intéressant, mais je doute quand même que Julia prenne rapidement la place de R. Surtout qu\'il faut faire attention avec les faiblesses qui sont souvent imputées à R. Souvent, les problèmes de vitesse sont simplement causés par de la mauvaise programmation (voir par exemple: http://predictiveecology.org/2015/04/28/Is-R-fast-enough-02.html). R a tellement une fondation solide d\'utilisateurs, de packages, de forums et de tutoriels sur internet qu\'il va être difficile à déloger.

  12. […] Comparaison avec R […]

Laisser un commentaire