Statistics::RもRSPerlもイマイチ感が強かったので、rpyを使い始めているが、こんなに便利とは思わなかった。
というわけで、rpyで主成分分析を行い、できたモデルで新しいデータの主成分を求めてみるというサンプルを。 今回はrpyのテストなのでデータはrnormで作った。普通バイオインフォとかケモインフォなパターンだと、遺伝子の発現レベルとか、化合物のディスクリプターを使うけど。
>>> from rpy import * >>> r.library('stats') >>> a = r.matrix(r.rnorm(15),5) >>> b = r.matrix(r.rnorm(15),5) >>> model = with_mode(NO_CONVERSION,r.prcomp)(a) >>> model <Robj object at 0xb7f9f1c0> >>> r.predict(model,b) array([[ 0.28817526, -2.20038126, 0.42937523], [ 0.76682094, -1.38050702, 0.24898564], [-0.28308137, -0.51609132, 0.12062971], [-0.68531169, 1.42599763, 0.03987597], [-1.35685327, 0.02394946, -1.03868517]])
と数行ほどで、予測したいデータセットの主成分がpythonのarray型で返ってくるので、このあとの処理が凄く楽チンになる。
rpyはデータのコンバージョンのやり方だけきちっと押さえておけばあとはRと一緒に扱えるのだが、コンバージョンのモードが色々あって、初めのほうは悩まされることが多かった。特にモデルをRで適用する場合、python形式にコンバートしてしまうとRで扱えなくなってしまうのでNO_CONVERSIONモードにしないといけない。