2024/3/18: 同じ機能でコードを書き直しました。
0. まえがき
PythonからRの統計関数を呼び出したい!という個人的な願望を満たすため、Pythonで簡単に呼び出せるプログラムを実装しました。Rpy2の練習も兼ねてます(というかそちらがメイン)。GitHubでソースコードを公開しています。
ソースコードもREADME.mdもとりあえずで書いたので、何か間違いがあるかもしれません。バグや英語の誤記等を見つけた場合、お知らせいただけるととてもありがたいです。泣いて喜びます。
Rpy2パッケージを使って実装しているため、rpy2_wrapper
と名付けました(ラッパーの使い方あってる??)。Rpy2の日本語での情報が分散していることと、Rのことを把握してなさすぎでRpy2のドキュメントを読んでもはじめは意味がよく理解できず、かなり苦労しました。なんとか動いてよかった、、、
これから数回に渡って、その中身について紹介していきます。今回はその第1回です。
-
続編書きました。(2018/7/26)
rpy2_wrapperを使ってPythonコードで統計検定(TukeyHSD・Dunnett・Steel-Dwassなど) -
続編パート2書きました。(2018/7/29)
Rpy2の使い方の備忘録
目次
- 開発の動機
- 何ができるのか
- 環境構築の手順
- テスト
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.test
でvar.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が開いたら、multcomp
とNSM3
をインストールします。
> 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
を選択して、ダブルクリックで開きます。
上のタブからKernel > Restart Kernel and Run All Cells
を実行します。
Steel-Dwassのところでちょっと時間がかかります。
「Jupyterが起動しない!」という場合、ターミナルからでもテストできます。
rpy2_wrapper
ディレクトリに入って
$ python examples.py
全部がエラーなく実行されれば、環境構築はうまくいっています。
今日はここまで。