Fraction of CSP3

先週末はあるソフトのユーザー会に参加してきました。
参加者、プレゼンターの皆様おつかれさまでした。
木曜のセッション、金曜のセッションともに勉強させてもらいました。
CI( continuous integration)の考え方は自分にとっては新しい考え方だったし興味深いなあと思いました。勉強しよー。
 また、生産性の考え方、エンドユーザーのスキルアップ、教育など多くの議論が活発でしたし、いつも得るものが多くていいですね。色々と考えさせられました。ポスターでは皆さん話しかけて下さりありがたい限りです。
 さて懇親会でfSP3の話になってRDKITで行けまっせっていう流れになったのでちょっとコードを乗っけてみます。RDKitのDesicriptorクラスからいけるのでこんな感じでよいかと。
単発の場合、、、

from rdkit import Chem
from rdkit.Chem import Descriptors
mol = Chem.MolFromSmiles("c1ccccc1")
mol2=Chem.MolFromSmiles("Cc1ccccc1")
Descriptors.FractionCSP3(mol)
 > 0.0
Descriptors.FractionCSP3(mol2)
 > 0.14285714285714285

SDFを扱う場合は
SDMolSupplierを使ってもいいのですが
今回はpandasを使ってみます。
sdfは適当にpubchemからとってきました。
lambdaとapply組み合わせると
ループいらないのでコードがすっきりしますね。

from rdkit import Chem
from rdkit.Chem import Descriptors
from rdkit.Chem import PandasTools
fsp3 = lambda mol : Descriptors.FractionCSP3(mol) # 計算式定義
#  計算してみる
df = PandasTools.LoadSDF("pubchem.sdf")

#  ipython notebookなのでtimeを使って計測してみると

df["fsp3"] = df.ROMol.apply(fsp3)
>CPU times: user 4.51 ms, sys: 429 µs, total: 4.94 ms
>Wall time: 4.82 ms
df.fsp3

Out[17]:
0     0.0625
1     0.0625
2     0.0625
3     0.0625
4     0.0625
5     0.0625
6     0.0625
7     0.0625
8     0.0625
9     0.0625
10    0.0625
11    0.0625
12    0.0625
13    0.0625
14    0.0625
...
542    0.117647
543    0.062500
544    0.052632
545    0.052632
546    0.052632
547    0.052632
548    0.062500
549    0.117647
550    0.250000
551    0.250000
552    0.166667
553    0.117647
554    0.062500
555    0.062500
556    0.062500
Name: fsp3, Length: 557, dtype: float64
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s