Introduction à Streamlit pour Python
Introduction à Streamlit pour Python
Pourquoi Streamlit ?
Dans un monde où les données sont au cœur de nombreuses décisions, il est devenu
essentiel de pouvoir les analyser et les visualiser de manière rapide et efficace.
Cependant, les outils traditionnels pour la création d’applications web interactives,
comme Flask ou Django, peuvent être complexes et nécessitent une grande expertise en
développement web. C’est là que Streamlit intervient.
Streamlit est une bibliothèque Python open source qui permet de créer des applications
web interactives de manière simple, rapide et sans nécessiter de compétences avancées
en développement front-end. Que vous soyez analyste de données, scientifique des
données ou ingénieur, Streamlit permet de transformer vos scripts Python en
applications web fonctionnelles en quelques lignes de code. Avec Streamlit, vous pouvez
créer des dashboards dynamiques, des visualisations interactives et des outils d’analyse
de données en un temps record.
L’objectif de ce livre
Ce livre est destiné à toute personne souhaitant créer des applications web interactives
avec Python. Il s’adresse principalement :
• Aux scientifiques des données qui veulent partager leurs analyses de manière
interactive.
• Aux développeurs Python qui souhaitent se familiariser avec Streamlit pour des
projets plus rapides et simples.
• Aux analystes qui ont besoin de créer des outils visuels pour explorer leurs
données.
• À toute personne passionnée par l’interactivité et le développement rapide
d’applications web avec Python.
Aucune expérience préalable en développement web n’est requise. Tout au long du livre,
nous allons explorer les fonctionnalités de Streamlit de manière progressive, avec des
exemples pratiques qui vous permettront de créer vos propres applications dès le début.
Un voyage interactif
À travers des exemples pratiques, des conseils d’experts et des projets concrets, ce livre
vous permettra de comprendre comment Streamlit peut transformer vos projets de
données. Préparez-vous à plonger dans l’univers du développement d’applications
interactives, à exprimer votre créativité et à créer des outils utiles et dynamiques.
Bienvenue dans le monde de Streamlit !
Streamlit est une bibliothèque Python open source qui permet de créer des applications
web interactives de manière rapide et simple. Contrairement aux frameworks de
développement web traditionnels, tels que Flask ou Django, qui nécessitent des
connaissances approfondies en HTML, CSS et JavaScript, Streamlit permet aux
développeurs de se concentrer uniquement sur le code Python. En quelques lignes de
code, vous pouvez transformer un script Python en une application web interactive,
idéale pour la visualisation de données, les analyses exploratoires et le prototypage
rapide.
L’un des principaux avantages de Streamlit est sa simplicité d’utilisation. Il permet de
créer des interfaces graphiques réactives pour les utilisateurs sans avoir à écrire de code
JavaScript complexe. Cette approche permet aux scientifiques des données, analystes,
ingénieurs et chercheurs de partager facilement leurs résultats et d’explorer leurs
données de manière interactive.
Streamlit est également très flexible et s’intègre parfaitement avec des bibliothèques
populaires de Python telles que Pandas, NumPy, Matplotlib, Plotly et Altair. Grâce à ces
intégrations, il devient facile de visualiser des ensembles de données, de créer des
graphiques interactifs et de réaliser des analyses en temps réel, le tout dans une seule
application.
En plus de sa simplicité, Streamlit permet de mettre à jour les applications en temps réel.
Lorsque vous modifiez le code de votre application, celle-ci se met automatiquement à
jour dans votre navigateur, ce qui accélère considérablement le processus de
développement et de test.
Ce premier chapitre vous guidera dans la prise en main de Streamlit, en vous montrant
comment installer cette bibliothèque et créer votre première application interactive.
Vous découvrirez également les bases de l’interface et des composants essentiels qui
vous permettront de démarrer rapidement avec Streamlit.
2. Installation de Streamlit
Avant de pouvoir commencer à utiliser Streamlit, il est nécessaire de l’installer sur votre
machine. Cette étape est simple et rapide, et nécessite seulement quelques lignes de
commande. Voici comment procéder :
Prérequis
Assurez-vous d’avoir Python installé sur votre machine. Streamlit fonctionne avec
Python 3.7 et les versions ultérieures. Vous pouvez vérifier la version de Python installée
en exécutant la commande suivante dans votre terminal ou invite de commande :
python --version
Si Python n’est pas installé, vous pouvez le télécharger et l’installer depuis le site officiel
de Python.
Une fois Python installé, vous pouvez installer Streamlit à l’aide de pip, le gestionnaire
de paquets Python. Ouvrez un terminal (ou l’invite de commandes sur Windows) et
exécutez la commande suivante :
pip install streamlit
Pour vérifier que Streamlit a bien été installé, vous pouvez exécuter la commande
suivante :
streamlit --version
Cela devrait afficher la version actuelle de Streamlit installée sur votre machine. Si la
commande renvoie la version correctement, cela signifie que l’installation a réussi.
Une fois l’installation terminée, vous êtes prêt à commencer à utiliser Streamlit et à créer
votre première application !
Maintenant que Streamlit est installé, il est temps de créer votre première application.
Dans cette section, nous allons explorer les étapes nécessaires pour créer une
application Streamlit simple et l’exécuter dans votre navigateur.
La première étape consiste à créer un fichier Python où vous écrirez votre application
Streamlit. Utilisez votre éditeur de texte ou un IDE comme VSCode, PyCharm, ou même
un simple éditeur de texte. Nommez votre fichier, par exemple, [Link].
Exécuter l’application
Une fois que vous avez écrit votre code dans [Link], il est temps d’exécuter
l’application. Pour ce faire, ouvrez un terminal ou une invite de commande, puis naviguez
jusqu’au répertoire où se trouve votre fichier [Link]. Utilisez ensuite la commande
suivante pour lancer l’application :
streamlit run [Link]
Comprendre le fonctionnement
Lorsque vous exécutez l’application, Streamlit crée un serveur local pour afficher
l’interface utilisateur. Toute modification que vous apportez à votre fichier [Link] sera
automatiquement reflétée dans le navigateur sans avoir besoin de recharger la page
manuellement. Cela facilite grandement le développement et le test d’applications.
Résumé
• Vous avez créé un fichier Python contenant une application Streamlit simple.
• Vous avez exécuté l’application en utilisant la commande streamlit run.
• Vous avez appris à afficher des éléments simples tels que des titres, des textes et
des boutons.
Cette première application est une introduction aux concepts fondamentaux de
Streamlit, et vous allez explorer plus de fonctionnalités interactives et avancées dans les
chapitres suivants.
Dans cette section, nous allons approfondir l’exploration des composants de base que
Streamlit met à votre disposition pour construire des interfaces interactives et visuelles.
Ces composants sont essentiels pour donner vie à vos applications et offrir une
expérience utilisateur fluide.
Affichage de texte
Streamlit offre plusieurs manières d’afficher du texte, que ce soit pour des titres, des
sous-titres, des paragraphes ou même du contenu enrichi via Markdown. Ces
fonctionnalités vous permettent de créer des pages attrayantes avec du contenu
dynamique.
• Titre : Le composant [Link]() est utilisé pour afficher un titre principal sur la
page. Il apparaît en haut, en grand et en gras.
[Link]("Bienvenue dans notre application Streamlit")
• En-têtes et sous-titres : Pour ajouter des sous-titres ou des sections, vous pouvez
utiliser [Link]() ou [Link](). Ces éléments sont utiles pour structurer
le contenu de votre application.
[Link]("Analyse des données")
[Link]("Données de ventes mensuelles")
• Texte enrichi avec Markdown : Vous pouvez utiliser [Link]() pour afficher
du texte formaté en Markdown. Cela permet d’ajouter des liens, des listes à puces, des
images et plus encore.
[Link]("# Ceci est un titre en Markdown")
[Link]("Voici un lien vers
[Streamlit]([Link]
[Link]("- Point 1\n- Point 2\n- Point 3")
Affichage d’images
Streamlit permet d’intégrer des images dans vos applications pour rendre vos
visualisations plus interactives et intéressantes. Vous pouvez afficher des images locales
ou provenant d’URL, et même ajuster la taille et les options d’affichage.
• Afficher une image à partir d’un fichier local : Utilisez [Link]() pour afficher
des images à partir d’un fichier sur votre machine locale.
from PIL import Image
• Afficher une image à partir d’une URL : Vous pouvez aussi charger des images en
ligne directement depuis une URL.
[Link]("[Link] caption="Image
depuis une URL", use_column_width=True)
Widgets interactifs
Les widgets sont des éléments interactifs qui permettent à l’utilisateur de modifier les
paramètres ou de filtrer les données directement depuis l’interface. Ces composants
rendent vos applications dynamiques et réactives.
• Bouton : Le bouton est l’un des widgets les plus simples mais puissants. Vous pouvez
l’utiliser pour déclencher une action lorsque l’utilisateur clique dessus.
if [Link]("Cliquez ici"):
[Link]("Le bouton a été cliqué !")
• Champ de texte (Text Input) : Si vous avez besoin d’un champ de texte pour que
l’utilisateur saisisse une valeur, st.text_input() est idéal.
nom = st.text_input("Quel est votre nom ?")
[Link](f"Bonjour {nom}!")
• Zone de texte (Text Area) : Pour un champ de texte plus large, comme un
commentaire ou une description, utilisez st.text_area().
commentaire = st.text_area("Laissez un commentaire")
[Link](f"Votre commentaire : {commentaire}")
Disposition de la page
[Link](x, y)
[Link](plt)
• Graphiques avec Plotly : Plotly permet de créer des graphiques interactifs et est
parfaitement compatible avec Streamlit. Utilisez st.plotly_chart() pour afficher
des graphiques Plotly.
import [Link] as px
df = [Link]()
fig = [Link](df, x="sepal_width", y="sepal_length",
color="species")
st.plotly_chart(fig)
Utilisation de st.session_state
Une des fonctionnalités les plus puissantes de Streamlit est la gestion de l’état de
l’application via st.session_state. Cela permet de conserver des variables d’état entre
différentes interactions et rafraîchissements de l’application. Cela est utile pour suivre les
actions de l’utilisateur sur la page.
• Exemple d’utilisation de session_state : Voici comment vous pouvez utiliser
st.session_state pour mémoriser la sélection d’un utilisateur sur plusieurs
rafraîchissements.
import streamlit as st
if "count" not in st.session_state:
st.session_state.count = 0
if [Link]("Ajouter 1 au compteur"):
st.session_state.count += 1
Streamlit permet également d’interagir avec des fichiers, que ce soit pour les charger ou
pour permettre à l’utilisateur de télécharger des fichiers à partir de l’application.
• Télécharger des fichiers avec st.file_uploader : Vous pouvez utiliser
st.file_uploader() pour permettre à un utilisateur de télécharger un fichier.
Streamlit supporte plusieurs types de fichiers, comme les fichiers CSV, Excel, JSON, etc.
uploaded_file = st.file_uploader("Choisissez un fichier CSV",
type="csv")
Dans cet exemple, l’utilisateur peut télécharger un fichier CSV, et ce fichier sera ensuite
chargé dans un DataFrame Pandas et affiché à l’écran.
Streamlit peut être intégré à des bases de données pour stocker et récupérer des
informations de manière dynamique. Bien que Streamlit ne gère pas directement les
bases de données, vous pouvez facilement connecter votre application à une base de
données en utilisant des bibliothèques Python comme sqlite3, SQLAlchemy, ou
psycopg2.
• Connexion à une base de données avec SQLite : Voici un exemple d’interaction avec
une base de données SQLite pour insérer et récupérer des données.
import sqlite3
import streamlit as st
# Ajout de données
if [Link]("Ajouter un utilisateur"):
name = st.text_input("Nom")
age = st.number_input("Âge", min_value=1, max_value=100)
[Link]('INSERT INTO users (name, age) VALUES (?, ?)',
(name, age))
[Link]()
Ce code permet d’ajouter des utilisateurs à une base de données SQLite et d’afficher la
liste des utilisateurs enregistrés. Les actions sont déclenchées par des boutons Streamlit,
ce qui permet une interactivité en temps réel avec la base de données.
Streamlit rend l’ajout de graphiques interactifs très facile. Vous pouvez créer des
graphiques en temps réel qui répondent aux actions de l’utilisateur.
• Graphique réactif avec st.line_chart : Voici un exemple où un graphique est mis à
jour en fonction des actions de l’utilisateur.
import pandas as pd
import numpy as np
import streamlit as st
Streamlit vous permet également d’intégrer des cartes interactives. Vous pouvez afficher
des données géospatiales avec [Link]() ou utiliser des bibliothèques comme Plotly
pour des cartes plus complexes.
• Carte simple avec [Link] : Voici comment afficher une carte avec des coordonnées
GPS.
import streamlit as st
import pandas as pd
# Afficher la carte
[Link](data)
Dans cet exemple, une carte est générée avec trois points sur la base des coordonnées
GPS spécifiées dans le DataFrame.
Dans cet exemple, le message affiché change en fonction de l’option sélectionnée par
l’utilisateur.
5. Interactivité avancée avec Streamlit (suite)
Streamlit offre une gamme d’outils permettant de rendre vos applications non seulement
réactives, mais aussi très dynamiques. Ces fonctionnalités avancées vous permettent
d’ajouter des interactions sophistiquées pour répondre aux besoins des utilisateurs et
améliorer l’expérience générale. Poursuivons l’exploration des mécanismes d’interactivité
que vous pouvez utiliser pour rendre vos applications encore plus interactives et
intelligentes.
Les formulaires dans Streamlit vous permettent de regrouper plusieurs widgets dans un
seul bloc, et de soumettre les données de manière synchronisée. Cela peut être utile
pour les cas où vous avez plusieurs entrées à collecter en même temps, comme pour un
formulaire d’inscription ou une recherche avancée.
• Créer et soumettre un formulaire : Vous pouvez regrouper plusieurs champs de
saisie dans un formulaire en utilisant [Link](). Voici un exemple pour soumettre un
formulaire avec plusieurs champs de texte et un bouton de soumission.
with [Link](key='my_form'):
nom = st.text_input("Nom")
age = st.number_input("Âge", min_value=18, max_value=100)
email = st.text_input("Email")
submit_button = st.form_submit_button("Soumettre")
if submit_button:
[Link](f"Nom : {nom}, Âge : {age}, Email : {email}")
Dans cet exemple, lorsque l’utilisateur remplit tous les champs et clique sur “Soumettre”,
les données sont affichées dans l’application. Cela permet de regrouper plusieurs actions
dans un seul envoi, ce qui est très utile pour des scénarios où l’on ne veut pas que les
données soient envoyées après chaque modification d’un champ.
Streamlit vous permet également de gérer les notifications et d’afficher des messages à
l’utilisateur en temps réel. Vous pouvez utiliser des éléments comme [Link]() ou
[Link]() pour informer l’utilisateur de certaines actions ou événements en cours.
Cela rend votre application plus réactive et interactive.
• Notifications avec [Link]() : Utilisez [Link]() pour afficher une notification
à l’utilisateur.
[Link]("Le traitement est terminé !")
Cette notification apparaît sous forme de message discret à l’utilisateur, ce qui est utile
pour informer de l’achèvement d’une tâche longue ou d’une mise à jour.
• Indicateur de progression avec [Link]() : Si une action prend du temps, vous
pouvez afficher une animation de chargement pour indiquer à l’utilisateur que
l’application est en train de traiter une requête.
with [Link]('Chargement des données...'):
# Simuler un temps de traitement
import time
[Link](3)
[Link]('Les données ont été chargées avec succès !')
Streamlit n’a pas de support natif pour des animations complexes comme celles que vous
pourriez trouver avec JavaScript ou des bibliothèques comme [Link]. Cependant, vous
pouvez créer des visualisations animées en combinant des bibliothèques comme Plotly,
Matplotlib, ou Altair, qui supportent les graphiques dynamiques et les animations.
• Animation avec Plotly : Plotly permet de créer des graphiques animés et interactifs
que vous pouvez intégrer dans vos applications Streamlit.
import [Link] as px
import pandas as pd
Dans cet exemple, un graphique animé est créé à partir des données en fonction d’une
variable temporelle. Lorsque l’utilisateur interagit avec ce graphique, les points se
déplacent selon la progression du temps, offrant ainsi une expérience dynamique.
Les applications Streamlit peuvent également se connecter à des APIs externes pour
récupérer des données en temps réel ou interagir avec d’autres services web. Que vous
souhaitiez afficher des prévisions météo, des cotations boursières ou toute autre
information en temps réel, vous pouvez intégrer facilement des APIs dans vos
applications Streamlit.
• Appel API avec requests : Voici un exemple d’interaction avec une API pour
récupérer des données météorologiques.
import requests
import streamlit as st
# Exemple de clé d'API pour une API de météo (à remplacer par une
clé valide)
api_key = "votre_cle_api"
city = st.text_input("Entrez une ville")
if city:
url = f"[Link]
q={city}&appid={api_key}"
response = [Link](url)
data = [Link]()
if [Link]("cod") != "404":
main_data = data["main"]
temp = main_data["temp"]
[Link](f"Température à {city} : {temp - 273.15:.2f}°C")
else:
[Link]("Ville non trouvée")
Dans cet exemple, l’application récupère les données météorologiques d’une ville
donnée via l’API OpenWeatherMap, ce qui permet d’afficher la température en temps
réel en fonction des entrées de l’utilisateur.
Streamlit offre également des options pour afficher des contenus multimédias interactifs,
tels que des vidéos ou des fichiers audio. Ces types de contenus peuvent enrichir votre
application et offrir une expérience plus immersive.
• Afficher une vidéo avec [Link]() : Streamlit permet d’afficher des vidéos à partir
de fichiers locaux ou d’URL. Par exemple :
[Link]("[Link]
Cela peut être utile pour des applications où l’audio joue un rôle clé, comme des analyses
audio ou des applications éducatives.
Gestion avancée des événements utilisateur
Lorsque vous gérez une interface interactive, il peut être nécessaire de répondre à des
événements utilisateur avec des actions conditionnelles. Streamlit vous permet de capter
ces événements pour personnaliser l’interaction de manière détaillée.
• Réagir aux changements dans les widgets : Les widgets dans Streamlit sont réactifs,
ce qui signifie que l’interface est mise à jour en temps réel dès qu’un utilisateur interagit
avec un composant.
Exemple de réactivité basée sur un [Link]() :
valeur = [Link]("Choisissez une valeur", 0, 100, 50)
[Link](f"La valeur choisie est : {valeur}")
Dans cet exemple, l’interface affiche la valeur actuelle du curseur chaque fois que
l’utilisateur interagit avec le slider. Vous pouvez aussi ajouter des actions
supplémentaires, comme l’exécution de calculs ou la mise à jour d’autres éléments de la
page en fonction des valeurs sélectionnées.
Une fois que votre application Streamlit est prête, la prochaine étape consiste à la rendre
accessible à vos utilisateurs. Streamlit facilite considérablement le déploiement de vos
applications, que ce soit pour un usage personnel, au sein d’une organisation, ou pour un
public plus large. Dans cette section, nous allons explorer les différentes méthodes de
déploiement pour partager vos applications avec d’autres utilisateurs, ainsi que les
bonnes pratiques à suivre.
Heroku est une plateforme en tant que service (PaaS) qui permet de déployer facilement
des applications web. Voici les étapes à suivre pour déployer une application Streamlit
sur Heroku :
1. Installer Heroku CLI : Téléchargez et installez Heroku CLI, qui permet de gérer vos
applications depuis le terminal.
2. Préparer l’application : Assurez-vous que votre application est prête, avec un fichier
[Link] et un fichier Procfile. Le fichier Procfile est nécessaire pour
indiquer à Heroku comment exécuter votre application.
Exemple de contenu d’un Procfile pour une application Streamlit :
web: streamlit run [Link]
AWS propose plusieurs services pour déployer des applications web, y compris EC2
(Elastic Compute Cloud) et Elastic Beanstalk. Pour une solution simple, vous pouvez
déployer votre application Streamlit sur un serveur EC2.
1. Lancer une instance EC2 : Créez une instance EC2 via la console AWS. Choisissez un
type d’instance qui correspond à vos besoins (par exemple, [Link] pour des tests ou
des petites applications).
2. Connecter-vous à l’instance EC2 : Utilisez SSH pour vous connecter à votre instance.
Vous devrez d’abord générer une paire de clés SSH lors de la création de l’instance.
3. Installer les dépendances : Une fois connecté à l’instance EC2, installez Python,
Streamlit, et toutes les autres dépendances de votre application. Utilisez les commandes
suivantes :
sudo apt-get update
sudo apt-get install python3-pip
pip3 install streamlit
4. Déployer votre application : Copiez votre code sur l’instance EC2 (en utilisant scp ou
un autre outil de transfert de fichiers), puis exécutez l’application avec la commande
suivante :
streamlit run [Link] --[Link] false
5. Accéder à l’application : Vous devrez configurer les groupes de sécurité sur AWS pour
autoriser l’accès au port 8501 (port par défaut de Streamlit). Vous pourrez alors accéder
à votre application via l’IP publique de votre instance EC2.
Si vous souhaitez déployer une application Streamlit de manière plus flexible et portable,
l’utilisation de Docker est une excellente option. Docker vous permet d’encapsuler votre
application dans un conteneur, ce qui garantit qu’elle fonctionnera de la même manière
sur n’importe quelle machine.
1. Créer un fichier Dockerfile : Créez un fichier Dockerfile dans le répertoire de votre
projet pour définir l’image Docker contenant toutes les dépendances nécessaires à
l’exécution de votre application Streamlit.
Exemple de Dockerfile :
FROM python:3.9-slim
3. Exécuter le conteneur Docker : Une fois l’image Docker construite, vous pouvez
lancer le conteneur avec la commande suivante :
docker run -p 8501:8501 mon_app_streamlit
Cela démarre votre application Streamlit dans un conteneur Docker et vous pouvez y
accéder via localhost:8501 ou l’IP du serveur si déployé sur un cloud.
Sur Google Cloud, vous pouvez utiliser des services comme Google App Engine ou
Compute Engine pour déployer vos applications Streamlit. Le processus est similaire à
celui décrit pour AWS, où vous devez configurer une machine virtuelle ou une
application gérée via Google Cloud.
1. Utiliser Google App Engine : App Engine vous permet de déployer facilement des
applications Python. Vous devrez préparer un fichier [Link] qui définit la
configuration de votre application.
2. Configurer le projet GCP : Créez un projet GCP, activez App Engine et téléchargez le
SDK Google Cloud. Vous pouvez ensuite déployer votre application en utilisant la
commande suivante depuis votre terminal :
gcloud app deploy
Streamlit propose des options de personnalisation de base pour l’apparence via les
thèmes. Vous pouvez ajuster les couleurs, la police et le style global de votre application
en modifiant un fichier de configuration.
1. Activation des thèmes : Vous pouvez activer et personnaliser un thème Streamlit en
éditant le fichier de configuration .streamlit/[Link] dans le répertoire de
votre projet. Par exemple, voici un exemple de fichier [Link] pour personnaliser
le thème :
[theme]
primaryColor = "green"
backgroundColor = "white"
secondaryBackgroundColor = "#f0f0f0"
textColor = "black"
font = "sans serif"
Bien que Streamlit ne permette pas une personnalisation avancée via des feuilles de style
CSS de manière native, il est possible d’intégrer du CSS personnalisé en utilisant les
fonctionnalités de HTML et CSS intégrées de Streamlit.
1. Insertion de CSS via [Link]() : Vous pouvez injecter du CSS dans l’application
en utilisant la fonction [Link]() avec l’argument unsafe_allow_html=True.
Voici un exemple simple pour changer la couleur de fond de la page :
[Link]("""
<style>
body {
background-color: #f4f4f9;
}
</style>
""", unsafe_allow_html=True)
Dans cet exemple, .css-1d391kg est une classe CSS générée automatiquement par
Streamlit pour les widgets spécifiques. Il est possible de cibler ces classes pour appliquer
des modifications stylistiques. Notez que les classes peuvent changer en fonction des
mises à jour de Streamlit, ce qui peut rendre cette méthode moins stable à long terme.
Une autre méthode simple pour personnaliser l’apparence d’une application Streamlit est
d’utiliser la fonction st.set_page_config(). Cette fonction vous permet de définir des
éléments comme le titre de la page, l’icône de l’application et d’autres paramètres qui
influencent l’apparence de l’application dans le navigateur.
• Définir le titre et l’icône de l’application :
st.set_page_config(
page_icon=" ",
layout="wide",
🌟
page_title="Mon Application Streamlit",
initial_sidebar_state="expanded"
)
Pour des personnalisations plus poussées et des éléments interactifs, vous pouvez
utiliser des bibliothèques externes comme Streamlit Components qui permettent
d’intégrer des widgets personnalisés ou des composants JavaScript dans votre
application. Ces composants peuvent offrir une expérience utilisateur plus riche, avec
des interfaces plus interactives.
1. Créer un composant personnalisé avec [Link].v1 : Streamlit permet de
créer et d’ajouter des composants personnalisés via la bibliothèque [Link].
Voici un exemple simple pour intégrer un composant HTML externe dans l’application.
import streamlit as st
import [Link].v1 as components
Cette méthode permet d’ajouter des éléments HTML complets, ainsi que du CSS ou du
JavaScript, à votre application.
2. Utilisation de bibliothèques JavaScript avec Streamlit Components : Vous
pouvez intégrer des bibliothèques JavaScript externes dans vos applications
Streamlit pour ajouter des fonctionnalités plus avancées, comme des cartes
interactives, des graphiques animés ou des éditeurs de texte avancés. Par
exemple, vous pourriez intégrer [Link], Leaflet ou Plotly pour des visualisations
plus dynamiques.
Il est également possible d’ajouter du contenu externe à votre application, comme des
images, des vidéos ou des fichiers PDF. Cela peut enrichir votre application avec des
éléments visuels ou interactifs supplémentaires.
1. Afficher une image avec [Link]() : Streamlit permet d’afficher des images
directement dans l’application, soit à partir d’un fichier local, soit d’une URL.
[Link]("[Link] caption="Une belle
image")
2. Afficher une vidéo avec [Link]() : De la même manière, vous pouvez ajouter des
vidéos à votre application, soit à partir d’un fichier local, soit d’une URL.
[Link]("[Link]
Vous pouvez ajouter tout type de widget dans la barre latérale de manière similaire à la
page principale.
Lorsque vous développez une application avec Streamlit, il est important de pouvoir
identifier et résoudre rapidement les erreurs pour garantir une expérience utilisateur
fluide. Streamlit offre plusieurs outils pour aider à la gestion des erreurs et au débogage,
afin que les développeurs puissent tester et affiner leurs applications efficacement. Cette
section couvre les différentes méthodes et techniques pour détecter, comprendre et
résoudre les erreurs dans une application Streamlit.
Le mode debug est une fonctionnalité intégrée de Streamlit qui permet de visualiser les
erreurs et les problèmes directement dans l’application. Lorsqu’une erreur se produit,
Streamlit affiche un message d’erreur détaillé dans la console ou dans l’interface de
l’application. Pour activer le mode débogage, il suffit d’ajouter l’option --
[Link]=debug lors du lancement de votre application.
1. Activation du mode debug : Vous pouvez activer le mode debug dans le terminal avec
la commande suivante :
streamlit run [Link] --[Link]=debug
2. Message d’erreur détaillé : En mode debug, Streamlit vous fournit des messages
d’erreur détaillés qui incluent le type d’erreur, la ligne du code où l’erreur a eu lieu, et
une trace complète de l’exception. Cela peut être particulièrement utile pour localiser
rapidement les bugs dans votre code.
Streamlit permet également d’afficher des erreurs dans l’interface utilisateur de manière
conviviale. Cela permet à l’utilisateur final de comprendre rapidement les problèmes qui
surviennent pendant l’exécution de l’application. Vous pouvez gérer et afficher des
messages d’erreur en utilisant les fonctionnalités de Streamlit comme [Link](),
[Link]() et [Link]().
1. Afficher un message d’erreur avec [Link]() : Cette fonction permet d’afficher
un message d’erreur dans l’interface utilisateur. Le message sera affiché dans un cadre
rouge pour signaler un problème.
[Link]("Une erreur s'est produite lors du traitement des
données.")
Lorsque vous gérez des erreurs dans votre code Python, il est essentiel de capturer les
exceptions pour éviter que l’application ne plante de manière inattendue. Streamlit vous
permet de capturer des erreurs avec des blocs try-except et de fournir des messages
d’erreur clairs à l’utilisateur.
1. Utiliser try-except pour capturer les erreurs : Par exemple, si vous avez un calcul
qui peut générer une erreur, vous pouvez l’encapsuler dans un bloc try-except pour
capturer l’exception et afficher un message adapté.
try:
result = 10 / 0
except ZeroDivisionError:
[Link]("Erreur : Division par zéro.")
2. Gestion des erreurs spécifiques : Vous pouvez capturer des erreurs spécifiques,
comme FileNotFoundError, ValueError, ou d’autres exceptions courantes. Il est
recommandé d’être aussi précis que possible pour informer l’utilisateur de la nature
exacte de l’erreur.
try:
# Code qui peut échouer
file = open("non_existent_file.txt", "r")
except FileNotFoundError:
[Link]("Le fichier demandé est introuvable.")
Le log des erreurs est un excellent moyen de suivre et de diagnostiquer les problèmes au
fil du temps. Streamlit permet d’enregistrer les messages d’erreur dans un fichier log
pour une consultation ultérieure. Pour configurer le logging, vous pouvez utiliser le
module logging de Python.
1. Configurer le logging : Vous pouvez configurer un fichier log pour capturer les erreurs
et les informations importantes pendant l’exécution de votre application. Voici un
exemple de configuration :
import logging
# Configuration du logger
[Link](filename='[Link]', level=[Link])
2. Visualisation des logs : Les logs peuvent être consultés dans le fichier spécifié (dans
cet exemple, [Link]) pour analyser l’historique des erreurs et des événements. Cette
approche est particulièrement utile pour les applications déployées en production.
Pour un débogage interactif plus avancé, vous pouvez utiliser des outils comme pdb
(Python Debugger) pour effectuer un suivi pas à pas de votre code. Cela vous permet de
vérifier l’état de votre application à différents moments de son exécution.
1. Utilisation de pdb pour le débogage : Vous pouvez insérer un point d’arrêt dans votre
code pour activer le débogueur interactif. Par exemple :
import pdb
# Point d'arrêt
pdb.set_trace()
# Code à déboguer
result = 10 / 0
Une fois que le débogueur est activé, vous pouvez inspecter les variables et exécuter le
code ligne par ligne pour mieux comprendre les erreurs.
2. Utilisation de [Link]() pour afficher des variables : Pour aider à comprendre le
comportement de votre code sans interrompre l’exécution, vous pouvez afficher des
informations sur les variables ou l’état du programme directement dans l’interface avec
[Link]().
L’utilisation de tests unitaires pour vérifier les fonctionnalités de votre application est
une bonne pratique pour garantir la stabilité du code. Vous pouvez utiliser des outils
comme unittest ou pytest pour écrire des tests qui valident le bon fonctionnement
des composants de votre application avant leur déploiement.
1. Utilisation de unittest pour tester les fonctions : Par exemple, si vous avez une
fonction de calcul, vous pouvez écrire un test unitaire pour vous assurer qu’elle
fonctionne correctement.
import unittest
class TestAddition([Link]):
def test_addition(self):
[Link](addition(2, 3), 5)
[Link](addition(-1, 1), 0)
if __name__ == '__main__':
[Link]()
2. Intégration avec Streamlit : Bien que Streamlit ne supporte pas directement les tests
unitaires, vous pouvez utiliser des tests Python standard pour valider la logique de votre
application avant de l’intégrer avec Streamlit.
La gestion des performances est essentielle pour garantir une expérience utilisateur
fluide et agréable dans toute application, y compris celles construites avec Streamlit.
Streamlit, tout en étant un outil puissant pour créer des interfaces interactives, peut
parfois rencontrer des problèmes de performance, notamment lors du traitement de
grandes quantités de données ou de calculs intensifs. Lorsque ces problèmes
surviennent, l’application peut devenir lente, peu réactive ou même inutilisable.
Dans cette section, nous explorerons les raisons pour lesquelles la gestion des
performances est cruciale dans une application Streamlit. Nous verrons également les
différents outils et techniques disponibles pour optimiser les performances, permettant
ainsi d’assurer une expérience utilisateur fluide et réactive.
Pourquoi la gestion des performances est cruciale
Une application lente ou inefficace peut entraîner une mauvaise expérience utilisateur et
décourager les utilisateurs finaux. Streamlit permet de créer des applications interactives
rapidement, mais cela implique que les performances doivent être constamment
surveillées, surtout lors de la mise en production d’une application avec un grand nombre
d’utilisateurs ou de données. Optimiser les performances permet d’assurer :
• Réactivité : Les utilisateurs doivent être en mesure d’interagir avec l’application
sans délais de réponse excessifs.
• Efficacité des ressources : Une gestion efficace des ressources (comme la
mémoire et le processeur) garantit que l’application fonctionne même sur des
machines avec des capacités limitées.
• Scalabilité : Une bonne gestion des performances permet à l’application de bien
fonctionner à grande échelle, même avec des données ou des utilisateurs
multiples.
Streamlit offre plusieurs fonctionnalités qui aident à améliorer les performances des
applications. Parmi les techniques les plus courantes :
• Mise en cache : La mise en cache permet de mémoriser les résultats des calculs et
de les réutiliser lorsqu’ils sont demandés à nouveau, réduisant ainsi les temps de
calcul.
• Traitement parallèle : Pour les tâches lourdes, le traitement parallèle ou en
arrière-plan peut éviter que l’interface utilisateur se bloque.
• Optimisation des ressources : La gestion de la mémoire et de la CPU permet de
s’assurer que l’application fonctionne de manière optimale sur des machines avec
des ressources limitées.
• Compression des données : La compression des données volumineuses permet de
réduire les temps de transfert et d’améliorer les performances générales.
Dans les sections suivantes, nous explorerons en détail chacune de ces techniques et
comment les utiliser dans une application Streamlit.
Streamlit est conçu pour rendre les applications interactives rapidement, mais l’affichage
de grandes quantités de données peut entraîner des ralentissements importants. Dans
cette section, nous allons examiner comment gérer efficacement l’affichage des données
dans Streamlit, en utilisant des techniques pour optimiser la vitesse de rendu des
composants et améliorer l’expérience utilisateur.
Lorsque vous travaillez avec de grandes bases de données ou des jeux de données
complexes, il est crucial de ne pas tout afficher à la fois, car cela peut entraîner un
ralentissement des performances. Voici quelques stratégies pour gérer l’affichage de
grandes quantités de données dans Streamlit :
• Paginer les données : Au lieu d’afficher toutes les lignes d’un tableau ou d’une base de
données, vous pouvez paginer les données et n’afficher qu’une partie des informations à
la fois. Cela permet de charger uniquement les éléments nécessaires à l’affichage.
import pandas as pd
import streamlit as st
# Utilisation de pagination
page_size = 100 # Nombre d'éléments par page
page = [Link]('Page', 1, len(df) // page_size + 1)
start_row = (page - 1) * page_size
end_row = page * page_size
[Link]([Link][start_row:end_row])
• Affichage conditionnel : Une autre approche consiste à afficher les données
conditionnellement en fonction des entrées de l’utilisateur. Par exemple, vous pouvez
n’afficher que les résultats correspondant à un filtre ou à une requête spécifique.
Streamlit met en place des mécanismes pour optimiser la performance des composants,
mais il est important de respecter certaines bonnes pratiques pour améliorer encore plus
la vitesse de rendu.
• Limiter le nombre de widgets interactifs : Chaque widget (comme un bouton, une
zone de texte, un curseur, etc.) dans Streamlit nécessite un calcul et une mise à jour de
l’interface. Il est conseillé de limiter leur nombre si ce n’est pas nécessaire. L’ajout de
nombreux widgets interactifs peut ralentir l’application, surtout lorsque les utilisateurs
effectuent des changements fréquents.
• Utilisation de [Link]() pour une mise à jour plus rapide : Lorsqu’une partie de
l’interface doit être mise à jour fréquemment (par exemple, un graphique dynamique),
l’utilisation de [Link]() peut accélérer le rendu en permettant de réutiliser un
espace sans recréer tout le composant.
chart = [Link]()
for i in range(100):
chart.line_chart([i for i in range(i)])
Certains composants, tels que les tableaux de données, les graphiques et les cartes,
peuvent être gourmands en ressources. Il est donc crucial de bien comprendre comment
les utiliser de manière optimale.
• Utilisation efficace de [Link]() et [Link]() : Lorsque vous affichez de
grandes quantités de données sous forme de tableau, choisissez le bon composant.
[Link]() permet une interaction dynamique (tri, filtrage), mais peut être plus
lent pour de grands volumes. Si l’interaction n’est pas nécessaire, [Link]() peut
être plus rapide.
[Link]([Link]())
La mise en cache est l’une des techniques les plus puissantes pour améliorer les
performances des applications Streamlit. Lorsqu’une fonction ou une opération coûteuse
est appelée fréquemment, la mise en cache permet de stocker les résultats de ces appels
pour les réutiliser ultérieurement, réduisant ainsi le temps d’exécution. Streamlit propose
deux types de mise en cache : st.cache_data() et st.cache_resource(). Ces deux
méthodes ont des cas d’utilisation différents et permettent d’optimiser les performances
de manière ciblée.
La mise en cache dans Streamlit fonctionne en stockant les résultats des calculs dans la
mémoire afin que, lorsque la même entrée est demandée à nouveau, le résultat soit
directement récupéré sans avoir à recalculer ou recharger les données. Cela permet de
gagner un temps considérable, surtout lorsqu’il s’agit de calculs complexes ou de
chargement de grandes quantités de données.
• st.cache_data() : Ce décorateur est utilisé pour mettre en cache des données
résultant d’opérations telles que le calcul de valeurs, l’importation de fichiers ou la
transformation de grandes quantités de données.
• st.cache_resource() : Ce décorateur est destiné à mettre en cache des
ressources qui ne changent pas fréquemment, telles que des modèles
d’apprentissage automatique, des connexions à des bases de données, ou des
objets lourds en mémoire.
Différence entre st.cache_data() et st.cache_resource()
Imaginons que vous ayez une fonction qui charge un fichier CSV. Si ce fichier est
volumineux et que vous chargez régulièrement les mêmes données, la mise en cache
permet d’éviter de recharger le fichier à chaque interaction de l’utilisateur.
import pandas as pd
import streamlit as st
@st.cache_data
def load_data():
return pd.read_csv('large_file.csv')
df = load_data()
[Link](df)
Dans cet exemple, load_data() sera exécutée une seule fois pour la session utilisateur,
et les données seront mises en cache pour les interactions suivantes.
Lorsque vous travaillez avec des modèles d’apprentissage automatique, il est souvent
nécessaire de charger des modèles lourds à chaque démarrage de l’application. En
utilisant st.cache_resource(), vous pouvez vous assurer que le modèle n’est chargé
qu’une seule fois.
import joblib
import streamlit as st
@st.cache_resource
def load_model():
return [Link]('trained_model.pkl')
model = load_model()
prediction = [Link](data)
[Link](prediction)
Ici, le modèle est mis en cache, ce qui réduit le temps de chargement lorsque l’utilisateur
interagit avec l’application, tout en garantissant que le modèle n’est pas rechargé
inutilement.
Les applications Streamlit sont souvent confrontées à des processus lourds, tels que des
calculs intensifs, des analyses de données volumineuses ou des appels à des services
externes. Ces tâches peuvent rendre l’application moins réactive et perturber
l’expérience utilisateur. Dans cette section, nous aborderons différentes méthodes pour
gérer ces processus lourds de manière efficace, en permettant à l’utilisateur de continuer
à interagir avec l’application sans blocage.
Une des principales préoccupations lors de l’exécution de processus lourds est d’éviter
de bloquer l’interface utilisateur. Streamlit offre plusieurs moyens de traiter des tâches
de fond tout en maintenant l’interface réactive.
[Link]() est une fonction simple qui permet d’afficher un message ou une
animation pendant l’exécution d’un processus long. Cela informe l’utilisateur que
l’application est en cours de traitement et qu’il doit patienter. Cela ne bloque pas
l’interface, mais aide à gérer les attentes de l’utilisateur.
import streamlit as st
import time
Dans cet exemple, l’application affiche un message d’attente pendant 5 secondes. Cela
donne l’impression que l’application est toujours réactive et en activité.
Pour des tâches encore plus lourdes qui nécessitent un traitement parallèle ou en
arrière-plan, vous pouvez utiliser des librairies comme [Link] ou
threading. Cela permet d’exécuter une fonction dans un thread séparé, de sorte que
l’interface utilisateur reste réactive.
Voici un exemple utilisant [Link] pour lancer
une tâche en arrière-plan :
import streamlit as st
import [Link]
import time
def long_task():
[Link](5)
return "Tâche terminée"
# Utilisation de ThreadPoolExecutor
with [Link]() as executor:
future = [Link](long_task)
while not [Link]():
[Link]("Processus en cours...")
result = [Link]()
[Link](result)
Cet exemple utilise un thread parallèle pour exécuter la fonction long_task(), ce qui
permet à l’utilisateur de voir les messages intermédiaires sans bloquer l’interface. Une
fois le traitement terminé, le résultat est affiché.
Pour des processus nécessitant une gestion plus fine des tâches simultanées, vous
pouvez utiliser asyncio pour gérer les processus longs de manière asynchrone. Cela
permet d’exécuter plusieurs tâches en parallèle sans bloquer l’interface.
Voici un exemple d’utilisation de asyncio avec Streamlit :
import streamlit as st
import asyncio
if [Link]("Démarrer le processus"):
[Link](main())
Dans cet exemple, lorsque l’utilisateur clique sur le bouton, un processus asynchrone est
lancé. L’interface Streamlit n’est pas bloquée et peut continuer à être utilisée pendant
que le processus se déroule en arrière-plan.
Dans certains cas, il peut être nécessaire de relancer l’application Streamlit afin
d’actualiser certaines données ou de relancer une tâche après une certaine condition.
st.experimental_rerun() peut être utilisé pour redémarrer l’application sans qu’il soit
nécessaire de la fermer et de la rouvrir manuellement.
import streamlit as st
if [Link]("Rerun l'application"):
st.experimental_rerun()
Conclusion
La gestion des processus lourds est essentielle pour maintenir une bonne performance et
une expérience utilisateur optimale. En utilisant des techniques comme [Link](),
les processus en arrière-plan, ou l’exécution asynchrone, vous pouvez gérer efficacement
les tâches longues tout en préservant la réactivité de votre application Streamlit. Ces
méthodes vous permettent de garantir que les utilisateurs puissent interagir avec votre
application sans subir de délais excessifs.
5. Optimisation de la gestion de la mémoire
Dans toute application, la gestion efficace de la mémoire est cruciale, surtout lorsqu’il
s’agit de travailler avec des ensembles de données volumineux ou de réaliser des calculs
complexes. Streamlit étant une application en mémoire, une mauvaise gestion des
ressources peut entraîner des ralentissements, des erreurs de mémoire et une mauvaise
expérience utilisateur. Cette section explore plusieurs techniques pour optimiser
l’utilisation de la mémoire dans une application Streamlit.
L’une des premières étapes pour optimiser la gestion de la mémoire dans Streamlit
consiste à comprendre et à suivre la quantité de mémoire utilisée par l’application. En
surveillant l’utilisation de la mémoire, vous pouvez identifier les goulots d’étranglement
et déterminer où des optimisations sont nécessaires.
Python propose plusieurs bibliothèques pour surveiller l’utilisation de la mémoire,
comme psutil. Vous pouvez utiliser ces outils pour obtenir un aperçu de la mémoire
utilisée par votre application.
Voici un exemple simple de suivi de la mémoire avec psutil :
import psutil
import streamlit as st
def memory_usage():
process = [Link]()
mem = process.memory_info().rss / (1024 * 1024) # Convertir en Mo
return mem
Libération de la mémoire
L’un des principaux défis liés à l’utilisation de la mémoire dans une application Streamlit
est de s’assurer que les ressources sont correctement libérées lorsque celles-ci ne sont
plus nécessaires. Lorsqu’une grande quantité de données est chargée ou qu’un objet est
manipulé, il est important de libérer explicitement ces ressources pour éviter les fuites de
mémoire.
Voici quelques bonnes pratiques pour libérer de la mémoire :
• Suppression des objets inutiles : Une fois que vous avez terminé avec un objet ou une
variable, vous pouvez la supprimer en utilisant la fonction del de Python.
del dataframe
Les données volumineuses peuvent rapidement saturer la mémoire. Il est donc important
de charger les données de manière efficace en évitant de charger tout un jeu de données
en mémoire si cela n’est pas nécessaire. Voici quelques approches pour optimiser le
chargement des données :
• Chargement paresseux (Lazy Loading) : Au lieu de charger tout le fichier ou le jeu de
données en mémoire à la fois, vous pouvez charger les données par morceaux (chunks)
et ne charger que ce qui est nécessaire à un moment donné. Pandas, par exemple,
permet de charger les fichiers CSV en morceaux avec l’argument chunksize.
import pandas as pd
chunksize = 10000
for chunk in pd.read_csv('large_data.csv', chunksize=chunksize):
# Traiter chaque morceau de données indépendamment
process(chunk)
Certains objets Python, comme les grands modèles d’apprentissage automatique ou les
grandes bases de données en mémoire, peuvent être très gourmands en mémoire. Voici
quelques stratégies pour optimiser ces objets :
• Sérialisation et dé-sérialisation : Si vous avez des objets qui sont utilisés de manière
répétée, vous pouvez les sérialiser dans un format plus léger (par exemple, avec pickle
ou joblib) et les charger uniquement lorsque nécessaire.
import joblib
# Sauvegarder un modèle
[Link](model, '[Link]')
# Charger un modèle
model = [Link]('[Link]')
# Composant personnalisé
html_code = """
<html>
<head>
<script>
function greet() {
alert("Hello from custom component!");
}
</script>
</head>
<body>
<button onclick="greet()">Click me</button>
</body>
</html>
"""
Dans cet exemple, un simple bouton HTML est créé, et lorsque l’utilisateur clique dessus,
un message d’alerte JavaScript est affiché. Bien que simple, cet exemple montre la
puissance d’un composant personnalisé pour ajouter des comportements spécifiques à
une application.
Si les composants personnalisés ne sont pas utilisés avec précaution, ils peuvent
entraîner des problèmes de performance. Voici quelques conseils pour optimiser leur
utilisation :
1. Chargement conditionnel des composants : Assurez-vous que les composants
personnalisés sont chargés uniquement lorsque cela est nécessaire. Par exemple, si un
graphique interactif n’est requis que pour certains utilisateurs ou conditions, il est
préférable de ne pas le charger à chaque interaction.
if [Link]('Afficher le graphique'):
[Link]("<div id='chart'></div>", height=500)
Plotly est une bibliothèque de visualisation populaire qui permet de créer des graphiques
interactifs. Vous pouvez intégrer un graphique Plotly dans votre application Streamlit à
l’aide de st.plotly_chart() ou en utilisant un composant personnalisé pour un
contrôle plus fin sur l’interaction et l’optimisation des performances.
import streamlit as st
import [Link] as px
import plotly.graph_objects as go
# Données de démonstration
df = [Link]()
Dans cet exemple, un graphique interactif Plotly est intégré de manière transparente
dans l’interface de Streamlit. L’option use_container_width=True permet d’ajuster le
graphique à la largeur du conteneur Streamlit, garantissant ainsi une mise en page
réactive.
Utilisation de Streamlit Components pour des intégrations plus complexes
Si vos composants personnalisés nécessitent une logique plus complexe, vous pouvez
créer des composants en utilisant le framework Streamlit Components. Cela permet de
gérer les interactions utilisateur de manière plus sophistiquée, comme l’intégration
d’interfaces utilisateur plus avancées avec des bibliothèques front-end comme React,
[Link] ou Angular.
Voici un exemple d’utilisation de Streamlit Components pour intégrer une bibliothèque
front-end :
import streamlit as st
import [Link].v1 as components
Les graphiques et visualisations jouent un rôle central dans les applications Streamlit,
mais ils peuvent rapidement devenir un facteur limitant en termes de performance,
notamment lorsqu’il s’agit de grands ensembles de données ou de graphiques interactifs.
Pour améliorer les performances, il est essentiel de choisir la bonne bibliothèque de
visualisation et de l’optimiser pour qu’elle soit aussi rapide que possible.
• Utiliser des bibliothèques performantes : Certaines bibliothèques de visualisation
sont mieux adaptées aux grandes quantités de données et aux rendus rapides. Par
exemple, Plotly et Altair sont particulièrement performantes avec de grands
ensembles de données grâce à leurs mécanismes de simplification des graphiques.
Plotly permet par exemple de réduire le nombre de points affichés sans perdre en
qualité visuelle grâce à des fonctionnalités comme le downsampling (échantillonnage
de données).
• Réduire la complexité des graphiques : Plus un graphique est complexe (nombre
d’axes, annotations, ou types d’interactions), plus il mettra de temps à se rendre. Il est
donc conseillé de simplifier les graphiques lorsque cela est possible. Par exemple,
préférez des graphiques simples (barres, courbes, etc.) et évitez les graphiques
complexes comme les graphiques en 3D ou avec de multiples légendes.
• Utiliser le rendu statique lorsque possible : Pour les applications où l’interaction
avec le graphique n’est pas nécessaire, privilégiez les graphiques statiques (comme ceux
générés avec matplotlib ou seaborn). Les graphiques statiques sont plus rapides à
générer et peuvent être suffisants pour certaines visualisations.
df = pd.read_csv("large_dataset.csv")
Dans cet exemple, un sous-ensemble de 1000 points est affiché au lieu de tout le jeu de
données, ce qui accélère le rendu du graphique.
Les graphiques interactifs offrent une expérience utilisateur enrichie, mais peuvent
parfois affecter la réactivité, en particulier avec des jeux de données volumineux. Pour
maintenir une expérience fluide tout en offrant des graphiques interactifs, vous pouvez
appliquer les stratégies suivantes :
• Limiter les interactions possibles : Si vous utilisez des graphiques interactifs, essayez
de limiter le nombre d’interactions disponibles pour l’utilisateur. Par exemple, évitez de
permettre un zoom trop fin ou l’affichage de trop de détails sur un graphique interactif.
• Optimiser les callbacks : Les graphiques interactifs dans des bibliothèques comme
Plotly ou Bokeh peuvent impliquer des callbacks lourds lorsqu’un utilisateur interagit
avec eux. Réduisez les callbacks à ceux qui sont strictement nécessaires, et minimisez les
calculs ou les mises à jour lors de chaque interaction.
8. Optimisation des performances avec st.session_state
Le st.session_state dans Streamlit est utilisé pour gérer l’état de l’application entre
les interactions utilisateur. Cependant, une mauvaise gestion de l’état peut entraîner des
ralentissements, surtout si de nombreux objets sont stockés dans le session_state.
Optimiser l’utilisation de st.session_state peut donc avoir un impact direct sur les
performances de l’application.
Le st.session_state est particulièrement utile pour suivre les variables entre les
différents tours de l’application, mais il est important de ne pas y stocker des objets
volumineux qui ne changent pas fréquemment. Par exemple, il est préférable de ne pas
stocker des datasets complets dans le session_state, mais plutôt de les charger une
fois et de les référencer ensuite.
• Stocker uniquement les informations nécessaires : Ne conservez dans
session_state que les informations vraiment nécessaires pour l’exécution de
l’application. Par exemple, une valeur booléenne pour savoir si un calcul a été effectué
ou un ID d’utilisateur peut être stocké, mais évitez de garder des objets comme des
DataFrames lourds ou des objets modèles complexes.
• Effacer les variables obsolètes : Utilisez la méthode st.session_state.clear()
pour supprimer les objets du session_state lorsque ceux-ci ne sont plus nécessaires,
surtout si ces objets sont volumineux.
[Link](st.session_state.data)
Dans cet exemple, le jeu de données est chargé dans session_state uniquement si cela
n’a pas été fait précédemment, évitant ainsi de recharger les données à chaque
interaction.
@st.experimental_memo
def expensive_computation(x):
[Link](2) # Simuler un calcul coûteux
return x * 2
result = expensive_computation(10)
[Link](result)
Dans cet exemple, le calcul coûteux (le sommeil simulé) n’est effectué qu’une seule fois
pour une valeur donnée de x. Les appels subséquents avec la même valeur de x
retourneront immédiatement le résultat en cache, réduisant ainsi le temps de calcul.
Avantages et limitations
Tester les performances d’une application Streamlit est crucial pour identifier les goulets
d’étranglement et améliorer l’expérience utilisateur. Les tests de performance peuvent
être réalisés de manière manuelle ou à l’aide d’outils externes.
Il existe plusieurs outils qui permettent de mesurer les performances d’une application,
comme cProfile, line_profiler, ou des outils externes comme Google Lighthouse.
Ces outils permettent de visualiser les parties de votre code qui prennent le plus de
temps à s’exécuter, ce qui peut vous aider à cibler les zones nécessitant une
optimisation.
Exemple d’utilisation de cProfile :
import cProfile
def main():
# Code de l’application Streamlit
...
[Link]('main()')
Maintenir des bonnes performances dans une application Streamlit n’est pas seulement
une question d’optimisation initiale. Il est important de suivre certaines bonnes pratiques
pour garantir que les performances restent optimales à mesure que l’application se
développe.
L’optimisation des performances ne doit pas être vue comme une tâche ponctuelle. Avec
l’évolution de l’application, de nouvelles optimisations peuvent être nécessaires. Vous
devez continuer à analyser les performances et à appliquer les techniques les plus
récentes pour maintenir une bonne réactivité et une utilisation optimale des ressources.
Objectif :
L’objectif de ce projet est de créer un tableau de bord interactif à l’aide de Streamlit qui
permet de visualiser des données sous forme de graphiques dynamiques. Vous utiliserez
des bibliothèques telles que pandas, matplotlib et plotly pour manipuler et afficher
des données. Vous apprendrez également à intégrer des widgets interactifs pour
permettre à l’utilisateur d’interagir avec les données en temps réel.
Prérequis :
• Connaissances de base en Python
• Connaissances de base en manipulation de données avec pandas
• Notions de base sur l’utilisation de graphiques avec matplotlib ou plotly
• Avoir Streamlit installé
Durée estimée : 1h30
with col1:
st.plotly_chart(fig)
with col2:
st.plotly_chart(fig_hist)
Résumé
Dans ce TP, vous avez créé un tableau de bord interactif avec Streamlit en utilisant un
jeu de données, des graphiques dynamiques et des widgets pour permettre à l’utilisateur
de filtrer et visualiser les données. Vous avez également appris à déployer l’application
sur Streamlit Cloud pour la rendre accessible en ligne.
Objectif :
L’objectif de ce projet est de déployer un modèle de machine learning sur Streamlit,
permettant aux utilisateurs de faire des prédictions en temps réel. Nous allons utiliser un
modèle de classification simple (par exemple, un modèle de classification de fleurs Iris)
pour prédire la catégorie d’une fleur en fonction de ses caractéristiques, telles que la
longueur et la largeur du sépale et du pétale. Les résultats seront visualisés avec
matplotlib.
Prérequis :
• Connaissances de base en Python et en Machine Learning
• Connaissances de base sur l’utilisation de scikit-learn
• Avoir Streamlit, scikit-learn et matplotlib installés
Durée estimée : 2h
Étape 1 : Préparer l’environnement
1. Installer les bibliothèques nécessaires
Si vous n’avez pas encore installé les bibliothèques requises, vous pouvez les installer via
pip :
pip install streamlit scikit-learn matplotlib pandas
import streamlit as st
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from [Link] import RandomForestClassifier
from [Link] import accuracy_score
import [Link] as plt
X = df[iris.feature_names]
y = df['species']
model = RandomForestClassifier()
[Link](X_train, y_train)
# Évaluation du modèle
y_pred = [Link](X_test)
accuracy = accuracy_score(y_test, y_pred)
species = iris.target_names[prediction][0]
[Link](f"L'espèce prédite est : {species}")
[Link](fig)
[Link](fig)
[Link]()
[Link](fig)
Dans ce TP, vous avez créé une application de machine learning avec Streamlit, où
l’utilisateur peut saisir les caractéristiques d’une fleur et obtenir une prédiction en temps
réel. Vous avez également utilisé matplotlib pour visualiser les résultats et les
prédictions. Enfin, vous avez appris à déployer l’application sur Streamlit Cloud pour la
rendre accessible en ligne.
Objectif :
L’objectif de ce projet est de créer un tableau de bord interactif de visualisation des
données à l’aide de Streamlit et matplotlib. Ce tableau de bord permettra d’analyser un
jeu de données, d’explorer ses statistiques descriptives, et d’afficher différents types de
graphiques (histogrammes, nuages de points, etc.) afin de mieux comprendre les relations
entre les variables.
Prérequis :
• Connaissances de base en Python et en analyse de données
• Connaissances de base sur l’utilisation de pandas et matplotlib
• Avoir Streamlit, pandas et matplotlib installés
Durée estimée : 2h
df = load_data()
[Link](fig)
– Nuage de points pour Age vs Fare :
fig, ax = [Link]()
[Link](df['Age'], df['Fare'], color='orange',
alpha=0.5)
ax.set_title('Age vs Fare')
ax.set_xlabel('Âge')
ax.set_ylabel('Tarif')
[Link](fig)
if sex != 'Tous':
df_filtered = df[(df['Pclass'] == pclass) & (df['Sex'] ==
sex)]
else:
df_filtered = df[df['Pclass'] == pclass]
[Link](fig)
Étape 5 : Ajouter des graphiques supplémentaires
1. Graphique de corrélation entre variables
Ajoutez un graphique de corrélation entre différentes variables, comme l’âge, le tarif, et
la survie. Vous pouvez utiliser un heatmap avec matplotlib pour afficher cette
corrélation.
correlation = df[['Age', 'Fare', 'Survived']].corr()
fig, ax = [Link]()
cax = [Link](correlation, cmap='coolwarm')
[Link](cax)
ax.set_xticks(range(len([Link])))
ax.set_yticks(range(len([Link])))
ax.set_xticklabels([Link], rotation=90)
ax.set_yticklabels([Link])
[Link](fig)
[Link](fig)
Dans ce TP, vous avez créé un tableau de bord interactif avec Streamlit pour analyser et
visualiser les données d’un jeu de données. Vous avez utilisé des graphiques
matplotlib pour explorer la distribution des variables et afficher des relations entre
elles. Vous avez également ajouté des filtres interactifs pour permettre à l’utilisateur de
personnaliser les données affichées. Enfin, vous avez appris à déployer votre application
Streamlit en ligne via Streamlit Cloud.
Objectif :
Créer une application Streamlit interactive qui permet de traiter du texte en temps réel,
en offrant des fonctionnalités telles que l’analyse de texte, le résumé automatique, ou
l’extraction d’entités nommées (NER). L’objectif est de rendre ces tâches accessibles à un
utilisateur via une interface simple et intuitive.
Cela extrait et affiche toutes les entités nommées présentes dans le texte saisi, comme
les noms de personnes, de lieux, d’organisations, etc.
3. Ajouter la fonctionnalité de résumé automatique
Utilisez transformers pour implémenter un résumé automatique du texte. Vous
pouvez utiliser un modèle pré-entraîné comme BART ou T5 pour cette tâche.
summarizer = pipeline("summarization")
if [Link]("Résumer le texte"):
summary = summarizer(user_input, max_length=150,
min_length=30, do_sample=False)
[Link]("### Résumé :")
[Link](summary[0]['summary_text'])
Étape 4 : Déploiement de l’application
1. Créer un fichier [Link]
Pour faciliter le déploiement de votre application, créez un fichier [Link]
contenant les bibliothèques nécessaires :
streamlit
spacy
transformers
Résumé du projet
Dans ce projet, vous avez créé une application interactive de traitement de texte avec
Streamlit, permettant d’effectuer des analyses linguistiques (extraction d’entités
nommées) et de générer des résumés automatiques. Vous avez également préparé votre
application pour le déploiement sur Streamlit Cloud, offrant ainsi aux utilisateurs un
accès facile à ces fonctionnalités.
Objectif :
Développer une application Streamlit pour la gestion de tâches personnelles avec
authentification utilisateur. L’application permettra aux utilisateurs de créer, lire, mettre à
jour et supprimer des tâches (fonctionnalités CRUD). En plus de cela, l’application inclura
un système d’authentification pour garantir que chaque utilisateur accède uniquement à
ses propres tâches.
import streamlit as st
import sqlite3
import uuid
import jwt
import datetime
from hashlib import sha256
[Link]()
[Link]()
– Fonction d’inscription :
Lorsqu’un utilisateur s’inscrit, son mot de passe est haché et stocké dans la
base de données.
def register_user(username, password):
password_hash = sha256([Link]('utf-8')).hexdigest()
user_id = str(uuid.uuid4())
conn = [Link]('task_manager.db')
c = [Link]()
[Link]('INSERT INTO users (user_id, username,
password_hash) VALUES (?, ?, ?)',
(user_id, username, password_hash))
[Link]()
[Link]()
– Fonction de connexion :
Pour la connexion, nous vérifierons le mot de passe de l’utilisateur et
générerons un jeton JWT pour maintenir la session active.
def login_user(username, password):
password_hash = sha256([Link]('utf-8')).hexdigest()
conn = [Link]('task_manager.db')
c = [Link]()
[Link]('SELECT user_id, password_hash FROM users WHERE
username = ?', (username,))
result = [Link]()
[Link]()
def get_tasks(user_id):
conn = [Link]('task_manager.db')
c = [Link]()
[Link]('SELECT task_id, task_name, completed FROM tasks
WHERE user_id = ?', (user_id,))
tasks = [Link]()
[Link]()
return tasks
def delete_task(task_id):
conn = [Link]('task_manager.db')
c = [Link]()
[Link]('DELETE FROM tasks WHERE task_id = ?', (task_id,))
[Link]()
[Link]()
[Link]("Mes tâches")
tasks = get_tasks(user_id)
for task in tasks:
[Link](f"{task[1]} - {'Terminé' if task[2] else 'Non
terminé'}")
if [Link](f"Supprimer {task[1]}", key=task[0]):
delete_task(task[0])
st.experimental_rerun()
Résumé du projet
Dans ce projet, vous avez créé une application Streamlit de gestion de tâches avec un
système d’authentification par JWT. L’application permet aux utilisateurs de s’inscrire, se
connecter, gérer leurs tâches (ajouter, supprimer, marquer comme terminées), et de
visualiser uniquement leurs propres tâches. Vous avez également préparé l’application
pour le déploiement sur Streamlit Cloud ou un autre serveur de votre choix.
Objectif :
Créer une application Streamlit qui permet de visualiser des données en temps réel. Par
exemple, nous allons simuler un flux de données financières ou d’Internet des objets
(IoT) en utilisant WebSocket pour transmettre les données en direct. Les graphiques
seront mis à jour en temps réel pour refléter les nouvelles données reçues.
if __name__ == "__main__":
[Link](main())
Ce serveur enverra un objet JSON avec un timestamp et une value simulée à tous les
clients connectés. Vous pouvez tester ce serveur en l’exécutant séparément.
Résumé du projet
Dans ce projet, vous avez créé une application Streamlit capable de visualiser des
données en temps réel à l’aide de WebSocket. Le serveur WebSocket simule un flux de
données qui est envoyé à l’application Streamlit chaque seconde. Vous avez utilisé
Plotly pour générer des graphiques interactifs et threading pour gérer l’asynchrone
de manière fluide dans l’application. Ce projet démontre comment Streamlit peut être
utilisé pour visualiser des données dynamiques, telles que des informations financières
ou des données de capteurs IoT, en temps réel.
Conclusion
Dans ce livre, nous avons exploré l’ensemble du processus de création d’applications
interactives avec Streamlit, en mettant l’accent sur l’optimisation des performances, le
déploiement, et le développement de projets concrets. En passant de l’introduction à
Streamlit à des projets pratiques complexes, nous avons couvert des concepts essentiels
qui permettent de maîtriser cet outil puissant et de créer des applications performantes
et robustes.
Nous avons commencé par les bases de Streamlit, en explorant sa simplicité d’utilisation
pour construire rapidement des interfaces interactives, puis avons approfondi des
aspects plus avancés comme la gestion des performances, la mise en cache, et
l’optimisation des applications. À travers des projets concrets, vous avez pu découvrir
comment Streamlit peut être intégré dans des workflows divers, allant des analyses de
données à l’implémentation de modèles de machine learning.
Le chapitre sur le déploiement a permis de comprendre les meilleures pratiques pour
publier vos applications Streamlit en ligne, en explorant différentes plateformes comme
Streamlit Cloud, Heroku, et d’autres options. Nous avons également abordé les défis du
déploiement, en particulier la gestion des performances et des ressources dans un
environnement de production.
Les cinq projets phares présentés dans ce livre vous ont permis de mettre en pratique
ces connaissances en développant des applications variées : des dashboards interactifs
aux applications de machine learning en temps réel, en passant par des outils de
traitement de texte et de gestion de tâches avec authentification. Ces projets vous ont
permis de bien comprendre comment combiner la puissance de Streamlit avec d’autres
outils et bibliothèques pour réaliser des applications complètes.
Enfin, l’optimisation des performances a été un point central de ce livre. Nous avons vu
comment Streamlit peut être utilisé de manière efficace, même pour des applications
complexes traitant de grandes quantités de données ou de calculs lourds, tout en
maintenant une excellente expérience utilisateur. Nous avons abordé l’utilisation de la
mise en cache, des bonnes pratiques de gestion de l’état avec st.session_state, ainsi
que l’importance des tests de performance pour garantir la réactivité et la stabilité des
applications.
Avec ces compétences, vous êtes maintenant prêt à développer, déployer et optimiser
vos propres applications Streamlit, que ce soit pour des projets personnels,
professionnels ou en entreprise. Le potentiel de Streamlit est immense, et avec les
connaissances acquises, vous pouvez aborder des défis de plus en plus complexes, tout
en bénéficiant de la simplicité et de la rapidité de développement offertes par cet outil.
Pour aller plus loin, continuez à explorer les nouvelles fonctionnalités et les mises à jour
de Streamlit, et n’hésitez pas à expérimenter avec de nouveaux types de projets et
d’applications.