À propos des plaisirs de passer au panneau et pas seulement

image

Comme le montre clairement le titre, nous parlerons de la bibliothèque Panel, qui vous permet de convertir les blocs-notes Jupyter en applications Web sécurisées, où le remplissage est caché aux utilisateurs non techniques, mais il reste la liberté de manipuler les paramètres internes, c'est-à-dire non seulement de reconstruire les données, mais aussi de faire des requêtes au noyau. TL; DR Shiny pour Python.

L'un des principaux problèmes de l'analyse commerciale est que, quelle que soit sa fraîcheur,
il n'atteint souvent pas l'utilisateur qui prend des décisions en fonction de cela. IBM CTO de l'IA et de la science des données indique que seulement 13% des projets dans le domaine de la science des données vont à la production et l'une des principales raisons est la coopération difficile de tous ceux qui sont impliqués dans les projets. En réduisant l'écart entre le dataatanist, le programmeur déployant le projet et l'analyste de domaine, vous pouvez augmenter considérablement l'échappement global, réduire le temps et rendre le produit final plus réfléchi.

Ce problème est résolu par plusieurs produits actuellement disponibles dans ce créneau.
Pour un bon déploiement évolutif, il y a Dash . Dans mon dernier post, j'ai fait un peu
illustration sur l'exemple de l'analyse du marché des voitures d'occasion. Pour les avantages de Dasha, vous devez payer un prix sous la forme d'une application distincte qui doit être écrite séparément, Plotly est pris en charge à partir de graphiques, vous devez concevoir l'interface, modifier certains CSS / HTML et lors de la mise à jour du modèle d'analyse, s'il s'agit de cahiers, vous devez prendre en charge deux codes, en général pas très pratique pendant le développement du projet.

De l'autre côté, Voila et Panel résolvent le problème (Voila doit être d'une manière éclatante, dans la voix de D'Artagnanowski, pour dire: "Voila!"). Voila vient d'un bloc-notes et prend en charge les widgets interactifs Jupyter avec lesquels il peut communiquer avec un noyau à partir d'une application Web, quelle que soit sa langue (les créateurs parlent d'indépendance linguistique, mais pour R, il n'est pas pertinent pour eux d'avoir Shiny, et il n'y a pas d'analyse commerciale sur Julia ) Voila vous permet de faire une application interactive en deux clics (sans compter l'introduction, par exemple, ipywidgets, là vous devez cliquer décemment). Le panneau est une solution purement python et va au même problème de l'autre côté - du serveur, tandis que le bloc-notes et Jupyter sont facultatifs. Le modèle peut être enregistré dans un fichier python standard et le serveur ne nécessitera pas l'intégralité de l'écosystème Jupyter. Le panneau n'est pas adapté à une bibliothèque spécifique pour les graphiques (des exemples sont donnés sur matplotlib, bokeh, altair et plotly).

Les deux options - Panel et Voila ne sont pas optimales pour une utilisation en tant qu'applications chargées, mais elles ne sont pas destinées à cela, l'idée est de faire une analyse, de déposer un tableau de bord avec les résultats, de supprimer le lien vers l'analyste / gestionnaire, de les laisser jouer avec les paramètres et les demandes, de corriger l'intermédiaire résultat. Si vous devez soudainement déposer une demande de longue durée pour un large éventail de personnes - vous pouvez transférer vers Dash et couler en bronze.

Ensuite, une petite illustration de l'apparence du processus. Faisons un tableau de bord simple basé sur des données sur le marché des voitures d'occasion en France et en Allemagne (juste parce qu'il est à portée de main, vous pouvez vous familiariser avec les détails de l'ensemble de données dans un autre article ). A partir du fonctionnel, il sera possible de calculer des prix moyens en fonction de l'âge et de leur écart type sur la base de statistiques d'offres sur modèles, et de construire des distributions de prix lissées du bruit en un an.

Créez d'abord un tableau de bord dans Panel, puis utilisez Voila. Les blocs-notes ainsi que les données peuvent être téléchargés à partir du référentiel ou parcourir nbviewer ( panneau , le tour est joué ).

Des actions qui ne diffèrent pas d'une simple analyse dans un cahier Je vais laisser sans détails, elles peuvent être vues dans les cahiers par des liens, il n'y a rien de nouveau là-bas.

Pour commencer, nous importons les bibliothèques et les données. J'utiliserai Bokeh pour les graphiques, car je l'ai en standard et il y a des blancs pour copier-coller.

Ensuite, nous préparerons plusieurs fonctions:

wm et std pour les utiliser lors du regroupement de données dans des pandas
default_graph et default_bar_plot - créent des blancs de graphiques vides
color_picker - pour distribuer les objets sélectionnés dans la palette de couleurs

Dans la partie principale, nous déclarons les widgets utilisés

# declare panel widgets multi_select = pn.widgets.MultiSelect(name='Model selection (Ctrl for multiple)', value=['opel corsa (FR)', 'citroen c3 (FR)'], options=list(raw_data['model'].unique()), size=8) year_slider = pn.widgets.IntSlider( name='Year', start=2007, end=2016, step=1, value=2012) checkbox = pn.widgets.Checkbox(name='Show trend error bars') 

Ensuite, nous créons une fonction qui décrit l'interaction à l'aide du décorateur.

 @pn.depends(multi_select.param.value, year_slider.param.value, checkbox.param.value) def update(models, year, checkbox_status): 

Les widgets vous permettent de sélectionner une liste de modèles, de sélectionner une année pour afficher la répartition des offres par prix, et également d'afficher / masquer l'écart type du prix par rapport à la moyenne de l'année sur un graphique de tendance.

À l'intérieur de l'interaction, nous créons nos blancs de graphique, puis pour tous les éléments sélectionnés, nous faisons des statistiques, créons des éléments de graphique (lignes, marqueurs, statistiques d'erreur),
assemblez tout et renvoyez les graphiques sous forme de deux onglets pour un affichage compact.

  return pn.Tabs(('Distribution', bokehdist), ('Trend', bokehfig)) 

Ensuite, nous créons notre mise en page en plaçant des widgets et des onglets contenant des graphiques.
Le procédé plaît par sa simplicité et sa flexibilité en chêne, grâce à une présentation tabulaire simple.

 pn.Row(pn.Column('### Dashboard demo', multi_select, year_slider, checkbox), update).servable() 

La méthode servable () rend notre tableau de bord disponible pour que le serveur de panneau s'exécute
indépendamment de la ligne de commande modifiant les paramètres du serveur. Si nous continuons à travailler avec le bloc-notes, toutes les fonctionnalités interactives y sont disponibles. Pour tester l'apparence de l'application pour un utilisateur externe, ajoutez la méthode show (). Sur ce point, tous nos efforts supplémentaires sont terminés et ils ne sont pas très différents de la construction de graphiques.

Voici à quoi ressemble un tableau de bord dans un ordinateur portable.

image

Si nous voulons rendre le tableau de bord accessible de l'extérieur de l'hôte local, nous devons être autorisés à servir les demandes de l'extérieur, avec une liste blanche attentive ou avec un geste large comme

 panel serve Dashboard_demo_panel.ipynb --allow-websocket-origin=* 

L'application que l'analyste verra n'est pas différente de celle du cahier

image

Les auteurs affirment qu'il ne permettra pas l'exécution de code tiers, mais ils ont évoqué de manière quelque peu évasive le degré de protection lors d'un récent webinaire . Pour partager avec les analystes - cela suffit, il n'est pas nécessaire que de telles choses collectées sur le genou dépassent.

Enfin, comparons comment faire la même chose en utilisant Voila.
La version avec ipywidgets et bokeh n'a pas volé pour moi, jurant à javascript dans la sortie.
Par conséquent, je l'ai vu dans des graphiques statiques matplotlib.

Pour assembler la même interface à partir d'ipywidgets avec une liste déroulante, un curseur, une case à cocher et deux onglets ont pris un certain effort et des béquilles, manquaient de la même flexibilité de table. Le corps de la fonction principale devait être scié afin de tirer les graphiques entre les onglets, c'est-à-dire que le bloc-notes devait être ajusté beaucoup plus que dans le premier cas.

Pour démarrer l'application web avec l'extension installée pour Jupyter, un clic suffit. L'image est assez similaire. En raison de la différence de fonctionnalité - le widget interactif utilisé ne calcule pas la fonction par défaut, donc les graphiques n'apparaissent qu'après la première interaction avec l'utilisateur.

image

Personnellement, selon mes sentiments - Panel a clairement gagné en termes de convivialité. Le même résultat a été obtenu pour un nombre beaucoup plus faible d'actions et les efforts supplémentaires pour l'ajouter au bloc-notes sont minimes. Alors tout est convivial et joyeusement déplacé vers le panneau!

Source: https://habr.com/ru/post/fr470864/


All Articles