Erstellen Sie Ihr erstes Web-App-Dashboard mit Shiny und R.

Eines der schönen Geschenke, die R hat (das Python bis zum Strich verpasst hat), ist Shiny . Shiny ist ein R- Paket, mit dem sich interaktive Web-Apps direkt aus R erstellen lassen . Dashboards sind beliebt, da sie Unternehmen dabei helfen, aus den vorhandenen Daten Erkenntnisse zu gewinnen.

In diesem Beitrag erfahren Sie, wie Sie Shiny nutzen können , um ein einfaches Dashboard für Umsatzerlöse zu erstellen. Sie müssen R installiert haben.

Laden von Paketen in R.

Die benötigten Pakete müssen separat heruntergeladen und mit R installiert werden . Alle unten aufgeführten Pakete können direkt von CRAN installiert werden. Sie können auswählen, welcher CRAN-Spiegel verwendet werden soll. Paketabhängigkeiten werden ebenfalls standardmäßig heruntergeladen und installiert.

Sobald die Pakete installiert sind, müssen Sie sie in Ihre R- Sitzung laden . Die Befehle library und require werden verwendet, und auch hier werden Paketabhängigkeiten automatisch von R geladen .

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

Beispiel-Eingabedatei

Da ein Dashboard zur Visualisierung Eingabedaten benötigt, verwenden wir Empfehlung.csv als Beispiel für Eingabedaten in unser Dashboard. Da es sich um eine CSV-Datei handelt, wurde der Befehl read.csv verwendet. Die erste Zeile in der CSV-Datei ist eine Titelzeile, daher wird Header = T verwendet. Es gibt zwei Möglichkeiten, wie Sie die Datei purchase.csv in Ihre aktuelle R-Sitzung aufnehmen können:

  1. Öffnen Sie diesen Link - Empfehlung.csv und speichern Sie ihn (Strg + S) in Ihrem aktuellen Arbeitsverzeichnis, in dem dieser R-Code gespeichert ist. Dann funktioniert der folgende Code 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. Anstatt die CSV-Datei von Ihrem lokalen Computer zu lesen, können Sie sie auch von einer URL (Web) mit derselben Funktion read.csv lesen. Da diese CSV- Datei bereits auf meinem Github hochgeladen ist, können wir diesen Link in unserer Datei read.csv verwenden , um die Datei zu lesen.

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

Überblick über Shiny

Jede Shiny- Anwendung besteht aus zwei Hauptabschnitten: Benutzeroberfläche und Server . Die Benutzeroberfläche enthält den Code für Front-End-ähnliche Schaltflächen, Plot-Grafiken, Registerkarten usw. Der Server enthält den Code für das Back-End wie das Abrufen, Bearbeiten und Verwirren von Daten.

Anstatt nur Shiny zu verwenden , koppeln wir es mit Shinydashboard . shinydashboard ist ein R- Paket, dessen Aufgabe es ist, wie der Name schon sagt, das Erstellen von Dashboards mit Shiny zu vereinfachen .

Erstellen eines ausgefüllten Dashboards: Benutzeroberfläche

Der UI-Teil einer mit Shinydashboard erstellten Shiny- App enthält drei grundlegende Elemente, die im Befehl dashboardPage () enthalten sind. Der einfachste Shiny- Code mit Shinydashboard

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

gibt diese App

Lassen Sie uns bevölkern dashboardHeader()und dashboardSidebar(). Der Code enthält Kommentare mit dem Präfix #.

#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") ))

Die UI-Elemente, die wir in unserem Dashboard anzeigen möchten, werden ausgefüllt dashboardPage(). Da es sich bei dem Beispiel um ein Umsatz-Dashboard handelt, werden oben drei KPI-Felder (Key Performance Indicator) angezeigt, die eine kurze Zusammenfassung darstellen, gefolgt von zwei Box-Plots für eine detaillierte Ansicht.

Um diese Elemente einzeln auszurichten, definieren wir sie im Inneren 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)

Wird im obigen Code valueBoxOutput()verwendet, um die KPI-Informationen anzuzeigen. valueBoxOutput()und plotOutput()werden im Serverteil geschrieben , der im UI-Teil zum Anzeigen eines Diagramms verwendet wird. box()ist eine Funktion , bereitgestellt durch shinydashboardumschließen die Handlung innerhalb einer Box , die Funktionen wie besitzt title, solidHeaderund collapsible. Nachdem fluidRow()wir aus Gründen der Modularität zwei Funktionen einzeln definiert haben , kombinieren wir beide in dashbboardBody().

Auf diese Weise können wir den UI- Teil, der Kopfzeile, Seitenleiste und Seite umfasst, mit dem folgenden Code vervollständigen :

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

Der Wert von titlein dashboardPage()ist der Titel der Browserseite / Registerkarte, während der in definierte Titel dashboardHeader()als Dashboard-Titel sichtbar ist.

Erstellen eines ausgefüllten Dashboards: Server

Mit dem UI - Teil über, werden wir das schaffen Server Teil , in dem das Programm und die Logik hinter valueBoxOutput()und plotOutput()sind mit aufgenommen renderValueBox()und renderPlot()sind. Diese sind in a server function, mit inputund output als Parameter eingeschlossen. Die darin enthaltenen Werte inputwerden von der Benutzeroberfläche empfangen (wie textBox Wert, Slider Wert). Die darin enthaltenen Werte output werden an die Benutzeroberfläche gesendet (wie plotOutput, valueBoxOutput).

Unten finden Sie den vollständigen Servercode :

# 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") })}

Bisher haben wir beide wesentlichen Teile einer Shiny- App definiert - Benutzeroberfläche und Server . Schließlich müssen wir den Shiny anrufen / ausführen ,mit UI und Server als Parameter.

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

Die gesamte R- Datei muss in app.Reinem Ordner gespeichert werden, bevor die glänzende App ausgeführt werden kann. Denken Sie auch daran, die Eingabedatendatei (in unserem Fall recommendation.csv)im selben Ordner wie) abzulegen app.R. Es gibt zwar eine andere gültige Möglichkeit, die Shiny- App mit zwei Dateien zu strukturieren, ui.Rund server.R(optional global.R) wurde sie in diesem Artikel aus Gründen von ignoriert Kürze, da dies für Anfänger gedacht ist.

Nach dem Ausführen der Datei wird die Shiny- Webanwendung in Ihrem Standardbrowser geöffnet und sieht den folgenden Screenshots ähnlich:

Hopefully, at this stage, you have this example Shiny web app up and running. The code and plots used here are available on my Github. If you are interested in Shiny, you can learn more from DataCamp’s Building Web Applications in R with Shiny Course.