1.Objectif
Ce pas à pas a pour but d’expliquer comment transformer un notebook Zeppelin classique de manipulation et visualisation de données, en un notebook Zeppelin plus orienté BI.
2. Prérequis
- Avoir accès à une instance Zeppelin lancée.
- Être familier avec la programmation, notamment en Python et Spark.
3.Etapes de mise en place
3.1Récupération (ou création) d’un notebook Zeppelin de manipulation et visualisation de données.
- Afin de transformer un notebook Zeppelin en notebook plus orienté BI, nous devons tout d’abord ouvrir (ou créer si vous n’en avez pas déjà un) un notebook Zeppelin de manipulation et visualisation de données. L’image ci-dessous représente la page d’accueil d’une instance Zeppelin (celle-ci peut varier en fonction de la version de Zeppelin). Depuis cette page, vous pouvez soit créer votre notebook en cliquant sur le bouton “Create new note”, soit en ouvrir un existant.
Dans notre cas, nous allons utiliser le notebook “zeppelin_demo”.
- Que vous utilisiez Pandas ou encore Spark, vos données doivent être dans un dataframe afin de pouvoir utiliser le contexte natif de Zeppelin. Ensuite, votre notebook peut contenir diverses opérations de manipulation et visualisation de données. Dans ce pas à pas, nous présenterons un exemple de notebook développé en Python. Nous utiliserons également Spark. Les différentes manipulations de données seront donc réalisées sur un dataframe Spark et dans une cellule %pyspark.Ci-dessous, un exemple de cellule où nous créons un dataframe de test avec des données
dummy. Celles-ci représentent des employés d’une entreprise fictive. On retrouve pour chacun d’eux leur prénom, l’initiale de leur nom, leur sexe, la ville où il travaille, leurs hobbies, leur date de naissance et leur salaire.
- Ensuite, ce notebook doit contenir diverses opérations sur les données. Dans cet exemple, nous allons réaliser des filtres sur certains champs du dataframe. Nous donnons également un exemple de calculs sur les données, tels que le calcul de la moyenne des salaires ainsi que le pourcentage d’employées femmes.
- Pour exécuter le notebook présenté jusqu’ici, nous devons exécuter chacune de ses 3 cellules. La première afin de charger les données, la seconde afin de prendre en compte les filtres sur les champs renseignés. Enfin la troisième pour afficher les informations souhaitées sur les données filtrées ou non. Ci-dessous on peut voir l’ordre dans lequel exécuter les cellules ainsi que le bouton pour le faire. (NB : Ces 3 cellules auraient pu être regroupées en une seule. Mais afin de donner une clarté aux utilisateurs pour qu’ils sachent quelles variables modifier, les variables des filtres ont été mises dans une cellule à part pour cet exemple.)
3.2 Chargement des données et mise en place de filtres
- La première transformation que nous pouvons réaliser, est d’obtenir une interface utilisateur plus compréhensible, pour le chargement de données et la mise en place de filtres sur les données. Nous allons implémenter cela dans une cellule qui utilisera le langage de programmation Angular. En effet, une des forces de Zeppelin est la possibilité d’utiliser plusieurs langages de programmation dans un même notebook.
L’image ci-dessous présente tout d’abord le code que nous avons mis en place dans une cellule Angular.
Cette cellule se sépare en deux parties, indiquées par les cadres rouges : - La première est la partie “Script”, dans laquelle est écrit diverses fonctions qui seront appelées pas les éléments Angular créés dans cette cellule. Ici nous avons créé une fonction qui nous permettra d’utiliser le widget Jquery DatePicker. Puis deux autres fonctions qui permettent de modifier les dates minimum et maximum de ces widgets.
- La deuxième partie est “Form”, dans laquelle on crée les éléments Angular. Dans cet exemple, on y crée plusieurs éléments , découpés en trois parties représentées par les cadres oranges.
- Tout d’abord, on crée un bouton appelé “Load Data”, qui permettra de charger les données du dataframe.
- Puis, on crée des filtres, en utilisant des champs texte ou liste déroulante. On retrouve en premier les champs pour la sélection d’une date de début et une date de fin qui seront utilisés pour filtrer sur le champ date anniversaire du dataframe. Ensuite un champ texte pour filtrer sur la ville où l’employé travaille.
- Enfin une liste déroulante pour filtrer selon le sexe de l’employé (‘Homme’ ou ‘Femme’, ou les deux).Le troisième cadre contient un autre bouton, appelé “Search”, qui permettra de lancer la recherche de données correspondantes à ces filtres, et également d’afficher les diverses informations voulues concernant ces données.
Pour l’attribut ng-click des boutons “Load Data” et “Search”, nous utilisons deux méthodes natives à Zeppelin, “z.angularBind” et “z.runParagraph”. La première permet de bind des variables entre une cellule angular et une autre cellule du notebook. La seconde permet d’exécuter un paragraphe, dont on fournit l’identifiant en paramètre des méthodes.
En exécutant la cellule, on obtient donc un affichage comme suivant :
3.3 Utilisation du ZeppelinContext pour la visualisation de données.
- Zeppelin propose nativement un conteneur, appelé ZeppelinContext, qui permet l’affichage de données sous forme de table ou graphique. (Il peut également être utilisé pour spécifier des données en entrée, comme un champ texte d’Angular présenté précédemment.) Sur l’image ci-dessous, on peut voir les opérations effectuées sur le dataframe de données exemples. L’opération qui nous intéresse ici est celle dans le cadre orange. “z.show()” est une méthode du contexte Zeppelin qui nous permet d’afficher joliment les données de notre dataframe.
- Lorsque cette cellule est exécutée, on obtient l’affichage suivant des données du dataframe :
On obtient ainsi l’affichage des données sous forme de tableau. Celui-ci peut être ordonné de manière ascendante ou descendante par colonne selon le choix de l’utilisateur. Si ce dernier souhaite récupérer ces données dans un fichier, le bouton dans l’encadré vert lui permet de télécharger ces données au format CSV. En plus d’un affichage en tableau des données, on peut également obtenir divers graphiques, grâce aux boutons présents dans l’encadré orange. On pourra donc avoir un Bar Chart, Pie Chart, Area Chart, Line Chart ou encore un Scatter Chart en fonction des besoins de l’utilisateur. Enfin, le bouton “settings” permet de régler différents paramètres en fonction de la vue sélectionnée pour afficher les données.
3.4 Utilisation de graphiques plus complexes
- Si les graphiques proposés par le contexte Zeppelin ne sont pas suffisants, nous pouvons également utiliser des librairies externes pour avoir différents graphiques. Dans notre exemple sur l’image ci-dessous, nous utilisons la librairie Plotly, très utilisée pour la visualisation de données en Python. Nous créons avec cette librairie un Sunburst, un graphique qui permet de visualiser des données sur plusieurs niveaux hiérarchiques.
La fonction dans l’encadré bleu nous permet d’afficher un graphique Plotly dans un notebook Zeppelin.
2.Après exécution de la cellule, nous obtenons le Sunburst suivant :
Ainsi, nous pouvons donc transformer un notebook Zeppelin basique, en un notebook plus agréable à l’utilisation, plus simple à comprendre pour des profils non initiés tout en proposant une visualisation des données complète et diversifiée.
Vous pourrez aussi visionner la vidéo pas à pas de ce tutoriel disponible sur notre chaîne YouTube.
Depuis plus de 15 ans maintenant, je travaille sur des sujets liés à la BI et à l’amélioration des processus. J’ai participé à un grand nombre de projets en tant que leader technique sur de nombreuses technologies. De nature pédagogue, je donne également des cours de langage de programmation.
N’hésitez pas à me faire un retour sur cet article ou à me contacter sur LinkedIn pour échanger sur ces sujets!
Alexis
Laisser un commentaire