Wie ervaring heeft met R, heeft waarschijnlijk weleens van het Shiny-pakket gehoord, waarmee je interactieve webapplicaties kunt maken. R Shiny verscheen in 2012 en de vraag groeide snel toen duidelijk werd dat dit gebruiksvriendelijke pakket zowel wetenschappers als analisten in staat stelde interactievere modellen en dashboards te bouwen.
In 2023 kwam Shiny voor Python uit de alfafase, met een vergelijkbaar, reactief framework voor de Python-taal. Shiny staat bekend om zijn eenvoud en effectiviteit bij het maken van webgebaseerde dashboards en applicaties zonder uitgebreide webontwikkelingsvaardigheden.
Wat is Shiny?
Shiny is een open-source webapplicatieframework voor R en, dankzij recente ontwikkelingen, ook voor Python. Het stelt dataprofessionals in staat hun analyses om te zetten in interactieve webapplicaties. De kern van Shiny draait om het concept van reactief programmeren, waarbij wijzigingen in inputs (zoals schuifbalken of knoppen) automatisch outputs (zoals grafieken of tabellen) bijwerken.
Er zijn veel voordelen aan het Shiny-framework voor het bouwen van webgebaseerde applicaties. Shiny maakt gebruik van reactief programmeren, waardoor je applicaties kunt bouwen die dynamisch reageren op gebruikersinvoer en zo een meer betrokken en gepersonaliseerde ervaring bieden. Shiny heeft een gebruiksvriendelijke bibliotheek en uitgebreide documentatie, waardoor iedereen met basiskennis van programmeren interactieve en visueel aantrekkelijke applicaties kan maken. Voor Python-liefhebbers biedt Shiny nu een brug tussen het rijke data science-ecosysteem van Python en de webontwikkelingsmogelijkheden van Shiny.
Hier zijn een paar voorbeelden waarbij het Shiny-framework waardevol is:
Interactieve dashboards: Shiny is ideaal voor het bouwen van interactieve dashboards waarmee gebruikers data in realtime kunnen verkennen en visualiseren. Je kunt deze tips gebruiken om een geweldig dashboard te ontwerpen.
Data-exploratie: Analisten kunnen Shiny gebruiken om applicaties te maken waarmee gebruikers datasets interactief kunnen verkennen en onderweg parameters en visualisaties kunnen aanpassen.
Beslissingsondersteuningssystemen: Shiny kan worden gebruikt om beslissingsondersteunende systemen te ontwikkelen die datagedreven besluitvorming faciliteren door dynamische inzichten te bieden.
Educatieve tools: Shiny is waardevol in een onderwijscontext, omdat het de creatie van interactieve leermaterialen en demonstraties mogelijk maakt.
Let op: Het is belangrijk om te begrijpen dat Shiny voor R en Shiny voor Python verschillend zijn. Hoewel de onderliggende concepten vergelijkbaar zijn, zijn de syntax en terminologie niet uitwisselbaar. Als je weet hoe je Shiny voor R gebruikt, heb je een voorsprong bij het leren van Shiny voor Python, maar je moet nog steeds de verschillen leren die zijn geïntroduceerd om Python te accommoderen.
Shiny vergeleken met andere webapplicatieframeworks
Als je webapplicatie-ontwikkeling voor data science overweegt, is het handig om te begrijpen hoe Shiny zich verhoudt tot andere frameworks.
Shiny biedt een unieke combinatie van eenvoud en veelzijdigheid. De Python-versie is echter relatief nieuw vergeleken met andere frameworks. Shiny is ontworpen om het ontwikkelen van webapplicaties toegankelijk te maken voor iedereen met kennis van Python-codering.
Naast de eenvoud is het ontworpen om naadloos te schalen, met gebruik van caching en selectieve reactiviteit om het reactieve framework efficiënt te houden. Dit geeft het een voorsprong op sommige andere webdesignframeworks. De declaratieve syntax en het reactieve programmeermodel maken het ook toegankelijk voor data-analisten, zodat zij interactieve applicaties kunnen maken zonder uitgebreide webontwikkelingskennis.
Daartegenover bieden andere frameworks zoals Dash en Streamlit andere sterke punten. Dash gebruikt Pythonic syntax en legt de nadruk op snelle ontwikkeling. Streamlit blinkt uit in snel prototypen met automatische rendering, maar voert het hele programma opnieuw uit wanneer inputs veranderen, wat leidt tot inefficiëntie naarmate applicaties opschalen. Flask en Django zijn algemene webframeworks die flexibiliteit en controle bieden, maar vaak meer webontwikkelingskennis vereisen. Als je deze wilt leren, kun je de Django-tutorial van DataCamp lezen.
Naast codegebaseerde webontwikkelingsplatforms gebruiken data-analisten ook Tableau en Power BI voor vergelijkbare doeleinden bij het maken van dashboards. Dit zijn datavisualisatieplatforms die krachtige tools bieden, maar gepaard gaan met licentiekosten. Deze programma's hebben ook beperkte analysefuncties vergeleken met pure code en vereisen dat de meeste complexe modellering en analyses elders worden voltooid. Je kunt meer leren over Power BI bij DataCamp.
Het is essentieel om projectvereisten, taalvoorkeuren en de behoefte aan gespecialiseerde functies in overweging te nemen bij het kiezen van het meest geschikte framework voor een bepaalde data science-toepassing. Hoewel andere frameworks hun sterke punten hebben, maakt Shiny's unieke mix van eenvoud en flexibiliteit, in combinatie met de Python-integratie, het een overtuigende keuze voor iedereen die zijn data science-projecten naar een hoger niveau wil tillen.
Framework
Belangrijkste kenmerken
Taalondersteuning
Leercurve
Usecase
Shiny
Eenvoud en veelzijdigheid
R, Python
Laag
Interactieve applicaties en visualisaties
Dash
Pythonic syntax
Python
Gemiddeld
Snelle ontwikkeling van lichte webapps
Streamlit
Snel prototypen met automatische rendering
Python
Laag
Snel prototypen voor data-apps
Flask
Algemeen webframework
Python
Gemiddeld tot hoog
Volwaardige webapps
Django
High-level Python-webframework
Python
Gemiddeld tot hoog
Schaalbare webapplicaties en -diensten
Tableau/Power BI
Datavisualisatieplatforms
Niet van toepassing
Laag
Business Intelligence-visualisaties
De ontwikkelomgeving instellen
Een van de grote voordelen van Shiny voor Python is dat er een webeditor is waarin je je app kunt maken zonder iets te downloaden of te installeren. Deze webeditor bevat meerdere voorbeelden van apps en functionaliteit die je kunt gebruiken om te beginnen en je nieuwe Shiny-applicatie uit te proberen.
Er komt echter een moment in je ontwikkeling waarop je Shiny waarschijnlijk lokaal op je apparaat wilt draaien. In dit gedeelte begeleiden we je bij de installatie van Python, Shiny en de bijbehorende afhankelijkheden, evenals de noodzakelijke configuraties om je lokale omgeving soepel aan de praat te krijgen.
Installatie van Python
Om offline met Shiny te werken, moet Python op je computer zijn geïnstalleerd. Als je Python nog niet hebt geïnstalleerd, ga dan naar de officiële Python-website op python.org en download de nieuwste versie van Python voor jouw besturingssysteem. Als je Python eerder hebt geïnstalleerd, raad ik aan te updaten naar de nieuwste versie om ervoor te zorgen dat Shiny correct draait.
Voer het gedownloade installatieprogramma uit en vink tijdens de installatie het vakje aan met "Add Python to PATH". Dit maakt het makkelijker om Python via de commandoregel uit te voeren. Open een opdrachtprompt of terminal en typ python --version om te verifiëren dat Python succesvol is geïnstalleerd. Je zou het versienummer moeten zien. Voor het gemak kun je ook kiezen voor de installatie van een Integrated Development Environment (IDE).
Installatie van Shiny
Zodra Python is ingesteld, kun je Shiny installeren. Zolang je de nieuwste versie van Python hebt, kun je een opdrachtprompt of terminal openen en de volgende opdracht gebruiken om de Shiny-bibliotheek voor Python te installeren met pip:
Shiny kan extra afhankelijkheden hebben afhankelijk van je systeemconfiguratie. Zorg ervoor dat deze afhankelijkheden zijn geïnstalleerd door de instructies in de Shiny-documentatie te volgen.
Configuratie van de ontwikkelomgeving
Nu je Python en Shiny hebt geïnstalleerd, zijn er nog drie onderwerpen die je moet aanpakken.
IDE: Als je een IDE gebruikt, zoals VS Code, dan kun je ervoor kiezen een extensie te installeren zodat Shiny-outputs binnen de IDE worden gerenderd.
Versiebeheer: Overweeg het gebruik van versiebeheersystemen zoals Git om wijzigingen in je code bij te houden. Initialiseer een Git-repository in je projectmap om je Shiny-applicaties eenvoudig te beheren en eraan samen te werken.
Codestructuur: Organiseer je projectstructuur. Maak aparte mappen voor je Shiny-applicaties, datasets en aanvullende resources. Dit helpt een schone en georganiseerde codebase te behouden, wat de best practice is voor elk codeerproject.
Met je ontwikkelomgeving nu ingesteld en geconfigureerd, ben je klaar om interactieve webapplicaties te bouwen met Shiny voor Python.
Een basisapp met Shiny maken
De structuur van een Shiny-app begrijpen
Een Shiny-app bestaat uit twee hoofdonderdelen: de user interface (UI) en de serverlogica.
De UI bepaalt hoe de app eruitziet en welke elementen beschikbaar zijn voor interactie met de gebruiker. Alles wat de gebruiker kan zien of waarmee hij kan interageren, is onderdeel van de UI, waaronder elementen zoals schuifbalken, knoppen en grafieken.
De UI wordt gemaakt met functies die beginnen met “ui.”, zoals ui.input_numeric, ui.input_slider en ui.output_text. Deze functies worden omwikkeld door een paginafunctie, meestal ui.page_fluid, die de basislay-out van de pagina beschrijft.
De serverlogica bepaalt hoe de app zich gedraagt en reageert op gebruikersinvoer. Deze bestaat uit functies die gebruikersinputs uit de UI ophalen, verwerken en de outputelementen dienovereenkomstig bijwerken. De serverlogica wordt gemaakt met de serverfunctie en bevat reactieve expressies om inputs en outputs af te handelen.
Nadat de UI en de serverlogica zijn gedefinieerd, verbinden we ze in een voltooide applicatie, die “app” moet heten.
Dit voorbeeld neemt gebruikersinvoer van een schuifbalk en gebruikt die om een berekening uit te voeren die wordt weergegeven in het tekstvak onder de schuifbalk. Dit zeer eenvoudige voorbeeld draait in een eenvoudige browser op een localhost in VS Code.
Zoals je in deze korte demonstratie ziet, is de magie van Shiny de interactiviteit. De motor achter die interactiviteit ligt in het reactieve programmeermodel. In Shiny definiëren we reactieve expressies om een keten van afhankelijkheden tussen inputs en outputs te creëren. Wanneer een input verandert, worden alle afhankelijke reactieve expressies en outputs automatisch bijgewerkt. Deze reactiviteit is de kern van Shiny. Je kunt hier meer details lezen over de reactiviteit van Shiny.
Er zijn een paar belangrijke elementen die deze reactiviteit mogelijk maken.
Ten eerste is er de reactieve berekening, of reactive.Calc. Dit is een berekening op basis van een input. Deze berekening cachet de waarde die hij teruggeeft totdat de input is gewijzigd; dan wordt hij opnieuw uitgevoerd met de nieuwe input. Zo kan je app efficiënt reageren op gebruikersinvoer. Reactieve berekeningen gebruiken de decorator @reactive.Calc, zoals in het onderstaande voorbeeld.
Een ander reactief element is een reactief effect, of reactive.Effect. Een reactief effect geeft geen waarde terug wanneer het draait. In plaats daarvan triggert het een effect, zoals het wijzigen van een variabele of het opslaan van een bestand. Het wordt ook opnieuw uitgevoerd wanneer de inputs veranderen. Het meest voorkomende reactive.Effect is de @output-decorator, die een string met het resultaat toevoegt aan de message queue, zoals in het onderstaande voorbeeld.
@output@render.textdeftxt():returnf"The value of x is {input.x()}"Mogelijk gemaakt door
Soms wil je misschien niet dat de reactiviteit van je app zo direct is. Als je bijvoorbeeld een rekenintensief model hebt, wil je misschien wachten totdat meerdere parameters zijn bijgewerkt voordat je het model opnieuw uitvoert. In dat geval bieden reactive.event() of met reactive.isolate() opties om de reactiviteit van je app te beperken.
Interactiviteit toevoegen aan je Shiny-app
Wanneer je een complexere app nodig hebt
Met deze reactiviteitslogica kan Shiny voor Python apps zo complex of eenvoudig maken als jij nodig hebt. Je kunt keuzerondjes, selectievakjes, schuifbalken, tekstinvoervakken, grafieken, kaarten en nog veel meer toevoegen! Hier is een iets complexer voorbeeld uit de Shiny-documentatie.
In dit voorbeeld hebben we een heatmap van wat willekeurige data gemaakt. Er is een keuzerondje voor de stijl van de heatmap die de gebruiker wil bekijken, en de schuiffunctie verandert het bereik van kleuren op de heatmap. Posit (het bedrijf dat Shiny heeft gemaakt) biedt op hun website nog meer voorbeelden, waaronder deze leuke Wordle-kloon.
Hoewel dit soort interactiviteit leuk is om mee te spelen, zijn er ook veel nuttige toepassingen. Je zou een model kunnen ontwerpen dat omgevingsfactoren zoals zoutgehalte en temperatuur gebruikt om algenbloei te voorspellen. Een onderzoeker in het veld kan de actuele waarden in jouw Shiny-app invoeren en krijgt dan een realtime voorspelling.
Je zou een model kunnen ontwerpen dat jaarlijkse opbrengstprognoses laat zien als aan bepaalde voorwaarden wordt voldaan. Managers kunnen je app dan gebruiken om verschillende scenario's door te spelen door andere aantallen verkopen in te voeren of vakjes aan te vinken voor welke producten ze aanbieden, en ze zien de voorspelde uitkomst voor hun ogen bijwerken.
De usecases zijn talrijk en sectoroverschrijdend.
Soorten inputs en outputs
Shiny biedt verschillende input- en outputopties voor uiteenlopende behoeften op het gebied van datavisualisatie en interactie. Hier is een eenvoudige tabel met de gangbare inputs en outputs die beschikbaar zijn in Shiny voor Python.
Inputs
Wat doet het?
Actieknop-input
Biedt een knop die de gebruiker kan selecteren.
Actielink-input
Stelt de gebruiker in staat op een link te klikken.
Tekstinvoer
Biedt een tekstvak voor een enkele regel tekst.
Numerieke invoer
Biedt een numeriek invoervak met pijltjes omhoog en omlaag.
Slider-invoer
Maakt een numerieke schuifbalk.
Checkbox-invoer
Genereert één selectievakje voor True/False-toepassingen.
Schakelaar-invoer
Genereert één aan/uit-schakelaar.
Groep checkbox-invoer
Maakt meerdere selectievakjes voor meerdere keuzes.
Select-invoer
Biedt een dropdownmenu met keuzes.
Keuzerondjes-invoer
Maakt keuzerondjes en dwingt tot één keuze.
Tekstgebied-invoer
Biedt een groter tekstvak met een resizable venster voor langere tekstinvoer.
Datum-invoer
Maakt een datumveld met een kalender waarmee gebruikers een datum kunnen kiezen.
Datumbereik-invoer
In feite twee gekoppelde datumvelden waarmee een bereik kan worden ingevoerd.
Wachtwoordinvoer
Maakt een tekstvak dat de ingevoerde tekst verbergt.
———————————————————————————————————————————
Outputs
Wat doet het?
Tekstoutput
Schrijft tekst in gewone HTML.
Letterlijke tekstoutput
Schrijft tekst binnen een monospace-codeblok.
UI-output
Maakt een dynamischere UI mogelijk op basis van gebruikersinvoer.
Plot-output
Genereert een plot met gangbare Python-bibliotheken, zoals matplotlib.
Tabeloutput
Maakt een eenvoudige tabel met kolomkoppen.
Dataframe-/grid-output
Maakt een aanpasbare tabel met filters, rasterlijnen en rijenlimieten.
De gebruikersinterface in Shiny voor Python aanpassen
Lay-outs en thema's
Shiny biedt flexibiliteit bij het aanpassen van de gebruikersinterface via verschillende lay-outs met behulp van een paginfunctie. De meest gebruikte paginfunctie is page_fluid(), die een responsief ontwerp biedt dat zich aanpast aan verschillende schermformaten. Een lay-out met vaste breedte, geschikt voor applicaties met specifieke ontwerpvereisten, kan worden bereikt met de page_fixed()-paginfunctie.
Shiny maakt gebruik van HTML om zijn webgebaseerde apps te maken. Dat betekent dat je CSS-thema's kunt gebruiken om je app te stijlen. Met aangepaste CSS-styling kun je het uiterlijk van je Shiny-app afstemmen op je esthetische voorkeuren of bedrijfsbranding.Top of Form
Implementatie van aangepaste widgets en extensies
Shiny ondersteunt ipywidgets voor uiteenlopende interactieve grafieken, kaarten, 3D-visualisaties en mediastreaming. Het heeft ook enige functionaliteit voor andere Python-widgets die als HTML-bestand kunnen worden opgeslagen. Door aangepaste widgets te integreren, kun je je Shiny-app afstemmen op specifieke usecases en een meer gepersonaliseerde gebruikerservaring creëren.
Je Shiny voor Python-app deployen
Uitleg van de verschillende deployopties
Zodra je een overtuigende Shiny-app hebt gemaakt, wil je die waarschijnlijk delen met een breder publiek, voor je portfolio of voor een klant, door hem op het web te deployen. Shiny ondersteunt verschillende deploymentopties voor uiteenlopende behoeften.
Lokale deployment: Je kunt je Shiny-app op een lokale server deployen, zodat deze toegankelijk is binnen je organisatie of voor een specifieke groep gebruikers.
Cloudplatforms: Cloudplatforms bieden schaalbare en toegankelijke oplossingen voor het deployen van Shiny-apps. Populaire keuzes zijn:
Shinyapps.io: Het eigen platform van Posit, speciaal ontworpen voor het hosten van Shiny-applicaties.
Heroku: Een cloudplatform dat het deployen van Shiny-apps ondersteunt.
AWS, Azure en Google Cloud: Grote cloudproviders waarmee je Shiny-apps kunt deployen op virtuele machines of containers.
ShinyLive: Shiny biedt een nieuwe manier om Shiny-applicaties binnen een webbrowser te draaien zonder een aparte server waarop Python draait. Het combineert WebAssembly en Pyodide om Shiny-applicaties te laten draaien zonder Python of Shiny op je computer te installeren. Dit platform beperkt de beschikbare Python-pakketten en is mogelijk minder veilig dan andere platforms, maar is een goede manier om niet-gevoelige code snel te delen.
Conclusie
Shiny voor Python is een spannende, nieuwe speler op het gebied van webappontwikkeling. Het gebruik ervan kan je dataproject aanzienlijk upgraden zonder dat je veel tijd hoeft te investeren in het leren van webontwikkeling. Als je Shiny voor R wilt uitproberen, bekijk dan deze Shiny-fundamentalscursus van DataCamp en deze cursus over het maken van dashboards met R Shiny. Heb je de basis eenmaal onder de knie, oefen je nieuwe skills dan met een Shiny-casestudy!
Ik ben gepromoveerd en heb 13 jaar ervaring met het werken met data in een biologische onderzoeksomgeving. Ik maak software in verschillende programmeertalen, waaronder Python, MATLAB en R. Ik deel met plezier mijn liefde voor leren met de wereld.
Leer hoe je Shiny, een populair R-pakket, kunt gebruiken om super interactieve webapps te maken en je analyses te delen als dashboards en visualisaties.
Introductie tot Shiny en de voordelen
Wie ervaring heeft met R, heeft waarschijnlijk weleens van het Shiny-pakket gehoord, waarmee je interactieve webapplicaties kunt maken. R Shiny verscheen in 2012 en de vraag groeide snel toen duidelijk werd dat dit gebruiksvriendelijke pakket zowel wetenschappers als analisten in staat stelde interactievere modellen en dashboards te bouwen.
In 2023 kwam Shiny voor Python uit de alfafase, met een vergelijkbaar, reactief framework voor de Python-taal. Shiny staat bekend om zijn eenvoud en effectiviteit bij het maken van webgebaseerde dashboards en applicaties zonder uitgebreide webontwikkelingsvaardigheden.
Wat is Shiny?
Shiny is een open-source webapplicatieframework voor R en, dankzij recente ontwikkelingen, ook voor Python. Het stelt dataprofessionals in staat hun analyses om te zetten in interactieve webapplicaties. De kern van Shiny draait om het concept van reactief programmeren, waarbij wijzigingen in inputs (zoals schuifbalken of knoppen) automatisch outputs (zoals grafieken of tabellen) bijwerken.
Er zijn veel voordelen aan het Shiny-framework voor het bouwen van webgebaseerde applicaties. Shiny maakt gebruik van reactief programmeren, waardoor je applicaties kunt bouwen die dynamisch reageren op gebruikersinvoer en zo een meer betrokken en gepersonaliseerde ervaring bieden. Shiny heeft een gebruiksvriendelijke bibliotheek en uitgebreide documentatie, waardoor iedereen met basiskennis van programmeren interactieve en visueel aantrekkelijke applicaties kan maken. Voor Python-liefhebbers biedt Shiny nu een brug tussen het rijke data science-ecosysteem van Python en de webontwikkelingsmogelijkheden van Shiny.
Hier zijn een paar voorbeelden waarbij het Shiny-framework waardevol is:
Let op: Het is belangrijk om te begrijpen dat Shiny voor R en Shiny voor Python verschillend zijn. Hoewel de onderliggende concepten vergelijkbaar zijn, zijn de syntax en terminologie niet uitwisselbaar. Als je weet hoe je Shiny voor R gebruikt, heb je een voorsprong bij het leren van Shiny voor Python, maar je moet nog steeds de verschillen leren die zijn geïntroduceerd om Python te accommoderen.
Shiny vergeleken met andere webapplicatieframeworks
Als je webapplicatie-ontwikkeling voor data science overweegt, is het handig om te begrijpen hoe Shiny zich verhoudt tot andere frameworks.
Shiny biedt een unieke combinatie van eenvoud en veelzijdigheid. De Python-versie is echter relatief nieuw vergeleken met andere frameworks. Shiny is ontworpen om het ontwikkelen van webapplicaties toegankelijk te maken voor iedereen met kennis van Python-codering.
Naast de eenvoud is het ontworpen om naadloos te schalen, met gebruik van caching en selectieve reactiviteit om het reactieve framework efficiënt te houden. Dit geeft het een voorsprong op sommige andere webdesignframeworks. De declaratieve syntax en het reactieve programmeermodel maken het ook toegankelijk voor data-analisten, zodat zij interactieve applicaties kunnen maken zonder uitgebreide webontwikkelingskennis.
Daartegenover bieden andere frameworks zoals Dash en Streamlit andere sterke punten. Dash gebruikt Pythonic syntax en legt de nadruk op snelle ontwikkeling. Streamlit blinkt uit in snel prototypen met automatische rendering, maar voert het hele programma opnieuw uit wanneer inputs veranderen, wat leidt tot inefficiëntie naarmate applicaties opschalen. Flask en Django zijn algemene webframeworks die flexibiliteit en controle bieden, maar vaak meer webontwikkelingskennis vereisen. Als je deze wilt leren, kun je de Django-tutorial van DataCamp lezen.
Naast codegebaseerde webontwikkelingsplatforms gebruiken data-analisten ook Tableau en Power BI voor vergelijkbare doeleinden bij het maken van dashboards. Dit zijn datavisualisatieplatforms die krachtige tools bieden, maar gepaard gaan met licentiekosten. Deze programma's hebben ook beperkte analysefuncties vergeleken met pure code en vereisen dat de meeste complexe modellering en analyses elders worden voltooid. Je kunt meer leren over Power BI bij DataCamp.
Het is essentieel om projectvereisten, taalvoorkeuren en de behoefte aan gespecialiseerde functies in overweging te nemen bij het kiezen van het meest geschikte framework voor een bepaalde data science-toepassing. Hoewel andere frameworks hun sterke punten hebben, maakt Shiny's unieke mix van eenvoud en flexibiliteit, in combinatie met de Python-integratie, het een overtuigende keuze voor iedereen die zijn data science-projecten naar een hoger niveau wil tillen.
Framework
Belangrijkste kenmerken
Taalondersteuning
Leercurve
Usecase
Shiny
Eenvoud en veelzijdigheid
R, Python
Laag
Interactieve applicaties en visualisaties
Dash
Pythonic syntax
Python
Gemiddeld
Snelle ontwikkeling van lichte webapps
Streamlit
Snel prototypen met automatische rendering
Python
Laag
Snel prototypen voor data-apps
Flask
Algemeen webframework
Python
Gemiddeld tot hoog
Volwaardige webapps
Django
High-level Python-webframework
Python
Gemiddeld tot hoog
Schaalbare webapplicaties en -diensten
Tableau/Power BI
Datavisualisatieplatforms
Niet van toepassing
Laag
Business Intelligence-visualisaties
De ontwikkelomgeving instellen
Een van de grote voordelen van Shiny voor Python is dat er een webeditor is waarin je je app kunt maken zonder iets te downloaden of te installeren. Deze webeditor bevat meerdere voorbeelden van apps en functionaliteit die je kunt gebruiken om te beginnen en je nieuwe Shiny-applicatie uit te proberen.
Er komt echter een moment in je ontwikkeling waarop je Shiny waarschijnlijk lokaal op je apparaat wilt draaien. In dit gedeelte begeleiden we je bij de installatie van Python, Shiny en de bijbehorende afhankelijkheden, evenals de noodzakelijke configuraties om je lokale omgeving soepel aan de praat te krijgen.
Installatie van Python
Om offline met Shiny te werken, moet Python op je computer zijn geïnstalleerd. Als je Python nog niet hebt geïnstalleerd, ga dan naar de officiële Python-website op python.org en download de nieuwste versie van Python voor jouw besturingssysteem. Als je Python eerder hebt geïnstalleerd, raad ik aan te updaten naar de nieuwste versie om ervoor te zorgen dat Shiny correct draait.
Voer het gedownloade installatieprogramma uit en vink tijdens de installatie het vakje aan met "Add Python to PATH". Dit maakt het makkelijker om Python via de commandoregel uit te voeren. Open een opdrachtprompt of terminal en typ python --version om te verifiëren dat Python succesvol is geïnstalleerd. Je zou het versienummer moeten zien. Voor het gemak kun je ook kiezen voor de installatie van een Integrated Development Environment (IDE).
Installatie van Shiny
Zodra Python is ingesteld, kun je Shiny installeren. Zolang je de nieuwste versie van Python hebt, kun je een opdrachtprompt of terminal openen en de volgende opdracht gebruiken om de Shiny-bibliotheek voor Python te installeren met pip:
Als je in plaats van pip conda gebruikt, gebruik dan deze opdracht:
Shiny kan extra afhankelijkheden hebben afhankelijk van je systeemconfiguratie. Zorg ervoor dat deze afhankelijkheden zijn geïnstalleerd door de instructies in de Shiny-documentatie te volgen.
Configuratie van de ontwikkelomgeving
Nu je Python en Shiny hebt geïnstalleerd, zijn er nog drie onderwerpen die je moet aanpakken.
Met je ontwikkelomgeving nu ingesteld en geconfigureerd, ben je klaar om interactieve webapplicaties te bouwen met Shiny voor Python.
Een basisapp met Shiny maken
De structuur van een Shiny-app begrijpen
Een Shiny-app bestaat uit twee hoofdonderdelen: de user interface (UI) en de serverlogica.
De UI bepaalt hoe de app eruitziet en welke elementen beschikbaar zijn voor interactie met de gebruiker. Alles wat de gebruiker kan zien of waarmee hij kan interageren, is onderdeel van de UI, waaronder elementen zoals schuifbalken, knoppen en grafieken.
De UI wordt gemaakt met functies die beginnen met “ui.”, zoals ui.input_numeric, ui.input_slider en ui.output_text. Deze functies worden omwikkeld door een paginafunctie, meestal ui.page_fluid, die de basislay-out van de pagina beschrijft.
De serverlogica bepaalt hoe de app zich gedraagt en reageert op gebruikersinvoer. Deze bestaat uit functies die gebruikersinputs uit de UI ophalen, verwerken en de outputelementen dienovereenkomstig bijwerken. De serverlogica wordt gemaakt met de serverfunctie en bevat reactieve expressies om inputs en outputs af te handelen.
Nadat de UI en de serverlogica zijn gedefinieerd, verbinden we ze in een voltooide applicatie, die “app” moet heten.
Het reactieve programmeermodel begrijpen
Bekijk dit voorbeeld uit de Shiny-documentatie.
Dit voorbeeld neemt gebruikersinvoer van een schuifbalk en gebruikt die om een berekening uit te voeren die wordt weergegeven in het tekstvak onder de schuifbalk. Dit zeer eenvoudige voorbeeld draait in een eenvoudige browser op een localhost in VS Code.
Zoals je in deze korte demonstratie ziet, is de magie van Shiny de interactiviteit. De motor achter die interactiviteit ligt in het reactieve programmeermodel. In Shiny definiëren we reactieve expressies om een keten van afhankelijkheden tussen inputs en outputs te creëren. Wanneer een input verandert, worden alle afhankelijke reactieve expressies en outputs automatisch bijgewerkt. Deze reactiviteit is de kern van Shiny. Je kunt hier meer details lezen over de reactiviteit van Shiny.
Er zijn een paar belangrijke elementen die deze reactiviteit mogelijk maken.
Ten eerste is er de reactieve berekening, of
reactive.Calc. Dit is een berekening op basis van een input. Deze berekening cachet de waarde die hij teruggeeft totdat de input is gewijzigd; dan wordt hij opnieuw uitgevoerd met de nieuwe input. Zo kan je app efficiënt reageren op gebruikersinvoer. Reactieve berekeningen gebruiken de decorator @reactive.Calc, zoals in het onderstaande voorbeeld.Een ander reactief element is een reactief effect, of
reactive.Effect. Een reactief effect geeft geen waarde terug wanneer het draait. In plaats daarvan triggert het een effect, zoals het wijzigen van een variabele of het opslaan van een bestand. Het wordt ook opnieuw uitgevoerd wanneer de inputs veranderen. Het meest voorkomende reactive.Effect is de @output-decorator, die een string met het resultaat toevoegt aan de message queue, zoals in het onderstaande voorbeeld.Soms wil je misschien niet dat de reactiviteit van je app zo direct is. Als je bijvoorbeeld een rekenintensief model hebt, wil je misschien wachten totdat meerdere parameters zijn bijgewerkt voordat je het model opnieuw uitvoert. In dat geval bieden reactive.event() of met reactive.isolate() opties om de reactiviteit van je app te beperken.
Interactiviteit toevoegen aan je Shiny-app
Wanneer je een complexere app nodig hebt
Met deze reactiviteitslogica kan Shiny voor Python apps zo complex of eenvoudig maken als jij nodig hebt. Je kunt keuzerondjes, selectievakjes, schuifbalken, tekstinvoervakken, grafieken, kaarten en nog veel meer toevoegen! Hier is een iets complexer voorbeeld uit de Shiny-documentatie.
In dit voorbeeld hebben we een heatmap van wat willekeurige data gemaakt. Er is een keuzerondje voor de stijl van de heatmap die de gebruiker wil bekijken, en de schuiffunctie verandert het bereik van kleuren op de heatmap. Posit (het bedrijf dat Shiny heeft gemaakt) biedt op hun website nog meer voorbeelden, waaronder deze leuke Wordle-kloon.
Hoewel dit soort interactiviteit leuk is om mee te spelen, zijn er ook veel nuttige toepassingen. Je zou een model kunnen ontwerpen dat omgevingsfactoren zoals zoutgehalte en temperatuur gebruikt om algenbloei te voorspellen. Een onderzoeker in het veld kan de actuele waarden in jouw Shiny-app invoeren en krijgt dan een realtime voorspelling.
Je zou een model kunnen ontwerpen dat jaarlijkse opbrengstprognoses laat zien als aan bepaalde voorwaarden wordt voldaan. Managers kunnen je app dan gebruiken om verschillende scenario's door te spelen door andere aantallen verkopen in te voeren of vakjes aan te vinken voor welke producten ze aanbieden, en ze zien de voorspelde uitkomst voor hun ogen bijwerken.
De usecases zijn talrijk en sectoroverschrijdend.
Soorten inputs en outputs
Shiny biedt verschillende input- en outputopties voor uiteenlopende behoeften op het gebied van datavisualisatie en interactie. Hier is een eenvoudige tabel met de gangbare inputs en outputs die beschikbaar zijn in Shiny voor Python.
Inputs
Wat doet het?
Actieknop-input
Biedt een knop die de gebruiker kan selecteren.
Actielink-input
Stelt de gebruiker in staat op een link te klikken.
Tekstinvoer
Biedt een tekstvak voor een enkele regel tekst.
Numerieke invoer
Biedt een numeriek invoervak met pijltjes omhoog en omlaag.
Slider-invoer
Maakt een numerieke schuifbalk.
Checkbox-invoer
Genereert één selectievakje voor True/False-toepassingen.
Schakelaar-invoer
Genereert één aan/uit-schakelaar.
Groep checkbox-invoer
Maakt meerdere selectievakjes voor meerdere keuzes.
Select-invoer
Biedt een dropdownmenu met keuzes.
Keuzerondjes-invoer
Maakt keuzerondjes en dwingt tot één keuze.
Tekstgebied-invoer
Biedt een groter tekstvak met een resizable venster voor langere tekstinvoer.
Datum-invoer
Maakt een datumveld met een kalender waarmee gebruikers een datum kunnen kiezen.
Datumbereik-invoer
In feite twee gekoppelde datumvelden waarmee een bereik kan worden ingevoerd.
Wachtwoordinvoer
Maakt een tekstvak dat de ingevoerde tekst verbergt.
———————————————————————————————————————————
Outputs
Wat doet het?
Tekstoutput
Schrijft tekst in gewone HTML.
Letterlijke tekstoutput
Schrijft tekst binnen een monospace-codeblok.
UI-output
Maakt een dynamischere UI mogelijk op basis van gebruikersinvoer.
Plot-output
Genereert een plot met gangbare Python-bibliotheken, zoals matplotlib.
Tabeloutput
Maakt een eenvoudige tabel met kolomkoppen.
Dataframe-/grid-output
Maakt een aanpasbare tabel met filters, rasterlijnen en rijenlimieten.
Voor een complete lijst met Shiny-componenten, bekijk deze pagina.
De gebruikersinterface in Shiny voor Python aanpassen
Lay-outs en thema's
Shiny biedt flexibiliteit bij het aanpassen van de gebruikersinterface via verschillende lay-outs met behulp van een paginfunctie. De meest gebruikte paginfunctie is page_fluid(), die een responsief ontwerp biedt dat zich aanpast aan verschillende schermformaten. Een lay-out met vaste breedte, geschikt voor applicaties met specifieke ontwerpvereisten, kan worden bereikt met de page_fixed()-paginfunctie.
Shiny maakt gebruik van HTML om zijn webgebaseerde apps te maken. Dat betekent dat je CSS-thema's kunt gebruiken om je app te stijlen. Met aangepaste CSS-styling kun je het uiterlijk van je Shiny-app afstemmen op je esthetische voorkeuren of bedrijfsbranding.Top of Form
Implementatie van aangepaste widgets en extensies
Shiny ondersteunt ipywidgets voor uiteenlopende interactieve grafieken, kaarten, 3D-visualisaties en mediastreaming. Het heeft ook enige functionaliteit voor andere Python-widgets die als HTML-bestand kunnen worden opgeslagen. Door aangepaste widgets te integreren, kun je je Shiny-app afstemmen op specifieke usecases en een meer gepersonaliseerde gebruikerservaring creëren.
Je Shiny voor Python-app deployen
Uitleg van de verschillende deployopties
Zodra je een overtuigende Shiny-app hebt gemaakt, wil je die waarschijnlijk delen met een breder publiek, voor je portfolio of voor een klant, door hem op het web te deployen. Shiny ondersteunt verschillende deploymentopties voor uiteenlopende behoeften.
Lokale deployment: Je kunt je Shiny-app op een lokale server deployen, zodat deze toegankelijk is binnen je organisatie of voor een specifieke groep gebruikers.
Cloudplatforms: Cloudplatforms bieden schaalbare en toegankelijke oplossingen voor het deployen van Shiny-apps. Populaire keuzes zijn:
ShinyLive: Shiny biedt een nieuwe manier om Shiny-applicaties binnen een webbrowser te draaien zonder een aparte server waarop Python draait. Het combineert WebAssembly en Pyodide om Shiny-applicaties te laten draaien zonder Python of Shiny op je computer te installeren. Dit platform beperkt de beschikbare Python-pakketten en is mogelijk minder veilig dan andere platforms, maar is een goede manier om niet-gevoelige code snel te delen.
Conclusie
Shiny voor Python is een spannende, nieuwe speler op het gebied van webappontwikkeling. Het gebruik ervan kan je dataproject aanzienlijk upgraden zonder dat je veel tijd hoeft te investeren in het leren van webontwikkeling. Als je Shiny voor R wilt uitproberen, bekijk dan deze Shiny-fundamentalscursus van DataCamp en deze cursus over het maken van dashboards met R Shiny. Heb je de basis eenmaal onder de knie, oefen je nieuwe skills dan met een Shiny-casestudy!