Chapter 8 Shiny Apps

샤이니 앱에 대한 기초는 아래 동영상을 참고하세요, 그리고 dspubs.org 에서 기본 강의록 살펴 보시기 바랍니다.

리마인드를 위해서 기초에 대한 내용은 아래의 링크를 참고해 주세요 https://bookdown.org/jinhaslab/testing/shinyapps.html

8.1 구조

구조는 ui, server로 구성됩니다. ui는 웹이 보여줄 부분, server는 그것이 작동하는 부분입니다. 아래와 같은 구조입니다.

library(shiny)
runExample("01_hello")

가장 기본은 ui, server 로 이루어진 부분입니다.

library(shiny)
ui     = fluidPage(
   titlePanel("안녕하세요! 윤진하입니다."), 
   sidebarLayout(
     sidebarPanel(), 
     mainPanel()
   ) 
   
)
server = function(input, output){}
shinyApp(ui = ui, server = server)

8.2 테이블 게시하기

이번에는 shinyserver에 테이블을 게시하도록 하겠습니다. 우선 필요한 자료인 IARC 테이블을 가져오겠습니다. IARC 테이블은 WHO 에서 정리한 발암물질 종류입니다.

dspubs.org/download 에서 IARC.xlsx 다운 받기

shiny1

shiny1

odbc::odbcListDrivers()
con <- DBI::dbConnect(odbc::odbc(),
                      Driver   = "PostgreSQL Unicode",
                      Server   = "localhost",
                      Database = "ocdm",
                      UID = "open_cdm", 
                      PWD = "j2data2020",
                      #UID      = rstudioapi::askForPassword("Database user"),
                      #PWD      = rstudioapi::askForPassword("Database password"),
                      Port     = 5432)


#wget https://dspubs.org/download/IARC.xlsx
iarc = readxl::read_xlsx('IARC.xlsx')
#write 
dbSendQuery(con, "create schema cancer")
dbWriteTable(con, SQL("cancer.iarclist"), value = iarc)

사용할 데이터를 DB에 넣어 둡니다.

그리고 앱을 작성합니다. app.R이라는 파일을 만들고 아래 library를 rstudio 에서 설치하고, 터미널에서 sudo -s 이후 R을 실행한 다음 아래 library를 설치해 줍니다.

if(!require(shiny)) install.packages('shiny'); library(shiny); 
if(!require(DBI)) install.packages('DBI'); library(DBI)
if(!require(odbc)) install.packages('odbc'); library(odbc)
if(!require(DT)) install.packages('DT'); library(DT)

이후 DB를 불러오고, ui, server 를 통해 앱을 작성합니다.

if(!require(shiny)) install.packages('shiny'); library(shiny); 
if(!require(shinydashboard)) install.packages('shinydashboard'); library(shinydashboard); 
if(!require(shinyWidgets)) install.packages('shinyWidgets'); library(shinyWidgets)
if(!require(tidyverse)) install.packages('tidyverse'); library(tidyverse)
if(!require(readxl)) install.packages('readxl'); library(readxl)
if(!require(DBI)) install.packages('DBI'); library(DBI)
if(!require(odbc)) install.packages('odbc'); library(odbc)
if(!require(DT)) install.packages('DT'); library(DT)

#sudo -s
#R
# install all packages

odbc::odbcListDrivers()
con <- DBI::dbConnect(odbc::odbc(),
                      Driver   = "PostgreSQL Unicode",
                      Server   = "localhost",
                      Database = "ocdm",
                      UID = "open_cdm", 
                      PWD = "j2data2020",
                      #UID      = rstudioapi::askForPassword("Database user"),
                      #PWD      = rstudioapi::askForPassword("Database password"),
                      Port     = 5432)

iarclist = dbGetQuery(con, "select * from cancer.iarclist")


ui <- basicPage(
  h2("The mtcars data"),
  DT::dataTableOutput("mytable")
)

server <- function(input, output) {
  output$mytable = DT::renderDataTable({
    iarclist
  })
}

shinyApp(ui, server)

전체 폴더를 shiny-server 폴더에 복사해 줍니다.

cp -rf /home/dspub/project/iarc/ /srv/shiny-server/

이후 ip:3838/iarc로 열리는지 확인하면 됩니다.

8.3 과제

보건학적으로 필요한 테이블을 게시하고 ip:3838/app폴더명 으로 제출해주세요

8.4 Shiny Dashboard Tutorial

shiny를 이용해서 자가 건강 측정을 하는 app을 만들고 여기에 입력된 값을 저장하는 것을 실습하겠습니다. 이는 단계별로 동영상을 보시기 바랍니다. 최종 code는 아래에서 다운로드 받을 수 있습니다 . https://dspubs.org/download/location.zip

동영상 첫번째

동영상 두번째

동영상 세번째

동영상 네번째