Shinyを利用してインタラクティブにデータを解析
R言語は強力な統計ツールの開発がどんどん進んでいます。今回紹介するShinyはR言語をブラウザ上で使用するためのパッケージです。うまく利用すると、実験やシミュレーションの結果をわかりやすく伝えられそうな気がします。
Shinyのインストール
CRANに登録されているパッケージなので、特に必要な知識はありません。install.packages("shiny")とRのセッションで書くだけで利用できます。
ShinyのウエブページShinyでは、チュートリアルがいくつか用意されているので、これから始めるのがいいかもしれません。
Shinyの特徴
Shinyは、基本的にui.Rとserver.Rという二つのファイルを作成します。ui.Rは、ブラウザ上のUIの設定を担当します。server.Rはui.Rで選択したパラメータを利用しながら、データ解析を行い、結果の出力を指示します。ファイル名はui.Rとserver.Rで、同一のフォルダに保存する必要があるので、注意しましょう。
簡単な使用例:データの生成とヒストグラムの作成
では、とても簡単な例を利用して、Shinyを利用した解析のイメージを紹介します。ガウス分布からサンプルを抽出したものをヒストグラム表示してみます。サンプル数を選ぶメニューを作って、いろいろなサンプル数でヒストグラムの見え方がどのように変化するかを調べてみましょう。
ui.Rの設定
ファイルの最初はlibrary(shiny)にします。
次にshinyUI()を作成します。この関数の引数としてページの構成を書き込んでいきます。いろいろな書き方が用意されていますが、今回はbootstrapPage()を利用します。UIは、基本的に入力に関する部分と出力に関する部分を設定します。次に、入力部。サンプル数を選べるように selectInput()関数を使います。この関数の最初の引数inputIdはこの部分のIDを示します。次に、セレクターにつけるラベル、選択肢、最初に選ぶ値をそれぞれlabel, choices, selectedで設定します。
library(shiny) shinyUI( bootstrapPage( selectInput( inputId = "nSample", label = "Number of samples", choices = c(20, 40, 60), selected = 20 ) ) )
次は出力部を設定します。グラフを描きたいので、plotOutputにしましょう。この関数も第1引数はIDです。
plotOutput("output")
server.Rの設定
server.Rもlibrary(shiny)で始めます。次にshinyServer()を設定します。function(input, output){}のinputとoutputはui.Rとの接点になります。今回はuiの"output"というIDの場所にヒストグラムを作ります。ここでちょっとしたコツがあって、renderという考え方を利用します。これは、UIの入力部に何らかの変更があったら、直ちに上書きのための処理を始めます。グラフを上書きするにはrenderPlot()という関数を使います。この引数としてヒストグラムを作成します。
library(shiny) shinyServer(function(input, output){ output$output <- renderPlot({ hist(rnorm(input$nSample)) }) })