OCamlのファイルアクセス

openfileとかopen_outとかopen_out_genとか色々あるので混乱する。

let file = Sys.argv.(1) in 
let f = try open_out_gen [Open_wronly; Open_creat; Open_trunc; Open_text] 0o600 file
with Sys_error msg -> failwith ("Couldn't write to " ^ msg) in 
output_string f "OCaml\n";close_out f;;

どう書く?org:ACLの制御

ocamlcで吐いたバイトコード

Standalone Executables

実行ファイルの一行目に

#!/usr/local/bin/ocamlrun

って書いてあるで、って書いてあったので確かめた。

ほう。

Developping application with Objective Caml

最近、表記の本(オンライン)を読みはじめた。

Functional core of Objective CAMLより。

fun a b c d e -> expr

function a -> function b -> function c .... -> expr

と一緒らしい。

あーカリー化ってのは結局そういうことなのかと。

多値nをとる関数でなくて引数を一つとってゴニョゴニョする関数を返すから、結局カリー化ってのは自然に導かれんのかと。

って、ふつうのHaskellにも書いてあったな。

パターンベースのフィンガープリント

化学構造の類似度を測るフィンガープリントで部分構造由来のものには2種類あって、ビットにパターンが対応しているものと、そうでないもの。

後者はハッシュ関数とかを使って動的に生成するのでビットの密度の効率が良いが、結局解釈できなくて困ることが多い。

で、前者を解釈しましょうっていうスレッドがあったので書いてみた

ProductName ケモインフォマティックス―予測と設計のための化学情報学
J.Gasteiger,T.Engel
丸善 / ¥ 18,900 ()
在庫あり。

openbabelのフィンガープリントを使ってSVMの予測モデルを作る

久々にケモインフォクックブックを更新した。

で、このフィンガープリント使って予測モデルを作ってみる。

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

まぁまあかなぁ。フィンガープリントとかカーネルを考えればもうちょっと精度が上がる気もするが。

参考

ProductName マシンラーニング (Rで学ぶデータサイエンス 6)
辻谷 将明,竹澤 邦夫
共立出版 / ¥ 3,675 ()
通常1~2か月以内に発送

Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization

第一部を読んだ。

ProductName Drug-like Properties: Concepts, Structure Design and Methods: from ADME to Toxicity Optimization
Edward Kerns,Li Di
Academic Press / ¥ 9,048 ()
在庫あり。

これはなかなか名著の予感がしますな。(DMPKやin silicoから見ると)ちょっと浅い気もするが、メディシナルケミスト向けの本だったらこのぐらい押さえておけばいいのかもしれない(というかこの本の内容理解してるケミストって数人しか知らんけど)。

LeadOptimizationから前臨床のあたりのin vivoにおいてどういったパラメータに気をつけながら合成をするか的な内容なので、コンピュテーショナルなヒトだとEkinsなんかを併せて読んだほうがいいかもしれない。

バイナリクロック

どう書くのバイナリクロックの問題を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 
□■□■□■
□■■□□□

Silicon Soul / Silicon Soul

今回ちょっとテクノっぽいが、これも良い

ProductName SILICONE SOUL
SILICONE SOUL
SOMA/OCTAVE-LAB / ¥ 2,678 (2009-06-24)
在庫あり。

「4Gbpsを超えるWebサービス構築術」を読んだ

LLTVの帰りのバスで。

ProductName 4Gbpsを超えるWebサービス構築術
伊勢 幸一,池邉 智洋,栗原 由樹,山下 拓也,谷口 公一,井原 郁央
ソフトバンククリエイティブ / ¥ 2,709 ()
在庫あり。

7章から後ろが良かった。特にモバイルの技術が面白かった。うちはperlでシステム組んでいるのでアレ使ってみよとかこれ置き換えてみよとか色々参考になった。

あと、ぐっときたのは、「はじめに」の次のことば

それら知的財産を生み出した技術者こそに価値があるのだと考えています

OCaml Meeting Tokyo 2009にいった

LLTVにつづき参加。運営の皆様おつかれさまでした。

五十嵐さんのML型推論の光と影の話と、古瀬さんの大駱駝解軆變造概説が特におもしろかった。OCamlのソースも眺める。

  • mzpさんに会った。
  • OCamlは日本酒派が多そう?(私見)
    • OCaml正宗とか語呂が良さげ
  • 開催場所の山上会館と安田講堂を混同していて、かなりロスった。

  • 食べログ

    • 中野大勝軒でつけ麺(29昼)
    • 上野龍門でつけ麺(29夜)
    • 本郷ミュンで鳥カレー(30昼)
    • テツジ?のたいやきとモンシュシュのロールケーキ(30お土産)