Створіть свою першу інформаційну панель веб-програми, використовуючи Shiny і R

Одним з найкрасивіших подарунків, які має R (який Python пропустив до тире) є 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 є рядком заголовка, тому використовується заголовок = 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 , ми поєднуємо його з shinydashboard . shinydashboard - це пакет R , завданням якого є спрощення, як випливає з назви, створення панелей інструментів за допомогою Shiny .

Створення заповненої інформаційної панелі: інтерфейс користувача

Частина інтерфейсу програми Shiny , побудованої за допомогою shinydashboard, має 3 основні елементи, загорнуті в команду dashboardPage (). Найпростіший блискучий код з блискучою панеллю інструментів

## 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(), відображається як заголовок інформаційної панелі.

Створення заповненої інформаційної панелі: Сервер

З UI частина закінчилася, ми створимо сервер частина , де програма і логіка valueBoxOutput()і plotOutput()додаються з renderValueBox()і renderPlot()відповідно. Вони укладені всередині a 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 - інтерфейс та сервер . Нарешті, ми повинні зателефонувати / запустити Shiny ,з UI та сервером як його параметри.

#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.