Le langage Python s’est imposé comme étant la référence en data-science, et plus largement dans le domaine scientifique. La première version date de 1991. C’est en 2006 qu’il passe au niveau supérieur avec le package Numpy qui a fourni un socle solide pour la gestion de données. À partir de là, de nombreux projets comme Pandas, Matplotlib ou Scikit-Learn ont vu le jour et propulsé Python au sommet.
Outre des bibliothèques de référence, Python permet de réaliser beaucoup d’instructions en très peu de lignes de code avec sa syntaxe très lisible et intuitive. L’énorme communauté, qui s’est construite depuis plus de vingt ans, permet à tous les utilisateurs de trouver rapidement des réponses à leurs questions.
Cependant, un des principaux défauts de Python reste sa lenteur. Des efforts ont été pourtant faits pour le rendre plus rapide (en écrivant les packages en Cython par exemple).
Des informaticiens du MIT se sont proposés de développer un langage regroupant tous les points forts des principaux langages de programmation. C’est en 2009 que Julia sous licence MIT est créé avec l’impulsion de Jeff Bezanson, Stefan Karpinski, Viral Shah et Alan Edelman. Dix ans plus tard, ils seront récompensés du prix Wilkinson, l’équivalent de la médaille Fields du logiciel scientifique. Le langage est diffusé en open-source depuis 2012, il est donc encore très jeune.
Pourquoi Julia plutôt que Python pour la data-science ?
Julia est beaucoup plus rapide que Python tout en présentant une syntaxe proche. Plus précisément, la syntaxe de Julia ressemble à un mélange entre du Python et du R, avec des macros prochent de Lisp. Il est donc facile de migrer vers Julia en venant de Python/R. La parallélisation du code en Julia est natif, et la totalité des bibliothèques Julia sont écrite en Julia. Cela signifie que le code est déjà optimisé pour Julia. Mais si vous voulez utiliser votre bibliothèque favorite écrite en Python ou en C, c’est possible : Julia peut appeler du code autre que lui-même.
Aujourd’hui, BlackRock, Aviva ou encore la Federal Reserve Bank de New York utilisent quotidiennement Julia pour l’analyse de séries temporelles ou le calcul de risques. Nous pouvons lire encore d’autres avantages et utilisation de Julia partout sur internet, c’est pourquoi je me suis intéressé à ce langage. N’utilisant pas le polymorphisme possible en Julia pour la data-science par exemple, je ne parlerai ici que des fonctionnalités que j’ai testé jusqu’à maintenant.
Essais de Julia
Dans le cours concernant la modélisation mathématique du risque de crédit, nous avons appris à simuler plusieurs trajectoires possibles d’un processus stochastique. Exercice élémentaire, nous l’utilisons à la fois pour illustrer la similarité des syntaxes entre Python et Julia, mais aussi pour mesurer la différence de vitesse en Python et Julia.
Le code Python correspondant à ce que nous avons réalisé en cours se trouve ici. Nous prenons un cadre très simple, et résolvons un problème d’estimation lui aussi plutôt simple. Nous voyons clairement les avantages de Python : une syntaxe très lisible et peu de lignes de codes pour obtenir un résultat très convenable.
Pour le code Julia qui réalise exactement la même tâche, le notebook se trouve ici. Pour écrire le code, j’ai copié/collé le code Python puis j’ai adapté la syntaxe Julia. J’ai aussi utilisé quelques spécificités de la programmation Julia. La syntaxe est donc elle aussi très lisible et peu de lignes de code permettent d’obtenir les mêmes résultats que Python.
Ce qui change alors c’est le temps d’exécution. Pour le voir, on veut simuler 10 000 trajectoires avec 1000 points pour chacune. C’est relativement peu, mais cela permettra de faire une première comparaison. Attention : ce n’est pas un benchmark en règle, mais nous verrons qu’il n’y a pas besoin pour cet exemple d’aller dans le micro-benchmark.
Le code Python va mettre un peu moins d’une minute (59.75s) pour renvoyer les 10 000 trajectoires. Comme dit précédemment, il s’agit d’un exemple très simple avec, de plus, peu de trajectoires. Donc devoir attendre une minute pour avoir les résultats, c’est déjà trop.
Le code Julia va, pour la même tâche mettre moins d’une demi-seconde (0.25s) pour renvoyer exactement la même chose que Python.
En pratique, ce genre de calcul est plutôt réalisé en C/C++ par les banques. Le désavantage par rapport à Julia est que le code a été plus long à développer que Julia. Ainsi, Julia permet un temps de développement aussi court que Python et des performances proches du C/C++. C’est parfait !
Pourquoi est-ce qu’on n’utilise pas plus Julia alors ?
Pour le comprendre, essayons de regarder un exemple d’application en machine learning. Avec les habitudes acquises avec scikit-learn, je souhaitais utiliser la fonction train_test_split car elle est très efficace. Mais après quelques recherches rapides sur internet, je ne trouve pas ce que je veux. Tant pis, je peux la coder moi-même, je ne perds pas beaucoup de temps puisque le code est très proche de Python; et que ça me permet de me familiariser un peu plus avec Julia.
Mais après l’avoir codé, je me dis que ce n’est pas possible qu’un langage qui prétend pouvoir battre Python n’ait pas ce genre de fonction. En fait, elle existe. Mais on ne tombe pas dessus immédiatement. C’est là une des raisons pour lesquelles Julia ne prend pas encore le pas sur Python.
Julia est encore très jeune et ne possède pas de bibliothèque comme Numpy, Pandas et surtout scikit-learn. Même si plusieurs bibliothèques (MLDataUtils, Flux, Lathe…) commencent à voir le jour et que le traitement de données s’améliore, on ne dispose pas encore de tout ce que les data scientists utilisent sur Python/R.
Ce qui fera que Julia grandira vraiment, c’est que sa communauté se développe autant que celle de Python. S’il est facile de trouver une réponse à sa question en Python, c’est plus compliqué en Julia, rendant la transition de Python vers Julia plus compliquée que prévu initialement.
À titre personnel, j’ai hâte de voir ce que Julia va devenir, surtout si une communauté forte se développe autour de ce langage. Je pense qu’il faut s’intéresser à Julia, s’y essayer pour pouvoir faire la transition le jour où ce sera nécessaire. Julia peut devenir le langage du futur, il ne lui manque que la communauté.
Comments