14022010 music
ドープ目。
- Girl I Love You
- Psyche
- Saturday Come Slow
- Atlas Air
あたりが好き。
14022010 music
ドープ目。
あたりが好き。
14022010 life
手元に置いておきたい
13022010 chemoinformatics
chemoinformaticsな用途でbayonを使ってみる。
データセットはPrimary screen for compounds that inhibit Insulin promoter activity in TRM-6 cells.でアクティブだった1153検体
ダウンロードしてきたsdfをopenbabelでフィンガープリントに変換
babel -imol pc_sample.sdf -ofpt pc_sample.fpt -xh -xfFP2
これをbayonでクラスタリングにするためのTSVに変換
python f2bayon.py pc_sample.fpt > pc_sample.tsv
f2bayon.pyのソース
def hex2bin(fingerprint):
bf = ""
h2b = {"0":"0000","1":"0001","2":"0010","3":"0011",
"4":"0100","5":"0101","6":"0110","7":"0111",
"8":"1000","9":"1001","a":"1010","b":"1011",
"c":"1100","d":"1101","e":"1110","f":"1111",
}
for l in fingerprint:
for c in l:
b = h2b.get(c)
if b: bf += b
return bf
def convert(file):
result = ""
for data in open(file,"r").read().split("\n>"):
fp = ""
for list in data.split("\n")[1:]:
fp += hex2bin(list)
result += data.split("\n")[0].split(" ")[0] + " " + fp + "\n"
return result
if __name__ == "__main__":
import sys
file = sys.argv[1]
c = convert(file)
for l in c.split("\n")[:-1]:
id,fp = l.split()
fps = ""
for num,bit in enumerate(fp):
if int(bit) > 0:
fps += "\t%d\t%s" % (num,bit)
print id + fps
でbayonで10クラスターに分割
$ time bayon -n 10 pc_sample.tsv > pc_sample.clust
real 0m0.859s
user 0m0.839s
sys 0m0.015s
超速い。
13022010 Haskell
Arrowを学ぶ。Programming with Arrowsを読んでから、「Arrowのはなし」というニコニコ動画をみるのがわかりやすい。イメージは3番目が参考になる。
Arrowを使って奇数列を作ってみる。 0から始まる数列を&&&で分岐させて一方はそのまま戻して、もう一方はtailすることで1から始まる数列にして、合流したら足し合わせる。
Prelude Control.Arrow> let odds = (tail) &&& id >>> (uncurry (zipWith (+))) Prelude Control.Arrow> take 10 $ odds [0,1..] [1,3,5,7,9,11,13,15,17,19]
他、参考にしたサイト
RWHではArrowは15.4.2にちょっとだけ触れられている。
blogの内容をわかりやすくまとめた感じだけど、会社勤めの20代30代は必読的な内容。いや、ホント。
成果主義+裁量労働とってる会社で組合の存在って意味あんのとか思ってるし、実際会合とかももう数年以上出てない。あいつらは社員の仕事の能力はそんなに変わらないから給料の最低と最高のレンジを20%以下に抑えろとか平気で言うし。あと、組合頑張るやつって基本大した仕事しないわりに、組合の役員やるのが昇進の道とか本気で信じてるし。
生涯賃金のピークがあと4,5年で来そうなのはわかりきってんのに、仕事の難度のピークがそれよりずっと先にある状況ってみんなおかしいって感じないのかな。そこらへん、やりがいとかでかたづけるのはぶっちゃけ暴論だろう。
今の30代くらいは、バブル世代の年功序列組(の使えないほう、使える組はとっとと偉くなってる)とガチでぶつかるんだけど、彼らのケツ拭きをしつつも、彼らのほうが給料が多いという状況を認識しないといけない。で、僕らが同じように下の世代にツケを回せるかというと絶対無理でしょう。
じゃぁ、辞めて移れば?となるんだけど、本書にも触れられているように、それはなかなか難しい気がする。あと、僕のいる業界はどこも似たような状況なんで、世代的に、年功序列と成果主義が中途半端に混じった状態のとこが多い気がする。
でも、だからといって現状に甘んじていることの言い訳にはならないんだよなぁ。というわけで、少し前向きに色々考えているんだけどねぇ。
13022010 Haskell
bindの使い方メモ
import System.Environment
cat:: String -> IO ()
cat = (>>= putStr) . readFile
main = do (file:_) <- getArgs; cat file
コメントよりheadを使えば一行で書ける。
main=getArgs>>=readFile.head>>=putStr
11022010 music
予約した
11022010 Python
Haskellな気分で。最後while入れたけど。
from itertools import groupby
from math import sqrt
zipWith = lambda f, xs, ys : [f(x, y) for x,y in zip(xs, ys)]
snd = lambda x: x[1]
fst = lambda x: x[0]
euclid = lambda x, y : (x-y)**2
def distance(a,b):
return sqrt(sum(zipWith(euclid,a,b)))
def centroid(clusters):
sums = reduce(lambda x,y: zipWith(lambda a,b:a+b,x,y),clusters)
return map(lambda x: x / float(len(clusters)), sums)
def closest(pts, pt):
closest_ct = pts[0]
for ct in pts[1:]:
if distance(pt,closest_ct) > distance(pt,ct):
closest_ct = ct
return closest_ct
def recluster_(centroids,points):
reclustered = [(closest(centroids,a), a) for a in points]
reclustered.sort()
return [map(snd,list(g)) for k, g in groupby(reclustered, fst)]
def recluster(clusters):
centroids = map(centroid, clusters)
concated_clusters = reduce(lambda a,b: a+b, clusters)
return recluster_(centroids,concated_clusters)
def part(l,points):
size = len(l)/points
return [l[i:i+size] for i in range(0,len(l),size)]
def kmeans(k,points):
cluster = part(k,points)
newcluster = recluster(cluster)
while(cluster != newcluster):
cluster = newcluster
newcluster = recluster(cluster)
return newcluster
if __name__ == "__main__":
pts = [[1,2,4],[1,3,3],[4,3,0],[2,5,1],[7,3,8],[0,0,0],[4,3,2],[6,1,8]]
print kmeans(pts,3)