Създайте първото си табло за управление на уеб приложения, използвайки Shiny и R

Един от красивите подаръци, които R има (които Python е пропуснал до тире) е Shiny . Shiny е R пакет, който го прави лесен за изграждане на интерактивни уеб приложения направо от R . Таблата са популярни, тъй като помагат на бизнеса да проникне в съществуващите данни.

В тази публикация ще видим как да използваме Shiny, за да изградим просто табло за приходи от продажби. Ще ви трябва R инсталиран.

Зареждане на пакети в R

Пакетите, което трябва да се изтеглят поотделно, и монтират с помощта на R . Всички пакети, изброени по-долу, могат да бъдат директно инсталирани от CRAN, можете да изберете кое CRAN огледало да използвате. Зависимостите на пакетите също ще бъдат изтеглени и инсталирани по подразбиране.

След като пакетите са инсталирани, трябва да ги заредите във вашата R сесия. Библиотеката и изискват са използваните команди и, отново, пакетни зависимости също се зареждат автоматично от R .

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

Примерен входен файл

Тъй като таблото за управление се нуждае от входни данни, за да визуализираме, ние ще използваме рекомендация.csv като пример за входни данни към нашето табло. Тъй като това е .csv файл, беше използвана командата read.csv. Първият ред в .csv е заглавен ред, така че се използва header = T. Има два начина да получите файла рекомендация.csv в текущата си R сесия:

  1. Отворете тази връзка - рекомендация.csv и я запазете (Ctrl + S) в текущата работна директория, където е запазен този R код. Тогава следният код ще работи перфектно.
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. Вместо да четете .csv от вашия локален компютър, можете също да го прочетете от URL (уеб), като използвате същата функция read.csv. Тъй като този .csv вече е качен на моя Github, можем да използваме тази връзка в нашия read.csv, за да прочетем файла.

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

Преглед на лъскавия

Всяко приложение Shiny има два основни раздела: потребителски интерфейс и сървър . Потребителският интерфейс съдържа кода за предния край като бутони, графични изображения, раздели и т.н. Сървърът съдържа кода за back-end, като извличане на данни, манипулация и пререкания.

Вместо просто да използваме само Shiny , ние го свързваме с shinydashboard . shinydashboard е R пакет, чиято работа е да улесни, както подсказва името, да изграждаш табла с Shiny .

Създаване на попълнено табло за управление: потребителски интерфейс

Потребителската част на приложението Shiny , изградено с shinydashboard, има 3 основни елемента, обвити в командата dashboardPage (). Най-простият лъскав код с shinydashboard

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

дава това приложение

Нека попълним dashboardHeader()и dashboardSidebar(). Кодът съдържа коментари, с префикс #.

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

Попълват се елементите на потребителския интерфейс, които бихме искали да покажем в нашето табло за управление dashboardPage(). Тъй като примерът е табло за приходи от продажби, нека покажем три полета с ключови показатели за ефективност (KPI) в горната част, които представляват кратко обобщение, последвано от две графики за подробен изглед.

За да подравним тези елементи, един по един, ние ги дефинираме вътре 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)

В горния код valueBoxOutput()се използва за показване на KPI информация. valueBoxOutput()и plotOutput()са написани в сървърната част, която се използва в частта на потребителския интерфейс за показване на графика. box()е функция, предоставена от shinydashboardза затваряне на графика в поле, което има функции като title, solidHeaderи collapsible. След като дефинирахме две fluidRow()функции поотделно за модулност, обединяваме и двете dashbboardBody().

По този начин можем да попълним частта на потребителския интерфейс , включваща заглавка, странична лента и страница, с кода по-долу:

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

Стойността на titlein dashboardPage()е заглавието на страницата / раздела на браузъра, докато заглавието, дефинирано в, dashboardHeader()се вижда като заглавие на таблото за управление.

Създаване на попълнено табло за управление: Сървър

С завършената част на потребителския интерфейс ще създадем сървърната част, където програмата и логиката зад valueBoxOutput()и plotOutput()се добавят с renderValueBox()и renderPlot()съответно. Те са затворени в server function, със inputи output като параметри. Стойностите вътре inputсе получават от потребителския интерфейс (като textBox стойност, Slider стойност). Стойностите вътре output се изпращат към потребителския интерфейс (като plotOutput, valueBoxOutput).

По-долу е даден пълният код на сървъра :

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

Досега сме дефинирали и двете основни части на Shiny app - UI и Server . И накрая, трябва да извикаме / стартираме Shiny ,с потребителски интерфейс и сървър като негови параметри.

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

Целият R файл трябва да бъде запазен като app.Rв папка, преди да стартирате лъскавото приложение. Също така не забравяйте да поставите файла с входни данни (в нашия случай, recommendation.csv)в същата папка като app.R. Въпреки че има друг валиден начин за структуриране на приложението Shiny с два файла ui.Rи server.R(по желание global.R), той е игнориран в тази статия заради краткост, тъй като това е насочено към начинаещи.

При стартиране на файла уеб приложението Shiny ще се отвори в браузъра ви по подразбиране и ще изглежда подобно на екранните снимки по-долу:

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.