どこから見てもメンダコ

軟体動物門頭足綱八腕類メンダコ科

RDkitでSMILESからSDFの作成

SDF形式にすることで、立体構造を要求する処理が可能になるのはもちろんですが、目的変数と化合物構造を紐づけておくことができるので間違いが起こりにくいという利点があります。

サンプルデータ

例のごとくdeepchem付属のdelaney水溶解度データセットを使用します

import pandas as pd

csv = "./datasets/delaney-processed.csv"
df = pd.read_csv(csv)
df.columns
Index(['Compound ID', 'ESOL predicted log solubility in mols per litre',
       'Minimum Degree', 'Molecular Weight', 'Number of H-Bond Donors',
       'Number of Rings', 'Number of Rotatable Bonds', 'Polar Surface Area',
       'measured log solubility in mols per litre', 'smiles'],
      dtype='object')

準備

smiles形式からMolオブジェクトを作成し、2D構造を付加します。
ついでに水素付加しておきます。

from rdkit import Chem
from rdkit.Chem import AllChem


names = df["Compound ID"]
sol_exps = df["measured log solubility in mols per litre"]
smiles = df["smiles"]


mols = [Chem.MolFromSmiles(smile) for smile in smiles]
for mol in mols:
    #水素付加
    Chem.AddHs(mol)
    #2D構造
    AllChem.Compute2DCoords(mol)

マルチSDファイルの作成

化学構造と共に、SetProp(プロパティ名、値)で化合物名と水溶解度を書き込みます。 プロパティ名を"_Name"にする場合は特別で、titleと認識され一行目に書き込まれます。

writer = Chem.SDWriter("delaney_multi.sdf")

for (mol,name,sol_exp) in zip(mols,names,sol_exps):
    mol.SetProp("_Name",name)
    mol.SetProp("sol_exp",str(sol_exp))
    writer.write(mol)

writer.close()

出力結果

Amigdalin
     RDKit          2D

 32 34  0  0  0  0  0  0  0  0999 V2000
    6.6263   -2.1956    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    6.8271   -0.7091    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    5.6401    0.2080    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    4.2524   -0.3614    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    3.0654    0.5557    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.6777   -0.0137    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    1.4769   -1.5002    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0892   -2.0696    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.0978   -1.1525    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
   -2.4855   -1.7219    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -3.6725   -0.8048    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
   -3.4718    0.6817    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.0840    1.2511    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.6963    1.8205    0.0000 N   0  0  0  0  0  0  0  0  0  0  0  0
   -4.6588    1.5988    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -4.4580    3.0853    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -5.6450    4.0024    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -7.0327    3.4330    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -7.2335    1.9464    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -6.0465    1.0294    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.6862   -3.2084    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -4.0740   -3.7779    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
   -1.4993   -4.1255    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7000   -5.6120    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
   -0.1115   -3.5561    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.0754   -4.4732    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    3.2661    2.0422    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.0791    2.9593    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    4.6538    2.6116    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    4.8546    4.0981    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    5.8408    1.6945    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    7.2285    2.2640    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  2  3  1  0
  3  4  1  0
  4  5  1  0
  5  6  1  0
  6  7  1  0
  7  8  1  0
  8  9  1  0
  9 10  1  0
 10 11  1  0
 11 12  1  0
 12 13  1  0
 13 14  3  0
 12 15  1  0
 15 16  2  0
 16 17  1  0
 17 18  2  0
 18 19  1  0
 19 20  2  0
 10 21  1  0
 21 22  1  0
 21 23  1  0
 23 24  1  0
 23 25  1  0
 25 26  1  0
  5 27  1  0
 27 28  1  0
 27 29  1  0
 29 30  1  0
 29 31  1  0
 31 32  1  0
 20 15  1  0
 25  8  1  0
 31  3  1  0
M  END
>  <sol_exp>  (1) 
-0.77

$$$$
Fenfuram
     RDKit          2D

 15 16  0  0  0  0  0  0  0  0999 V2000
   -3.1738    2.2149    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -3.2385    0.7163    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0

以下省略

参考・引用

Getting Started with the RDKit in Python