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




Рассмотрим простейшую схему создания веб-приложения (web application), использующего код R и выполняющегося удалённо на сервере, где установлен интерпретатор языка. Будем использовать пакет Shiny. Следует отметить, что такое Shiny:

1) пакет R;

2) платформа для создания веб-приложений;

3) реализация модели reactive programming, в частности, изменения в каких-либо элементах пользовательских элементов управления приводят к изменению других объектов, которые с ними связаны, а сами связки прописаны достаточно кратко – без использования механизма событий (events) и функций обратного вызова (callback functions).

Создадим учебный проект, в котором интерактивным элементом (графическим элементом управления) будет слайдер, а графическим объектом – гистограмма. С помощью слайдера будем варьировать число разрядов (bins) для построения гистограммы частот по некоторой выборке.

Прототип результата вы можете обнаружить здесь: https://zifaccout.shinyapps.io/shiny_proj/

Создадим проект по детально разобранному примеру отсюда: https://shiny.rstudio.com/tutorial/

Нас будут интересовать уроки 1 и 7 (Lesson 1. Welcome to Shiny / Lesson 7. Share your apps) в разделе Written tutorials (под видео и дополнительными материалами к нему). Для начала (https://shiny.rstudio.com/tutorial/written-tutorial/lesson1/) установим пакет:

install.packages("shiny")

 

Затем создадим папку «my_app» и пустой скрипт app.R, в который будем копировать код из примера.

Все приложения Shiny содержат описание пользовательского интерфейса (разметка и внешний вид) – переменная ui (user interface object) и функцию server для выполнения инструкций R, отвечающих за обработку данных, на сервере. Скопируйте код из раздела ui и из раздела server (вставьте в тот же файл после предыдущего блока). Обратите внимание, что ui – это переменная в которую записывается объект, созданный fluidPage, а сервер – это пользовательская функция с двумя параметрами с говорящими названиями input и output. Завершается минимальный набор инструкций вызовом

shinyApp(ui = ui, server = server)

 

Таким образом, файл app.R содержит:

Попробуем запустить приложение, используя команду в R Console (RGui):

runApp("???/my_app") Не забудьте указать полный путь к вашей папке вместо «???»

В браузере по умолчанию откроется вкладка с вашим веб-приложением. Управляйте слайдером, чтобы изменить гистограмму. Закройте вкладку и перейдите в RGui. Как видите, консоль занята, то есть приложение не завершило свою работу, хотя его визуализация в виде вкладки в браузере уже отсутствует. Придётся аварийно завершить работу RGui, которая управляет приложением. Чтобы корректно завершать работу приложения, добавьте в список параметров функции server ещё один параметр session, а также обработчик завершения сессии (что делать если сессия завершилась? – вызвать stopApp()):

session$onSessionEnded(function() {

stopApp()

})

УПРАЖНЕНИЕ 1. Сформулируйте, каким образом используется reactive programming в рассмотренном примере, используя графическую подсказку для другого примера. Здесь строится диаграмма рассеяния (scatter plot) с точками, координаты которых являются случайными величинами с нормальным законом распределения (rnorm):

УПРАЖНЕНИЕ 2. Внесите дополнительные коррективы в код:

1) замените заголовок «Hello Shiny» на свою надпись;

2) установите минимальное значение для слайдера равным 5;

3) измените цвет границы столбцов гистограммы с “white” на “orange”.

УПРАЖНЕНИЕ 3. Добавьте статическую графику ggplot2 как отдельный объект для вывода staticPlot (аналогично имеющемуся distPlot).

УПРАЖНЕНИЕ 4. Используя другие уроки (https://shiny.rstudio.com/tutorial/), добавьте любые два элемента управления, которых не было в первоначальном варианте.

 

Перейдём к публикации (deployment) приложения. Есть несколько вариантов для совместного использования данных и кода (to share – совместно использовать, делиться чем-то). Различные варианты смотрите здесь: https://shiny.rstudio.com/tutorial/written-tutorial/lesson7/

Нас будет интересовать самый простой вариант публикации прилодения: посредством специального хостинга RStudio для Shiny (есть как бесплатная версия, так и несколько тарифных планов для профессионального использования аналитиками).

Обратимся к этому сервису хостинга: https://www.shinyapps.io/

Сразу же потребуется регистрация: я воспользовался аккаунтом Google для входа и ввёл имя для создания домена (zifaccount). После входа через Google Account на почту gmail придёт письмо для подтверждения. В итоге получилось: zifaccout.shinyapps.io – по такому имени будут размещаться в сети мои приложения. Теперь ваша очередь.

Развёртывание на сервере (deployment) приложений будем также делать через RGui. Сначала установим пакет rsconnect:

install.packages("rsconnect")

Далее настроим его (смотрите подсказки на панели управления shinyapps):

rsconnect::setAccountInfo(name='???', token='???', secret='???')

Замените «???»: name – ваше доменное имя, token/secret будут указаны на странице панели управления (dashboard). Теперь добавим приложение (to deploy – развёртывать, публиковать). Имя приложения будет совпадать с именем папки, в которой находится app.R (в данном случае my_app):

rsconnect::deployApp('???/my_app')

Вместо «???» укажите полный путь к папке с app.R.

Теперь вы можете управлять своими приложениями как администратор:

https://www.shinyapps.io/admin/#/dashboard

Сторонние пользователи получают доступ к запущенному на удалённом сервере приложению так: https://???.shinyapps.io/my_app/

ЗАМЕЧАНИЯ:

1) запуск приложения и его публикация делаются нажатием одной кнопки, если вы используете RStudio;

2) Shiny позволяет интегрировать с R код CSS и JavaScript для создания веб-приложения (см. https://shiny.rstudio.com/tutorial/);

3) другим примером пакета для создания интерактивной графики на базе философии ggplot2 является rChart: https://github.com/ramnathv/rCharts; интегрируясь с Shiny, rCharts позволяет использовать библиотеки графики на JavaScript и помещать визуализации в свои веб-приложения;

4) о создании и размещении интерактивных географических карт в веб-приложениях речь пойдёт в рамках отдельного урока.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-10-17 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: