Logo Zéphyrnet

Conseils, astuces et astuces simplifiés pour les scientifiques des données

Date :

Conseils, astuces et astuces simplifiés pour les scientifiques des données

Aujourd'hui, je vais parler de quelques astuces que j'ai apprises en plus d'un an d'utilisation de Streamlit, que vous pouvez également utiliser pour libérer vos puissantes applications DS/AI/ML (quelles qu'elles soient).


By Kaveh Bakhtiyari, Doctorant en Intelligence Artificielle, Data Scientist chez SSENSE

L'équipe de science des données de SSENSE construit généralement des outils et des tableaux de bord très complexes. Par contre, leur entretien était un défi pour l'équipe. Cela fait plus d'un an que l'équipe de science des données de SSENSE utilise Rationalisé activement. Avant d'employer Streamlit, nous utilisions Dash, Flask, R Shiny, etc. pour créer nos outils et les mettre à disposition des parties prenantes au sein de l'entreprise. En octobre 2019, nous avons commencé à évaluer la puissance potentielle de Streamlit pour nos projets en comprenant ses avantages et comment l'intégrer dans notre infrastructure de science des données. Fin 2019, nous avons commencé quelques projets pilotes sur Streamlit au lieu de Flask et Dash.

Après la période d'évaluation de Streamlit, nous avons rapidement réalisé qu'il avait beaucoup de potentiel et qu'il pouvait augmenter le rythme de développement et diminuer considérablement l'effort de maintenance. Outre toutes les fonctionnalités intéressantes et la facilité d'utilisation, Streamlit ne fournit pas les comportements, événements et conceptions d'interface utilisateur personnalisés que vous pourriez obtenir à partir d'autres bibliothèques de développement Web telles que Flask. Et finalement, en raison des mêmes limitations, il a été beaucoup plus facile de développer des applications propres et de les maintenir facilement à long terme. Son interface utilisateur uniforme était également un point positif de mon point de vue. Tout d'abord, il est clair, propre et réactif. Deuxièmement, tous les membres de l'équipe peuvent créer des outils avec des conceptions uniformes. Mais encore, comment pouvons-nous fournir de tels éléments personnalisés que nous avions dans nos applications Flask ? Eh bien, la réponse courte est que ce n'est pas tout à fait possible, mais nous pouvons utiliser quelques astuces et conseils, qui peuvent vous aider à personnaliser davantage ce que vous concevez.

Aujourd'hui, je vais parler de quelques astuces que j'ai apprises en plus d'un an d'utilisation de Streamlit, que vous pouvez également utiliser pour libérer vos puissantes applications DS/AI/ML (quelles qu'elles soient).


Streamlit est un projet open source actif et la communauté fournit fréquemment de nouvelles mises à jour. J'ai personnellement mis en signet leur Page du journal des modifications pour suivre les nouvelles mises à jour et fonctionnalités. Certains éléments dont nous discutons aujourd'hui ne sont pas pris en charge nativement dans Streamlit (0.82.0), ce qui pourrait ne plus être le cas à l'avenir.


Configuration des pages

 
Cette fonctionnalité a été initialement introduite dans la version bêta, et elle a été déplacée vers l'espace de noms Streamlit dans version 0.70.0. Cette fonctionnalité intéressante vous permet de définir le titre de la page, la favicon, le mode de mise en page et l'état de la barre latérale.

Par défaut, Streamlit définit le titre de la page comme nom de fichier python d'origine, avec le favicon Streamlit. Avec cette ligne de code, vous pouvez personnaliser le titre de votre page, ce qui est très avantageux si vos utilisateurs mettent vos applications en signet. Ensuite, favicon leur permet de différencier les applications s'ils ont de nombreuses applications ouvertes dans plusieurs onglets de navigateur. La configuration de la disposition et de l'état initial de la barre latérale peut également exécuter votre application comme vous le souhaitez.

Avant d'introduire cette fonctionnalité, certaines de ces fonctionnalités ne pouvaient être possibles qu'en injectant du CSS dans la page. Par exemple, si vous souhaitez créer un écran large, vous pouvez procéder comme suit :


Cette ligne doit être la première commande Streamlit de votre page et ne peut être définie qu'une seule fois. Indépendamment de ce que vous définissez pour la mise en page (centrée ou large), les utilisateurs ont le contrôle sur eux dans les paramètres.


Composant vide

 
Il y a plusieurs occasions où vous souhaitez générer de nouveaux éléments sur la page, ou vous souhaitez remplacer un texte ou un élément existant par un autre. Ceci est possible en utilisant st.empty(). Cette méthode crée un espace réservé vide sur votre page et, à l'avenir, vous pouvez le remplacer par n'importe quel objet ou texte de votre choix.

Le code ci-dessus crée initialement un espace réservé sur votre page, puis il écrit « Ceci est un exemple de texte.” au même endroit, et après cela, il le remplace par un objet numérique d'entrée.

C'est très utile pour avoir des objets dynamiques sur la page, ou simplement pour montrer la progression de certains calculs comme le pourcentage de progression.

Chaînes de requête

 
Définir et récupérer des chaînes de requête dans vos applications Streamlit est une fonctionnalité expérimentale pour le moment. J'espère qu'il sera déplacé dans l'espace de noms principal à l'avenir car j'aime personnellement cette fonctionnalité. Si vous vous demandez pourquoi nous avons besoin de chaînes de requête dans Streamlit, vous n'êtes pas seul.

Lorsque vous définissez vos entrées personnalisées dans des chaînes de requête, cela permet aux utilisateurs de partager les liens avec exactement les mêmes paramètres qu'ils avaient. Sinon, ils doivent également entrer leurs paramètres.

L'autre cas d'utilisation que j'utilise personnellement est de partager des informations entre différentes applications Streamlit. Dans notre équipe, chaque data scientist peut travailler sur différents projets, et nous pouvons avoir besoin de rediriger les utilisateurs d'une application à une autre. Lorsque nous fournissons le lien à l'utilisateur pour accéder à l'autre application Streamlit, nous voulons nous assurer que l'expérience de l'utilisateur est aussi transparente que possible. Par conséquent, nous transmettons les paramètres requis à la nouvelle application afin qu'elle se charge des données et de l'analyse qu'elle recherche.

Par exemple, quelques-uns de nos outils sont liés aux produits que nous avons sur le site Web (quelle surprise). Lorsqu'ils consultent une analyse sur le produit 1 sur l'application 1, nous voulons nous assurer qu'une fois qu'ils accèdent à l'application 2 pour obtenir plus de détails ou une analyse différente, il affiche automatiquement le produit 1 et que l'utilisateur n'a pas besoin de saisir à nouveau les informations.

Exécution de Streamlit dans un sous-dossier

 
Il existe des scénarios dans les projets de science des données dont nous pouvons avoir besoin pour avoir nos applications Streamlit dans un sous-dossier. Dans ce cas, étant donné que Streamlit exécute les applications à partir d'un sous-dossier, l'application n'a pas accès aux bibliothèques des dossiers parents. Afin de surmonter ce problème, nous devrons peut-être avoir notre fichier d'application principal Streamlit à la racine du projet ou ajouter le dossier racine dans le chemin système au début de nos applications Streamlit.

Sessions

 
Streamlit est une application basée sur les sessions. Cela signifie qu'une fois qu'un utilisateur accède à l'application, Streamlit lui attribue un identifiant de session, et d'autres actions consécutives et transferts de données sont associés à cette session. À cause de cela, lorsque vous avez un processus, cela n'affectera pas les autres utilisateurs simultanés à moins que vous n'utilisiez la mise en cache. Nous discuterons Cache haute performance  plus tard.

Par défaut, vous n'avez pas d'accès standard aux contrôles de session dans Streamlit, et il n'est pas encore documenté officiellement, et il est utilisé à des fins internes uniquement. Cependant, vous pouvez toujours y accéder et bénéficier de certains avantages en les utilisant.

Les applications Streamlit sont développées dans un format de type script. Cela signifie que chaque interaction avec l'application déclenchera la réexécution de l'ensemble du code du début à la fin. Cela rend Streamlit extrêmement facile à utiliser, mais en même temps, très difficile à contrôler des événements consécutifs car il n'y a pas de capacité de gestion d'événements pour les développeurs.

Supposons que vous ayez un bouton (st.button) pour démarrer un processus, et dans l'écran résultant, vous souhaitez donner à l'utilisateur des options interactives avec lesquelles travailler, par exemple, une autre case à cocher, un bouton radio ou simplement un autre bouton. Dans ce cas, lorsque vous cliquez sur le premier bouton (appelons-le button_run) devient True quand il réexécute tout le code. Il n'y a rien de mal et l'application fonctionne correctement.


Image(s)

 

Maintenant, sur la page résultante, il y a un autre bouton (appelons-le button_filter) pour filtrer les résultats. Si vous cliquez maintenant sur le deuxième bouton (button_filter), sa valeur devient True, et Streamlit exécute à nouveau l'intégralité du code. Mais le problème est que maintenant le premier bouton (button_run) est devenu False car nous n'avons pas cliqué dessus. Dans ce cas, lorsque Streamlit réexécute tout le code, il y a l'hypothèse que button_run n'est pas cliqué, et button_filter est cliqué. Et il ne se souvient pas que button_run a été précédemment cliqué. Par conséquent, button_filter le code cliqué ne sera jamais exécuté, car button_filter lui-même était le résultat du premier bouton, button_runCliquez sur.

Image(s)
 

Dans de tels cas, nous devons enregistrer les événements, afin que Streamlit puisse se rappeler quand un utilisateur clique sur le premier bouton, et une fois que le bouton suivant est cliqué, il peut comprendre qu'il s'agit de deux actions consécutives et que les deux boutons doivent être considérés comme cliqués.

Vous pensez peut-être que nous pouvons enregistrer ces informations dans une base de données ou un fichier texte temporaire. C'est possible, mais comment différencier les différents utilisateurs potentiels ?

Streamlit a un objet Session non documenté intégré qui peut stocker des informations temporaires pour chaque utilisateur. Dans ce cas, lorsqu'un utilisateur clique sur button_run, nous stockons l'événement cliqué dans la session, et une fois button_filter est cliqué, nous pouvons vérifier si button_run a été précédemment cliqué pour contrôler le bon flux de données.

Voici la classe de session que vous pouvez inclure dans votre application :

Une fois que vous avez ajouté la classe de session, vous pouvez utiliser la session pour stocker et récupérer les informations.

SQLAlchemy

 
SQLAlchemy est l'une des bibliothèques populaires standard pour se connecter à plusieurs types de bases de données telles que SQLite, MySQL, etc. SQLAlchemy peut être utilisé pour plusieurs plates-formes comme des applications de bureau, des applications Web ou même des applications mobiles. Si vous avez déjà utilisé cette bibliothèque, vous vous êtes rendu compte qu'elle est assez simple, mais lorsqu'il s'agit de développement Web, cela peut devenir un peu délicat. Le principal défi de l'utilisation de cette bibliothèque pour les applications Web est de contrôler le nombre de connexions à la base de données.

À cette fin, nous avons des bibliothèques séparées pour Flask (sqlalchemy-flask) et Tornade (sqlalchemy-tornado) que les développeurs peuvent utiliser sans souci. Mais à ma connaissance, nous n'avons pas de bibliothèque spécifique pour Streamlit. Étant donné que Streamlit est basé sur Tornado, nous pouvons peut-être utiliser la version tornado, mais je n'ai personnellement pas testé cela.

Comme vous vous en souvenez, Streamlit est basé sur une session, ce qui signifie qu'il exécute une instance distincte pour chaque utilisateur. SQLAlchemy ici ne fait pas exception. Si vous ne faites pas attention, Streamlit créera une connexion à la base de données pour chaque utilisateur et peut-être pour chaque interaction. En fonction de votre base de données, vos connexions peuvent être rejetées s'il y a autant de connexions actives disponibles. En conséquence, python peut se retrouver avec une erreur étrange telle que "double gratuit ou corruption" et faire planter votre application.

Dans le forum Streamlit, il est suggéré de mettre en cache la connexion, ce qui fonctionne bien sur SQLLite, mais pas très bien sur MySQL par exemple. Lorsque vous mettez en cache votre connexion à la base de données, elle ne sera pas ouverte pendant une durée illimitée, afin que vous puissiez résoudre ce problème avec ttl. Dans ce cas, vous pouvez vous assurer que votre objet de connexion a expiré avant de heurter un mur côté base de données car la connexion a déjà été interrompue. Théoriquement, cela fonctionne bien si vous avez un nombre très limité d'utilisateurs simultanés.

Le principal problème avec la mise en cache de la connexion commence lorsque deux utilisateurs exécutent le code qui met en cache l'objet en même temps. Et à la fin, la connexion en cache n'est peut-être pas la bonne, mais celle qui a expiré car il y a eu deux connexions créées en même temps, mais une seule a été mise en cache.

SQLAlchamy a un objet appelé Session, dans lequel nous pouvons créer nos connexions à la base de données (moteurs) et exécuter nos requêtes SQL. Cela vérifierait si la nouvelle connexion existe déjà dans le pool, et si elle existe, elle ne créera pas de nouvelle connexion pour éviter le problème de saturation de la connexion à la base de données. Dans ce cas, vous n'avez plus besoin d'utiliser la mise en cache Streamlit pour stocker votre connexion à la base de données. L'extrait de code suivant vous aidera à comprendre comment utiliser Session pour vous connecter à MySQL.

N'oubliez pas qu'avant d'utiliser Session dans SQLAlchemy, si vous utilisiez uniquement le moteur, vous deviez retourner conn = engine.connect() au lieu de la session, et vous pouvez utiliser df = pd.read_sql(query, conn) pour exécuter la requête. Cependant, ces méthodes ne fonctionnent pas sur les sessions SQLAlchemy.

Cache haute performance

 
Streamlit a une documentation très complète et utile sur la mise en cache, et honnêtement, c'est l'une de ses fonctionnalités les plus utiles. Ne pas l'utiliser ou en faire un mauvais usage peut avoir un impact considérable sur les performances de l'application et le temps de chargement/d'exécution. Je ne veux pas passer en revue les détails de la mise en cache qui est déjà disponible dans Documentation simplifiée mais en ne mentionnant que quelques conseils et découvertes.

Accès étendu à l'application

 
Contrairement aux objets Session, les objets mis en cache sont accessibles à l'échelle de l'application. Cela signifie qu'une fois que vous avez mis en cache les informations, elles sont accessibles à tous les utilisateurs de l'application. Il est donc important de ne pas mettre en cache les paramètres et les données spécifiques à l'utilisateur, et à la place, nous pouvons utiliser Session comme nous en avons discuté précédemment.

Paramètres de mise en cache

 
Le mécanisme de mise en cache a peu de paramètres qui peuvent contrôler la façon dont un objet doit être mis en cache.

  • ttl <float, None>: Cela signifie Time-to-Live et définit combien de temps un objet mis en cache doit être en vie. Cette expiration est définie en secondes.
  • max_entrées <int, None>: Une fois que vous commencez à appeler une fonction avec différents paramètres, elle commence à mettre en cache toutes ces variations, et en peu de temps, cela peut représenter une énorme quantité de données mises en cache. Ce paramètre peut définir le nombre de variations d'une fonction pouvant être mises en cache et les anciennes seront supprimées. Cela contrôle et limite la quantité de mémoire consommée.
  • persistant <bool>: Il s'agit d'un paramètre booléen permettant de définir si les données mises en cache doivent être stockées sur un disque dur ou une mémoire. N'oubliez pas qu'une fois que vous l'avez défini sur True, Streamlit sélectionne l'objet et le stocke sur le disque dur, et que tous les objets (tels que la connexion à la base de données SQLAlchamy) ne peuvent pas être récupérés. Ainsi, vous pouvez obtenir une erreur pour certaines fonctions de mise en cache persistantes.
  • Allow_output_mutation <bool>: Une fois la sortie d'une fonction mise en cache, si vous modifiez la sortie (mutation), les résultats seront stockés dans l'objet mis en cache et comme je l'ai mentionné plus tôt, celui-ci est accessible à tous les utilisateurs. La meilleure pratique consiste donc à éviter de modifier l'objet mis en cache. Néanmoins, il existe des cas où vous devez modifier directement l'objet mis en cache. Dans ce cas, ce paramètre permettrait à Streamlit de muter l'objet mis en cache.
  • supprimer_st_warning <bool>: Parfois, Streamlit envoie des avertissements à l'utilisateur/développeur afin qu'il soit conscient des conséquences de la mise en cache. Définir ce paramètre sur False arrêtera ces avertissements.
  • show_spinner <bool>: Chaque fois que Streamlit exécute des fonctions censées être mises en cache, vous verrez un message sur votre interface utilisateur disant « Running function_name ». Cela ne vous dérangera peut-être pas tant que ça, à moins que vous n'ayez beaucoup de fonctions. Ensuite, vous verrez tous ces types de messages sur votre interface utilisateur. La définition de ce paramètre sur False empêchera l'affichage de ces messages.

Le code ci-dessus ne met en cache les résultats que pendant 60 secondes et ne conserve que les 20 dernières variantes de cette fonction. Il n'affiche pas non plus d'avertissement, ne vous montre aucun message sur l'interface utilisateur Streamlit lors de l'exécution de cette fonction.

Depuis que nous avons mis allow_output_mutation à False, le code suivant n'est pas autorisé, et nous ne pouvons pas mettre à jour (muter) le résultat de la fonction.

Effacer le cache

 
Dans certains cas, vous devrez peut-être vider le cache par programme. L'effacement de toutes les données mises en cache est possible manuellement via le menu hamburger en haut à droite des applications Streamlit, mais si vous souhaitez le faire par programmation, vous pouvez utiliser la méthode non documentée suivante.

Session SQLAlchemy / Session étendue

 
Maintenant que vous pouvez vous connecter avec succès à la base de données à l'aide de SQLAlchemy Session, Scoped Session et Pooling, vous devrez peut-être mettre en cache vos sessions ou les fonctions qui utilisent la connexion à la base de données. Comme indiqué précédemment, puisque nous utilisons Pool et Scoped Session, nous n'aurons peut-être pas besoin de mettre en cache la connexion, mais nous devrons peut-être quand même avoir besoin de mettre en cache nos fonctions. Ci-dessous, nous proposons deux recommandations sur la mise en cache des fonctions qui utilisent des sessions.

L'exemple suivant utiliserait hash_funcs pour identifier quel paramètre de Session doit être surveillé pour le hachage.

Si l'exemple ci-dessus ne fonctionne pas, par exemple dans le cas de l'utilisation scoped_session, vous pouvez simplement demander à Streamlit d'ignorer la session de hachage comme ci-dessous :

Piratage de l'interface utilisateur

 



La simplicité de Streamlit est due au fait que vous n'avez pas besoin de vous occuper de l'interface utilisateur et qu'il est livré avec des éléments d'interface utilisateur réactifs pré-intégrés qui seront placés élégamment sur votre page. Même si dans les versions récentes, ils ont fourni de nouvelles mises à jour bêta qui vous permettent de créer des colonnes et d'y organiser vos éléments, il n'y a pas beaucoup de personnalisation à faire avec son interface utilisateur.

Lorsque je déploie mes applications, il existe un large éventail d'utilisateurs dans l'entreprise avec lesquels travailler. J'utilise beaucoup des mécanismes de mise en cache pour contrôler les performances et la vitesse de mes applications. Certaines de mes fonctions prennent quelques minutes à s'exécuter et j'utilise un mécanisme de mise en cache pour m'assurer que les autres utilisateurs n'attendront plus la même demande et auront une expérience haute performance avec l'application. Mais, si un utilisateur clique sur ce bouton de menu hamburger en haut à droite et sélectionne "Vider le cache'', cela peut avoir un impact considérable sur les performances de l'application pour les autres utilisateurs, jusqu'à ce que la fonction mette à nouveau en cache les résultats. Ou, par exemple, certaines de mes applications sont conçues pour s'afficher au mieux en mode large, et si un utilisateur sélectionne le mode "centre", cela peut affecter l'apparence de mon application.

Outre toutes celles qui peuvent affecter directement mon application, il existe d'autres options dans le menu hamburger auxquelles un utilisateur normal n'a peut-être pas besoin d'avoir accès. Par exemple, l'accès au Streamlit Github, à la documentation, etc.

Il y a un idée proposée sur Streamlit Github pour limiter ces options de menu hamburger une fois l'application déployée, mais jusqu'à aujourd'hui, ce problème est toujours ouvert et nous ne pouvons pas les gérer directement. Par conséquent, je suis venu avec ma solution CSS pour résoudre ce problème.



Dans ma solution proposée, vous pouvez supprimer (masquer) le pied de page Streamlit et contrôler les éléments du menu hamburger. Il vous suffit d'injecter le CSS suivant dans votre application en utilisant st.markdown et autoriser les codes HTML « dangereux ».

Les chiffres mentionnés ci-dessus dans li:nth-of-type(n) font référence à l'élément item dans le menu hamburger et leur ordre peut changer dans les futures mises à jour de Streamlit.



De plus, actuellement, il existe une option dans le menu des hamburgers (3e élément) appelée "Déployer cette application”. Cet élément n'est affiché que si l'application est accessible via une adresse IP locale de bouclage (soit localhost or 127.0.0.1). Si vous accédez à votre application via votre adresse IP LAN/WAN, cet élément ne sera pas affiché.

Enregistrer un screencast

 
Cette fonctionnalité a été introduite dans version 0.55.0, et j'ai été personnellement ravi de cette fonctionnalité qui nous permettrait d'enregistrer nos applications à des fins de formation et de présentation. Bientôt, nous avons réalisé que cette fonctionnalité ne fonctionnait pas pour les autres utilisateurs accédant à nos applications Streamlit, et ils reçoivent le message suivant en cliquant sur cette option.



En raison des restrictions de confidentialité mises en œuvre et imposées par les navigateurs, cette fonctionnalité ne fonctionne qu'aux conditions suivantes :

  • Uniquement sur les versions récentes de Chrome, Firefox et Edge
  • Accéder soit sur localhost or 127.0.0.1
  • S'il n'est pas accessible localement, il doit être derrière un certificat SSL (https)

Si vous servez vos applications derrière un proxy, comme Nginx — et que vous souhaitez utiliser cette fonctionnalité, assurez-vous qu'elle est sécurisée avec un certificat SSL. Actuellement, Streamlit ne prend pas en charge nativement SSL, mais il peut être déployé derrière un proxy avec un certificat SSL.

Composantes

 
Depuis l'introduction des composants Streamlit, les développeurs ont commencé à créer des composants étonnants qui peuvent être servis sur les applications Streamlit. Si vous le souhaitez, vous pouvez créer vos propres composants à l'aide de l'API Streamlit Component. Streamlit a également une galerie de composants qui présente certains des composants utiles et intéressants qui sont accessibles au public. Parmi eux, j'en ai sélectionné quelques-uns que j'utilise pour créer des applications étonnantes dans SSENSE.

Éditeur ACE

 
Cet éditeur fournit un éditeur à code couleur pour différents langages de programmation. J'utilise personnellement beaucoup de données JSON dans mes applications, et j'utilise cet éditeur pour afficher et modifier mon contenu JSON. C'est incroyable car il peut également capturer mes structures de formatage et mes erreurs.



https://github.com/okld/streamlit-ace

 

Si vous en avez assez de la zone de texte multiligne standard Streamlit, ce composant peut être une très bonne alternative.

Ag-Grille

 
Streamlit peut gérer des trames de données, et il peut les afficher dans un format basé sur un tableau soit en utilisant st.write or st.dataframe. Cependant, par défaut, Streamlit ne fournit pas de contrôleurs personnalisés sur la présentation de votre trame de données à l'exception du tri en cliquant sur les noms des colonnes.

Ag-Grid est un composant de grille qui peut être importé dans Streamlit. En utilisant ce composant, vous pouvez non seulement présenter votre bloc de données, mais également inclure des liens, des images, des cases à cocher, etc. dans vos cellules de grille, ainsi que filtrer les données, les rechercher, les agréger et les regrouper.



https://github.com/PablocFonseca/streamlit-aggrid

 

Si vous devez beaucoup afficher des trames de données, il est peut-être temps d'essayer Ag-Grid pour voir son énorme potentiel dans vos applications.

Animations Lottie

 
Enfin, dans ma liste de composants, il y a Lottie Animations. Si vous vérifiez lottiefiles.com, vous verrez des milliers d'animations vectorielles dans plusieurs formats tels que JSON, qui peuvent être placées dans vos applications. Ce composant vous permettrait de servir ces animations Lottie en donnant simplement son fichier JSON.



https://lottiefiles.com/968-loading

 

J'utilise personnellement ces animations pour montrer des spinners magnifiquement conçus pendant que je charge ou que je calcule des trucs. Ces animations donneront un aspect plus vivant et dynamique à votre prochain projet de science des données.

Mot de la fin

 
Ici, j'ai présenté quelques trucs et astuces sur la façon de développer des applications Streamlit. Certaines de ces astuces peuvent devenir nativement disponibles dans les futures versions de Streamlit, de sorte que nous n'avons peut-être pas besoin de faire les hacks, ou d'autre part, elles peuvent venir avec des mises à jour pour empêcher nos hacks. Qui sait, mais nous pouvons en profiter pour le moment et espérer de nouvelles fonctionnalités étonnantes dans Streamlit.

Je tiens également à remercier la communauté Streamlit pour la création d'un outil aussi incroyable.

 
Bio: Kaveh Bakhtiyari est doctorant en Intelligence Artificielle et Data Scientist chez SSENSE.

ORIGINALE. Republié avec permission.

Connexe:


PlatonAi. Web3 réinventé. L'intelligence des données amplifiée.
Cliquez ici pour y accéder.

Source : https://www.kdnuggets.com/2021/07/streamlit-tips-tricks-hacks-data-scientists.html

spot_img

Dernières informations

spot_img