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 以下省略