Cours
Introduction à Shiny et à ses avantages
Celles et ceux qui ont déjà travaillé avec R connaissent sans doute le package Shiny, qui permet de créer des applications web interactives. Lancé en 2012, R Shiny a rapidement gagné en popularité, car ce package simple d’utilisation offrait aux scientifiques et aux analystes la possibilité de concevoir des modèles et des tableaux de bord interactifs.
En 2023, Shiny for Python est sorti de l’alpha, proposant un cadre réactif similaire pour le langage Python. Shiny est reconnu pour sa simplicité et son efficacité à créer des tableaux de bord et des applications web sans compétences poussées en développement web.
Qu’est-ce que Shiny ?
Shiny est un framework open source de création d’applications web pour R et, plus récemment, pour Python. Il permet aux professionnels des données de transformer leurs analyses en applications web interactives. Le cœur de Shiny repose sur la programmation réactive : toute modification d’un input (curseurs, boutons, etc.) déclenche automatiquement la mise à jour des outputs (graphiques, tableaux, etc.).
Le framework Shiny présente de nombreux atouts pour créer des applications web. Il s’appuie sur la programmation réactive, ce qui vous permet de concevoir des applications qui réagissent dynamiquement aux actions des utilisateurs, pour une expérience plus engageante et personnalisée. Sa bibliothèque conviviale et sa documentation complète offrent la possibilité, avec des bases en programmation, de réaliser des applications interactives et esthétiques. Pour les passionnés de Python, Shiny crée désormais un pont entre le riche écosystème data science de Python et les capacités web de Shiny.
Voici quelques exemples de cas d’usage où Shiny est particulièrement pertinent :
- Tableaux de bord interactifs : Shiny est idéal pour créer des dashboards qui permettent d’explorer et de visualiser les données en temps réel. Vous pouvez utiliser ces conseils pour concevoir un excellent tableau de bord.
- Exploration de données : les analystes peuvent créer des applications permettant aux utilisateurs d’explorer interactivement des jeux de données, en ajustant à la volée paramètres et visualisations.
- Aides à la décision : Shiny peut servir à développer des systèmes d’aide à la décision, pour des choix basés sur les données grâce à des insights dynamiques.
- Outils pédagogiques : en contexte éducatif, Shiny facilite la création de supports d’enseignement et de démonstrations interactifs.
Remarque : Shiny pour R et Shiny pour Python sont différents. S’ils partagent des concepts communs, leur syntaxe et leur terminologie ne sont pas interchangeables. Si vous maîtrisez Shiny pour R, vous aurez une longueur d’avance pour Shiny pour Python, mais il faudra tout de même assimiler les différences propres à Python.
Shiny comparé aux autres frameworks d’applications web
Quand on envisage le développement d’applications web pour la data science, il est utile de comprendre comment Shiny se positionne face aux autres frameworks.
Shiny offre une combinaison unique de simplicité et de polyvalence. Cependant, la version Python est relativement récente par rapport à d’autres frameworks. Shiny a été conçu pour rendre le développement d’applications web accessible à toute personne sachant coder en Python.
Outre sa simplicité, il a été pensé pour une montée en charge fluide, grâce au cache et à la réactivité sélective qui préservent l’efficacité du moteur réactif. C’est un avantage face à certains autres frameworks web. Sa syntaxe déclarative et son modèle réactif le rendent aussi accessible aux analystes, qui peuvent créer des applications interactives sans expertise web approfondie.
À l’inverse, d’autres frameworks comme Dash et Streamlit ont leurs propres forces. Dash utilise une syntaxe « pythonic » et privilégie le développement rapide. Streamlit excelle pour le prototypage express avec rendu automatique, mais relance tout le programme à chaque changement d’input, ce qui devient inefficace à l’échelle. Flask et Django sont des frameworks web généraux, flexibles et puissants, mais qui exigent souvent davantage de compétences en développement web. Si vous souhaitez les apprendre, consultez le tutoriel Django de DataCamp.
En dehors des plateformes de développement basées sur le code, les analystes utilisent aussi Tableau et Power BI pour créer des tableaux de bord similaires. Ce sont des plateformes de visualisation performantes, mais payantes. Elles offrent moins de possibilités d’analyse que le code pur et imposent souvent de réaliser les modèles et analyses complexes ailleurs. Vous pouvez en savoir plus sur Power BI sur DataCamp.
Il est essentiel de tenir compte des exigences du projet, des préférences de langage et des besoins en fonctionnalités spécialisées pour choisir le framework le plus adapté. Si d’autres frameworks ont leurs atouts, le mélange unique de simplicité et de flexibilité de Shiny, associé à son intégration avec Python, en fait un choix de premier plan pour faire monter en puissance vos projets data.
|
Framework |
Fonctionnalités clés |
Langages pris en charge |
Courbe d’apprentissage |
Cas d’usage |
|
Shiny |
Simplicité et polyvalence |
R, Python |
Faible |
Applications et visualisations interactives |
|
Dash |
Syntaxe « pythonic » |
Python |
Modérée |
Développement rapide d’applis web légères |
|
Streamlit |
Prototypage rapide avec rendu automatique |
Python |
Faible |
Prototypage rapide d’applis data |
|
Flask |
Framework web polyvalent |
Python |
Modérée à élevée |
Applications web complètes |
|
Django |
Framework web Python haut niveau |
Python |
Modérée à élevée |
Applications et services web évolutifs |
|
Tableau/Power BI |
Plateformes de visualisation de données |
Non applicable |
Faible |
Visualisations de Business Intelligence |
Configuration de l’environnement de développement
L’un des grands atouts de Shiny pour Python est l’existence d’un éditeur web qui permet de créer votre application sans rien télécharger ni installer. Cet éditeur web propose plusieurs exemples d’applications et de fonctionnalités pour démarrer et tester votre nouvelle application Shiny.
Cependant, vous aurez sans doute envie, à un moment donné, d’exécuter Shiny en local. Cette section vous guide pour installer Python, Shiny et leurs dépendances, ainsi que pour effectuer les réglages nécessaires afin de faire tourner votre environnement local sans accroc.
Installation de Python
Pour travailler avec Shiny hors ligne, vous devez installer Python sur votre ordinateur. Si ce n’est pas déjà fait, rendez-vous sur le site officiel python.org et téléchargez la dernière version adaptée à votre système. Si vous disposez déjà de Python, nous vous recommandons de le mettre à jour afin de garantir le bon fonctionnement de Shiny.
Exécutez l’installateur téléchargé et cochez la case « Add Python to PATH » pendant l’installation. Cela facilite l’exécution de Python depuis la ligne de commande. Ouvrez un terminal et tapez python --version pour vérifier l’installation. Vous devriez voir s’afficher le numéro de version. Pour plus de confort, vous pouvez aussi installer un environnement de développement intégré (IDE).
Installation de Shiny
Une fois Python en place, vous pouvez installer Shiny. Si vous utilisez la dernière version de Python, ouvrez un terminal et exécutez la commande suivante pour installer la bibliothèque Shiny pour Python avec pip :
pip install shiny
Si vous utilisez conda plutôt que pip, exécutez plutôt :
conda install -c conda-forge shiny
Selon votre configuration, Shiny peut nécessiter des dépendances supplémentaires. Assurez-vous de les installer en suivant les instructions de la documentation Shiny.
Configuration de l’environnement de développement
Maintenant que Python et Shiny sont installés, trois points restent à traiter.
- IDE : si vous utilisez un IDE, comme VS Code, vous pouvez ajouter une extension pour afficher les sorties Shiny directement dans l’IDE.
- Gestion de versions : pensez à utiliser un système de contrôle de versions comme Git pour suivre l’évolution de votre code. Initialisez un dépôt Git dans le dossier de votre projet pour faciliter la gestion et la collaboration sur vos applications Shiny.
- Structure du code : organisez la structure du projet. Créez des dossiers distincts pour vos applications Shiny, vos jeux de données et vos ressources additionnelles. Cela permet de garder une base de code propre et organisée — une bonne pratique pour tout projet.
Votre environnement de développement étant prêt et configuré, vous pouvez commencer à créer des applications web interactives avec Shiny pour Python.
Créer une application Shiny basique
Comprendre la structure d’une application Shiny
Une application Shiny comporte deux éléments principaux : l’interface utilisateur (UI) et la logique serveur.
L’UI définit l’apparence de l’application et les éléments disponibles pour l’interaction. Tout ce que l’utilisateur voit ou manipule fait partie de l’UI : curseurs, boutons, graphiques, etc.
L’UI est construite avec des fonctions préfixées par « ui. », comme ui.input_numeric, ui.input_slider et ui.output_text. Ces fonctions sont encapsulées dans une fonction de page, généralement ui.page_fluid, qui décrit la mise en page de base.
La logique serveur définit le comportement de l’application en réponse aux actions de l’utilisateur. Elle regroupe des fonctions qui récupèrent les inputs de l’UI, les traitent, puis mettent à jour les outputs. La logique serveur s’écrit avec la fonction server et s’appuie sur des expressions réactives pour gérer entrées et sorties.
Une fois l’UI et la logique serveur définies, on les relie au sein d’une application complète, qui doit être nommée « app ».

Comprendre le modèle de programmation réactive
Considérez cet exemple tiré de la documentation Shiny.
Cet exemple prend la valeur d’un curseur en entrée et l’utilise pour effectuer un calcul affiché dans la zone de texte située sous le curseur. Cet exemple très simple s’exécute dans un navigateur local dans VS Code.

Comme vous le voyez, la force de Shiny réside dans son interactivité. Le moteur de cette interactivité est son modèle de programmation réactive. Dans Shiny, on définit des expressions réactives qui créent une chaîne de dépendances entre les inputs et les outputs. Quand un input change, toutes les expressions et sorties dépendantes sont mises à jour automatiquement. Cette réactivité est au cœur de Shiny. Vous pouvez en lire davantage ici.
Quelques éléments clés rendent cette réactivité possible.
D’abord, le calcul réactif, ou reactive.Calc. Il s’agit d’un calcul fondé sur un input. Le résultat est mis en cache jusqu’à ce que l’input change, moment où le calcul est relancé avec la nouvelle valeur. Votre application reste ainsi réactive tout en restant efficace. Les calculs réactifs utilisent le décorateur @reactive.Calc, comme ci-dessous.
@reactive.Calc
def double_number():
return input.number() * 2
Autre élément réactif : l’effet réactif, ou reactive.Effect. Un effet réactif ne renvoie pas de valeur, mais déclenche une action, comme modifier une variable ou enregistrer un fichier. Il se relance aussi quand les inputs changent. Le reactive.Effect le plus courant est le décorateur @output, qui ajoute une chaîne de caractères avec le résultat dans la file de messages, comme dans l’exemple ci-dessous.
@output
@render.text
def txt():
return f"The value of x is {input.x()}"
Parfois, vous ne souhaitez pas que la réactivité soit instantanée. Par exemple, si vous avez un modèle coûteux en calcul, vous préférerez peut-être attendre la mise à jour de plusieurs paramètres avant de le relancer. Dans ce cas, reactive.event() ou reactive.isolate() offrent des options pour limiter la réactivité.
Ajouter de l’interactivité à votre application Shiny
Quand vous avez besoin d’une application plus complexe
Avec cette logique réactive, Shiny pour Python permet de créer des applications aussi simples ou complexes que nécessaire. Vous pouvez ajouter des boutons radio, cases à cocher, curseurs, champs de texte, graphiques, cartes, et bien plus encore ! Voici un exemple un peu plus complexe tiré de la documentation Shiny.

Ici, nous générons une carte thermique sur des données aléatoires. Des boutons radio permettent de choisir le style de la heatmap, et le curseur modifie l’étendue des couleurs. Posit (l’éditeur de Shiny) propose de nombreux autres exemples, dont ce clone de Wordle ludique.
Au-delà de l’aspect récréatif, les applications utiles ne manquent pas. Vous pourriez concevoir un modèle qui prend des facteurs environnementaux comme la salinité et la température pour prévoir les proliférations d’algues. Un chercheur sur le terrain saisirait les valeurs du moment dans votre application Shiny et obtiendrait une prédiction en temps réel.
Autre exemple : un modèle montrant des projections de revenus annuels selon différents scénarios. Les managers pourraient tester des hypothèses en saisissant divers volumes de ventes ou en cochant les produits proposés, et verraient instantanément l’impact estimé.
Les cas d’usage sont innombrables et couvrent de nombreux secteurs.
Types d’entrées et de sorties
Shiny propose une large gamme d’inputs et d’outputs pour répondre aux besoins de visualisation et d’interaction. Voici un tableau simple des entrées et sorties courantes disponibles avec Shiny pour Python.
|
Inputs |
À quoi ça sert ? |
|
Action Button Input |
Ajoute un bouton sur lequel l’utilisateur peut cliquer. |
|
Action Link Input |
Permet à l’utilisateur de cliquer sur un lien. |
|
Text input |
Fournit un champ de saisie pour une ligne de texte. |
|
Numeric input |
Propose un champ numérique avec flèches haut/bas. |
|
Slider input |
Crée un curseur numérique. |
|
Checkbox input |
Génère une case à cocher (vrai/faux). |
|
Switch input |
Génère un interrupteur marche/arrêt. |
|
Checkbox group input |
Crée plusieurs cases à cocher pour des choix multiples. |
|
Select input |
Affiche un menu déroulant de choix. |
|
Radio buttons input |
Propose des boutons radio pour forcer un choix unique. |
|
Text area input |
Fournit une zone de texte redimensionnable pour des saisies plus longues. |
|
Date input |
Crée un champ date avec calendrier de sélection. |
|
Date range input |
Deux champs date couplés pour saisir une plage. |
|
Password input |
Crée un champ texte masquant la saisie. |
———————————————————————————————————————————
|
Outputs |
À quoi ça sert ? |
|
Text output |
Écrit du texte en HTML simple. |
|
Verbatim text output |
Affiche du texte dans un bloc à chasse fixe. |
|
UI output |
Permet une interface plus dynamique selon les inputs. |
|
Plot output |
Génère un graphique avec des bibliothèques Python courantes (p. ex. matplotlib). |
|
Table output |
Crée un tableau simple avec en-têtes de colonnes. |
|
Data Frame / Grid output |
Crée un tableau personnalisable avec filtres, quadrillage et limite de lignes. |
Pour la liste complète des composants Shiny, consultez cette page.
Personnaliser l’interface utilisateur dans Shiny pour Python
Mises en page et thèmes
Shiny offre une grande flexibilité pour personnaliser l’interface utilisateur via différentes mises en page à l’aide d’une fonction de page. La plus utilisée est page_fluid(), qui fournit un design responsive s’adaptant aux tailles d’écran. Pour une largeur fixe, adaptée à des contraintes de design spécifiques, utilisez la fonction page_fixed().
Shiny s’appuie sur HTML pour générer ses applications web. Vous pouvez donc appliquer des thèmes CSS pour styliser votre application. En ajoutant vos propres styles CSS, vous adaptez l’apparence de votre app Shiny à vos préférences ou à votre charte graphique.
Intégration de widgets et d’extensions personnalisés
Shiny prend en charge ipywidgets pour une grande variété de graphiques interactifs, cartes, visualisations 3D et diffusion multimédia. Il offre aussi des possibilités avec d’autres widgets Python exportables en HTML. En intégrant des widgets personnalisés, vous adaptez votre application Shiny à des cas d’usage spécifiques et créez une expérience plus sur mesure.
Déployer votre application Shiny pour Python
Présentation des différentes options de déploiement
Une fois votre application Shiny prête, vous souhaiterez sans doute la partager plus largement, pour votre portfolio ou pour un client, en la déployant sur le web. Shiny prend en charge plusieurs options de déploiement pour répondre à divers besoins.
Déploiement local : vous pouvez déployer votre application Shiny sur un serveur local, accessible au sein de votre organisation ou à un groupe d’utilisateurs défini.
Plateformes cloud : ces plateformes offrent des solutions évolutives et accessibles pour déployer des applications Shiny. Parmi les options populaires :
- Shinyapps.io : la plateforme de Posit, conçue spécifiquement pour héberger des applications Shiny.
- Heroku : une plateforme cloud qui prend en charge le déploiement d’applications Shiny.
- AWS, Azure et Google Cloud : les principaux fournisseurs cloud permettant de déployer Shiny sur des machines virtuelles ou des conteneurs.
ShinyLive : Shiny propose une nouvelle façon d’exécuter des applications Shiny directement dans le navigateur, sans serveur séparé exécutant Python. Il combine WebAssembly et Pyodide pour permettre l’exécution d’applications Shiny sans installer Python ni Shiny sur votre ordinateur. Les packages Python disponibles y sont limités et la sécurité peut être moindre que sur d’autres plateformes, mais c’est une bonne option pour partager rapidement du code non sensible.
Conclusion
Shiny pour Python est un nouvel acteur enthousiasmant dans le développement d’applications web. Son usage peut faire monter en gamme votre projet data sans investissement massif en développement web. Si vous souhaitez tester Shiny pour R, découvrez ce parcours sur les fondamentaux de Shiny de DataCamp et ce cours sur la création de tableaux de bord avec R Shiny. Une fois les bases en main, entraînez-vous avec une étude de cas Shiny !
Je suis titulaire d'un doctorat et j'ai 13 ans d'expérience dans le traitement des données dans un environnement de recherche biologique. Je crée des logiciels dans plusieurs langages de programmation, notamment Python, MATLAB et R. Je suis passionné par le partage de mon amour de l'apprentissage avec le monde.
