Publié par
Il y a 4 années · 9 minutes · Back

Explorer vos données avec le Notebook d’IPython

Un algorithme de machine learning peut à terme sortir des résultats paraissant magiques. Mais la première étape sera toujours d’explorer les données. Sinon, on risque de tomber dans l’approche inverse : "garbage in, garbage out". Pour faciliter cette exploration, on souhaite posséder un outil qui permette de projeter, agréger, visualiser les données mais également de partager ses découvertes. Sur ce point, le Notebook d’IPython est un outil à connaître. C’est un croisement entre un éditeur interactif (repl) et un EDI web mais il s’agit avant tout d’une plate-forme à ne pas sous-estimer.

Note : cet article vise un public ne connaissant pas Python.

Python, pourquoi ?

Python est un langage multi-plate-forme, créé en 1990 (avant Java) par Guido van Rossum, désormais désigné comme "bienveillant dictateur à vie".

Tout comme java, la mémoire est gérée de façon automatique par un "ramasse-miette" (garbage-collector). Cependant, en comparaison à Java, il s’agirait à priori d’un langage peu performant car dynamique et interprété. Il serait d’autant plus lent que son implémentation la plus utilisée, CPython, possède un "Global Interpreter Lock" (GIL). C’est à dire un verrou global empêchant l’exécution simultanée de bytecode python par plusieurs threads. Autrement dit, l’implémentation est peu favorable à un parallélisme léger, sans utiliser de processus distincts.

Mais ces deux limites ne sont en pratique pas de véritables contraintes. Python possède en effet une grande communauté scientifique et ces problèmes sont généralement contournés en faisant appel à des librairies écrites dans des langages plus bas niveaux, par exemple C, C++ ou Fortran. Numpy est une librairie connue, entre autres, pour permettre de manipuler directement depuis Python des tableaux multidimensionnels implémentés en C et sert de base à de nombreuses autres libraires.

La forte présence d’une communauté scientifique est ce qui nous intéresse ici. De nombreuses librairies existent pour manipuler les données (numpy, panda), construire des modèles (scipy, scikit-learn) mais également visualiser les résultats (matplotlib). Et il ne s’agit bien entendu que des librairies les plus connues, cet article ne peut prétendre construire un panorama exhaustif.

Python et vous

En 2008, Python 3 est sortie, une version majeure avec des changements non rétrocompatibles. A l’heure actuelle, les librairies les plus connues supportent cette version mais ce n’est pas forcement le cas de toutes. Certains contextes peuvent donc nécessiter l’utilisation d’une version 2.7. C’est un point à considérer pendant l’installation.

Si vous souhaitez utiliser Python, le plus simple est de partir sur une distribution. La majorité des distributions est gratuite, bien qu’elles peuvent proposer des versions professionnelles payantes. Si vous ne comptez pas quitter le monde de Windows, vous pouvez tenter WinPython. Si vous souhaitez naviguez entre Windows, Linux et MacOS, Anaconda est à essayer. Et enfin, il faut mentionner Enthought Canopy, dont l’entreprise est connue pour leur implication dans la communauté, même si cette distribution ne semble pas supporter Python 3.

Et IPython dans tout cela?

Python est livré avec un shell interactif, ce qui est peu surprenant pour un langage dynamique et interprété.

$ python
Python 3.3.2 |Anaconda 1.8.0 (x86_64)| (default, Aug  5 2013, 15:07:24) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 6 * 9
54

IPython a pour mission de fournir une architecture pour améliorer l’interactivité. Cela passe notamment par un shell amélioré. Celui-ci propose de l’auto-complétion basée sur de l’introspection, des commandes magiques permettant d’unifier l’utilisation de Python avec le shell de votre OS, mais aussi la possibilité de partager facilement votre code et vos graphiques. Le but de cet article est de vous présenter Notebook, l’interface web permettant d’utiliser IPython, et de vous montrer son intérêt dans le cadre de l’exploration de données.

Si vous avez installé une distribution alors il y a de fortes chances qu’IPython soit déjà présent dans votre système.

$ ipython
Python 3.3.2 |Anaconda 1.8.0 (x86_64)| (default, Aug  5 2013, 15:07:24) 
Type "copyright", "credits" or "license" for more information.
IPython 1.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
In [1]: 6*9
Out[1]: 54

A première vue, c’est très similaire au shell Python. Mais on peut déjà voir une des commandes magiques (préfixées par % ou %%) : %quickref, qu’il est possible de récupérer des informations au sujet d’une variable existante et que l’utilisation de la tabulation permet d’afficher les possibilités.

In [2]: tuto = ['Hello','World']

In [3]: tuto?
Type:       list
String Form:['Hello', 'World']
Length:     2
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items

In [4]: tuto.(tabulation)
tuto.append   tuto.extend   tuto.insert   tuto.remove   tuto.sort
tuto.count    tuto.index    tuto.pop      tuto.reverse

Lancer Notebook se fait en une seule commande.

$ ipython notebook
...
2014-01-21 07:26:39.065 [NotebookApp] Using existing profile dir: '/Users/bdechoux/.ipython/profile_default'
2014-01-21 07:26:39.069 [NotebookApp] Using MathJax from CDN: http://cdn.mathjax.org/mathjax/latest/MathJax.js
2014-01-21 07:26:39.081 [NotebookApp] Serving notebooks from local directory: /Users/bdechoux/notebook
2014-01-21 07:26:39.081 [NotebookApp] The IPython Notebook is running at: http://127.0.0.1:8888/
2014-01-21 07:26:39.081 [NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

Tout comme les shells classiques, il existe un fichier de configuration (profile_default) qui est lu durant l’initialisation. Le répertoire à partir duquel est lancé le serveur, est considéré comme le répertoire courant. Et enfin Notebook écoute uniquement en local sur le port 8888 au démarrage.

Une simple analyse

Afin de démontrer l’utilité de Notebook, je vous propose de suivre une courte analyse. Comme l’objectif final est de partager celle-ci, vous pouvez consultez directement la page web de l’analyse. Le détail pour obtenir cette page html est dans la suite de l’article.

Et le partage?

Par défaut, il n’existe aucune sécurité, si ce n’est que le serveur n’écoute qu’en local sur un port précis. Il est cependant possible de changer l’IP de binding et ainsi de créer un serveur public. Il est également possible de sécuriser ce serveur en utilisant SSL et un mot de passe dont le hash sera stocké dans un fichier de configuration. Tout est cela est bien documenté.

Néanmoins, il faut avoir conscience des fonctionnalités offertes par ce serveur. Il s’agit, ni plus ni moins, d’un shell contrôlable à distance. L’utilisateur utilisant l’application web possède les mêmes droits que l’utilisateur ayant lancé le processus. Si la configuration ne permet de préciser qu’un seul mot de passe, c’est bien qu’actuellement Notebook n’est pas conçu pour être accédé par plusieurs utilisateurs. Il n’y a pas non plus d’accès en lecture seule, à un détail près.

En effet, il est possible d’exporter les feuilles de travail (appelées comme l’application ‘notebook’) dans différents formats. Ces sessions de travail sont en fait par défaut stockées dans un fichier json *.ipynb au sein du répertoire courant. Ce fichier contient tout ce qui est nécessaire pour ré-afficher la feuille sans relancer les traitements : le type de chaque cellule, leur contenu et les résultats obtenus. Les images matplotlib inline sont stockées directement en binaire. A partir de ce fichier, il est possible notamment de générer une version pure html.

$ ipython nbconvert mynotebook.ipynb
[NbConvertApp] Using existing profile dir: u'/Users/bdechoux/.ipython/profile_default'
[NbConvertApp] Converting notebook mynotebook.ipynb to html
[NbConvertApp] Support files will be in mynotebook_files/
[NbConvertApp] Loaded template html_full.tpl
[NbConvertApp] Writing 263586 bytes to mynotebook.html

Il s’agit désormais d’une simple page web qui peut être ouverte depuis n’importe quel navigateur en local ou même servie par un serveur web en tant que ressource statique.

A noter que dans la version 2.0 d’IPython (à venir), les exports pourront être faits directement depuis l’interface web sans avoir à se connecter au shell.

Si vous voulez vous simplifier la vie dès à présent, il existe cependant une solution : Notebook viewer. Il s’agit d’une application web capable de prendre en paramètre, dans l’url, l’adresse d’un document notebook et le transformer à la volée en une page html. Il existe bien sur un cache pour optimiser un peu les performances. Une instance publique est hébergée gratuitement par Rackspace que vous pouvez utiliser pour montrer ou voir n’importe quel document public dans le monde entier. Mais il est également possible d’installer cette application au sein de votre réseau pour ne pas avoir à sortir les documents de votre entreprise. Cependant, cette application ne s’authentifie pas et ne peut voir que les documents ‘publics’, c’est à dire accessibles sans authentification.

Alléger le cycle : processing + Tableur + Slides

Avant toute mise en place d’un système prédictif, il est important de comprendre l’existant, quelles données peuvent être utiles et quel est le gain que l’on peut espérer au final après mise en place de ce système. Le cycle d’étude est classique : récupérer les données, les nettoyer et faire un préprocessing, générer un fichier csv qui pourra être chargé par un tableur, puis créer les graphiques et les exporter afin de pouvoir les inclure dans les slides.

Nous avons vu qu’avec IPython toutes ces étapes peuvent être faites au sein d’un même outil : Notebook. Cet article était une très courte introduction et il n’était pas possible de montrer toutes les fonctionnalités offertes par les librairies Python. Panda est probablement la première librairie à maîtriser afin de pouvoir charger, manipuler et afficher un jeu de données hétérogène. Mais cela n’impacte pas la conclusion : Notebook est définitivement un outil à considérer pour alléger ce cycle et donc l’accélérer. Certes, il ne remplacera pas un tableur mais peut permettre d’éviter des aller-retours inutiles.

En décembre 2012, IPython a reçu une donation de 1.15 million dollars de la fondation Alfred P. Sloan. Et en été 2013, 100 000 dollars de la part de Microsoft. La version 1.0 est sortie début août 2013 et la dernière version stable 1.1.0, en septembre 2013. De nombreuses améliorations sont à venir. Pour suivre le progrès, le site officiel IPython est la meilleure ressource.

Bertrand Dechoux
Consultant et Formateur Hadoop @BertrandDechoux

4 réflexions au sujet de « Explorer vos données avec le Notebook d’IPython »

  1. Publié par MrBidon, Il y a 4 années

    Bonjour,

    L’article est très intéressant. Mais, j’ai l’impression que cette solution est plus compliqué de l’utilisation du logiciel open source R (http://www.r-project.org/). J’ai pris l’habitude de l’utiliser, et sa simplicité d’utilisation, allié à la puissance de calcul est tout simplement impressionnante.

  2. Publié par Bertrand Dechoux, Il y a 4 années

    Une comparaison entre R et Python est potentiellement aussi risquée qu’une comparaison entre Java et C#. Il y a de nombreux points communs mais également de nombreux partis pris.

    R (« The R Project for Statistical Computing ») serait vraiment conçu pour des calculs statistiques. Et on pourrait considérer que Python est plus généraliste, à priori plus adapté pour construire une application web par exemple.

    Mais les frontières sont en fait très floues. Avec les librairies mentionnées dans cet article (numpy, panda, scipy, scikit-learn et matplotlib), Python peut être une alternative à R. Et avec le travail fait par RStudio (notamment Shiny), le web et R ne sont pas deux mondes incompatibles.

    Cet article n’avait pas pour but de présenter le langage, ni les librairies de Python mais le Notebook d’IPython. Celui-ci est intéressant car c’est une application web et donc les calculs peuvent être fait sur une machine à distance et il n’y a donc pas d’installation à faire sur le poste de l’utilisateur. Mais sa force passe aussi par le rendu web du Notebook qui est fait de façon interactive. C’est difficile de montrer cela dans un article mais le rendu est déjà connu avant de faire l’export. L’export est la seulement pour générer un rapport indépendant de l’environnement de conception.

    Je ne pense pas qu’il existe quelque chose de similaire pour R. Le projet se rapprochant le plus me semble être knitr mais il génère des rapports. Le seul moyen de visualiser le rapport est de le générer en entier.

    Ensuite, il faut bien voir que le Notebook d’IPython n’est pas véritablement un IDE. Il en existe plusieurs pour Python (par exemple Spyder qui est dans les distributions WinPython et Anaconda) et on retrouve des principes similaires à un IDE pour R.

  3. Publié par MrBidon, Il y a 4 années

    Merci pour l’explication, je n’avais pas compris le coté application web de la chose. Effectivement dans ce cas, on va plus loin qu’avec le trinôme R / knitr / markdown.

  4. Publié par Mr.Blue, Il y a 3 années

    Bonjour,

    Merci pour cette présentation du notebook que je ne connaissais pas. Du coup ça me donne l’envie d’essayer :)

    Pour compléter la discussion : une des vraies différences entre R et Python c’est que Python est un vrai langage de programmation ;)

    M.Blue

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *