01072016 life
肉まんの具に新たなアイデアを取り入れたいと思い読んでみた。
中華系の饅頭はイーストでの発酵で膨らますのに対しおやきはベーキングパウダーか(もしくは入れない)という感じらしい。
具材にナスはそそられる。あとリンゴとクリームチーズとか。あとはアンコとバナナ
松本に行ったら寄りたい店があった。
01072016 life
30062016 Python
いつもMemoryしか使ってないんだけど、dump, load使ってみたら便利だったので次回からはこっち使う。
例えばpickleを使って永続化する場合
import pickle test_dict = {"one": 1, "two": 2, "three": 3} with open("test.dump2", mode='wb') as f: pickle.dump(test_dict, f) with open("test.dump2", mode='rb') as f: print pickle.load(f)
と書かなきゃいけないところをjoblibだと
import joblib test_dict = {"one": 1, "two": 2, "three": 3} joblib.dump(test_dict, "test.dump") print joblib.load("test.dump")
と書けるわけです。素敵。
29062016 macbook
起動する度に出るのは嫌なので、探ったらここと一緒の部分だった。
多分このmacbookに「バッテリーの交換修理」という警告が出ているせいだろう…
そろそろ4年目だし、買い替えたいなぁ。でも新モデルまだでないんだよねー
29062016 macbook
職場のLinuxはzsh使っているんだけど、家のmacはbashを使っている。そしてこんな感じの設定をして快適に使っていたがEl Capitanにアップグレードしたらhistoryが効かなくなった(相当前のことだけど)
最近まであまりコード書いてなかったから不便はあってもイラつくことはなかったけど、コード書き始めるとこれが気になって気になって仕方ないw
ホームディレクトリに.bash_sessions_disableっていうファイルを作ればいいらしい。
つまり
touch ~/.bash_sessions_disable
って打つだけ。あとはターミナルを新規に開けばOK
なんじゃそりゃ
28062016 life
27062016 Python
requests+pyqueryで文字列の扱いに悩まされるのは主に二箇所ある。そしてその組み合わせのエラーが出るので悩ましい。
requestsでcontentとtextの違いはtextはr.encodingでdecodeされたunicode文字列だということだ。なので正しくデコードされたunicode文字列を推定できればrequestsでの文字化け問題は解決する
だが常にunicode文字列をpyqueryに渡せばOKかというとそうでもない。
常にUnicode文字列を渡すようにすると Unicode strings with encoding declaration are not supported. というエラーが散見されるようになる。これはpyqueryが内部的に使っているlxmlがヘッダーにエンコーディングが指定しているHTMLを渡すとそれにあわせてデコードしようとするらしく、既にユニコード文字列化されたHTMLもその作法にしたがってエラーになるというものだ。
というわけでこの場合はもとのstr文字列を渡さないといけないらしい。
これが結構面倒くさい。requestsでヘッダーにエンコーディングが指定されているかどうか知るオプションあるんかね?
26062016 life
なったというか現在進行形だが。
金曜日の深夜に痛みで起きてからほとんど眠れなかった。次の日の朝に診察してもらったけど、初期の虫垂炎だった。初期であの痛みってことは進行したらどんだけキツイんだろうか?
医者には切除を薦められたけどとりあえず薬で散らす方向で様子を見ることにした。
治らないようだったら入院だろうから、読書用の小説とかたくさん買っておこうかなぁと。
「僕だけがいない街」のさわりが知りたくて1巻を買って読んだらいつの間にか全巻揃えていてしかも読みきっていたという…
Kindle恐るべし
22062016 京都
21062016 chemoinformatics deeplearning
先日Deep Learning創薬の駄文をのせてみたが、
深いニューラルネットワークで特徴抽出っていうのが、chemoinformaticsの文脈だと「フラグメントからファーマコフフォア構築」というのはその通りだと思うんだけど、それがBoW的なECFP4みたいなフィンガープリントでいいのだろうか?pharmacophoreとかCoMFA,CoMSIAみたいな表現に向かうような記述子で出発しないといけないんじゃないかなーと思う
以前@iwatobipenが触れていたNeuralFingerPrintもECFPの特徴抽出プロセスと類似の方法で距離を考慮してないからファーマコフォアにはいたらないと思う。精度がいいのは分散表現のところではないかなぁと思っている(つまり以下の説明)。
Standard fingerprints encode each possible fragment completely distinctly, with no notion of similarity between fragments. In contrast, each feature of a neural graph fingerprint can be activated by similar but distinct molecular fragments, making the feature representation more meaningful.
実際溶解性みたいな分子全体の特徴が重要な場合の予測は非常に改善されているが、薬理活性みたいな分子認識が重要なファクターになっているものはあんまり改善してないように思う。GitHubに実装があるし、精度もいいから予測モデル作る場合にはこれを使うけどね。
ここらへんも似た感じだと思う。如何にもトキシコフォアとかファーマコフォアが学習されるようなFigureが載ってるけど、Catalystとか使ってファーマコフォアモデルを組み立てたり、ドッキングシミュレーションをやりまくった経験からはこれは誤解されそうな説明だなぁと思った。
で本題。最近Molecular Graph Convolutions: Moving Beyond Fingerprintsという意欲作を読んで感動した。
ここまで書いたら中身の説明を書くのに疲れちゃったので興味のある方は是非読みましょう。著者もGoogleとStanfordの人だし、pubmedで出てこなかったらノーマークだったわ。
化合物(グラフとしての)の不変性を獲得するようなCNNのやり方参考になったがプーリングがsumっていうのがそれでいいのかなぁと思った。
f is a learned linear operator with a rectified linear activation function and g is a sum.
ファーマコフォアが記述できるようなDNNの方法ができれば、精度上がるだろうから、測定データさえ増やせるのなら有望じゃないかと思う。
さらにその結果からドッキングシミュレーションの評価関数を作れるだろうから、それを使ってリードホッピングにトライしてもいいから夢が広がる。
ドッキングの精度が高ければモデルでFMO実行してもそれなりに正しそうな結果が出るだろうから、結晶に頼らなくてもモデリングでいけそうだしな。
14062016 Python
企業のプレスリリースをテキストマイニングしようと思うと色々大変なわけだ。そもそもプレスリリースの媒体がpdfを想定されているために、タイトルのみ本文無しという潔いRSSが多いしそういうのは購読しても嬉しくない。
というわけでプレスリリース一覧のページからpdfのURLを抜き出してpdfminerかましてデータ抽出やらないといけないしそっちのほうが逆に構造化されていてスクレイプしやすかったりする。
で、PyQueryを使ってガリガリやっていたのだが、何故かスクレイプできないサイトがあった。BeautifulSoupではちゃんとスクレイピング出来たのでエラーの原因が気になって調べてみたのでメモっておく
普通にrequestsでHTMLを取ってきてPyQueryに渡してやると :::sh >>> from pyquery import PyQuery as pq >>> import requests >>> tgpr = "http://www.transgenic.co.jp/pressrelease/" >>> d1 = pq(requests.get(tgpr).content) >>> d1 [<{http://www.w3.org/1999/xhtml}html>] >>> d1("a") []
aタグが一件も見つからない。しかし、urlオプションに直接サイトのURLを指定するときちんとparseされている
>>> pq(url="http://www.transgenic.co.jp/pressrelease/") [<html>] >>> d2 = pq(url="http://www.transgenic.co.jp/pressrelease/") >>> len(d2("a")) 71
なんだこれは?となったのでドキュメントを漁ったらxmlパーサーでパースしてみてだめだったらhtmlパーサー使うぜって書いてあったので強引にxmlパーサーでparseさせてみた。
>>> d3 = pq(url="http://www.transgenic.co.jp/pressrelease/", parser="xml") >>> d3 [<{http://www.w3.org/1999/xhtml}html>] >>> len(d3("a")) 0
というわけで文字列を渡すときにはなぜかhtmlのパーサーでparseされていないっぽい。これはコードを追うべきですな。
67行目のetree.XMLSyntaxErrorという例外が投げられてないのではないかということになった。
まぁ別にわざわざrequests使う必要もないのでurlオプションにURL渡せばいいんだけどね。