[PYTHON] Rapport dynamique de tes données en 5 minutes avec Streamlit
En tant que bon Data Scientist / Data Analyst / Data *mot anglais stylé* qui se respecte j’imagine que tu passes le plus clair de ton temps à martyriser tes données dans un amas de notebooks (plus ou moins organisés, ne t’inquiète pas c’est pas moi qui vais te juger pour ça). OK ! Jusqu’ici tout va bien mais quand on passe à la restitution, tout se complique pour nous…Voici une liste non exhaustive des stratégies bancales dont je vais te libérer : « allez je screen mes graphs et je fourre tout dans un PDF ou un PPT » , « bon je relance toutes mes cellules comme ça je serai prêt pour la présentation…j’espère que mon pc ne va pas me lâcher entre temps », « Ok maintenant ouvre un terminal et fais pip install -r requirements…ah mais t’as pas la bonne version de…attends laisse moi ton pc je vais le faire ». BREF, on s’est compris !
Je te propose un tuto pour régler ces problèmes avec un outil simple : un lien accessible à tous où sont centralisées toutes tes analyses.
Au menu : On part d’un jeu de données simple de l’INSEE, je fais un petit travail de visualisation des données avec plotly et on met tout dans Streamlit (l’outil magique dont tu ne te passeras plus) pour présenter le tout.
L’intégralité du code est disponible sur un repo git. L’app est en ligne, n’hésite pas à aller la consulter pour visualiser ce que l’on va faire !
Pour des visualisations Dynamiques Accessibles à tous Esthétiques
Présentation des données
Chez iiiData on travaille beaucoup sur des open data territoriales. J’ai fait un petit travail en amont de recherche de données sur le site de l’INSEE. Nous allons nous placer à l’échelle du département. J’ai sélectionné 6 indicateurs de l’année 2021 que l’on pourra analyser sur des représentations spatiales et comparer entre départements. Les données que j’ai utilisées sont également disponibles sur le repo GitHub.
Installations nécessaires
Je te conseille de te créer un nouvel environnement virtuel avec une version de python 3.9. Nous allons avoir besoin de trois librairies : pandas, plotly, streamlit donc installez les avec pip ou conda.
Je te propose une petite manière de faire avec un environnement virtuel Anaconda. Il existe d’autres manières de faire donc libre à toi de faire autrement.
- Ouvre anaconda prompt
- Conda create -n test_tuto python=3.9
- Conda activate test-tuto
Dans ton terminal :
git clone https://github.com/GARRIGOS-Martin/Plotly_map_with_Streamlit_Tuto.git
Place toi à la racine du dossier que tu viens de cloner.
pip install – r requirements/txt
Construction de app.py
Chargement des données
Tout d’abord je charge les données que j’ai récupérées de l’INSEE et stockées un fichier .csv. En plus, puisque je veux représenter mes données sous la forme de carte dynamique, je vais récupérer un geojson qui me permet de tracer les polygones de chaque département.
VOTRE ATTENTION SVP : ne fuyez pas ! Si vous ne comprenez ces histoires de geojson ou problématiques de représentations spatiales ça ne posera pas de problèmes pour la suite. On oublie pas le but suprême de ce tuto : représenter de manière dynamique et ergonomique ses données dans streamlit.
Creation du tritre de notre dashboard
Et ben c’est pas mal, on est prêt. Commençons par mettre un titre (st.title) et puis pourquoi pas un sous-titre (st.header) pour bien faire comprendre le but de ce (futur) magnifique dashboard.
Si tu le souhaites tu peux déjà visualiser ton dashboard. Place toi à la racine de ton dossier où se situe app.py avec ton terminal préféré.
Logiquement une page de ton navigateur se lance toute seule. Si ce n’est pas le cas, essaie d’y aller manuellement en tapant dans ton navigateur http://localhost:8501 (c’est le port local de ton pc où streamlit va envoyer ton chef d’oeuvre).
TIPS : laisse ouverte cette page, quand tu ajouteras des fonctionnalités tu n’auras qu’a sauvegarder ton fichier app.py puis d’actualiser cette dernière.
Création d'une liste deroulante des indicateurs
L’app fonctionne, notre mission maintenant est de la remplir correctement. La plu value de Streamlit va résider dans le fait pouvoir changer d’indicateurs sur la même figure de manière à alléger le nombre de figures lorsque l’on présente des résultats.
La première étape va être de créer une liste déroulante qui va nous permettre de choisir l’indicateur de l’on souhaite visualiser. Il existe plusieurs composants de streamlit qui permettent d’arriver sensiblement au même résultat. Dans notre cas nous utiliserons la *roulement de tambour* … selectbox.
Je t’invite à CTRL + S ton fichier python et F5 ton navigateur.
OK ready ? On s’attaque à la viz !
Création de la visualisation plotly
Pour commencer il y a une toute petite partie de gestion du geojson qui n’est absolument pas dans le but du tuto. Je ne vais donc pas surcharger ta RAM et on va passer outre. Retiens qu’il faut ajouter ça dans le code pour que tout fonctionne bien.
Nous voilà plongés en plein Plotly. J’utilise la librairie plotly.express pour réaliser la représentation spatiale.
Les points essentiels à comprendre :
- La représentation ne se fera que si et seulement si l’indicateur choisi par l’utilisateur (via la selectbox) est différent du choix « aucun ».
- La variable que nous avons appelé « indicateur » est le fer de lance de l’automatisation de notre représentation. Elle stocke l’indicateur choisi par l’utilisateur et permet de faire le lien pour représenter les données adéquates du DataFrame.
- Habituellement on écrit fig.show() pour visualiser une figure plotly. Ici, streamlit possède sa propre fonction qui permet de ne pas ébranler l’architecture du dashboard.
Et voilà le travail ! On test ?
CTRL + S F5 ENJOY 🙂
on ajoutE une autre petite fonctionnalité ?
Bon en dessert, je te propose l’ajout de deux petites fonctionnalités super simples et qui te permettront d’en apprendre un peu plus sur streamlit (en plus d’embellir le dashboard).
Je propose qu’on ajoute une fonctionnalité qui permette de comparer les données entre les différents départements que l’utilisateur souhaite observer. Cette fois-ci, on sera sur une simple comparaison de données stockées dans un tableau.
ET BONUS : l’utilisateur aura la possibilité d’extraire l’intégralité des données qu’il compare en un fichier .csv (avoue c’est classe).
CTRL + S F5 ADMIRE
Et bien dernière fonctionnalité (la BONUS) dont l’utilité est loin d’être négligeable. Souvent, lorsque l’on met à dispositions des outils de visualisations, des acteurs type décisionnaires aimeraient garder sous la main une partie des données (seulement celles qui les intéressent à un instant t). Et bien dans streamlit, rien de plus simple.
Et bien bravo à toi d’être arrivé jusque là. Je finis ce tuto en mettant le code entier. D’ailleurs j’ai changé quelque chose par rapport à tout ce qu’on fait (qui change beaucoup l’aspect visuel !). T’as plus qu’à…
CTRL + S F5 ALORS ?
Conclusion
J’espère que ce tuto t’aura aidé à appréhender ce qu’est streamlit, son utilisation et surtout que ce cet outil peut t’apporter dans ton travail de tous les jours. En tout cas, chez iiiData streamlit nous sert beaucoup pour faire des comptes rendus dynamiques.
N’hésite pas à me dire si tu veux plus de contenu sur streamlit, il existe pléthores de fonctionnalités que j’ai hâte de te montrer si ça t’intéresse. N’hésite pas à te rendre sur leur doc qui présente les outils principaux avec lesquels tu peux désormais t’amuser.
Si tu trouves des problèmes techniques pour réaliser ce tuto, n’hésite surtout pas à le faire savoir dans les commentaires ou en nous contactant directement sur Linkedin.
Amuse toi bien avec ce nouvel outil et à bientôt pour un nouveau tuto 🙂
Martin Garrigos
Data Scientist chez iiiDATA