Accueil / Blog / Métier / 2017 / Présentation de l'écosystème Python scientifique

Présentation de l'écosystème Python scientifique

Par Gaël Pegliasco — publié 10/11/2016, édité le 21/04/2017
Au fil des années Python est devenu un outil du quotidien pour les ingénieurs et chercheurs de toutes les disciplines scientifiques. Grâce a de très nombreuses librairies d'une grande qualité il permet aujourd'hui d'égaler, voire de surpasser des solutions propriétaires les plus performantes du marché. Il est devenu un des outils incontournables des Data Scientists ! Nous vous proposons dans cet article de découvrir la vaste étendue de cet écosystème…
Présentation de l'écosystème Python scientifique

Sommaire

  1. Introduction
  2. Pourquoi utiliser Python pour le calcul scientifique ?
  3. Les distributions Python pour les « data scientists »
  4. Optimiser votre environnement
  5. La Scipy Stack
  6. Quelques librairies populaires
  7. Les outils de développement
  8. Conclusion

Introduction

J'ai découvert l'écosystème scientifique de Python il y a près de 4 ans maintenant, avec la « Scipy stack » dans un projet de simulation statistiques ayant de forts besoins en parallélisation.

La prise en main de ces librairies n'a pas été des plus simples, l'environnement étant très riche et très varié, il était difficile d'y voir clair et de trouver les bons tutoriels présentant les concepts de base au novice que j'étais. Et que je reste encore.

Avec la pratique j'ai commencé à être plus à l'aise, mais plus je creusais les sujets plus je découvrais de nouvelles fonctionnalités et librairies, riches, variées, souvent concurrentes, généralement de grande qualité. Il était ardu de savoir lesquelles choisir selon les problèmes que je devais traiter.

Cet ensemble de librairies scientifiques ressemblait à une galaxie qui se voulait interminable et dont les contours n'arrivaient jamais à se dessiner.

Aujourd'hui je commence juste à émerger, et je souhaite vous offrir un échantillon de cette « big picture » afin de vous aider à y voir plus clair pour démarrer vos projets du bon pied.

Pourquoi utiliser Python pour le calcul scientifique ?

Python est devenu une alternative viable aux solutions propriétaires leader du marché, comme MatLab, Maple, Mathematica, Statistica, SAS...

Il offre plusieurs avantages sur ces outils :

  • Il calcule aussi vite si ce n'est bien plus
    La plupart des librairies scientifiques de Python peuvent être compilées pour tirer partie des architectures vectorielles et multicoeurs/multithread des processeurs modernes.
    Elles sont généralement implémentées en C afin d'offrir les performances les plus poussées.
    Enfin, Python dispose de nombreuses librairies de calcul distribué, permettant de répartir la charge de vos applications sur de nombreuses machines.
    Il fonctionne d'ailleurs très bien sur le top 500 des super computers

  • Il couvre probablement tous les domaines scientifiques
    Python ne se limite pas aux mathématiques et statistiques, il dispose de nombreuses librairies permettant d'aborder de multiples domaines comme :

    • Le traitement du signal

    • La mécanique des fluides

    • La chimie

    • L'atome

    • La génétique

    • L'apprentissage automatique

    • Le langage naturel

    • La cartographie

    • ...

  • Il ne se limite pas à de la pure simulation et peut être déployé en production

  • Il est facile, même pour les non informaticiens
    Le langage a été subventionné par le CNRI et la DARPA pour enseigner la programmation dans les écoles dans le cadre du projet « CP4E Computer Programming for Everybody » initié en 1999.
    https://www.python.org/doc/essays/cp4e/

  • Il est gratuit et open source
    Il permet de grandes économies comparé à ses concurrents propriétaires et vous pouvez le personnaliser à volonté.

  • Il est en grande partie développé par la communauté scientifique elle-même
    Plusieurs scientifiques comme Gaël Varoquaux disposant d'une double casquette scientifique/informatique figurent parmi les contributeurs du langage et de ces librairies. Cela leur permet de développer des outils particulièrement adaptés à leurs besoins.

Fort de ces qualités Python a pu profiter de la montée en puissance du bigdata notamment stimulé ces dernières années par la baisse drastique du coût des architectures parallèles .

logo-pydata.png

Les conférences PyData qui se déroulent toute l'année sur tous les hémisphères du globe sont un exemple très marquant de la dynamique de cet écosystème.

Peu de projets open source peuvent s'enorgueillir de proposer autant de conférences chaque année !

Il semble indéniable que Python a su gagner ses lettres de noblesse auprès des plus grands cerveaux de notre planète !

Les distributions Python pour les « data scientists »

Installer Python c'est simple.
Mais installer un environnement scientifique homogène et performant devient laborieux :

  • Il faut commencer par isoler son environnement de travail du système

  • En effet, les librairies fournies en général par les systèmes Linux sont difficilement exploitables telles quelles :

    • Elles sont généralement trop anciennes

    • Peu ou pas optimisées

    • Elles n'offrent qu'une partie des librairies disponibles de cette immense communauté

  • Il existe une multitude de librairies et gérer leurs dépendances peut s'avérer difficile

  • Il faut les compiler spécifiquement pour votre système si vous souhaitez exploiter toute la puissance de calcul des processeurs modernes

Il est donc recommandé d'utiliser des distributions Python qui proposent un packaging cohérent de toutes ces librairies et offrent un minimum d'optimisations pour vos machines.

Parmi les plus répandues on trouve :

Anaconda

logo_anaconda.png

Anaconda est peut-être la distribution la plus répandue en raison de la diversité des plateformes qu'elle supporte et d'une plus grande ouverture des outils sur lesquels elle se base.

Elle propose une distribution communautaire et partiellement optimisée ainsi qu'une version payante mieux optimisée offrant de nombreux outils complémentaires.

Elle est « cross-platform » et s'appuie sur l'outil de virtualisation d'environnement « conda »

Elle inclue plus de 100 librairies pré-installées et en propose 600 de plus en téléchargement. Enfin, elle est compatible avec « pip ».

C'est la distribution que nous préconisons pour démarrer chez Makina.

WinPython

winpython_logo.png

WinPython est une distribution Python qui est entièrement libre mais spécifique à Windows.

Elle intègre notamment :

  • Les outils IPython & Jupyter

  • L'IDE Spyder,

  • La suite Scipy

  • Qt

Et de nombreuses autres librairies

Extrêmement simple à installer, elle présente en outre l'intérêt d'être entièrement portable (notamment sur un média USB amovible).

Python Anywhere

PythonAnywhere_logo.png

Python anywhere offre un environnement Python hébergé en ligne et donc accessible de toute part.

Il propose aussi d'héberger vos services web.

Python (x,y)
PythonAnywhere_logo.png

Python (x,y) offre un environnement de développement libre pour le calcul scientifique, basé sur Python Qt et Spyder

La distribution est spécifique Windows.

Enthought Canopy

canopy-logo.png

Enthought Canopy propose une distribution Python et un environnement d'analyse intégré (un peu comme MatLab).

Elle existe en version gratuite et une version propriétaire proposant plus de librairies et d'outils d'analyses.

La version gratuite inclue plus de 200 librairies contre plus de 450 dans la version payante.

 

Optimiser votre environnement

Guepard, Animal terrestre le plus rapide, source wikipédia

Se baser sur une distribution existante facilite grandement le travail, mais si vous avez besoin d'exploiter toute la puissance de calcul de votre machine, il convient :

  • D'optimiser les librairies utilisées en les compilant spécifiquement pour votre machine

  • De compiler les librairies Numpy/Scipy à l'aide de librairies d'analyse numérique performantes sachant exploiter les instructions vectorielles des processeurs modernes, parmi :

Les gains obtenus peuvent aller de x10 à x100 comparé à des solutions ne s'appuyant pas sur ces librairies, selon les processeurs et les algorithmes mis en œuvre.
Enfin, compiler Numpy et Scipy avec les bonnes librairies de calcul vectoriel représente un excellent début, mais chaque projet dispose de ses propres optimisations.

L'installation de Pandas, la célèbre librairie d'analyse de données se base notamment sur d'autres librairies dont :

Il en est de même pour de nombreuses autres solutions.
Il convient de lire la documentation de chacune des librairies dont vous avez un usage intensif pour vraiment doper votre système.

La Scipy Stack

La majorité des librairies scientifiques s'appuient sur ce que l'on nomme la Scipy Stack, regroupant les librairies de base qui forment le socle sur lequel sont développées toutes les autres :

  • Numpy
    Numpy est une librairie d'Algèbre linéaire permettant de manipuler des tableaux à N dimensions.
    Principalement utilisée pour manipuler des nombres réels, elle peut traiter tout type de données, même les types natifs de Python.
    Elle se présente sous la forme d'un package majoritairement écrit en langage C, alliant ainsi toute la rapidité de ce langage avec la souplesse de la syntaxe Python. Elle apporte une syntaxe simple et puissante qui est indéniablement à l'origine de son adoption massive

  • Scipy
    Scipy propose un ensemble de librairies mathématiques regroupées par disciplines (analyse numérique, algèbre linéaire, statistiques, traitement du signal, traitement d'images, …)
    Elle s'appuie sur Numpy et offre ainsi des outils spécialisés dans plusieurs disciplines des mathématiques

  • MatplotLib
    MatplotLib est une librairie de tracé de courbes en 2D et 3D
    Elle a une syntaxe largement inspirée de celle des librairies MatLab.
    C'est une des plus anciennes librairies de visualisation pour Python.
    Elle saura dessiner quasiment tous les types de graphiques que vous pourriez imaginer. Les graphiques peuvent être interactifs incluant des widgets et animés.

    Un autre de ses atouts est sa compatibilité avec de nombreuses librairies graphiques comme QT, GTK, TK, Wx, etc. Elle peut ainsi s'intégrer dans de multiples applications clientes.

  • Pandas
    Pandas est une librairie d'analyse de données tout simplement prodigieuse.
    Tout comme Numpy elle permet de manipuler des tableaux de données avec une aisance sans précédent.  Là ou elle se diffère de Numpy c'est qu'elle sait gérer des tableaux dont les colonnes ou les lignes sont de types différents (dates, nombres, texte, …)
    Elle propose de nombreuses fonctionnalités de recherche, filtre, agrégation, fusion qui en font un outil hors du commun.
    On peut l'imaginer comme une librairie fournissant toutes les fonctions d'un tableur Excel/LibreOffice mais en bien plus rapide, souvent plus facile à utiliser et sachant manipuler des millions d'enregistrements.
    Pandas offre aussi de nombreuses fonctions statistiques qui en feront votre compagnon quotidien dans vos tâches d'analyse de données.

    Enfin, la librairie sait traiter tout type de formats, dont CVS, XLS, HDF5, SQL, … Elle sait aussi aller chercher toute seule les cours de la bourse en ligne ainsi qu'exploiter d'autres services web !

  • Sympy
    Sympy est une librairie de mathématiques symboliques.
    L'ayant peu pratiquée, je ne suis pas très bien armé pour décrire ses qualités.
    En quelque mots la librairie vous permet de simplifier/résoudre des équations mathématiques de manière symbolique.
    Par exemple, vous lui demander de calculer la dérivée de f(x) = x**2, elle vous répondra « 2*x »

Si vous êtes curieux de retracer la naissance de cet écosystème je vous propose ce petit article qui en résume la petite histoire…

Quelques librairies populaires

La section ci-dessous présente quelques librairies venant compléter la scipy stack, s'adressant à divers domaines scientifiques.
Les librairies présentées ne sont pas forcément les plus populaires ou efficaces de leurs domaines.

Le but de cette section est de vous fournir un aperçu de tout ce que vous allez pouvoir toucher du doigt avec Python.

Attention, vous partez dans la galaxie de toutes les sciences :

  • ASE, simulation atomique 

  • Astropy, outils pour l'astronomie

  • BioPython, biologie moléculaire 

  • Blaze, analyse de données pour le big data 

  • Celery, calcul distribué utilisant des services de file d'attente comme RabbitMQ

  • Chalmers, monitoring et gestion de processus 

  • Cubes, serveur OLAP d'analyse de données multidimensionnelles

  • Dask est une librairie mixant le meilleur de Numpy/Pandas et Celery/Airflow/Luigi
    Elle permet de gérer des collections de données "big data" parallélisables et s'appuyant sur un système d'ordonnancement de tâches.
  • GraphTools, analyse statistique de graphes 

  • Gensim, modélisation sémantique 

  • GeoPandas, manipulation de données spatiales 

  • Keras, réseaux de neurones 

  • Holoview, analyse et visualisation de données 

  • Luigi, ordonnancement et supervision de tâches 

  • NetworkX, algorithmes de graphes et réseaux 

  • NTLK, analyse de la langue naturelle 

  • PsychoPy, neuroscience, psychologie et psychophysique 

  • Scikit-Image, traitement d'images 

  • Scikit-Learn, TensorFlow, Torch, algorithmes d'apprentissage 

  • Scoop, programmation parallèle 

  • Simpy, simulation de processus événementiels

  • Statsmodels, analyse de modèles statistiques 

  • SunPy, physique solaire 

  • TomoPy, tomographie et reconstitution d'images

  • Xarray, est une librairie reprenant la magie de Pandas mais pour des tableaux à N-dimensions.
    Tout comme Dask et Pandas elle est portée par le "consortium" PyData et semble très prometteuse !

Il en existe de très nombreuses autres.
Par exemple les domaines de la visualisation de données proposent plus d'une dizaine de librairies différentes spécialisées pour le web, la 3D, le big data, …
Il en est de même pour les librairies d'apprentissage automatique (machine learning) elles poussent comme des petits pains !

Les liens proposés dans la section présentant les différentes distributions scientifiques vous permettront de découvrir bien d'autres domaines et outils couverts par Python…

Mais pour vous aider à démarrer, voici quelques points de départs potentiels:

Les outils de développement

Autant il existe de très nombreuses librairies et distributions Python pour les scientifiques, autant les outils de développement sont moins nombreux.

Parmi les plus populaires, on notera :

  • IPython,
    L'incontournable interpréteur en ligne de commande parfaitement bien intégré avec la SciPy Stack.
    Il propose des fonctionnalités avancées comme la coloration syntaxique, l'autocomplétion, la possibilité d'intégrer des commandes shell, des commandes « magiques » ou encore un framework de calcul parallèle

  • Les notebooks Jupyter, permettant l'analyse de données en mode web
    C'est très original, au début le concept peut sembler surprenant, mais dans la pratique il se révèle être un formidable outil d'échange, d'analyse et de partage de données
    Vous apprécierez certainement les Scipy Lecture Notes, ces nombreux exemples ou encore les NBViewer
    Je vous invite vivement à l'essayer et au moins à consulter un des exemples ci-dessus.

  • L'IDE Spyder
    Spyder est un Environnement de Développement Intégré qui permet notamment de tester directement dans une console le code saisi dans l'éditeur. Il mixe ainsi l'aspect scripting et interactif. Il est très bien intégré avec la SciPyStack mais peut-être moins utilisé que d'autres éditeurs.

  • L'IDE PyCharm
    Cet autre IDE de développement Python propose la consultation native des notebooks (assez vilaine) et la visualisation des données Pandas/Numpy !

  • Les notebooks Zeppelin
    Dans la même lignée que les notebooks Jupyter, la fondation Apache propose un autre outil similaire et bien intégré avec Spark.
    L'outil semble encore jeune mais très prometteur, plus riche fonctionnellement que Jupyter, il permet notamment de gérer plusieurs comptes utilisateur et d'utiliser différents langages dans une même page.
    Il mérite d'être testé.
  • Superset
    Superset est une plateforme d’exploration de données développée par AirBnB.
    Ecrite en Python, elle s’utilise au travers d’une application web et permet de générer des tableaux de bords et diverses analyses de données pouvant être interactives

Quelques autres outils, pas forcément spécifiques à Python peuvent être cités :

  • SageMath
    System for Algebra and Geometry Experimentation
    Sage a pour objectif de fournir une alternative viable et open source à Magma, Maple, Mathematica et Matlab.
    « Il permet de faire des mathématiques générales et avancées, pures et appliquées. Il couvre une vaste gamme de mathématiques, dont l'algèbre, l'analyse, la théorie des nombres, la cryptographie, l'analyse numérique, l'algèbre commutative, la théorie des groupes, la combinatoire, la théorie des graphes, l'algèbre linéaire formelle, etc ... »
    Sage est écrit en Python

  • GNU Octave,
    Il s'agit d'un environnement de calcul numérique open source, proposant un langage assez proche de celui de MatLab. Il est moins complet et léché que ce dernier et touche moins de disciplines. Cependant il offre tous les avantages de l'open source et reste efficace dans les domaines qu'il aborde.

  • SciLab
    SciLab est un autre logiciel de calcul numérique dans la lignée de MatLab ou GNU octave touchant de nombreux domaines scientifiques (statistiques, simulation numérique, optimisation, traitement du signal, visualisation…)
    Il offre l'avantage d'exporter ses librairies en Python et vers d'autres langages

  • Les logiciels Code Aster et Salome Meca
    Ces 2 logiciels spécialisés dans la simulation numérique et l'analyse thermodynamique et de structures sont aujourd'hui Open Source et sont principalement développés par EDF.
    Ils peuvent s'interfacer avec Python et offrent des fonctionnalités particulièrement abouties et professionnelles.

  • MayaviMayavi 3D
    Mayavi est un outil de visualisation 3D, écrit en Python, très adapté pour la visualisation de surfaces 3D.
    Il propose une api Python pour les objets VTK.
  • Gephi
    Gephi est un logiciel de visualisation et d’exploration de graphes/réseaux
  • ParaView
    ParaView est une application d’analyse et de visualisation de données. Elle fonctionne sur de multiples plateforme, est taillée pour le big data, fonctionne sur des supercomputers et sait traiter des données de l’ordre du Peta Octets(10**15)
  • VisIt
    Tout comme ParaView, VisIt  est un outil de visualisation et d’analyse de données pouvant fonctionner sur des desktops ayant moins de 10 processeurs ou sur des supercomputers ayant plus de 10**5 processeurs
  • Salstat statistiques
    Salstat est un logiciel open source d'analyse de données facilitant l'analyse de vos statistiques et se voulant particulièrement convivial et simple d'utilisation afin d'axer votre temps sur l'analyse de vos données plutôt que la manipulation du logiciel.

Et pour finir une petite carte Xmind qui reste fort utile, même si elle date un peu.

Conclusion

Cette présentation est loin d'être exhaustive.

L'on pourrait dire encore beaucoup de choses ou encore fournir des exemples de codes démonstratifs. Nous gardons cela pour d'autres articles.
Nous avons surtout voulu, au travers de ces quelques pages, vous donner un aperçu de ce que Python peut offrir aux « Data Scientists » et ingénieurs de toutes disciplines.

Ses qualités intrinsèques sont très certainement la raison de ce succès : simplicité, facilité, concision, et, contrairement à sa réputation, performance !

Il semble avoir de grandes années devant lui.

La science ne cesse de progresser à pas de géant, la montée en puissance de l'intelligence artificielle et du BigData n'y sont pas étrangers.

"Google’s self-driving cars and robots get a lot of press, but the company’s real future is in machine learning, the technology that enables computers to get smarter and more personal."
- Eric Schmidt (Google Chairman)

Python a su s'installer dans cet univers très technique et pointu. Il y tient aujourd'hui une place de premier choix.

Vous pouvez vous y lancer à corps perdu, ce ne sera pas un vain investissement.

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Récupérer des données Hadoop avec Python 02/05/2017

Accéder à des données situées sur un cluster Hadoop peut se faire de différentes manières en ...

Les curseurs PostgreSQL 11/06/2015

Découvrons comment utiliser les curseurs PostgreSQL pour effectuer des requêtes renvoyant de ...

Formation Python avancé du 12 au 16 juin à Paris Formation Python avancé du 12 au 16 juin à Paris 12/04/2017

Pour les développeurs qui veulent approfondir leur connaissance du langage Python : de la ...

Python : Bien configurer son environnement de développement Python : Bien configurer son environnement de développement 07/12/2015

Comment utiliser les bonnes pratiques de développement Python.

Monkey-patching a Python instance method 09/11/2016

Dynamically adding or overwriting an instance method in Python is rarely needed, but it's a good ...