Publié par

Il y a 3 mois -

Temps de lecture 7 minutes

Outils d’exploration de données : les bonnes pratiques pour gagner en efficacité

Chaque projet data science commence par une exploration de données. Cette étape est nécessaire pour mieux comprendre les données, valider leur cohérence et leur utilité pour ensuite procéder à des analyses plus poussées et tester les différentes approches visant à résoudre le problème. Pour y répondre au mieux, le Data Scientist a besoin d’un outil accessible, intuitif et maniable qui lui permettra de faire facilement des modifications et des adaptations de code. Il existe plusieurs outils sur le marché qui permettent de répondre à ces besoins.

Dans cet article, nous allons voir plusieurs astuces d’utilisation de Jupyter Notebook ainsi qu’une brève comparaison avec le Notebook Zeppelin, un autre outil bien connu sur le marché open-source.

Pourquoi utilise-t-on des notebooks?

On utilise les notebooks pour

  • vérifier le contenu de données
  • valider les hypothèses
  • tester différents algorithmes
  • faire des analyses rapides
  • présenter les résultats sous forme de dashboard

On n’utilise pas les notebooks pour

  • la mise en production
  • les tests d’intégration

Comment les utiliser de manière efficace?

Définir le besoin et la démarche

Chaque analyse doit partir d’un besoin. Avant la phase exploratoire, il est important de bien cadrer la démarche et de définir des hypothèses à explorer. Le notebook permet de rapidement prototyper l’analyse pour ensuite valider ou réfuter les différentes hypothèses et pouvoir commencer l’industrialisation d’un pipeline de traitement de la donnée.

Pour vous aider, voici une checklist des questions à se poser:

  • De quelles sources de données ai-je besoin ?
  • Quel est le périmètre de mon analyse ?
  • Quelles sont les hypothèses à vérifier? Par exemple: “La campagne marketing “HDFYJ” a eu un impact fort sur la demande pour une sélection d’articles”

  • Quelles méthodes je souhaite employer pour mon analyse ? Quels modèles ?
  • Quelles sont les prochaines étapes en cas de validation ou au contraire, en cas de refus ?

Et surtout, n’oubliez pas: “Les données fournies ou l’analyse effectuée n’ont pas permis de répondre à la question” est aussi une réponse valide ;-)

Organiser son notebook

Avant toute chose, il est nécessaire de créer des dossiers et des sous dossiers par sujet d’analyse. Si on travaille en équipe, le mieux est de créer des dossiers par utilisateurs (dans le Notebook Dashboard), ainsi qu’un dossier partagé dans lequel tous les notebooks nettoyés et réutilisables sont copiés.

Chaque Data Scientist ayant ses propres habitudes, la relecture par un pair peut s’avérer compliquée. Il est donc important de bien organiser les sections dans chaque notebook. Voici un exemple de découpage :

  • import des libraires
  • variables à saisir par un utilisateur (source de données, périmètres de dates etc)
  • fonctions type utiles
  • analyse
  • résultats

Pour nommer les différentes sections du notebook ainsi que pour les commentaires, on peut utiliser le format Markdown (et modifier la taille du Heading grâce au nombre de #).

En plus de sections, comme dans le développement classique, il est important de mettre en commun les pratiques des membres de l’équipe pour converger vers une façon de faire commune. Il est important de définir les règles de code en début de projet, comme par exemple:

  • le nommage de variables
  • le style d’indentation
  • les commentaires

Créer un environnement Conda par projet

Pré-requis: Anaconda installé sur le poste de travail. Pour plus d’information, consultez la documentation.

En mode de gestion multi-projets, il est important de séparer les dépendances de libraries d’un projet à l’autre. Grâce à la fonctionnalité Kernel du notebook, on peut changer les dépendances très facilement (Kernel -> Change kernel).

D’abord il faut créer un environnement Conda avec l’ensemble des librairies nécessaires pour le projet ET la libraire ipykernel. Sans cette dernière, l’environnement ne sera pas disponible dans Jupyter Notebook. L’installation peut être faite, soit par la ligne de commande, soit par l’interface graphique de Conda.

Une fois l’environnement créé, il suffit d’ouvrir un nouveau notebook et de choisir le kernel précédemment installé. L’ensemble des libraires installées (dans leurs versions respectives) seront disponibles dans notre notebook.

Importer ses propres packages

Le notebook permet d’importer nos propres librairies Python, compressées en format .egg ou .zip. Grâce à la commande:

PATH = my/path/to/executable/file

  • Si on n’utilise pas Spark:

    import sys
    sys.path.append(PATH)
  • Si on utilise Spark, le syntaxe est different. Cela permet d’ajouter la librairie sur l’ensemble de machine du cluster sur lequel on fait tourner Spark:

    spark_session = SparkSession.builder \
    							.master("local") \
    							.appName("Analyse_marketing") \
    							.config('spark.executor.memory', '4g') \
    							.getOrCreate()
    spark_session.sparkContext.addPyFile(PATH)

Quand ai-je besoin de cette fonctionnalité ? Dans la phase exploratoire, on utilise souvent les mêmes fonctions pour faire le nettoyage de données (et pas seulement). Pour ne pas réécrire toutes les fonctions dans chaque nouveau notebook, il est recommandé de créer sa propre librairie d’analyse. Pour construire son package, suivez les instructions de la documentation packaging Python. Pour faciliter la tâche, on peut exporter les fonctions dans un IDE (ex. Intellij, Pycharm) ou un éditeur de texte. Une fois la libraire créee, il suffit de l’importer en utilisant la commande au dessus et l’ensemble des fonctions du package seront alors disponibles dans le notebook. Voici un excellent talk qui illustre comment migrer du notebook vers le code propre.

Utiliser les raccourcis

Pour rendre la navigation plus fluide, il existe plusieurs raccourcis:

  • Exécuter la cellule: shift-enter
  • Sauvegarder le notebook: s
  • Ajouter la cellule: a (above), b (below)
  • Supprimer la cellule: x

Sauvegarder et versionner

Il n’existe pas de système de versionning propre à Jupyter Notebook mais on peut versionner nos notebooks avec github ou bitbucket, les sites d’hébergement de code versionné les plus connus (et open source).

IMPORTANT : Les notebooks gardent en mémoire les résultats de toutes les cellules exécutées. Pensez donc, avant de versionner le notebook, de bien veiller à :

  • sauvegarder les derniers changements,
  • fermer le notebook et
  • relancer l’ensemble des cellules pour s’assurer que du code erroné ne soit pas versionné

Bonus :)

Jupyter Lab est une nouvelle interface web pour gérer les notebooks. Elle permet d’afficher l’ensemble des notebooks, créer des vues à partir des sorties intermédiaires du pipeline. L’installation est très simple et l’utilisation plutôt intuitive.

Et pour aller plus loin, testez Jupyter Hub qui offre la possibilité d’interagir en mode multi-users.

Comparaison avec les autres outils

Pour finir, voici une comparaison entre Jupyter Notebook et Zeppelin, un autre type de notebook, très utilisé dans le monde Scala :

graphiquesinteractifs, widgetsinteractives, widgetsschedulingnonoui, la possibilité de scheduler la mise à jour du notebooktypes d’affichagequ’un seulplusieurs possibilités d’affichages : le code, le rapport (on ne voit pas le code) et la version simplifiée

critère de comparaison Jupyter Notebook Zeppelin
simplicité d’installation simple moyenne
langages 40 languages parmi lesquels: Python (et Pyspark), Scala (et Spark Scala), Java, Ruby, Javascript, Go, OCaml, Perl, Octave, Markdown, Shell, R Python (et Pyspark), Scala (et Spark Scala), SQL, JDBC, Markdown, Shell, R
support de plusieurs langages à la fois non oui
auto-complétion oui oui
multi-utilisateur non (sauf Jupyterhub) oui

Il existe beaucoup plus d’outils d’exploration sur le marché: Rodeo, Hydrogen, BeakerX et autres. A vous de tester!

Jupyter Notebook : un outil puissant à maîtriser

Le Jupyter Notebook est un outil très puissant. Grâce aux nombreuses fonctionnalités il permet aux Data Scientists de prototyper rapidement, d’exécuter le code directement dans son interface et visualiser les résultats. Malheureusement, s’il est mal utilisé, il peut mener à des analyses exploratoires sans fin et difficilement intégrables dans un projet Data Science destiné à l’industrialisation. En espérant que les conseils mentionnées dans cet article, même si la liste n’est pas exhaustive, vont vous aider à mieux cadrer vos besoins, savoir organiser les notebooks et monter en efficacité lors que vous faites vos explorations.

Publié par

Commentaire

Laisser un commentaire

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

Nous recrutons

Être un Xebian, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.