<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>rpy / Drkcore</title><link>http://blog.kzfmix.com/rpy</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Tue, 12 Jan 2010 11:20:34 +0919</lastBuildDate><item><title>WindowsでRPyを使う</title><link>http://blog.kzfmix.com/entry/1198070395</link><description>&lt;p&gt;普段はLinuxマシンで&lt;a href="http://rpy.sourceforge.net/"&gt;RPy&lt;/a&gt;を使うのだけど、手元のLet's NoteR4でも使いたいので。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;R2.6.1&lt;/li&gt;
&lt;li&gt;Python2.5.1&lt;/li&gt;
&lt;li&gt;RPy1.0.1&lt;/li&gt;
&lt;li&gt;pywin32 build210&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;pywinはeasy_installで。普通にダウンロードしてクリックからのインストールでもいいような。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;easy_install pywin32
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;RPyはrpy-1.0.1-R-1.3.0-to-2.6.1-Numpy-win32-py2.5.exeを落としてきて入れた。&lt;/p&gt;

&lt;p&gt;あと環境変数。R_HOMEがねーとかwin32allがimport出来ないとかいうエラーは環境変数の設定のせい。次の二つを環境変数Pathにセットしておくととりあえず大丈夫。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;C:\Program Files\R\R-2.6.1\bin
C:\Python25\Lib\site-packages\pywin32-210-py2.5-win32.egg\pywin32_system32
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;後者のほうはなんとかならんかね。Pathに設定するようなもんじゃないと思うんだけど。前者もpathでなくてR_HOMEとかにセットできたらいいのにね。&lt;/p&gt;
</description><pubDate>Tue, 12 Jan 2010 11:20:34 +0919</pubDate><category>R</category><category>rpy</category><category>Python</category></item><item><title>macbookでRpyを利用できるようにしたのでメモ</title><link>http://blog.kzfmix.com/entry/1217061926</link><description>&lt;p&gt;python2.5,R-2.7.1,rpy1.0.3という組み合わせで。rpy2-alphaはコンパイルが通らなかった。&lt;/p&gt;

&lt;h3&gt;Rのインストール&lt;/h3&gt;

&lt;p&gt;Rはソースからコンパイル。enable-R-shlibオプションをつけるのを忘れずに、というより配布されていたバイナリはこれつきでコンパイルされてないようなのでそのままではrpyが入らないはず。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;R CMD config --ldflags
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;とか打つとOKかどうかわかる。　ダメげな場合は潔くソースから。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;./configure --enable-R-shlib
make
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ここでまた、make installするとshlibがなんかみつからなくなるという現象に悩まされた。そのため、ユーザー領域でコンパイルしたバイナリを使う事にした。/Users/kzfm/R-2.7.1/bin/Rが実体で/opt/local/bin/Rにシンボリックリンクを張って使っている。&lt;/p&gt;

&lt;h3&gt;Rpyのインストール&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;export R_HOME=/Users/kzfm/R-2.7.1
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$R_HOME/lib
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これが重要。あとmacのgccでもコンパイルできなくてmacportのgcc使ってコンパイルする必要があるかもしれない。&lt;/p&gt;

&lt;p&gt;あとは普通に&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo python setup.py install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;でいけるはず。&lt;/p&gt;
</description><pubDate>Tue, 12 Jan 2010 10:49:44 +0919</pubDate><category>R</category><category>rpy</category><category>Python</category></item><item><title>rpy2とsoaplibでつくるRのウェブサービス</title><link>http://blog.kzfmix.com/entry/1239423933</link><description>&lt;p&gt;soaplibにはCherryPyが組み込まれているので簡単にウェブサービスがつくれる。さらにrpy2を使えばRのウェブサービスがお手軽に構築できて便利。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://wiki.kzfmix.com/?RandSOAP"&gt;インストールの手順はwikiを参照&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以下のコードをsoapr.pyというファイル名で保存する。これは与えた数字の数だけRがrnormして返すという簡単なサービス。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from soaplib.wsgi_soap import SimpleWSGISoapApp
from soaplib.service import soapmethod
from soaplib.serializers.primitive import String, Integer, Array, Float
import rpy2.robjects as robjects

class RService(SimpleWSGISoapApp):

    @soapmethod(Integer,_returns=Array(Float))
    def rnorm(self,num):
        r = robjects.r        
        y = r.rnorm(num)
        return [i for i in y]

if __name__=='__main__':
    from cherrypy.wsgiserver import CherryPyWSGIServer
    server = CherryPyWSGIServer(('localhost',7789),RService())
    server.start()
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;実行するとサーバが立ち上がりhttp://localhost:7789/soapr.wsdlにアクセスするとwsdlを出力する。&lt;/p&gt;

&lt;p&gt;テスト用のクライアント&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; from soaplib.client import make_service_client
&amp;gt;&amp;gt;&amp;gt; from soapr import RService
&amp;gt;&amp;gt;&amp;gt; client = make_service_client('http://localhost:7789/',RService())
&amp;gt;&amp;gt;&amp;gt; print client.rnorm(5)
[-0.40538156526399999, 0.45889158855099998, -0.67243766066699995, 2.6881017757299999, 0.113257266309]
&amp;gt;&amp;gt;&amp;gt; print client.rnorm(3)
[-0.16610789340500001, 0.66591497139099998, -1.74812066455]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;参考&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://rpy.sourceforge.net/rpy2/doc/html/index.html"&gt;Documentation for rpy2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.optio.webfactional.com/wiki/soaplib"&gt;soaplib&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Sat, 11 Apr 2009 14:06:01 +0919</pubDate><category>R</category><category>rpy</category><category>Python</category></item><item><title>rpy</title><link>http://blog.kzfmix.com/entry/1157971593</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1155856115"&gt;Statistics::RもRSPerlもイマイチ&lt;/a&gt;感が強かったので、&lt;a href="http://rpy.sourceforge.net/"&gt;rpy&lt;/a&gt;を使い始めているが、こんなに便利とは思わなかった。&lt;/p&gt;
&lt;p&gt;というわけで、rpyで主成分分析を行い、できたモデルで新しいデータの主成分を求めてみるというサンプルを。
　今回はrpyのテストなのでデータはrnormで作った。普通バイオインフォとかケモインフォなパターンだと、遺伝子の発現レベルとか、化合物のディスクリプターを使うけど。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rpy&lt;/span&gt; &lt;span class="nb"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;stats&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rnorm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rnorm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;with_mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NO_CONVERSION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prcomp&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Robj&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mh"&gt;0xb7f9f1c0&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt; &lt;span class="mf"&gt;0.28817526&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.20038126&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;0.42937523&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mf"&gt;0.76682094&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.38050702&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;0.24898564&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.28308137&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.51609132&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;0.12062971&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.68531169&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;1.42599763&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;0.03987597&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.35685327&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;0.02394946&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.03868517&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;と数行ほどで、予測したいデータセットの主成分がpythonのarray型で返ってくるので、このあとの処理が凄く楽チンになる。&lt;/p&gt;
&lt;p&gt;rpyはデータのコンバージョンのやり方だけきちっと押さえておけばあとはRと一緒に扱えるのだが、コンバージョンのモードが色々あって、初めのほうは悩まされることが多かった。特にモデルをRで適用する場合、python形式にコンバートしてしまうとRで扱えなくなってしまうのでNO_CONVERSIONモードにしないといけない。&lt;/p&gt;</description><pubDate>Mon, 11 Sep 2006 19:46:33 +0919</pubDate><category>R</category><category>rpy</category><category>Python</category></item></channel></rss>