04092009 OCaml
実行ファイルの一行目に
#!/usr/local/bin/ocamlrun
って書いてあるで、って書いてあったので確かめた。
ほう。
04092009 OCaml
03092009 OCaml
最近、表記の本(オンライン)を読みはじめた。
Functional core of Objective CAMLより。
fun a b c d e -> expr
は
function a -> function b -> function c .... -> expr
と一緒らしい。
あーカリー化ってのは結局そういうことなのかと。
多値nをとる関数でなくて引数を一つとってゴニョゴニョする関数を返すから、結局カリー化ってのは自然に導かれんのかと。
って、ふつうのHaskellにも書いてあったな。
03092009 chemoinformatics Python
化学構造の類似度を測るフィンガープリントで部分構造由来のものには2種類あって、ビットにパターンが対応しているものと、そうでないもの。
後者はハッシュ関数とかを使って動的に生成するのでビットの密度の効率が良いが、結局解釈できなくて困ることが多い。
02092009 chemoinformatics R
久々にケモインフォクックブックを更新した。
で、このフィンガープリント使って予測モデルを作ってみる。
Benchmark Data Set for in Silico Prediction of Ames Mutagenicity のSupporting InformationにAmes試験のデータセットがあるのでこれを使ってcsvを用意する。
babel -ismi ci900161g_si_001/smiles_cas_N6512.smi -ofpt ci900161g.fpt -xh -xfFP2
これでfptファイルを用意してクックブックので変換。
f2b.py ci900161g.fpt > fingerprint.txt
さらにフィンガープリントをcsvにするのは下のやっつけスクリプトで。
file = "ci900161g_si_001/smiles_cas_N6512.smi"
dic = {"0":"negative","1":"positive"}
act = {}
for l in open(file,"r"):
smi,id,num = l.split()
act[id] = dic[num]
fingerprints_file = "fingerprint.txt"
header = "ID,"
for i in range(1,1025):
header += "bit" + str(i) + ","
header += "act"
print header
for l in open(fingerprints_file, "r"):
col = ""
id, fp = l.split()
col += "\"" +id + "\","
for c in fp:
col += c + ","
col += "\"" + act[id] + "\""
print col
実行
python fconv.py > ci900161g.csv
でRで解析してみる。
ames <- read.csv("/Users/kzfm/ci900161g.csv")
set.seed(50)
tr.num <- sample(6512,2500)
ames.train <- ames[tr.num,]
ames.test <- ames[-tr.num,]
ames.svm <- ksvm(act ~.,data=ames.train[,-1])
ames.pre <- predict(ames.svm, ames.test[,c(-1,-1026)])
ames.tab <- table(ames.test[,1026],ames.pre)
sum(diag(ames.tab))/sum(ames.tab)
結果
> sum(diag(ames.tab))/sum(ames.tab)
[1] 0.7771685
> ames.tab
ames.pre
negative positive
negative 1424 425
positive 469 1694
まぁまあかなぁ。フィンガープリントとかカーネルを考えればもうちょっと精度が上がる気もするが。
参考
01092009 chemoinformatics
第一部を読んだ。
Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimizationこれはなかなか名著の予感がしますな。(DMPKやin silicoから見ると)ちょっと浅い気もするが、メディシナルケミスト向けの本だったらこのぐらい押さえておけばいいのかもしれない(というかこの本の内容理解してるケミストって数人しか知らんけど)。
LeadOptimizationから前臨床のあたりのin vivoにおいてどういったパラメータに気をつけながら合成をするか的な内容なので、コンピュテーショナルなヒトだとEkinsなんかを併せて読んだほうがいいかもしれない。
Computer Applications in Pharmaceutical Research and Development (Wiley Series in Drug Discovery and Development)01092009 OCaml
どう書くのバイナリクロックの問題をOCamlで
プリントするとこで小一時間悩んだ。で、アレイをハッシュみたいに使ってしまった。
let itobin i =
if i == 0 then [0]
else
let rec itob l i = match i with
0 -> 1::l
| 1 -> 1::l
| _ -> itob ((i mod 2)::l) (i/2)
in itob [] i
;;
let rec padding l =
if (List.length l) < 6 then padding (0::l)
else l
;;
let format_print l =
let d = [|"□";"■"|] in
let rec square_print l = match l with
[] -> print_string "\n"
| s::r -> print_string d.(s);
square_print r
in square_print l
;;
let () =
let t = Unix.localtime(Unix.time()) in
format_print (padding (itobin t.Unix.tm_hour));
format_print (padding (itobin t.Unix.tm_min))
;;
コンパイルして実行
$ocamlc unix.cma binary_clock.ml -o binary_clock
$ ./binary_clock
□■□■□■
□■■□□□
31082009 music
今回ちょっとテクノっぽいが、これも良い
31082009 life
LLTVの帰りのバスで。
7章から後ろが良かった。特にモバイルの技術が面白かった。うちはperlでシステム組んでいるのでアレ使ってみよとかこれ置き換えてみよとか色々参考になった。
あと、ぐっときたのは、「はじめに」の次のことば
それら知的財産を生み出した技術者こそに価値があるのだと考えています
30082009 OCaml
29082009 life
LLTVに向かうバスの中で読んだ。
一章が秀逸。で4章くらいまで楽しく読めた。そっから先は数学チック過ぎたので読み流した。が、一章のテーラーの定理とマクローリン展開は素晴らしかった。
dx,dyのイメージもつかめた。