Créer des tableaux de bords pour vos applications Python
Quand on travaille en science des données, il vient toujours un moment où il faut présenter des résultats. Parfois, il est même nécessaire d’ajouter à la présentation la possibilité d’interagir avec les données. Or en Python, il existe principalement 4 Frameworks assez connus qui vous faciliteront ce travail de présentation et d’interaction : Streamlit, Dash, Voilà et Panel.
Je vous propose d’en faire une synthèse rapide en fonction de critères qui vous permettront de vous positionner sur le plus adapté à vos besoins.
Les objectifs principaux des Frameworks
Chaque Framework a été créé initialement pour répondre à un besoin spécifique. Même si en apparence les services qu’ils fournissent sont similaires, si on regarde dans le détail, leur cas d’utilisation diffère :
- Streamlit : Transformer des scripts Python en applications de type tableau de bords interactifs partageables aussi rapidement que possible ;
- Dash : Combler l’écart entre la science des données et le reste de l’organisation ;
- Voilà : Convertir les blocs-notes Jupyter/IPython en applications de tableau de bord Web interactifs autonomes, permettant une transition en douceur de la phase exploratoire de l’analyse des données à la communication des informations de données résultantes ;
- Panel : Création d’un cadre flexible pour créer des applications de tableau de bord qui ne sont pas liées à une interface graphique spécifique, avec un code qui fonctionne de la même manière dans les fichiers de script Python et les blocs-notes Jupyter/IPython.
Toutefois, ce seul critère n’est pas suffisant pour conduire au choix définitif d’une des solutions. Un choix technologique doit toujours être mûrement réfléchi. Ce choix dépend principalement de la spécification technique du projet que l’on doit mener. Dès lors, à l’aide des critères issus de la spécification du projet que l’on doit conduire, nous pouvons évaluer les différentes solutions qui s’offrent à nous. Cet article va donc être écrit de façon à balayer l’ensemble des thématiques principales liées à un seul besoin : créer un tableau de bord interactif pour manipuler des données.
Fiche technique préliminaire des Frameworks
Avant de rentrer dans le détail, regardons ensemble quelques informations préliminaires. Plusieurs indicateurs sont à mettre en parallèle pour évaluer la santé et la maturité de chaque Framework. Nous retiendrons principalement les critères suivants :
- L’aspect open source, qui permet de connaitre les droits d’utilisation et l’accès au code source ;
- Le langage de programmation utilisé dans le développement des Frameworks, qui nous sera utile si nous devons faire de la maintenance ;
- L’activité GitHub, qui donne un bon aperçu du développement et de la maintenance des Frameworks.
En détail :
| Framework | Streamlit | Dash | Voilà | Panel |
|---|---|---|---|---|
| Open Source | Open Source + Version entreprise | Open Source + Version entreprise | Full Open Source | Full Open Source |
| Langage de programmation | Python | Python, R, Julia | Python, C++, Julia | Python |
| Communauté Github (juin 2021) | 15.0K étoiles, 1.3K forks et 101 contributeurs | 14.7K étoiles, 1.5K forks et 66 contributeurs | 3.3K étoiles, 332 forks et 50 contributeurs | 1.2K étoiles, 186 forks et 68 contributeurs |
| Activité GitHub (juin 2021) | 1279 problèmes fermés et 542 problèmes ouverts | 591 problèmes fermés et 433 problèmes ouverts | 286 problèmes fermés et 215 problèmes ouverts | 808 problèmes fermés et 420 problèmes ouverts |
Que faut-il retenir de ce tableau ? On constate que tous les Frameworks sont Open Source. On remarque aussi que Dash et Voilà font appels à d’autres langages de programmation que le Python (pour améliorer leurs performances). Enfin, globalement, les 4 Frameworks sont plébiscités et génèrent beaucoup d’activité autour d’eux, ce qui est bon signe.
Les bibliothèques graphiques
Maintenant que nous avons le sentiment que les quatre candidats ne sont pas des projets sans avenirs, nous pouvons commencer à rentrer dans le détail fonctionnel.
Le rôle des quatre tableaux de bords que nous étudions consiste à nous aider dans la visualisation de données. Or en Python, il existe pléthore de librairies permettant déjà de faire des graphiques. Il convient donc de voir dans quelle mesure chaque Framework intègre ou non ces librairies.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| Toutes les principales bibliothèques de traçage Python, y compris la bibliothèque Pyplot de Matplotlib, Seaborn, Altair, Vega-Lite, Plotly, Bokeh, PyDeck et GraphViz. Streamlit comprend également sa propre bibliothèque de traçage natif avec des graphiques en courbes, en aires, à barres et des cartes. À l’heure actuelle, le niveau d’interactivité que vous pouvez inclure dans les parcelles Streamlit est limité | Principalement conçu pour être utilisé avec la bibliothèque graphique Python plotly.py. Des bibliothèques externes existent en solutions alternatives – à savoir Matplotlib, Seaborn, Altair, Vega-Lite, Bokeh – dans Dash, mais ces bibliothèques ne sont pas très robustes et le niveau d’interaction avec les graphiques générés n’est pas au même niveau que Plotly pour les graphiques produits | Toutes les principales bibliothèques de traçage Python, y compris la bibliothèque Pyplot de Matplotlib, Seaborn, Altair, Plotly, Bokeh, PyDeck et GraphViz. | Toutes les principales bibliothèques de traçage Python — Matplotlib, Seaborn, Altair, Plotly, Bokeh, PyDeck, GraphViz et même la bibliothèque R : ggplot |
Sans grande surprise, chaque Framework intègre plusieurs solutions de façon à proposer plusieurs outils de visualisation. On retiendra toutefois que Dash est peut-être le seul Framework un cran en dessous des trois autres au regard de sa capacité à gérer des librairies externes.
Prise en charge des applications multi-pages
Outre l’aspect graphique, nous devons aussi nous intéresser aux problématiques d’applications multi-pages. En effet, les applications multi-pages permettent d’améliorer significativement l’expérience utilisateur. Toutefois, pour pouvoir développer se type d’application, les Frameworks doivent inclure ce type de fonctionnalité ou à défaut nous donner les moyens de l’implémenter.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| De potentielles solutions de contournement peuvent être trouvées sur le forum d’assistance Streamlit | Prend en charge explicitement les applications multi-pages. Le partage de données entre les pages d’application n’est pas trivial à l’heure actuelle | De potentielles solutions de contournement existent, mais elles ne s’apparentent pas vraiment à des applications multi-pages | Prend en charge explicitement les applications multi-pages et peut le faire de plusieurs manières différentes, telles que l’utilisation d’onglets, de pipelines et de modèles. Panel permet le partage d’état entre les pages d’application, conduisant à la création d’applications multi-pages complexes |
On retiendra de ce comparatif que Panel est très approprié pour les applications multi-pages. En effet, il permet de facilement partager des informations entre plusieurs pages afin que nous puissions créer des applications multi-pages complètes. En seconde position, nous retrouvons Dash qui prend en charge les applications multi-pages, avec la possibilité de modifier les URL sans actualiser la page Web elle-même, conduisant à des temps de chargement de page très réduits. Cependant, le partage des variables entre les pages doit être fait explicitement, ce qui peut entraver la création d’applications où les pages doivent fréquemment partager de nombreuses informations. Pour finir, Streamlit vous demandera du travail et Voilà ne supporte pas le multi-pages et solutions de contournement ne s’apparentent pas vraiment à des applications multi-pages.
Étendue des compétences préalables requises (à l'exception de Python)
Comme notre sujet tourne autour d’applications web, nous allons forcément avoir besoin de compétences complémentaires qui viendront s’ajouter à notre maitrise du langage Python. Ces compétences sont nécessaires pour créer des applications qualitatives.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| Pour tirer pleinement parti de Streamlit, aucune autre compétence préalable n’est requise. HTML, CSS et JavaScript peuvent renforcer votre utilisation du framework, ce qui conduit à des mises en page d’applications plus complexes et visuellement attrayantes | Vous aurez besoin d’une connaissance rudimentaire du HTML. Les connaissances CSS permettront un meilleur contrôle de la conception des applications | Une certaine connaissance de HTML, CSS et Jinja sera requise si vous souhaitez un contrôle total de la conception sur la mise en page et l’apparence de votre tableau de bord | Les connaissances en HTML, CSS et JavaScript faciliteront le processus de développement, en particulier en ce qui concerne les choix stylistiques |
Celui qui nécessite le moins de connaissances complémentaires est sans contestation possible Streamlit. Il prendra en charge l’essentiel des décisions de conception pour nous, sans que nous ayons besoin d’apprendre le HTML ou le CSS. En complément, Dash,Voilà et Panel sont plutôt équivalents sur le besoin de compétences en HTML & CSS.
Facilité d'utilisation
Un Framework est un cadre de travail. Le rôle de celui-ci est de nous donner des outils pour nous faciliter la mise en place de tableaux de bords. Par conséquent, il convient d’évaluer dans qu’elle mesure chaque Framework va nous simplifier la vie. Pour cela, nous nous basons sur des retours d’expériences décrivant l’usage fait de chaque Framework.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| L’API de Streamlit est simple, facilement gérable, écrite en Python pur et peut être lue dans son intégralité en moins d’une journée. C’est un Framework incroyablement simple à utiliser | Dash est facile à utiliser pour créer des applications de tableau de bord de base. Toutefois, il est légèrement plus difficile de créer des mises en page d’applications complexes | Voilà en soi est incroyablement simple à utiliser pour créer des applications de tableau de bord de base. Cependant, il n’est pas toujours simple de contrôler les subtilités concernant la disposition et l’apparence de l’application | Panel est facile à utiliser pour les applications de tableau de bord de données simples, mais cela peut être assez délicat une fois que vous avez dépassé des interfaces de tableau de bord plus triviales |
Streamlit est le Framework le plus simple à utiliser. Il a été conçu avec cet objectif d’être simple. À l’opposé, Panel nécessitera beaucoup de lecture et d’expérimentation pour créer même le plus basique des tableaux de bord. Ce n’est qu’après avoir passé cette étape d’apprentissage que vous pourrez en exploiter le plein potentiel.
Flexibilité du Design
Outre l’aspect de la facilité d’utilisation, un Framework dont l’objectif est de nous permettre de créer des tableaux de bords doit aussi être évalué sur la flexibilité qu’il nous offre dans la conception de tableaux de bords.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| Comme l’accent est principalement mis sur la facilité d’utilisation, il n’est pas entièrement flexible dans ses options de mise en page. Si vous maîtrisez le HTML et le JavaScript, vous pourrez créer vos propres composants Streamlit qui vous permettront de mieux contrôler la mise en page de l’application. Dans l’ensemble, la flexibilité de conception est suffisante pour les tableaux de bord de base, mais n’offre pas beaucoup de contrôle pour les tableaux de bord avancés | La principale force de Dash est son incroyable flexibilité de conception. Cependant, une grande partie de cette flexibilité de conception peut être attribuée à l’utilisation de code HTML et CSS avec votre code Python | Flexibilité de conception limitée. Il a une poignée de modèles utiles, mais en dehors de ces modèles, la seule option est de créer vos propres modèles | Grande flexibilité de conception. Divers modèles, HTML et CSS en ligne, l’inclusion de fichiers CSS et JavaScript externes et la possibilité de créer vos propres templates sont les raisons pour lesquelles Panel permet une grande flexibilité de conception |
Dash a clairement une longueur d’avance en matière de flexibilité de conception par rapport aux autres. Cela est principalement dû à la maitrise et l’intégration de l’utilisation du HTML et du CSS dans le Framework.
Par contre, le moins accessible en termes de flexibilité est Voilà. La plupart des styles doivent être effectués directement via IPYWidgets ou via la création de vos propres modèles en utilisant HTML, CSS et Jinja.
Options de déploiement
Le déploiement est la partie qui permet de mettre en production votre application. Si une application est difficile à déployer, cela pourrait annuler tous les efforts que vous avez fournis en développant votre application. Il existe beaucoup d’options différentes pour déployer une application. Le choix d’une option dépend principalement de vos contraintes personnelles ou de celles imposées par votre entreprise.
Nous allons donc avoir un regard critique sur les différentes options proposées et sur la qualité de la documentation qui nous aidera à déployer l’application.
| Frameworks | Streamlit | Dash | Voilà | Panel |
|---|---|---|---|---|
| Options de déploiement | Les options incluent leur propre plate-forme de partage Streamlit, MyBinder, AWS, Google Cloud Platform, Google Colab, Azure, Heroku, JupyterHub, Apache, Nginx, se déployant en tant que fichier exécutable sur Windows, MacOS, Linux et même Android et IOS, et enfin ContainDS dashboards avec JupyterHub et PythonAnywhere | Les options incluent Heroku, MyBinder, AWS, Google Cloud Platform, Google Colab, Azure, JupyterHub, Apache, Nginx, ContainDS dashboards avec JupyterHub et PythonAnywhere | Les options incluent AWS, MyBinder, Google Cloud Platform, Google Colab, Azure, Heroku, JupyterHub, Apache, Nginx, ContainDS dashboards avec JupyterHub et PythonAnywhere | Les options incluent AWS, MyBinder, Google Cloud Platform, Google Colab, Azure, Heroku, JupyterHub, Apache, Nginx et PythonAnywhere |
| Documentation | Streamlit fournit une bonne documentation claire sur le déploiement sur sa propre plate-forme de partage. Il existe également un Guide de déploiement sur le forum Streamlit avec des étapes de déploiement consolidées pour différentes plates-formes | Définir correctement les dépendances de l’environnement peut être légèrement plus difficile avec les applications Dash par rapport aux autres frameworks. La documentation de déploiement Dash ne contient que des étapes sur la façon de déployer des applications Dash sur Heroku. Cependant, de nombreux articles sur le Web montrent clairement les étapes de déploiement appropriées pour d’autres options de déploiement | La documentation de déploiement pour Voilà montre les étapes de déploiement sur Binder, Heroku et Google App Engine, ainsi que les étapes de déploiement pour les serveurs Web Nginx. Les documents contiennent également des étapes sur la manière de partager des applications Voilà à l’aide de ngrok, un outil qui peut être utilisé pour partager des serveurs locaux sur Internet en toute sécurité. Il existe de nombreux articles sur le Web démontrant clairement les étapes de déploiement appropriées pour d’autres options de déploiement | la documentation de déploiement pour Panel est assez vague et ambigüe. Dans la section « Déployer et exporter » du Guide de l’utilisateur du Panel, des étapes sont décrites sur différentes manières de déployer votre application sur un serveur ou d’exporter votre application vers une page HTML statique avec une interactivité intégrée. Les détails concernant le déploiement du serveur peuvent être trouvés dans la section « Déploiement du serveur » du Guide de l’utilisateur Panel, avec des détails sur le déploiement sur MyBinder, Heroku et Microsoft Azure. Cette page comprend également une liste d’autres fournisseurs de cloud possibles qui prennent en charge les applications Panel, à savoir AWS, Google Cloud Platform et DigitalOcean, bien qu’aucune instruction claire ne soit incluse pour ces fournisseurs de cloud |
Les quatre frameworks ont une abondance d’options de déploiement. Toutefois, le déploiement sur la plateforme de partage Streamlit est le plus simple de tous. En ce qui concerne la documentation, celle de Voilà est la plus claire et la moins ambigüe.
Facilité de Maintenance
Nous savons que les Frameworks ont de bonnes communautés, mais nous ne sommes jamais à l’abri d’avoir besoin de mettre à jour le Framework ou de devoir mettre les mains dans le code du Framework pour résoudre un problème. C’est donc l’aspect de la maintenance des Frameworks qui nous intéresse.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| La maintenance de l’application est simple et ne présente aucune difficulté particulière. Ils maintiennent également un journal des modifications clair et concis pour surveiller les fonctionnalités nouvellement ajoutées et récemment obsolètes | La maintenance est relativement facile. Selon le temps écoulé depuis votre dernière programmation avec Dash, vous devrez peut-être vous familiariser à nouveau avec la structure du code avant de pouvoir continuer à développer votre application. Ils maintiennent également un journal des modifications clair et concis pour surveiller les fonctionnalités nouvellement ajoutées et récemment obsolètes | Le framework ne contient aucun élément de code spécifique à Voilà, ce qui signifie que la maintenance est simple, car il s’agit simplement de maintenir le code Python | La facilité de maintenance de votre application dépendra de l’API que vous avez utilisée à l’origine pour créer votre application, les API plus rudimentaires telles que l’API Interact étant plus simples à gérer que d’autres, telles que l’API Callbacks. Ils maintiennent également un journal des modifications clair et concis pour surveiller les fonctionnalités nouvellement ajoutées et récemment obsolètes |
Concrètement, chaque Framework offre un niveau acceptable de maintenance.
Mécanismes d'authentification
L’ensemble des critères principaux ayant été abordés, nous pouvons rapidement passer en revue les secondaires. La première fonctionnalité secondaire qui pourrait nous être utile concerne les mécanismes d’authentification.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| Aucun | Fournit explicitement aux utilisateurs des mécanismes d’authentification, via le package dash-auth qui utilise le protocole basic authentication |
Aucun | Panel fournit des mécanismes d’authentification prêts à l’emploi. Il utilise le protocole OAuth 2.0, qui sous-traite essentiellement l’authentification à un tiers, par exemple en se connectant avec GitHub ou Google |
Ici, rien de complexe, si la gestion d’utilisateurs est un prérequis indispensable, il faudra privilégier Dash ou Panel.
Prise en charge de Jupyter/IPython Notebook
Toujours parmi les fonctionnalités secondaires qui peuvent avoir un intérêt, nous nous intéresserons à la compatibilité des Frameworks avec l’environnement de travail Jupyter.
Jupyter est un acteur incontournable dans la science de la donnée qui fournit un environnement de développement interactif basé sur le Web et qui prend la forme de blocs-notes. Il est donc intéressant de voir comment les Frameworks s’intègrent avec Jupyter.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| Aucun | Ne prends pas en charge le travail avec les notebooks Jupyter, mais Plotly a récemment publié JupyterDash pour travailler avec Dash dans l’environnement Jupyter/IPython | Supporte Nativement Jupyter. Voilà fonctionne directement à partir de l’interface du notebook Jupyter en tant qu’extension, ainsi qu’avec le serveur Jupyter et JupyterLab | Supporte Nativement Jupyter. Panel fonctionne presque exactement de la même manière dans l’environnement de bloc-notes Jupyter/IPython qu’avec les fichiers de script Python classiques |
Encore une fois, rien de complexe, si vous avez besoin de travailler Jupyter, seul Streamlit ne vous le permettra pas.
Cas d'utilisation optimal
Avant de conclure, au regard des différents éléments exposés jusqu’ici, faisons un récapitulatif des cas d’utilisation optimal.
| Streamlit | Dash | Voilà | Panel |
|---|---|---|---|
| un cadre visuellement attrayant qui est idéal à utiliser si vous disposez d’une base de code Python déjà existante que vous souhaitez transformer en un tableau de bord interactif aussi rapidement que possible et sans douleur . C’est le plus facile à utiliser des quatre frameworks. | Dash est le meilleur choix si vous recherchez une solution d’entreprise unique pour tous, ou si vous avez une compréhension de base du développement Web. | À utiliser dans un scénario dans lequel vous avez un bloc-notes JupyterIPython avec une analyse de données déjà effectuée, et vous souhaitez partager les informations sur les données avec des collègues sans que les cellules de code n’encombrent la vue. Voilà est également un excellent outil pour rapporter rapidement et de manière fiable des informations sur les données à travers une organisation. | Création d’applications de tableau de bord qui ne se limitent pas à une seule interface graphique. Panel est un bon choix lorsque vos données sont principalement géospatiales. Comme Panel fait partie de l’écosystème HoloViz, il fonctionne parfaitement avec la bibliothèque Python GeoViews pour la gestion des données géospatiales. Panel gère mieux cette forme de données que Dash, Streamlit ou Voilà. |
Le mot de la fin
Vous l’aurez compris, mais je le répète quand même : le choix du meilleur Framework dépend intégralement du contexte, des spécifications de votre projet et de ce que vous souhaitez concevoir.
Aussi, afin d’avoir une vue synthétique de tout ce qui a été dis, je terminerai cet article avec un tableau synthétique de comparaison qui résume chaque point que nous avons précédemment abordé.
| Framework | Streamlit | Dash | Voilà | Panel |
|---|---|---|---|---|
| Activité de la communauté | Très bon | Très bon | Moyen | Bon |
| Librairies Graphiques supportées | Fonctionnalités étendues avec Plotly. Possibilité d’ajouter les librairies tierces suivantes : Seaborn/Matplotlib, altair/vega-lite, Bokeh | Inclus toutes les principales bibliothèques Python de tracés graphiques. Inclus leur propre librairie de tracés graphiques | Inclus toutes les principales bibliothèques Python de tracés graphiques | Inclus toutes les principales bibliothèques Python de tracés graphiques. Fonctionnalités étendues avec Bokeh et Plotly |
| Support des applications multi-pages | Inclus | Possible avec solution de contournement | Impossible | Inclus |
| Open Source | Open Source + Version Entreprise | Open Source + Version Entreprise | Complètement Open-Source | Complètement Open-Source |
| Compétences complémentaires requises (hors Python) | HTML (CSS, JS) | HTML (CSS, JS) | HTML (CSS, JS, Jinja) | HTML (CSS, JS) |
| Facilité d’utilisation | Modéré (requiert quelques connaissances) | Très simple | Très simple | Modéré (requiert quelques connaissances) |
| Flexibilité du Design | Excellent | Limité | Limité | Très Bon |
| Options de déploiement | Très variées | Très variées | Très variées | Très variées |
| Facilité de Maintenance | Facile (requiert de rafraichir) | Très Facile | Très Facile | Facile (dépend des choix d’API) |
| Méchanisme d’Authentification | Inclus – HTTP Basic Auth | Aucun | Aucun | Inclus – OAuth 2.0 |
| Support de Jupyter | Possible avec JupyterDash | Aucun Support | Support Excellent | Support Excellent |
| Cas d’usage Optimal | Qualité Entreprise, Framework incluant toutes les solutions, nombre de design illimité, flexible et grande scalabilité | Transforme des scripts Python en tableau de bord interactifs le plus simplement possible. Facile à utiliser. Prototypages rapides | Prototypages rapides avec les notebook Jupyter. Partage rapide et fiable de données au sein d’une entreprise | Création d’applications non restreintes à une seule interface. Fonctionne avec des données géospatiales |
Merci pour la lecture ! Comme toujours, si vous avez apprécié cet article, n’hésitez pas à commenter et partager.