ダブっていうか、ジャングルよりな気が。ラガな感じの、she's goneとかShout Ballout (Ray Keith Remix)なんかが気持ちヨサゲ。
Blade Runnerの曲も古き良きっていうか、loving youなんかはアートコア目が強くて好き。なんといってもアートコアは浮遊感がね。あと1.5Kってのもお買い得感が高め。
ダブっていうか、ジャングルよりな気が。ラガな感じの、she's goneとかShout Ballout (Ray Keith Remix)なんかが気持ちヨサゲ。
Blade Runnerの曲も古き良きっていうか、loving youなんかはアートコア目が強くて好き。なんといってもアートコアは浮遊感がね。あと1.5Kってのもお買い得感が高め。
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モードにしないといけない。
最近pythonに真面目に取り組んでいるので、Meadowにもpython-modeを入れた。
;;;Add python mode (setq auto-mode-alist (cons '("\.py$" . python-mode) auto-mode-alist)) (setq interpreter-mode-alist (cons '("python" . python-mode) interpreter-mode-alist)) (autoload 'python-mode "python-mode" "Python editing mode" t)
07092006 chemoinformatics openbabel
openbabelの分子重ね合わせツールのobfitをperlのモジュールにできんもんかな?とソース(C++)を眺めていたら、QTRFIT というアルゴリズム(実装はC++)を使っているようだ。
結局最大の重ねあわせを求めるのを固有値問題に落とし込んでるようだ。
The eigenvector associated with the largest eigenvalue gives the desired quaternion. To generate a rotation matrix we consider the effects of the quaternion on the cartesian unit vectors
で、それをJacobi法で解いていると。感覚的にはそうなんだろなぁと思うが、ここら辺の理解度はちょっとあやしい。
07092006 R
Rをネットワークで使うには、CGIwithRで十分だろうと考えていたが、まぁいろいろあって(単にSOAPいじりたくなっただけともいう)RSOAPを入れてみることにした。
正直なところがパイソンいじったことがないので、ちょっと避けてたのもあるヨ。
用意するものは結構多い
まずRはrpyのために--enable-R-shlibオプションをつけてインストールしなければならない。ということで勢いtarボールから。
#./configure --enable-R-shlib #make #make install
いやー、Rのコンパイルは長い。RH4xあたりでのカーネルコンパイルくらい(古い?)こんなにかかるとは思わず、昨晩makeしたら、U隊長に大不評(僕のマシンは寝室においてあるので排気音とガリガリ音がうるさい)。で朝起きてからセッションいれとく。
#R CMD INSTALL session_1.0.1.tar.gz
tar xvfz して、パイソン関係のモジュールを順番に入れます。
#python setup.py build #su #python setup.py install
rpy だけちょっとメンドイ。まず、libR.soへのパスを通す。READMEだとbinに通してるけどlibでしょ。
#su #vi /etc/ld.so.conf ## /usr/local/lib/R/lib を記述 #ldconfig
ちなみに、setup.py も適当に書き換えないといけなかったりする場合もあるよ。-lR が見つからんぜよみたいなエラーの場合は、setup.py中の記述のbinをlibに変えるといい(まぁすぐわかる)。あとRのライブラリもtar xvfzする。僕の場合はR-2.1.0なので、
#tar xvfz R-2.1.0.tar.gz R-2.1.0/src/include #su #python setup.py install
最後にRSOAPのインストールは、普通
#python setup.py build #su #python setup.py install
ローカルでテストしたかったら、SimpleExample.pyというのを探してきて、ホスト名をlocalhostに書き換えておく。
#su #RSOAPManager
で、サーバーを立ち上げといて、別の端末から
#python SimpleExample.py
結果が戻ってくればOK
TCP/IPでやりたければ
#su #RSOAPManager --tcp-ip
ここまではうまくいったヨ。今朝、作業したわりには記憶が曖昧なので順番が前後してるかもしれん。
06092006 perl bioinformatics Python bioperl
みんなのpythonも読んだし、フレームワークでも試してみるかと、djangoとかTurbogearsに手をだしたら、火傷した。
djangoは一通りサンプル動作をさせることができたけど、Turbogearsはコントローラのあたりからさっぱりわからん。
いきなりフレームワークは無謀すぎたかなということで、Biopythonでも入れて、もう少しpython慣れすることに。
easy_install numpy wget http://www.egenix.com/files/python/egenix-mx-base-2.0.6.tar.gz python setup.py install svn co http://www.reportlab.co.uk/svn/public/reportlab/trunk python setup.py install wget http://biopython.org/DIST/biopython-1.42.tar.gz python setup.py install
easy_installはperlでいうところのcpanコマンドみたいで楽チンです(ちゃんと動けば)。動かないのは地味にダウンロード、展開、setup.pyを行なった。
さて、インストールも無事に終了したところで、bioperlと比べてみた。比較したのはpdbファイルの処理。というのは、FMO用のインプット作るときに使っているPDBパーザーつまりBio::Structure::IOがやたらと遅く、不満だったからというありがちな理由。
コードはこんな感じで、1fatっていうpdbファイル読み込んでCalphaを出力してみた。
python
from Bio.PDB.PDBParser import PDBParser parser=PDBParser(PERMISSIVE=1) structure=parser.get_structure("1fat", "1fat.pdb") for model in structure.get_list(): for chain in model.get_list(): for residue in chain.get_list(): if residue.has_id("CA"): ca_atom=residue["CA"] print ca_atom.get_coord()
perl
use strict; use Bio::Structure::IO; my $pdb_file = "1fat.pdb"; my $structio = Bio::Structure::IO->new(-file => "$pdb_file", -format => 'PDB'); my $struc = $structio->next_structure; for my $chain ($struc->get_chains) { for my $res ($struc->get_residues($chain)) { for my $atom ($struc->get_atoms($res)) { print join " ",$atom->xyz,"\n" if $atom->pdb_atomname eq " CA "; } } }
で、ベンチマーク
$ time python test.py real 0m1.161s user 0m0.996s sys 0m0.116s $ time perl pdbtest.pl real 0m3.183s user 0m3.056s sys 0m0.044s
平均とってないけど、何回か実行してみてもpythonのほうがbioperlよりも3倍くらい速かった。bioperlのコードってなんだかなと思うことがままある。pdb_atomnameなんかも4文字で前後にスペース入ってるし。というわけで、SBDD周りのプログラミングはbiopythonのほうが扱いやすい感じがしてる。
余談だが、Turbogears普通に触れる程度までpython覚えてやる(意地でも)とか思ったので、Dive Into Pythonも読み中。
05092006 ups
雷の多い今日この頃。そろそろ台風までバンバンやってくるわけで、subversion使ってin houseでコードのバージョン管理してたり、davでデータのやり取りしている今の状況では、自宅サーバーが落ちるのはかなり困る。
というわけで、家にもUPSを導入することにした。
とりあえず、家庭の財布に優しく10Kぐらいには押さえたい(制約というよりは規約と言っときたい)わけで、おのずと候補はAPC ES 500かOMRON BZ50T のどちらかに絞られた。
まず、最初の選択肢は職場でも使ってるAPC社のES 500。フリーのUPS管理ソフトのapcupsdなんかはインストール慣れしてるし。でもES 500ってバッテリ交換も回収ないらしい、何でじゃ?バッテリの処分は結構面倒なので、うーん困る。
対するBZ50Tは約3kgと軽めだが(重いほうが心理的な安心感がある)、バッテリの交換にも対応している。ただし、Linux用のシャットダウンソフトがないのがちょっとな。ドライバなんか用意すればいいのにとか思ったりするが、SOHO向けなのかな?
結局
という理由により、BZ50Tを購入
04092006 apache
tracとかwiki用に新しいホスト名が欲しくてバーチャルホストを導入することにした。
apachectlだと、構文が正しいかどうかだけしかわからないが、
httpd -S
で、VirtualHostの設定状況を調べることができる。
興味ベースだけならpoundとかも触ってみたい気もするが。
04092006 perl
plaggerとeijiro.plのソース眺めててFindBinとFile::Specの使い方を学んだ。
use FindBin; use File::Spec; use lib File::Spec->catdir($FindBin::Bin, '..', 'lib');
$FindBin::Binで実行されたスクリプトのpathを取得しておいて、File::SpecでOSに依存しないようにパスの組み立てをする。
確かに、use libと組み合わせて使うとスマートだ。
ちなみに、このスペックのマシンで、eijiro.pl用の内部データを作成するのに8時間ほどかかったが、コマンドラインでも辞書引けると何かと便利。