Применение фреймворка Shiny для разработки...

37
Применение фреймворка Shiny для разработки веб - приложений на основе R Захаров К. В.

Transcript of Применение фреймворка Shiny для разработки...

Применение фреймворка Shinyдля разработки веб-приложений

на основе R

Захаров К. В.

Содержание

• Краткий обзор среды статистических исследований R

• Фреймворк Shiny для разработки веб-приложений

• Структура приложения на Shiny

• Особенности разработки приложений

• Запуск Shiny библиотеки, Shiny Server и размещение приложения в сети интернет

• Примеры приложений на основе Shiny

Статистика в R

R — язык программированиядля статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом

Статистика в R

Применение R позволяет быстро и достаточнопросто производить статистическую обработкуданных.

data <- c(2,5,8,10,12,15,20,30)mean(data) # 12.75sd(data) # 8.956243quantile(data)hist(data)shapiro.test(data)# W = 0.9442, # p-value = 0.6525

Преимущества R

R – программноеобеспечение с открытым кодом, чтопозволяет использоватьего свободно и бесплатно

Преимущества R

R – являетсякроссплатформеннымпрограммнымобеспечением

Преимущества R

R используется болеечем 2 миллионамиспециалистов по всемумиру

Преимущества R

R активно развивается и на данный момент разработано уже более9 тысяч библиотек

6085 библиотек

2055 библиотек

>1100 репозиториев

ggvisggplot2

BasicLattice

Преимущества R

R работает с различными системами графики

rCharts

Недостатки R

R – программноеобеспечение с открытым кодом подкопилефтной лицензиейGNU GPL 2

Недостатки R

R имеет ряд проблем связанных с использованиемоперативной памяти

Недостатки R

R имеет ряд менеесущественных проблем вроде отсутствия GUI, достаточноисчерпывающейдокументации и т. д.

Фреймворк Shiny

Shiny – пакет для создания интерактивных веб-приложений на основе R.

Главная задача – дать пользователям R создавать онлайн приложения без знания HTML + CSS и JavaScript.

Фреймворк Shiny

Фреймворк Shiny

Особенностью приложений на Shiny является ихреактивность.

a <- 3b <- a + 2a <- 7

b == ?

Реактивность:b = 9

Фреймворк Shiny

Начать работу с Shiny достаточно просто –установить как любой пакет с CRAN репозитория.

install.packages('shiny')library(shiny)

Структура приложения Shiny

Два основных компонента приложения

server.R ui.R

Принимает входящиеданные и запускает

триггеры

Предоставляет возможности ввода

данных и вывода результатов

Триггер выполняется каждый раз при

изменении зависимой переменной

В серверной части приложения важно определитьнеобходимые функции и их предметный охват.

# Объекты доступные для всех сессийsource('all_sessions.R', local=TRUE)

shinyServer(function(input, output) {# Объекты, определенные для каждой сессииsource('each_session.R', local=TRUE)

output$text <- renderText({# Объекты, определяемые каждый раз при вызове функцииsource('each_call.R', local=TRUE)# ...

})})

Структура приложения Shiny

Использование входных данных, преобразование и соответствующий вывод.

shinyServer(function(input, output) {

output$text1 <- renderText({# Прием входящей переменнойlocal_var <- input$var# Преобразованиеlocal_var <- local_var + 5# Вывод результатовlocal_var

})

})

Структура приложения Shiny

renderImage

renderPlot

renderPrint

renderTable

renderText

renderUI

При помощи элементов actionButton и submittButton контролируется реактивность.

shinyServer(function(input, output) {

output$text1 <- renderText({# Указание на зависимость от элементаinput$actionButton# Изолирование входящей переменнойisolate(local_var <- input$var)local_var <- local_var + 5local_var

})

})

Структура приложения Shiny

В части пользовательского интерфейса задается верстка веб-страницы на фреймворке Bootstrap 2.3.2.

shinyUI(# Макет страницыfluidPage(titlePanel = 'Test page',

# Виджет ввода данныхselectInput('variable', 'Variable:',

c('Option A' = 'a','Too Critical' = 'critical','Advancement' = 'advance')),

# Вывод данныхtextOutput('var')

))

Структура приложения Shiny

При разработке GUI первым делом планируется макет интерфейса.

Структура приложения Shiny

sidebarLayout

tabPanel

verticalLayout

navlistPanel

fluidRow

HTML elements

column

Затем определяются виджеты ввода данных.

Структура приложения Shiny

actionButton checkboxInput checkboxGroupInput

dateInput dateRangeInput fileInput

numericInput radioButtons selectInput

sliderInput sliderInput textInput

Последними определяются поля выводаобработанной информации.

Структура приложения Shiny

htmlOutput imageOutput plotOutput

tableOutput dataTableOutput textOutput

“Text in Shiny”

Большинство приложений использует исходнуютему Bootstrap. Тем не менее можно свободноприменять CSS для дополнительной темизации.

Особенности разработки приложений

tags$head(tags$link(rel = 'stylesheet', type = 'text/css', href = 'bootstrap.css')

),

Создание GUI в виде функции скрипта ui.R можетстать настоящим адом. Иная структура приложенияразрешает использовать HTML

Особенности разработки приложений

shinyUI(fluidPage(titlePanel(…),sidebarLayout(sidebarPanel(…), mainPanel(…)

)))

<application-dir>|-- www

|-- index.html|-- server.R

<!-- Для ввода переменных применяютсятеги с соответствующим параметром name

Для вывода – соответствующие теги с параметрами id (имя переменной вывода) и class (спецификацией вывода) -->

Отладка приложения может быть значительнооблегчена запуском приложения с параметром

runApp(displayMode = ‘showcase’)

Особенности разработки приложений

Запуск приложения Shiny

Запуск Shiny приложения может осуществляться с любого компьютера, на котором установлены R, Shiny и необходимые библиотеки.

# запуск из локальной папкиrunApp('My App')

# запуск приложения по ссылкеrunUrl(url('http://my.host.ua/my_app.zip'))

# запуск приложения с GistrunGist(1234567)

# запуск приложения с GitHubrunGitHub('my-repo', ‘myUserName')

Размещение в интернет

Разместить собственное приложение в интернетможно при помощи сервиса shinyapps.io или на собственном сервере Shiny

Собственный сервер

У Shiny Server относительно небольшие требования, но могут возникнуть некоторые проблемы.

RAM CPU

> 50 MB No min req, but single thread

OS

RedHat Enterprise Linux (and CentOS) 5.4+

RedHat Enterprise Linux (and CentOS) 6.0+

Ubuntu 12.04+

Ubuntu 13.04+

Ubuntu 14.04+

RAM CPU

OS

Собственный сервер

Популярные сегодня решения – это установка сервера на EC2 Amazon, DigitalOcean и Heroku.

Собственный сервер

Установка сервера

# Установка R

sudo nano /etc/apt/sources.list

# Добавить CRAN# deb http://cran.rstudio.com/bin/linux/ubuntu trusty/sudo apt-get updatesudo apt-get install r-base

# Установка библиотеки Shiny в среде R

sudo su - \-c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""

Собственный сервер

Установка сервера

# Установка Shiny Server

sudo apt-get install gdebi-core

wget http://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-1.2.3.368-amd64.deb

sudo gdebi shiny-server-1.2.3.368-amd64.deb

# Далее устанавливаются все необходимые для приложениябиблиотеки. Сделать это можно непосредственно из R при помощи функции install.packages()

Собственный сервер

Настройки установленного сервера доступны здесь /etc/shiny-server/shiny-server.conf

При необходимости следует изменить порт, который слушает сервер, доменное имя и базовое приложение

Приложения размещаются в директории

/srv/shiny-server

Обычно проще всего сделать форк с GitHub’а

Несколько мыслей

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

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

Ресурс R может использоваться без Shiny. Например, rApache, Rserve, deployR, RRack и т. д.

Примеры приложений

https://amice13.shinyapps.io/dproduct/

http://188.226.153.34/

http://shinyapps.stat.ubc.ca/r-graph-catalog/

https://thiemom.shinyapps.io/dataproducts-titanic/

https://fbarth.shinyapps.io/predict_real_estate_price/

https://cpargeter.shinyapps.io/Project/

https://econometricsbysimulation.shinyapps.io/Survey/

http://glimmer.rstudio.com/pssguy/storesMap/

http://glimmer.rstudio.com/sondaze/PISAoccup2012/

Благодарю за внимание!

Захаров К. В.