RstudioとShinyでWebアプリケーションを作成【導入編】

Rのパッケージの一つであるShinyを使うことで、Rで分析した結果をWebアプリケーションとして表示させることができます。

また、パラメータを動的に変更しながらグラフの描画を行い、データの理解や分析結果を眺めることも出来ます。

今回はShinyを使ってWebアプリケーションを作成する方法を書いていきたいと思います。

Shinyアプリケーションでヒストグラムを表示する

Shinyのインストール

install.packages('Shiny')

Shinyアプリケーションの作成

次に左上にあるプラスマークのアイコンを選択し[Shiny Web App…]を選択

img01.png

「Application name:」には任意の名前を入力してください。ここでは「ShinyApp」を入力しています。
そして、「Application type」は「Multiple File(ui.R/server.R)」にチェックを入れます。これは、サーバー側の処理を書くファイルとUI側の処理を書くファイルを分けることになります。「Single File(app.R)」だと一つのファイルにサーバー側の処理とUI側の処理を書くことになります。コードがややこしくなるので、今回はUIとサーバーを分けておきます。(おすすめ)
アプリケーション名とアプリケーションタイプを選択できたらCreateボタンを押してShinyアプリケーションを作成しましょう!

img02.png

そうすると以下の2つのファイルができたと思います。

ui.R

#
# This is the user-interface definition of a Shiny web application. You can
# run the application by clicking 'Run App' above.
#
# Find out more about building applications with Shiny here:
# 
# http://shiny.rstudio.com/
#

library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                "Number of bins:",
                min = 1,
                max = 50,
                value = 30)
        ),

        # Show a plot of the generated distribution
        mainPanel(
            plotOutput("distPlot")
        )
    )
))

server.R

#
# This is the server logic of a Shiny web application. You can run the 
# application by clicking 'Run App' above.
#
# Find out more about building applications with Shiny here:
# 
# http://shiny.rstudio.com/
#

library(shiny)

# Define server logic required to draw a histogram
shinyServer(function(input, output) {

    output$distPlot <- renderPlot({

        # generate bins based on input$bins from ui.R
        x <- faithful[, 2] 
        bins <- seq(min(x), max(x), length.out = input$bins + 1)

        # draw the histogram with the specified number of bins
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
    })
})

それでは、まずは何もいじらずに[Run App]を押してShinyアプリケーションを起動させてみましょう。
そうすると以下のようなWebアプリケーションが立ち上がるはずです。
これだけでクライアント側から受け取ったパラメータを元に動的にヒストグラムを出力させることができます。

img03.png

ユーザーインターフェース(ui.R)

ui.Rはアプリケーションの外観とレイアウトを制御するソースファイルです。

titlePanel("Old Faithful Geyser Data")

titlePanelはそのままの通り、Webで表示されているタイトルの部分です。

sidebarPanel(
    sliderInput("bins",
    "Number of bins:",
    min = 1,
    max = 50,
    value = 30)
)

sidebarPanelは今回の場合、ヒストグラムのbinの数を制御するためのものです。
minにはbinの最小値を、maxにはbinの最大値を指定します。また、valueにはデフォルトのbinの数を指定することができます。

mainPanel(
    plotOutput("distPlot")
)

mainPanelはヒストグラムをプロットしている部分のことです。plotOutputと言う関数を使用して、server.R側で定義した変数名を指定し、グラフをプロットしています。

server.R

server.Rにはサーバー側で処理するコードを書くためのファイルです。このファイルに分析するための処理を書いたり、データを読み込んだりします。

output$distPlot <- renderPlot({
    x <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1)
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
})

先ほどui.RでplotOutput(“distPlot”)と書いていました。server.RにdistPlotと言う変数にグラフをプロットする処理を書いていきます。
プロットする処理については、Rを普段使っている人からすれば、簡単にできると思います。

次回は、アプリケーションにいろいろなグラフを表示させたり、ダッシュボードを作成したりする方法を紹介していきたいと思います。
その他のサンプルコードについてはShinyの公式サイトにたくさん掲載されているので、そちらを参考にしてみると良いかもしれません。

Shinyのサンプルコード