PythonからRを使いたい -だがRPy2おめーはダメだ-
経緯
とある事情でランダムフォレストを使いたいのだがrandomForestパッケージは因子のレベルが32までというFORTRAN実装を引きずっており今回のデータには合わない。
ならばとpartyパッケージのcforestを使ってみたが今度はメモリが足りなくなった。
諦めて因子のレベルを32以内にすればいいのだろうが、せっかくなのでPythonを使ってみたい。
で、Scikit-learnにランダムフォレストが実装されてるとのことなので入れてみた。
http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn
Scikit-learnについてはこれでおしまい。
ところで、↑のサイトを眺めているとRPy2がある。
RPy2に関しては当方Win7の64bit環境だが以前は32bitのものしかなくインストールすらうまくいかなかったことを思い出した。
http://stackoverflow.com/questions/3008509/python-version-2-6-required-which-was-not-found-in-the-registry
今度こそはと思い、RPy2をインストールしてみたらインストールはうまくいったがいざ動かすとなるとエラーが出てうまく動かない。
調べるとこんな話が出てくる。
http://stackoverflow.com/questions/5630441/how-do-rpy2-pyrserve-and-pyper-compare
_人人 人人人人 人人人人 人人人人 _
> MSWindows with limited support <
 ̄Y^Y^Y^YY^Y^Y^YY^Y^Y^YY^Y^Y^YY^Y^ ̄
どうもみんなWindowsに冷たい。
対処法↓も無いことはないようだが、RPy2はまた今度にしてPypeRを入れることにした。
http://vhaguiar.wordpress.com/2011/03/01/python-rpy2-with-python-2-6-and-r-2-12-1-r_home-path-problem-2/
以上が今回の経緯。
PypeRとは
詳しい話はリリース時の紹介記事とサンプルコードを並べておくのでそちらでどうぞ。
http://www.jstatsoft.org/v35/c02/paper
http://statcompute.wordpress.com/2012/11/29/another-way-to-access-r-from-python-pyper/
pandas対応していることと、Windowsに優しいというのが選んだ決め手です。
PypeRこんな感じ
上記サンプルコードを真似しつつ書くと以下の様な感じになる。
ポイントは3つ。
import pyper as pr import pandas as pd smpdata = pd.read_csv("iris.csv") # Rのインスタンスを作る r = pr.R(use_pandas = "True") #Python側のデータをRに渡す r.assign("rdata", smpdata) # Rのpartyライブラリを使って決定木を作る r("summary(rdata)") r("library(party)") r("res = ctree(data = rdata, Species~.)") # R側で決定木の結果をプロットする r("pdf('sample.pdf')") r("plot(res)") r("dev.off()") # Rで予測した結果をPythonに渡す r("fit <- predict(res)") pydata = pd.DataFrame(r.get("fit"), columns = ["Species_predict"]) print(pydata.Species_predict)
enjoy!!