LoginSignup
13
11

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

Last updated at Posted at 2018-07-25

2024/3/18: 同じ機能でコードを書き直しました。

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

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

今日はここまで。

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11