Intermédiaire

Exercices

Exercice A — session_state : filtres persistants

Exercice : Filtres persistants entre pages

Facile

Reprendre le dashboard multi-pages de la séance 2. Ajouter la persistance des filtres (région et année) entre les pages en utilisant key sur les widgets de la sidebar.

Étapes :

  1. Sur la page "Ventes", ajouter un st.sidebar.selectbox pour la région et un st.sidebar.slider pour l'année, avec le paramètre key sur chaque widget
  2. Initialiser les clés correspondantes dans st.session_state en début de script
  3. Sur la page "Statistiques", lire les valeurs depuis st.session_state pour filtrer les données affichées
  4. Vérifier que naviguer de "Ventes" à "Statistiques" et revenir conserve bien les filtres choisis

Critères de validation :

  • Les filtres persistent quand on change de page
  • Les valeurs par défaut sont correctes au premier chargement
  • Aucun KeyError au premier lancement

Exercice B — session_state : sélection croisée

Exercice : Sélection croisée entre graphiques

Moyen

Sur la page principale du dashboard, ajouter une interaction croisée entre un graphique et un tableau de détail.

Étapes :

  1. Afficher un bar chart du chiffre d'affaires par région avec st.plotly_chart() et on_select="rerun"
  2. Quand une barre est cliquée, stocker le nom de la région dans st.session_state["region_cliquee"]
  3. Sous le graphique, afficher un tableau de détail (st.dataframe) filtré sur la région sélectionnée
  4. Ajouter un bouton "Réinitialiser la sélection" qui remet st.session_state["region_cliquee"] à None
  5. Quand aucune région n'est sélectionnée, afficher un message st.info invitant à cliquer sur le graphique

Critères de validation :

  • Le clic sur une barre filtre le tableau de détail
  • Le bouton de réinitialisation fonctionne
  • Le message d'information s'affiche quand aucune région n'est sélectionnée
  • La sélection persiste entre les re-runs (pas seulement entre les clics sur le graphique)

Exercice C — structure de projet

Exercice : Réorganiser le projet

Moyen

Réorganiser le projet selon la structure de référence vue dans cette séance.

Étapes :

  1. Créer les dossiers api/ et dashboard/ avec leurs __init__.py
  2. Déplacer les fichiers existants dans la bonne arborescence (voir la structure de référence)
  3. Créer le requirements.txt avec pip freeze (dans un environnement virtuel)
  4. Créer le .gitignore adapté au projet (voir le modèle de cette séance)
  5. Créer le .env.example avec les clés sans valeurs
  6. Écrire un README.md minimal avec les instructions d'installation et de lancement

Critères de validation :

  • Le projet se lance toujours correctement après la réorganisation
  • requirements.txt ne contient que les dépendances du projet (pas tout le système)
  • .gitignore exclut .env, secrets.toml, venv/, __pycache__/
  • .env.example contient toutes les clés nécessaires sans valeur secrète
  • Le README.md permet à quelqu'un d'autre de lancer le projet

Exercice D — déploiement (bonus)

Exercice : Déployer sur Streamlit Community Cloud

Difficile

Déployer le dashboard sur Streamlit Community Cloud en suivant les étapes de la section 3.

Étapes :

  1. Créer un dépôt GitHub pour le projet (public ou privé)
  2. S'assurer que .gitignore exclut .env et secrets.toml
  3. Pousser le code sur GitHub (git push)
  4. Connecter le dépôt à Streamlit Community Cloud sur share.streamlit.io
  5. Configurer les secrets dans l'interface web (section "Advanced settings" puis "Secrets")
  6. Vérifier que l'application est accessible sur l'URL publique générée

Critères de validation :

  • L'application est accessible sur une URL *.streamlit.app
  • Les secrets ne sont pas visibles dans le code source sur GitHub
  • L'application affiche correctement les données
  • Un nouveau git push déclenche bien un redéploiement automatique