Byg dit første webapp-dashboard ved hjælp af Shiny og R

En af de smukke gaver, som R har (som Python savnede indtil dash) er skinnende . Shiny er en R- pakke, der gør det nemt at bygge interaktive web-apps direkte fra R . Dashboards er populære, da de er gode til at hjælpe virksomheder med at få indsigt i de eksisterende data.

I dette indlæg vil vi se, hvordan man kan udnytte Shiny til at opbygge et simpelt instrument til salgsindtægter. Du skal bruge R installeret.

Indlæsning af pakker i R

Pakkerne du har brug for skal downloades separat, og installeres ved hjælp af R . Alle nedenstående pakker kan installeres direkte fra CRAN, du kan vælge hvilket CRAN-spejl, du vil bruge. Pakkeafhængigheder downloades og installeres som standard også.

Når pakkerne er installeret, skal du indlæse dem i din R- session. Biblioteket og kræver kommandoer bruges, og igen er pakkeafhængigheder også indlæses automatisk af R .

# load the required packageslibrary(shiny)require(shinydashboard)library(ggplot2)library(dplyr)

Eksempel på inputfil

Da et dashboard har brug for inputdata til visualisering, bruger vi anbefaling.csv som et eksempel på inputdata til vores dashboard. Da dette er en .csv-fil, blev read.csv-kommandoen brugt. Den første række i .csv er en titelrække, så header = T bruges. Der er to måder, du kan få anbefalingen.csv-filen ind i din nuværende R-session:

  1. Åbn dette link - anbefaling.csv, og gem det (Ctrl + S) i din nuværende arbejdsmappe, hvor denne R-kode er gemt. Derefter fungerer følgende kode perfekt.
recommendation <- read.csv('recommendation.csv',stringsAsFactors = F,header=T)head(recommendation) Account Product Region Revenue1 Axis Bank FBB North 20002 HSBC FBB South 300003 SBI FBB East 10004 ICICI FBB West 10005 Bandhan Bank FBB West 2006 Axis Bank SIMO North 200

2. I stedet for at læse .csv fra din lokale computer, kan du også læse den fra en URL (web) ved hjælp af den samme funktion read.csv. Da denne .csv allerede er uploadet på min Github, kan vi bruge dette link i vores read.csv til at læse filen.

recommendation <- read.csv('//raw.githubusercontent.com/amrrs/sample_revenue_dashboard_shiny/master/recommendation.csv',stringsAsFactors = F,header=T)head(recommendation) Account Product Region Revenue1 Axis Bank FBB North 20002 HSBC FBB South 300003 SBI FBB East 10004 ICICI FBB West 10005 Bandhan Bank FBB West 2006 Axis Bank SIMO North 200

Oversigt over skinnende

Hver skinnende applikation har to hovedafsnit: UI og Server . UI indeholder koden til front-end-lignende knapper, plot-visuals, faner og så videre. Serveren indeholder koden til back-end som datahentning, manipulation og krangling.

I stedet for blot at bruge kun skinnende , parrer vi det med shinydashboard . shinydashboard er en R- pakke, hvis opgave er at gøre det lettere, som navnet antyder, at bygge dashboards med Shiny .

Oprettelse af et befolket dashboard: UI

UI-delen af ​​en skinnende app bygget med shinydashboard har 3 grundlæggende elementer indpakket i dashboardPage () -kommandoen. Den enkleste skinnende kode med shinydashboard

## app.R ##library(shiny)library(shinydashboard)ui <- dashboardPage( dashboardHeader(), dashboardSidebar(), dashboardBody())server <- function(input, output) { }shinyApp(ui, server)

giver denne app

Lad os befolke dashboardHeader()og dashboardSidebar(). Koden indeholder kommentarer, foran #.

#Dashboard header carrying the title of the dashboardheader <- dashboardHeader(title = "Basic Dashboard") #Sidebar content of the dashboardsidebar <- dashboardSidebar( sidebarMenu( menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), menuItem("Visit-us", icon = icon("send",lib='glyphicon'), href = "//www.salesforce.com") ))

UI-elementerne, som vi gerne vil vise i vores dashboard, udfyldes dashboardPage(). Da eksemplet er et instrument til salgsindtægter, lad os vise tre KPI-felter (Key Performance Indicator) øverst, der repræsenterer et hurtigt resume, efterfulgt af to boksdiagrammer for en detaljeret visning.

For at justere disse elementer, en efter en, definerer vi dem indeni fluidRow().

frow1 <- fluidRow( valueBoxOutput("value1") ,valueBoxOutput("value2") ,valueBoxOutput("value3"))frow2 <- fluidRow( box( title = "Revenue per Account" ,status = "primary" ,solidHeader = TRUE ,collapsible = TRUE ,plotOutput("revenuebyPrd", height = "300px") ) ,box( title = "Revenue per Product" ,status = "primary" ,solidHeader = TRUE ,collapsible = TRUE ,plotOutput("revenuebyRegion", height = "300px") ) )# combine the two fluid rows to make the bodybody <- dashboardBody(frow1, frow2)

I ovenstående kode valueBoxOutput()bruges til at vise KPI-oplysninger. valueBoxOutput()og plotOutput()er skrevet i serverdelen , som bruges i UI-delen til at vise et plot. box()er en funktion, der leveres af shinydashboardat omslutte plottet inde i en kasse, der har funktioner som title, solidHeaderog collapsible. Efter at have defineret to fluidRow()funktioner individuelt af hensyn til modularitet kombinerer vi dem begge i dashbboardBody().

Således kan vi fuldføre UI- delen, der indeholder overskrift, sidebjælke og side, med nedenstående kode:

#completing the ui part with dashboardPageui <- dashboardPage(title = 'This is my Page title', header, sidebar, body, skin="red")

Værdien af titlein dashboardPage()er titlen på browsersiden / fanen, mens den definerede titel dashboardHeader()er synlig som instrumentbrættets titel.

Oprettelse af et befolket dashboard: Server

Med UI del overstået, vil vi skabe den server del, hvor programmet og logikken bag valueBoxOutput()og plotOutput()der tilsættes med renderValueBox()og renderPlot()hhv. Disse er lukket inde i en server function, med inputog output som dens parametre. Værdier inde inputmodtages fra brugergrænsefladen (som textBox værdi, Slider værdi). Værdier inde output sendes til brugergrænsefladen (ligesom plotOutput, valueBoxOutput).

Nedenfor er den komplette serverkode :

# create the server functions for the dashboard server <- function(input, output) { #some data manipulation to derive the values of KPI boxes total.revenue <- sum(recommendation$Revenue) sales.account % group_by(Account) %>% summarise(value = sum(Revenue)) %>% filter(value==max(value)) prof.prod % group_by(Product) %>% summarise(value = sum(Revenue)) %>% filter(value==max(value))#creating the valueBoxOutput content output$value1 <- renderValueBox({ valueBox( formatC(sales.account$value, format="d", big.mark=',') ,paste('Top Account:',sales.account$Account) ,icon = icon("stats",lib='glyphicon') ,color = "purple") }) output$value2 <- renderValueBox({ valueBox( formatC(total.revenue, format="d", big.mark=',') ,'Total Expected Revenue' ,icon = icon("gbp",lib='glyphicon') ,color = "green") })output$value3 <- renderValueBox({ valueBox( formatC(prof.prod$value, format="d", big.mark=',') ,paste('Top Product:',prof.prod$Product) ,icon = icon("menu-hamburger",lib='glyphicon') ,color = "yellow") })#creating the plotOutput content output$revenuebyPrd <- renderPlot({ ggplot(data = recommendation, aes(x=Product, y=Revenue, fill=factor(Region))) + geom_bar(position = "dodge", stat = "identity") + ylab("Revenue (in Euros)") + xlab("Product") + theme(legend.position="bottom" ,plot.title = element_text(size=15, face="bold")) + ggtitle("Revenue by Product") + labs(fill = "Region") })output$revenuebyRegion <- renderPlot({ ggplot(data = recommendation, aes(x=Account, y=Revenue, fill=factor(Region))) + geom_bar(position = "dodge", stat = "identity") + ylab("Revenue (in Euros)") + xlab("Account") + theme(legend.position="bottom" ,plot.title = element_text(size=15, face="bold")) + ggtitle("Revenue by Region") + labs(fill = "Region") })}

Indtil videre har vi defineret begge væsentlige dele af en skinnende app - brugergrænseflade og server . Endelig er vi nødt til at kalde / køre den skinnende ,med UI og Server som parametre.

#run/call the shiny appshinyApp(ui, server)Listening on //127.0.0.1:5101

Hele R- filen skal gemmes som app.Rinde i en mappe, før du kører den skinnende app. Husk også at placere inputdatafilen (i vores tilfælde recommendation.csv)inde i den samme mappe som app.R. Mens der er en anden gyldig måde at strukturere den skinnende app på med to filer ui.Rog server.R(valgfrit global.R), er den ignoreret i denne artikel af hensyn til kortfattethed, da dette er rettet mod begyndere.

Når du kører filen, åbnes den skinnende webapp i din standardbrowser og ligner skærmbillederne nedenfor:

Forhåbentlig har du på dette tidspunkt dette eksempel Shiny web-app i gang. Koden og plot, der bruges her, er tilgængelige på min Github. Hvis du er interesseret i Shiny , kan du lære mere fra DataCamp's Building Web Applications in R with Shiny Course.