В мире, где рабочие нагрузки накапливаются, а время сокращается, поддержание удовлетворенности заинтересованных сторон является настоящей проблемой. С появлением таких платформ, как Power BI, Shiny, Tableau и т. д., которые позволяют пользователям создавать интерактивные самостоятельные отчеты, информационные панели и приложения, эта задача больше не кажется сложной.

Будучи инженером по надежности, я, естественно, склоняюсь к использованию этих платформ для разработки решений, которые оптимизируют или автоматизируют некоторые повседневные задачи. Взаимодействуя в течение дня с несколькими заинтересованными сторонами с разным уровнем знаний в области проектирования надежности, некоторые вопросы никогда не устаревают, например: требования к размеру выборки, демонстрация надежности, расчеты продолжительности испытаний и т. д.

На многие из этих вопросов можно ответить, используя простые калькуляторы, которые в настоящее время основаны на Excel. Файлы на основе Excel страдают от простоты обмена, отсутствия визуального и интерактивного интерфейса, проблем с контролем версий и так далее. Это всегда заставляло меня задуматься о разработке интерактивных веб-инструментов, но, будучи инженером-механиком с небольшим опытом программирования, это всегда казалось сложной задачей, пока я не наткнулся на Shiny.

Shiny — это пакет R, упрощающий разработку интерактивных веб-приложений. Я начал с того, что у меня не было опыта программирования на R, и я смог разрабатывать простые приложения Shiny менее чем за шесть месяцев. В этой статье я делюсь некоторыми ресурсами, которые помогли мне на этом пути, и показываю некоторые базовые фрагменты кода, которые я использовал в своем приложении.

Когда у меня появились некоторые базовые знания о кодировании R, я начал с руководств на Блестящем веб-сайте. Он начинается с предоставления базового шаблона приложения, который можно использовать в качестве основы для всех приложений, которые вы можете разрабатывать.

Шаблон приложения:

library(shiny)
ui <- fluidPage()
server <- function(input, output)
shinyApp(ui = ui, server = server)

Запуск приведенного выше фрагмента кода создает пустое блестящее приложение.

Полезно думать о приложении Shiny с точки зрения входов и выходов. Входные данные — это значения, предоставляемые приложению пользователем путем переключения различных объектов в приложении, а выходные данные — это объект R (графики, таблицы, текст и т. д.), который реагирует, когда пользователь изменяет входные данные.

fluidPage Функция:

Входные и выходные данные можно добавить в приложение, добавив функции ввода и вывода внутри fluidPage, как показано ниже:

ui <- fluidPage(
# *Input() functions,
# *Output() functions
)

В Shiny доступно множество различных типов объектов ввода и вывода. Шпаргалка Shiny оказывается чрезвычайно полезной в этом отношении.

Пример 1. Код для создания входного объекта slider и выходного объекта plot:

ui <- fluidPage(
sliderInput(inputId = "num",
  label = "Choose a number",
  value = 25, min = 1, max = 100),
plotOutput(outputId = "hist")
)

Ссылка на шпаргалку: https://shiny.rstudio.com/images/shiny-cheatsheet.pdf

сервер Функция

После создания функций ввода и вывода следующим шагом будет указание серверу, как собрать входные данные в выходные. Функция рендеринга в сочетании с функцией output помогает нам добавить вывод R в пользовательский интерфейс. Памятка содержит обзор различных функций рендеринга, доступных в Shiny, а также соответствующих функций вывода.

Пример 2: Код для подключения входа к выходу:

server <- function(input,output){
 output$hist <- renderPlot({
  hist(rnorm(input$num))
 })
}

Приведенный выше код соединяет входное значение объекта ползунка «num», показанного в примере 1, с объектом графика «hist».

После того, как вы ознакомитесь с основными элементами приложения Shiny, вы сможете экспериментировать со способами создания различных макетов, вставки изображений, создания вкладок и т. д., чтобы добавить необходимые функции.

Мое приложение

Ниже приведен снимок приложения, которое я создал вместе с примером кода.

library(ggplot2)
library(shiny)
ui <- fluidPage(
  titlePanel(div(img(src = ...),"...")),
  tabsetPanel(
    tabPanel("Tab Name1", fluid = TRUE,
             sidebarLayout(
               sidebarPanel(
                 sliderInput(
                   ....
                 ),
                 sliderInput(
                   ....
                 )
               ),
               mainPanel(
                 textOutput("..."),
                 plotOutput("hist"),
               )
             )
    ),
    tabPanel("Tab Name2", fluid = TRUE,
             ...
             )
    ),
    tabPanel("Tab Name3", fluid = TRUE,
             ...
             )
    )
server <- function(input, output) {
  
  output$hist = renderPlot({
    ggplot(...),
    ....,
    ....,
  })
  
}
shinyApp(ui = ui, server = server)

Надеюсь, эта статья даст вам некоторые идеи и основные ресурсы для создания интересных приложений Shiny.

Иди Блестящий!!