Hoe u interactieve webapps kunt bouwen met Shiny in R

Hoe U Interactieve Webapps Kunt Bouwen Met Shiny In R



Dankzij het R Shiny-framework, een bundel van RStudio, is het maken van dynamische web-apps met R relatief eenvoudig. Het voordeel van Shiny is dat het het mogelijk maakt om uw R-code op internet te plaatsen, waardoor deze toegankelijker wordt voor een groter aantal gebruikers. Met R Shiny kunt u zeer krachtige datarapporten en visuals maken waarmee de gebruiker de dataset kan analyseren. Samen met glanzende componenten kunnen de HTML-elementen worden gebruikt om de inhoud van het programma te ontwerpen. Het artikel van vandaag leidt u door het proces van het bouwen van een interactieve webapplicatie met behulp van het Shiny-pakket van R. Zorg er hiervoor voor dat “RStudio” al is geïnstalleerd.

Installeer het Shiny-pakket in RStudio

Voordat we overgaan tot het maken van een interactieve webapplicatie binnen RStudio, moeten we het “Shiny” -pakket er al in geïnstalleerd hebben. Hiervoor moet u het menu “Extra” van RStudio uitvouwen, gevolgd door de optie “Pakketten installeren”. In het geopende venster moet u het pakket vermelden dat u wilt installeren, d.w.z. “shiny”, en op de knop “Installeren” tikken. RStudio zal het glanzende pakket in de RStudio-console installeren.







Aan de slag met Shiny in R

Om aan de slag te gaan met Shiny in R, moet je een nieuw R-bestand maken met behulp van het menu 'Bestand' dat zich in de eerste plaats van RStudio bevindt. Vouw het uit en gebruik de optie 'Nieuw bestand', gevolgd door de optie 'R Script'. Het “naamloze” scriptbestand wordt geopend in RStudio. Hernoem het naar een 'R' -bestand op de gewenste locatie.



Laad nu de benodigde pakketten die nodig zijn om een ​​interactieve applicatie in R te bouwen, d.w.z. met behulp van de “bibliotheek”-functie van R. De “if”-instructies worden gebruikt om de pakketten te installeren die nog niet eerder waren geïnstalleerd. Het Shiny-pakket wordt gebruikt om een ​​interactieve interface voor webapplicaties te bouwen, samen met enkele grafische visualisaties. Het “dplyr”-pakket wordt voornamelijk gebruikt om de gegevensmanipulatie in R te vergemakkelijken door gebruik te maken van enkele nuttige functies.



Ten slotte wordt het “ggplot2” -pakket geladen als een geweldige bron voor datavisualisatie door aangepaste en krachtige grafieken te maken.





als ( ! vereisenNaamruimte ( 'glimmend' , zachtjes = WAAR ) ) {

installeren. pakketjes ( 'glimmend' )

}

als ( ! vereisenNaamruimte ( 'dplyr' , zachtjes = WAAR ) ) {

installeren. pakketjes ( 'dplyr' )

}

als ( ! vereisenNaamruimte ( 'ggplot2' , zachtjes = WAAR ) ) {

installeren. pakketjes ( 'ggplot2' )

}

bibliotheek ( glimmend )

bibliotheek ( dplyr )

bibliotheek ( ggplot2 )

Bouw een interactief examenbeoordelingssysteem

Binnen deze tutorial zullen we een “Examenbeoordelingssysteem” creëren waarmee studenten hun behaalde cijfers kunnen verkrijgen op basis van de cijfers die zijn behaald op 100. Het meegeleverde script is de “ui”-component van een Shiny-app die het ontwerp en het uiterlijk van de app specificeert het programma. Het programma genereert een FluidPage, een aanpasbaar ontwerp dat kan worden geschaald om aan te passen aan het browservenster.

Een “titlePanel” en een “sidebarLayout” zijn de nakomelingen van de “fluidPage”. De titel “Exam Grading System” van het programma is het enige dat wordt weergegeven in het “titlePanel”. Een “sidebarPanel” en een “mainPanel” zijn de twee secties waarin de “sidebarLayout” de applicatie opsplitst. Er zijn een paar invoergegevens opgenomen in het “sidebarPanel”: een “textAreaInput” met de naam “score” plus een “actionButton” met de naam “berekenen”.



Via de “textAreaInput” kan per leerling één score per regel worden ingevoerd. De cijferbeoordeling kan worden gestart door gebruik te maken van “actionButton”. Er zijn een paar uitgangen aanwezig in het “mainPanel”: een “tableOutput” met de naam “Result” plus een “plotOutput” met de naam “ResultGraph”. Zowel de “tableOutput” als de “plotOutput” presenteren de bevindingen van de berekening in de vorm van een grafiek.

ui <- vloeistofPagina (

titelPanel ( 'Examenbeoordelingssysteem' ) ,
zijbalkIndeling (
zijbalkPanel (
textAreaInvoer ( 'scoren' , 'Voer scores voor studenten in (één per regel):' , '' ) ,
actieKnop ( 'berekenen' , 'Laten we cijfers berekenen' )
) ,
hoofdpaneel (
tabelUitvoer ( 'Resultaat' ) ,
plotUitvoer ( 'Resultaatgrafiek' )
) ) )

De servermethode bepaalt de serverlogica van de applicatie. De cijfers voor studenten worden in eerste instantie opgeslagen in een reactieve variabele genaamd “data”. Hiervoor wordt de knop “berekenen” bewaakt door de “observeEvent” -methode van R. Nadat de knop is geactiveerd, converteert de code in eerste instantie de waarden die in het tekstveld zijn ingevoerd naar numerieke waarden.

Elke score wordt gevolgd door een regeleinde met behulp van de “\n” om op de volgende regel een nieuwe score in te voeren. De methode plaatst de gevonden score in de variabele ‘data’. Als een gebruiker geen score heeft ingevoerd, toont de methode een bericht met een fout.

server <- functie ( invoer uitvoer ) {

gegevens <- reactiefVal ( NUL )

observerenGebeurtenis ( invoer$berekenen, {

scoren <- als. numeriek ( lijst verwijderen ( strsplit ( invoer$score, ' \N ' ) ) )

als ( lengte ( scoren ) > 0 ) {

gegevens ( scoren )

} anders {

gegevens ( NUL )

toonModaal ( modaalDialoog (

titel = 'Fout' ,

'Fout: voeg waarde toe!' ,

gemakkelijkSluiten = WAAR

) )

}

} )

Er zijn twee uitgangen, “output$Result” plus “output$ResultGraph”, gespecificeerd om de cijfers en behaalde cijfers van studenten weer te geven. De dynamische methode renderTable() produceert een gegevenstabel van de toetscijfers en cijfers van de leerling, die is gelabeld als “output$Result”. De renderPlot()-methode, die eveneens reactief is, genereert een staafdiagram voor de cijfers van studenten en slaat deze op dezelfde manier op in de uitvoer “output$ResultGraph”.

Ze zullen daarom elke keer dat de invoergegevens worden bijgewerkt, worden beoordeeld. De if (!is.null(data()))-expressie bepaalt of de gegevens die worden ontvangen al dan niet null zijn. Het script van de “if”-instructie wordt uitgevoerd als deze niet leeg is. Een vector van scores voor leerlingen vormt de invoergegevens. Elke leerling krijgt een cijfer op basis van zijn/haar score met behulp van de case_when() methode. Er wordt een dataframe gemaakt met de cijfers en toetscijfers van studenten met behulp van de data.frame() -methode. De volgende kolommen worden aan het gegevensframe toegevoegd: “Student”, “Score” en “Cijfer”. De cijferverdeling wordt gecompileerd in een tabel met de naam “GradeCount” met behulp van de table()-methode.

uitvoer$Resultaat <- renderTabel ( {

als ( ! is. nul ( gegevens ( ) ) ) {

cijfers <- geval_wanneer (

gegevens ( ) > 80 ~ 'A' ,

gegevens ( ) > 60 ~ 'B' ,

gegevens ( ) > 40 ~ 'C' ,

gegevens ( ) > 30 ~ 'D' ,

WAAR ~ 'F'

)

gegevens. kader ( Student = 1 : lengte ( gegevens ( ) ) , Scoren = gegevens ( ) , Cijfer = cijfers )

}

} )

output$ResultaatGrafiek <- renderPlot ( {

als ( ! is. nul ( gegevens ( ) ) ) {

cijfers <- geval_wanneer (

gegevens ( ) > 80 ~ 'A' ,

gegevens ( ) > 60 ~ 'B' ,

gegevens ( ) > 40 ~ 'C' ,

gegevens ( ) > 30 ~ 'D' ,

WAAR ~ 'F'

)

Cijfertelling <- tafel ( cijfers )

Het staafdiagram wordt gemaakt met behulp van de bibliotheek 'ggplot2'. Count (het totaal aantal studenten dat elk cijfer heeft behaald) en de kolom Cijfer worden aangemaakt in een DataFrame. Er wordt een staafdiagram met de “Grade”-gegevens op de “x-as” en de “Count”-gegevens op de “y-as” geproduceerd met behulp van de geom_bar()-methode. De optie stat = “identity” instrueert ggplot2 om de feitelijke gegevens te gebruiken zonder enige vorm van transformatie. Een titel, een x-aslabel en een y-aslabel worden allemaal toegevoegd via de “labs”-methode. De kleuren van de balk worden toegewezen met behulp van de scale_fill_manual() methode. Onnodige rasterlijnen en overlaycomponenten worden verwijderd met behulp van de thema_minimal() methode. De ShinyApp(ui, server) methode bouwt een app.

ggplot ( gegevens = gegevens. kader ( Cijfer = namen ( Cijfertelling ) , Graaf = als. numeriek ( Cijfertelling ) ) ,
aes ( X = Rang, en = Tel, vul = Cijfer ) ) +
geom_bar ( stat = 'identiteit' ) +
laboratoria ( titel = 'Rangverdeling' ,
X = 'Cijfer' ,
En = 'Graaf' ) +
scale_fill_manual ( waarden = C ( 'A' = 'groente' , 'B' = 'paars' , 'C' = 'roze' ,
'D' = 'oranje' , 'F' = 'rood' ) ) +
thema_minimaal ( )
}
} )
}
glanzendeApp ( ui, server )

Toen we deze code uitvoerden, kregen we een interactieve interface waarin we enkele cijfers toevoegden en op de knop 'Laten we cijfers berekenen' klikten.

De tabel met de scores en cijfers van studenten wordt weergegeven, gevolgd door het staafdiagram van de cijferverdeling in verschillende kleuren.

Conclusie

In deze handleiding wordt het belang van het Shiny-pakketgebruik in de R-taal via RStudio uitgelegd. Als aanvulling op onze uitleg hebben we een interactieve webapplicatie voor het beoordelingssysteem van studenten gebouwd in de R-code door gebruik te maken van het “Shiny” -pakket.