データ分析の現場で人気のR言語。でも、分析結果をレポートにいちいちまとめるのは面倒くさい……。そこで、R言語で処理した結果を手軽にWebアプリ化できるShinyの出番。マーケターこそ使いこなしたいツールです。
データサイエンスの到来、ビッグデータの分析や解析のニーズの高まりによって、R言語の人気がこれまで以上に高まっています。 一方、統計的なコンピューティングプラットホームとWebの間のスムーズなやりとりの要求も高く、1)データ解析用のインタラクティブなユーザーインターフェイスの必要性、 2)アプリケーションなどを実行する際のクラウドの役割の強化が求められています。
いままで統計学者とWeb開発者はありそうもない組み合わせだと思われてきました。データサイエンスの世界においてWebベースのプラットホームの必要性がこれまで以上に高まることは自明で、それにつれて、統計学とWeb開発、それぞれのグループ間のやりとりは増え続けるでしょう。この点において、RとShinyプラットホーム間のやりとりは、すぐにデータの世界とWebとのやりとりの基盤になるでしょう。
本記事では主に、UI(ユーザーインターフェイス)側とサーバー側の双方において、Shinyを使ってアプリケーションをビルドする際に使用するコマンドについて説明します。Rプログラミング言語に精通していると、Shinyアプリケーションの開発に役立つことは間違いありませんが、専門知識は必要ありません。掲載した例ではShinyで基本的なコマンドを使ってシンプルな統計グラフを構築することを説明し、HTMLでWebページをカスタマイズする方法を解説します。
Shiny Webアプリのインストールと読み込み
はじめに、Shiny Webアプリを生成し実行するためにはRStudioプラットホームをインストールしなければなりません。RStudioはRStudioのWebサイトからダウンロードできます。
プラットホームを読み込んだら、「New File」オプション→「Shiny Web App…」オプションの順に選択して、新しいShiny Webアプリケーションを生成します。
アプリケーションに名前をつけるためのインターフェイスが表示されるので(ここでは「OurFirstApp」と名付けましたが、独自の名前にしてもかまいません)、図のように「Application type」で「Multiple File (ui.R/server.R)」を選択します。
「Single File (app.R)」も選択可能ですが、文字どおりui.Rとserver.Rスクリプトを1つに結合するだけです。個人的にはコードをすっきりさせるために2つが分離した状態を保っておく方が好きなので「Multiple File (ui.R/server.R)」を選択したのですが、個人的な好みの問題でもあります。
なお、Shinyappsのサイトにも利用できるWebプラットホームが存在します。これを使えばユーザーがShinyアプリケーションをオンラインで共有でき、さらにrsconnectパッケージを使用してアプリケーションなどをRコンソールから制御できます。この方法は本記事の範囲外ですが、もちろん、機会があればこのトピックをもっと掘り下げて興味深いものにする予定です。
いずれの場合でも、Shiny Webアプリに名前をつけてソースコードを開けばすぐに、ヒストグラムを生成する「Old Faithful Geyser Data」データセットを使用したテンプレートアプリが表示されます。ここから、アプリを作成し、ニーズに合わせてカスタマイズしていきます。
アプリケーションの実行
すでに述べたように、Shiny Webアプリの主要なコンポーネントにはユーザーインターフェイス側(ui.R)とサーバー側(server.R)があります。
サンプルアプリはシンプルな折れ線グラフを生成し、X軸上にNの観測結果を、Y軸上に発生確率をプロットします。基本的には、このアプリで1~50の値(N)が選択可能なスライダーが生成されます。Nは試行回数です。たとえば、2が選択されている場合、2回の試行は100パーセントの確率と同じになります。一方、50が選択されている場合、100パーセントの発生確率にするには50回の試行が必要になります。そして、N=50のグラフ上で、スライドしてN=25まで値を下げると50%の確率と一致し、グラフが自動的に更新されて結果を反映します。
この例はとても単純な数学的な事例ともとらえられますが、単にShinyプラットホームを使ってグラフを生成する際に反応性(reactivity)がどのように動作するかを示すのに使用しているだけであることに注意してください。
ui.Rおよびserver.Rファイルの生成に使用されるコードです(HTMLを使ってもっとカスタマイズできるように、最終的には少し修正されます)。