R Shiny を使ってWebアプリを作って動くまでやってみる(1)始動

最初にShinyでWebアプリを作ろうと思ったときには、サイトを検索したり、チュートリアルをやってみたりして
少しずつ覚えながら作り上げていくというケースが多いかと思います。私自身もそうやりながらなんとかShinyの使い方を覚えつつ
Webアプリを作ってきましたが、いろいろと初心者ならではの疑問の解消にかなり手こずった覚えがあります。

今回からの不定期のシリーズで、そんな初心者でもWebアプリを作るぞという気合いがあれば作り上げられるという
ところをお見せするシリーズ
を立ち上げたいと思います。

統計処理を行うソフトウエア

まず最初に、Webアプリを作る言語はいろいろある中でなぜShinyを使うのかや、どういったアプリケーションに適しているのかを考えたいと思います。
そもそもShinyR言語の上で動くライブラリーですので、Rがインストールされている環境がまず必要です。

R言語はもともも統計処理に強い言語として使われて来ました。
統計処理といえばエクセルで平均値や合計などを計算することが最も多いのではないでしょうか。
ただし、エクセルは各セルに配置したデータを操作してグラフィカルに処理を進めるタイプのため、(1)統計関数が少ない、(2)計算がおそい、(3)大規模データがあつかえない、(4)複雑な計算処理にはマクロを組む必要がある、といった問題が指摘されることが多く、本格的な統計処理に使われることはほとんどありません。

統計処理を本格的に行うためのソフトウエアとしてはいくつか有名なものがあります。
(1)SPSS
(2)STATA
(3)SAS
(4)Python
(5)R

SPSS

SPSSは社会科学系の研究者には最も使われているソフトウエアです(Statistical Package for Social Scienceの略称)。統計処理のメニューを選んでオプションを指定するだけでとりあえず
見やすい結果がすぐに得られるという特徴があり、「統計処理そのものには関心は低いがしっかりした分析は行う必要がある」といったケースで使われるのではないでしょうか。科研費で結構な数のライセンスが売れているのではないかと思います。ベースのソフトをまともに買ったら31万円!と高額です。

ちなみにPSPPというSPSSのコマンドが動くGPL版のソフトウエアも開発が進められています。

今後開発がどんどん進むようなら面白い展開が期待できます。

STATA

STATAは経済学関連で使われる各種の統計関数が充実していることからその界隈ではよく使われています。私はこのソフトでプログラムを組んだことはありませんが、こちらもまともに買えば30万円程度と高額です。

SAS

SASは大規模なデータを扱うのが得意で、株価データや高頻度データなど、数十億のレコード、カラム数が数百、的な巨大なデータを扱うには最適かと思われます。メモリーに乗らないデータも外部メモリーとうまくシェアして比較的高速に処理してくれるので、一般的な統計分析用途で大規模データを扱う場合には一択かと思います。SASは年間ライセンスの有料であり、BASEだけでは十分ではなく、統計処理関連のパッケージや時系列のパッケージなどが必要になり、結構な金額になりがちです。

SASもこのあたりは気にしているようで、SAS University Editionというフリーのソリューションも提供しています。大学の授業でSAS言語になじんでもらって社会人では有償パッケージを買ってね!ということかと思います。BASE、STAT、IMLや一部のETSなど基本的なSASコマンドはそのまま動きますが、インストールがやや面倒な点と、営利目的には使えないといった制限があるのでご注意ください。(AWS上で動くサービスも提供しているようですがまだ使ったことはありません)

また、SASは新たな関数(procedure)の導入には比較的コンサバなスタンスで、学術的に新しく出てきた計算方法などがコマンドとして実装されるにはかなり枯れてきてからとなるので、新しい計算ロジックが必要な場合にはSAS言語で関数を組む必要があります。このあたりの機動性はRにはかないません。

なお、SAS言語系を使える別のソフトウエアもあり、World Programingという会社がソフトを出しています。

Jupyterノートブックで使えたり、RやPythonと共存して処理系が組めるなどSASにはない特徴があります。

ただし、本家SASと訴訟合戦になっているようなので要Watchですね。

Python

最近の機械学習ブームで急激に利用者を伸ばしています。基本無償で使えるのが人気のポイントの一つですね。

Pythonについては様々なブログ等で解説があるのでそちら方面を参照いただくとして、統計処理に関してはずいぶんと充実してきている状況です。
とはいっても、アカデミックベースの論文では新たな統計処理はまずRで実装されてリリースされ、その後誰かがPythonで書き直すといった
スタイルが多いかと思われます。最先端の統計処理ではまだまだRが優勢かと思われます。

一方で、WEBアプリケーション周りは充実しており、DjangoなどフルスタックのWebアプリ開発が可能なフレームワークも出ており
このあたりの充実度ではRは足下にも及びません。

R

さて本題のRです。Pythonと比較して統計処理関数では強みがあるものの、Webアプリ周りではPythonに足下にも及ばないというのがざっくりとした比較でした。
では

  • なぜRでWebアプリを作るのか?
  • どういった用途でのアプリが適切なのか?

ですが、一言で言えば作りたいWebアプリがRの強みを生かせるかにかかっていると思います。

例えば、

  • 社内のエンジニアがRの使い手ばかりだ・・・・、とか、
  • クリックするだけで統計計算できるツールを作りたい・・・・

とかの用途にはフィットすると思います。

一方で、「スマホ向けに情報配信ツールを作りたい・・・」的な用途には全くフィットしません。

jamovi

番外編的に紹介します。jamoviはオープンソースで開発が進むR言語が動くSPSSのようなソフトウエアです。

基本はSPSSのようにメニューからやりたい処理を選ぶだけで結果が得られるツールで、必要ならばR言語の文法が通るので
複雑な処理もできますよ!という”いい感じ”のツールです。

まだまだ分析メニューは少なめですか、インパクトは大! 今後開発がどんどん進んでくるようなら大化けの展開が期待できます。

今後の展開について

ということで、このシリーズではRを使ってWebアプリを作り、公開するまでのステップを実行してみたいと思います。
実際に作りながら進めるので本シリーズの展開スピードはやや遅めかもしれません。

今回のシリーズで作り上げるWebアプリは、特定の用途に極限までフィットした統計解析ツールとします。

SPSSjamoviなどGUIを押し出したツールを使っても、どういった処理を行いたいのかは処理をおこなう作業者がコマンドを選んで
実行する必要があり、どの関数を適用すべきか迷う場合があります。また、結果の解釈も自身の用途に適した形で解釈や取捨選択を行う必要があります。
これは、統計処理ソフトに汎用性を求める場合致し方ない側面もあります。

GUIベースの使いやすい統計ソフトとはいえ、結果的に、前処理が不十分になったり、結果の解釈を間違えて正しい変数選択ができていない、などのケースが
発生する可能性があります。こういった側面が生じないようにする一つの方法が、ツールの用途を特定の目的に絞り込んてメニュー構成を作るということかと思います。

そこで、今回開発するアプリでは用途を絞ったツールとして作ります。具体的な用途は、SPSSの独壇場である「心理学の尺度開発」で必要となる各種の統計処理を実装し、メニューフローに従って処理していくだけで、必要なポイントを押さえた素晴らしい結果が得られるソフト!という野心的なものを目指します。

頭の中には完成のイメージがあるのであとはうまく実装できるかは腕次第問ということで中期的課題(シリーズ)として取り組んでいきます。

R Shinyで作ったアプリの公開について

RのライセンスはGPL2、ShinyのライセンスはAGPLです。ただし、Shinyは有償のライセンスServer Proを購入するか、shinyapps.ioでアプリをホストすればAGPLではなく商用ライセンスとなります。

結局、Shinyは商用ベースでの利用も含めて問題を回避できる方法があるが、計算のベースとなるRやそのライブラリー群はGPLライセンスが多いので、
安易に使って第三者に開示するとライセンス違反になる可能性がありますので十分に留意してください。

そこで、本シリーズで作るアプリはソースコードを開示するという方針で進めていくことにします。