Python
R
統計

Pythonからよく使うRの統計関数を簡単に呼び出せるようにしてみた (多重比較・Rpy2)


0. まえがき

PythonからRの統計関数を呼び出したい!という個人的な願望を満たすため、Pythonで簡単に呼び出せるプログラムを実装しました。Rpy2の練習も兼ねてます(というかそちらがメイン)。GitHubでソースコードを公開しています

ソースコードもREADME.mdもとりあえずで書いたので、何か間違いがあるかもしれません。バグや英語の誤記等を見つけた場合、お知らせいただけるととてもありがたいです。泣いて喜びます。

Rpy2パッケージを使って実装しているため、rpy2_wrapperと名付けました(ラッパーの使い方あってる??)。Rpy2の日本語での情報が分散していることと、Rのことを把握してなさすぎでRpy2のドキュメントを読んでもはじめは意味がよく理解できず、かなり苦労しました。なんとか動いてよかった、、、

これから数回に渡って、その中身について紹介していきます。今回はその第1回です。


目次


  1. 開発の動機

  2. 何ができるのか

  3. 環境構築の手順

  4. テスト


1. 開発の動機

私事ですが、Pythonで統計解析をするとき、普段はscipy.statsを使っています。これ、めちゃくちゃ便利で重宝しているのですが、個人的によく使う統計関数(主に多重比較)が用意されておらず困ることがあります(DunnettとかTukey-Kramerとか使いたいが見つからない)。

ところで、統計といえば R! というイメージがありますよね。統計関数についてググると 大抵、R のコードが上位にヒットしてきますし、R パッケージの関数(特によく使われているもの)は実績もあり、なんとなく安心感も。しかし、Rに慣れてなさすぎてデータの整形だけで疲れきってしまうという問題が勃発、、、(泣)

そこで、Pythonからよく使うRの統計関数を簡単に使えるようにすればいいじゃん!と考えて、実装してみました。基本、自分用です。環境構築がややめんどいです。


2. 何ができるのか

rpy2_wrapperで実装した統計関数を以下に列挙します。一部、scipy.statsで使えるのもありますが、もののついでに実装。


  • One-way ANOVA (aov, anova)

  • Tukey-Kramer test (TukeyHSD)

  • Welch's ANOVA (oneway.testvar.equal=False)

  • Dunnett's test (multcompパッケージのglht)

  • Fisher's Exact Test (fisher.test)

  • Steel-Dwass test (NSM3パッケージのpSDCFlig)

カッコ内は呼び出すR の関数名を示しています。

それぞれの使い方は次回以降にご紹介するとして、まずは環境構築の手順をば。


3. 環境構築の手順


a. OS・Python・Rのバージョン


  • MacOS Sierra

  • Xcode9.1

  • Python 3.6.6

  • R version 3.5.1

注1:たぶんほかのバージョンのMacOSXでも新しめなら動くと思います。

注2:WindowsやLinuxでは調べていません。ソースコード自体は動きそう。

注3:XcodeとPythonはあらかじめ導入済みとして進めます。まだの方は以下のページを参照のこと。

Xcode をインストールする, iOSアプリ作成準備

今さら聞けない!Xcodeをインストールする方法

Python3の環境をささっと整える(Mac版)


b. Pythonパッケージ


  • rpy2==2.9.4

  • pandas==0.23.3

  • jupyter==1.0.0

  • jupyterlab==0.32.1

他にも依存パッケージがあるかも。


c. Rパッケージ


  • multcomp

  • NSM3


d. Rのインストール

まず、Pythonから参照できるようにRをhomebrewでインストールします。

homebrewはMacOS用のパッケージ管理ツールです。

スタンドアロン版の Rとは別にインストールします。

$ brew install R

#中略

Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/Rscript
Target /usr/local/bin/Rscript
already exists. You may want to remove it:
rm '/usr/local/bin/Rscript'

To force the link and overwrite all conflicting files:
brew link --overwrite r

To list all files that would be deleted:
brew link --overwrite --dry-run r

Possible conflicting files are:
/usr/local/bin/Rscript -> /Library/Frameworks/R.framework/Resources/bin/Rscript
==> Summary
🍺 /usr/local/Cellar/r/3.5.1: 2,116 files, 55.6MB
==> Caveats
==> readline
This formula is keg-only, which means it was not symlinked into /usr/local,
because macOS provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

For compilers to find this software you may need to set:
LDFLAGS: -L/usr/local/opt/readline/lib
CPPFLAGS: -I/usr/local/opt/readline/include

エラーに対処するため、brew linkします。

$ brew link --overwrite r

私はわりとさくっといきましたが、うまくいかないときは依存パッケージが足りてないかもです。

その場合は、こちらを参考に、、、

MacOSX に homebrew で R をインストール


e. 必要なRパッケージのインストール

ターミナルからRを起動します。

$ r

Rが開いたら、multcompNSM3をインストールします。

> install.packages("multcomp")

> install.packages("NSM3")

ちょっと時間がかかるかも。


f. Rpy2とPandasのインストール

次にPythonパッケージをpipでインストールします。ターミナルで以下を実行。

$ pip install rpy2

$ pip install pandas

ついでにJupyterとJupyterlabも入れておきます。

$ pip install jupyter

$ pip install jupyterlab

これを入れておけば、サンプルのJupyterノートブックファイル(examples.ipynb)が開けます。


g. rpy2_wrapperのインストール

インストールといってもgit cloneするだけです。適当なディレクトリに移動して、以下を実行してください。

$ git clone https://github.com/MTNakata/rpy2_wrapper.git

rpy2_wrapperディレクトリがダウンロードされ、その中にソースコード(rpy2_wrapper.py)といくつかのサンプルが入っています。


4. テスト

ターミナルでrpy2_wrapperディレクトリに入って、Jupyterlabを起動。

$ jupyter lab

ブラウザが自動で起動しないときは以下のページを参考にしてみてください(丸投げ)。

左の画面からexamples.ipynb を選択して、ダブルクリックで開きます。

Jupyterの画像サンプル

上のタブからKernel > Restart Kernel and Run All Cellsを実行します。

Steel-Dwassのところでちょっと時間がかかります。

「Jupyterが起動しない!」という場合、ターミナルからでもテストできます。

rpy2_wrapperディレクトリに入って

$ python examples.py

全部がエラーなく実行されれば、環境構築はうまくいっています。

今日はここまで。