Kurs
Einfuhrung in Shiny und seine Vorteile
Wer mit R arbeitet, hat wahrscheinlich schon vom Shiny-Paket gehört, mit dem du interaktive Webanwendungen erstellen kannst. R Shiny kam 2012 auf den Markt, und die Nachfrage stieg rasant, als klar wurde, dass dieses leicht zu bedienende Paket Wissenschaftlerinnen, Wissenschaftlern und Analysten ermöglicht, interaktivere Modelle und Dashboards zu bauen.
2023 ist Shiny für Python aus der Alpha-Phase gekommen und bietet nun ein ähnliches, reaktives Framework für die Python-Sprache. Shiny ist für seine Einfachheit und Effizienz bekannt, wenn es darum geht, webbasierte Dashboards und Anwendungen zu erstellen — ganz ohne tiefgehende Webentwicklungskenntnisse.
Was ist Shiny?
Shiny ist ein Open-Source-Framework für Webanwendungen für R und, dank jüngster Entwicklungen, auch für Python. Es ermöglicht Datenprofis, ihre Analysen in interaktive Webanwendungen zu verwandeln. Der Kern von Shiny basiert auf dem Konzept der reaktiven Programmierung: Änderungen an Eingaben (zum Beispiel Slider oder Buttons) führen automatisch zu Updates bei Ausgaben (zum Beispiel Diagrammen oder Tabellen).
Das Shiny-Framework bietet viele Vorteile für die Erstellung webbasierten Anwendungen. Shiny setzt auf reaktive Programmierung, sodass du Apps bauen kannst, die dynamisch auf Nutzereingaben reagieren — für ein persönlicheres, engagierteres Erlebnis. Dank einer benutzerfreundlichen Bibliothek und umfassender Dokumentation können auch Personen mit grundlegenden Programmierkenntnissen interaktive, ansprechende Anwendungen entwickeln. Für Python-Fans baut Shiny jetzt eine Brücke zwischen dem reichen Data-Science-Ökosystem von Python und den Webentwicklungsmöglichkeiten von Shiny.
Hier sind einige Beispiele, wo sich das Shiny-Framework besonders lohnt:
- Interaktive Dashboards: Shiny eignet sich perfekt, um interaktive Dashboards zu erstellen, mit denen Nutzende Daten in Echtzeit erkunden und visualisieren können. Diese Tipps helfen dir beim Design eines erstklassigen Dashboards.
- Datenexploration: Analysten können mit Shiny Anwendungen entwickeln, die eine interaktive Datenerkundung mit spontaner Anpassung von Parametern und Visualisierungen ermöglichen.
- Entscheidungsunterstützung: Shiny lässt sich für Entscheidungsunterstützungssysteme einsetzen und fördert datenbasierte Entscheidungen durch dynamische Einblicke.
- Lehr- und Lernmaterial: Im Bildungsbereich ist Shiny ideal, um interaktive Lehrmaterialien und Demonstrationen zu erstellen.
Hinweis: Es ist wichtig zu verstehen, dass Shiny für R und Shiny für Python verschieden sind. Auch wenn die zugrunde liegenden Konzepte ähnlich sind, sind Syntax und Terminologie nicht austauschbar. Wenn du Shiny für R beherrschst, hast du einen Startvorteil für Shiny für Python, musst aber dennoch die Unterschiede lernen, die für Python eingeführt wurden.
Shiny im Vergleich mit anderen Webframeworks
Wenn du Webanwendungen für Data Science planst, ist es hilfreich zu wissen, wie sich Shiny gegenüber anderen Frameworks schlägt.
Shiny bietet eine einzigartige Kombination aus Einfachheit und Vielseitigkeit. Allerdings ist die Python-Version im Vergleich zu anderen Frameworks noch relativ neu. Shiny ist so konzipiert, dass jeder mit Python-Kenntnissen Webanwendungen entwickeln kann.
Neben der leichten Bedienbarkeit ist Shiny für nahtlose Skalierung ausgelegt und nutzt Caching und selektive Reaktivität, um das reaktive Framework effizient zu halten. Das verschafft ihm Vorteile gegenüber manchen anderen Webframeworks. Seine deklarative Syntax und das reaktive Programmiermodell machen es auch für Data Analysts zugänglich, die damit interaktive Anwendungen ohne tiefes Webentwicklungswissen bauen können.
Andere Frameworks wie Dash und Streamlit haben wiederum eigene Stärken. Dash setzt auf pythonische Syntax und priorisiert schnelle Entwicklung. Streamlit überzeugt beim schnellen Prototyping mit automatischem Rendering, startet aber beim Ändern von Eingaben das gesamte Programm neu — was bei wachsenden Anwendungen ineffizient wird. Flask und Django sind allgemeine Webframeworks, die viel Flexibilität und Kontrolle bieten, aber meist mehr Webentwicklungsexpertise erfordern. Wenn dich das interessiert, lies DataCamps Django-Tutorial.
Neben codebasierten Webplattformen setzen Analysten für ähnliche Dashboard-Anforderungen auch Tableau und Power BI ein. Diese Visualisierungsplattformen bieten mächtige Werkzeuge, sind aber lizenzpflichtig. Gegenüber reinem Code sind ihre Analysefunktionen begrenzt, sodass komplexeres Modellieren und Analysieren meist anderswo erfolgt. Mehr zu Power BI bei DataCamp findest du hier.
Bei der Wahl des passenden Frameworks für eine Data-Science-Anwendung solltest du Projektanforderungen, Sprachvorlieben und den Bedarf an Spezialfunktionen bedenken. Auch wenn andere Frameworks punkten können, macht Shiny die besondere Mischung aus Einfachheit und Flexibilität in Kombination mit Python zu einer überzeugenden Wahl, wenn du deine Data-Science-Projekte auf das nächste Level heben willst.
|
Framework |
Wichtigste Merkmale |
Sprachen |
Lernkurve |
Einsatzszenario |
|
Shiny |
Einfach und vielseitig |
R, Python |
Niedrig |
Interaktive Anwendungen und Visualisierungen |
|
Dash |
Pythonische Syntax |
Python |
Mittel |
Schnelle Entwicklung schlanker Webapps |
|
Streamlit |
Schnelles Prototyping mit automatischem Rendering |
Python |
Niedrig |
Rapid Prototyping für Data Apps |
|
Flask |
Allgemeines Webframework |
Python |
Mittel bis hoch |
Vollwertige Webanwendungen |
|
Django |
Hochwertiges Python-Webframework |
Python |
Mittel bis hoch |
Skalierbare Webanwendungen und -services |
|
Tableau/Power BI |
Datenvisualisierungsplattformen |
Nicht zutreffend |
Niedrig |
Business-Intelligence-Visualisierungen |
Das Entwicklungsumfeld einrichten
Einer der großen Vorteile von Shiny für Python: Es gibt einen Web-Editor, in dem du deine App erstellen kannst, ohne etwas herunterzuladen oder zu installieren. Dieser Web-Editor liefert mehrere Beispiel-Apps und Funktionen, mit denen du schnell starten und deine neue Shiny-Anwendung ausprobieren kannst.
Früher oder später willst du Shiny aber wahrscheinlich lokal ausführen. In diesem Abschnitt führst du die Installation von Python, Shiny und den jeweiligen Abhängigkeiten durch und nimmst die nötigen Konfigurationen vor, damit deine lokale Umgebung reibungslos läuft.
Installation von Python
Um mit Shiny offline zu arbeiten, musst du Python auf deinem Rechner installiert haben. Falls noch nicht geschehen, besuche die offizielle Python-Website unter python.org und lade die neueste Version für dein Betriebssystem herunter. Wenn Python bereits installiert ist, empfehle ich ein Update auf die neueste Version, damit Shiny korrekt läuft.
Führe das Installationsprogramm aus und setze während der Installation das Häkchen bei "Add Python to PATH". So lässt sich Python leichter über die Kommandozeile starten. Öffne eine Eingabeaufforderung oder ein Terminal und gib python --version ein, um zu prüfen, ob Python erfolgreich installiert wurde. Anschließend siehst du die Versionsnummer. Optional kannst du für mehr Komfort eine integrierte Entwicklungsumgebung (IDE) installieren.
Installation von Shiny
Sobald Python eingerichtet ist, kannst du Shiny installieren. Mit der neuesten Python-Version öffnest du einfach eine Eingabeaufforderung oder ein Terminal und installierst die Shiny-Bibliothek für Python mit pip:
pip install shiny
Wenn du statt pip conda verwendest, nutze diesen Befehl:
conda install -c conda-forge shiny
Je nach Systemkonfiguration benötigt Shiny weitere Abhängigkeiten. Stelle sicher, dass diese installiert sind, indem du den Anweisungen in der Shiny-Dokumentation folgst.
Konfiguration der Entwicklungsumgebung
Nachdem Python und Shiny installiert sind, solltest du noch drei Punkte angehen.
- IDE: Wenn du eine IDE wie VS Code verwendest, kannst du eine Erweiterung installieren, damit Shiny-Ausgaben direkt in der IDE gerendert werden.
- Versionskontrolle: Nutze ein Versionskontrollsystem wie Git, um Änderungen am Code nachzuvollziehen. Initialisiere ein Git-Repository in deinem Projektordner, um deine Shiny-Anwendungen einfacher zu verwalten und im Team daran zu arbeiten.
- Strukturierung des Codes: Organisiere deine Projektstruktur. Lege separate Ordner für Shiny-Apps, Datensätze und weitere Ressourcen an. So bleibt dein Code sauber und übersichtlich — eine Best Practice für jedes Coding-Projekt.
Mit der eingerichteten und konfigurierten Entwicklungsumgebung bist du bereit, interaktive Webanwendungen mit Shiny für Python zu erstellen.
Eine einfache Shiny-App erstellen
Aufbau einer Shiny-App verstehen
Eine Shiny-App besteht aus zwei Hauptkomponenten: der Benutzeroberfläche (UI) und der Serverlogik.
Die UI definiert das Erscheinungsbild der App und welche Elemente zur Interaktion bereitstehen. Alles, was die Nutzenden sehen oder bedienen können, ist Teil der UI — etwa Slider, Buttons und Diagramme.
Die UI wird mit Funktionen erstellt, die mit "ui." beginnen, zum Beispiel ui.input_numeric, ui.input_slider und ui.output_text. Diese Funktionen werden in eine Page-Funktion eingebettet, typischerweise ui.page_fluid, die das Grundlayout der Seite beschreibt.
Die Serverlogik legt fest, wie sich die App verhält und auf Eingaben reagiert. Sie besteht aus Funktionen, die Eingaben aus der UI entgegennehmen, verarbeiten und entsprechende Ausgabeelemente aktualisieren. Die Serverlogik wird mit der server-Funktion erstellt und nutzt reaktive Ausdrücke, um Inputs und Outputs zu verknüpfen.
Sobald UI und Serverlogik definiert sind, werden sie zur fertigen Anwendung verbunden, die den Namen "app" tragen muss.

Das reaktive Programmiermodell verstehen
Betrachte dieses Beispiel aus der Shiny-Dokumentation.
Dieses Beispiel nimmt eine Nutzereingabe über einen Slider entgegen und nutzt sie für eine Berechnung, deren Ergebnis im Textfeld unter dem Slider angezeigt wird. Dieses sehr einfache Beispiel läuft im lokalen Browser in VS Code.

Wie du an dieser kurzen Demo siehst, liegt die Magie von Shiny in der Interaktivität. Der Motor dahinter ist das reaktive Programmiermodell. In Shiny definieren wir reaktive Ausdrücke, die Abhängigkeiten zwischen Eingaben und Ausgaben herstellen. Ändert sich eine Eingabe, werden alle abhängigen reaktiven Ausdrücke und Ausgaben automatisch aktualisiert. Diese Reaktivität ist der Kern von Shiny. Hier findest du mehr Details zur Reaktivität in Shiny.
Es gibt einige Schlüsselelemente, die diese Reaktivität ermöglichen.
Erstens die reaktive Berechnung, also reactive.Calc. Dabei handelt es sich um eine Berechnung auf Basis einer Eingabe. Das Ergebnis wird zwischengespeichert, bis sich die Eingabe ändert — dann läuft die Berechnung mit dem neuen Input erneut. So reagiert deine App effizient auf Nutzereingaben. Reaktive Berechnungen nutzen den Decorator @reactive.Calc, wie im folgenden Beispiel.
@reactive.Calc
def double_number():
return input.number() * 2
Ein weiteres reaktives Element ist der reaktive Effekt, also reactive.Effect. Ein reaktiver Effekt gibt beim Ausführen keinen Wert zurück, sondern löst eine Aktion aus, zum Beispiel das Ändern einer Variablen oder das Speichern einer Datei. Auch er läuft erneut, wenn sich Eingaben ändern. Der häufigste reactive.Effect ist der @output-Decorator, der wie im Beispiel unten einen Text mit dem Ergebnis in die Message-Queue schreibt.
@output
@render.text
def txt():
return f"The value of x is {input.x()}"
Manchmal soll die Reaktivität nicht sofort greifen. Wenn dein Modell beispielsweise rechenintensiv ist, willst du möglicherweise warten, bis mehrere Parameter aktualisiert wurden, bevor es erneut ausgeführt wird. In diesem Fall bieten reactive.event() oder reactive.isolate() Möglichkeiten, die Reaktivität deiner App zu steuern.
Mehr Interaktivität für deine Shiny-App
Wenn die App komplexer werden soll
Mit dieser Reaktivitätslogik kann Shiny für Python so einfach oder so komplex sein, wie du es brauchst. Du kannst Radiobuttons, Checkboxen, Slider, Textfelder, Diagramme, Karten und vieles mehr hinzufügen! Hier ein etwas umfangreicheres Beispiel aus der Shiny-Dokumentation.

In diesem Beispiel erzeugen wir eine Heatmap mit Zufallsdaten. Über Radiobuttons wählt der Nutzer den Heatmap-Stil, und der Slider verändert die Farbskala. Posit (das Unternehmen hinter Shiny) hat auf der Website weitere Beispiele — darunter diesen unterhaltsamen Wordle-Klon.
Abseits des Spieltriebs gibt es zahlreiche sinnvolle Anwendungen. Du könntest ein Modell bauen, das Umweltfaktoren wie Salzgehalt und Temperatur nutzt, um Algenblüten vorherzusagen. Forschende im Feld geben aktuelle Werte in deine Shiny-App ein und erhalten eine Vorhersage in Echtzeit.
Oder du entwickelst ein Modell, das jährliche Ertragsprognosen zeigt, wenn bestimmte Bedingungen erfüllt sind. Manager könnten mit deiner App verschiedene Szenarien durchspielen, indem sie andere Verkaufszahlen eingeben oder Produkte per Checkbox auswählen — und sehen die Prognose sofort aktualisiert.
Die Einsatzmöglichkeiten sind in vielen Branchen zahlreich.
Arten von Inputs und Outputs
Shiny bietet eine Vielzahl von Eingabe- und Ausgabeoptionen für unterschiedliche Visualisierungs- und Interaktionsbedürfnisse. Hier ist eine einfache Tabelle der gängigen Inputs und Outputs in Shiny für Python.
|
Inputs |
Wozu dient das? |
|
Action Button Input |
Stellt einen Button für die Auswahl bereit. |
|
Action Link Input |
Ermöglicht das Klicken auf einen Link. |
|
Text input |
Ein einfaches Textfeld für eine Textzeile. |
|
Numeric input |
Numerisches Eingabefeld mit Pfeilen für Hoch/Runter. |
|
Slider input |
Erstellt einen numerischen Slider. |
|
Checkbox input |
Erzeugt eine einzelne Checkbox für True/False-Fälle. |
|
Switch input |
Erzeugt einen einzelnen Ein/Aus-Schalter. |
|
Checkbox group input |
Erstellt mehrere Checkboxen für Mehrfachauswahl. |
|
Select input |
Stellt ein Dropdown-Menü mit Auswahlmöglichkeiten bereit. |
|
Radio buttons input |
Erzeugt Radiobuttons und erzwingt eine Einzelwahl. |
|
Text area input |
Größeres Textfeld mit anpassbarer Fenstergröße für längere Texte. |
|
Date input |
Datumsfeld mit Kalenderauswahl. |
|
Date range input |
Zwei gekoppelte Datumsfelder für die Eingabe eines Bereichs. |
|
Password input |
Erzeugt ein Textfeld, das die Eingabe verbirgt. |
—————————————————————————————————————————
|
Outputs |
Wozu dient das? |
|
Text output |
Schreibt Text in einfachem HTML. |
|
Verbatim text output |
Schreibt Text in einem nichtproportionalen Codeblock. |
|
UI output |
Ermöglicht eine dynamische UI basierend auf Eingaben. |
|
Plot output |
Erzeugt ein Diagramm mit gängigen Python-Bibliotheken wie matplotlib. |
|
Table output |
Erstellt eine einfache Tabelle mit Spaltenüberschriften. |
|
Data Frame / Grid output |
Erstellt eine anpassbare Tabelle mit Filtern, Rasterlinien und Zeilenlimit. |
Eine vollständige Liste der Shiny-Komponenten findest du auf dieser Seite.
Die Benutzeroberfläche in Shiny für Python anpassen
Layouts und Themes
Shiny bietet flexible Anpassungsmöglichkeiten für die Benutzeroberfläche über verschiedene Layouts mittels einer Page-Funktion. Am häufigsten wird page_fluid() verwendet — ein responsives Design, das sich an verschiedene Bildschirmgrößen anpasst. Ein festes Seitenlayout, geeignet für konkrete Designanforderungen, erreichst du mit der Page-Funktion page_fixed().
Shiny nutzt HTML, um seine webbasierten Apps zu erstellen. Du kannst daher CSS-Themes zur Gestaltung deiner App einsetzen. Mit eigenem CSS passt du die Optik deiner Shiny-App an deine Ästhetik oder das Corporate Design an. Top of Form
Eigene Widgets und Erweiterungen einbinden
Shiny unterstützt ipywidgets für eine Vielzahl interaktiver Plots, Karten, 3D-Visualisierungen und Medienstreaming. Außerdem gibt es Funktionen für weitere Python-Widgets, die als HTML-Datei gespeichert werden können. Mit eigenen Widgets kannst du deine Shiny-App auf spezielle Use Cases zuschneiden und ein noch individuelleres Nutzererlebnis schaffen.
Deine Shiny-für-Python-App bereitstellen
Erläuterung der verschiedenen Bereitstellungsoptionen
Sobald du eine überzeugende Shiny-App gebaut hast, willst du sie wahrscheinlich einem größeren Publikum zeigen — für dein Portfolio oder für einen Kunden —, indem du sie im Web bereitstellst. Shiny unterstützt verschiedene Deployment-Optionen für unterschiedliche Bedarfe.
Lokale Bereitstellung: Du kannst deine Shiny-App auf einem lokalen Server ausrollen und so innerhalb deiner Organisation oder für eine definierte Nutzergruppe verfügbar machen.
Cloud-Plattformen: Cloud-Plattformen bieten skalierbare und leicht zugängliche Lösungen für das Deployment von Shiny-Apps. Beliebte Optionen sind:
- Shinyapps.io: Posits eigene Plattform speziell für das Hosting von Shiny-Anwendungen.
- Heroku: Eine Cloud-Plattform, die die Bereitstellung von Shiny-Apps unterstützt.
- AWS, Azure und Google Cloud: Große Cloud-Anbieter, auf denen du Shiny-Apps auf virtuellen Maschinen oder in Containern betreiben kannst.
ShinyLive: Shiny bietet eine neue Möglichkeit, Shiny-Anwendungen direkt im Webbrowser auszuführen — ohne separaten Server mit laufendem Python. Mithilfe von WebAssembly und Pyodide können Shiny-Anwendungen laufen, ohne dass du Python oder Shiny installieren musst. Diese Plattform begrenzt die verfügbaren Python-Pakete und ist möglicherweise nicht so sicher wie andere Lösungen, eignet sich aber gut, um nicht sensiblem Code schnell zu teilen.
Fazit
Shiny für Python ist ein spannender Neuzugang in der Web-App-Entwicklung. Damit hebst du dein Datenprojekt deutlich an, ohne viel Zeit in Webentwicklung zu investieren. Wenn du Shiny für R ausprobieren willst, sieh dir diesen Shiny-Grundlagenkurs von DataCamp an sowie den Kurs zum Erstellen von Dashboards mit R Shiny. Wenn die Basics sitzen, übe deine neuen Kompetenzen mit einer Shiny-Fallstudie!
Ich bin promoviert und habe 13 Jahre Erfahrung in der Arbeit mit Daten in der biologischen Forschung. Ich entwickle Software in verschiedenen Programmiersprachen, darunter Python, MATLAB und R. Meine Leidenschaft ist es, meine Liebe zum Lernen mit der Welt zu teilen.
