Hatena::ブログ(Diary)

盆栽日記

2013-02-13

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つ。

  • .RでRを起動
  • .R.assignでPython→Rの受け渡し
  • .R.getでR→Pythonの受け渡し
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!!

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/dichika/20130213/1360718736
リンク元