化合物の記述子化まとめ

化合物の構造情報から生成できる変数(記述子)のまとめ

前準備

使用するデータ

1290分子の水溶解度(LogS)データ(sdfファイル形式)の内、20分子を使用
金子研究室HPのデータセットから取得)

モジュールのインストール

conda install -c conda-forge rdkit

変換コード

モジュールのインポート

import os
import numpy as np
import pandas as pd
from mordred import Calculator, descriptors
from rdkit import Chem, rdBase, DataStructs
from rdkit.Chem import Descriptors, Draw, Descriptors3D
from rdkit.Chem import AllChem
from rdkit.ML.Descriptors import MoleculeDescriptors

MOLオブジェクトの準備

#SDFファイルから molオブジェクトの作成
suppl = Chem.SDMolSupplier('logSdataset1290_2d.sdf')
#molオブジェクトのリストを作成(20分子だけ使う)
mols_list = [mol for mol in suppl if mol is not None]
mols_list = mols_list[:20]
#データのラベル用にSMILESのリストを作成
labels = [Chem.MolToSmiles(mol) for mol in mols_list]
#molオブジェクトからのsmilesリストの作成、及び逆をしたい場合は以下のコード
#mols_list = [Chem.MolFromSmiles(smiles) for smiles in smiles_list]

記述子化

以下の記述子それぞれが格納されたPandas DataFrameを作成した。

  • ECFP4(Extended Connectivity Fingerprint) : 原子からある距離にある部分構造を数え上げていく
  • FCFP4(Functional Connectivity Fingerprint) : 特徴ベースのフィンガープリント?
  • MACCS keys :全部で166の部分構造についての有無を調べ上げたもの
  • RDkit descriptors : 分子構造から導かれる計算値
  • mordred discriptors : 分子構造から導かれる計算値
# ECFP4フィンガープリントの作成(Extended Connectivity Fingerprint)
ECFP4 = [AllChem.GetMorganFingerprintAsBitVect(mol, 2,1024) for mol in mols_list]
df_ECFP4 = pd.DataFrame(np.array(ECFP4, int),index=labels)
# FCFP4相当のフィンガープリントの作成(Functional Connectivity Fingerprint)
FCFP4 = [AllChem.GetMorganFingerprintAsBitVect(mol, 2, 1024,useFeatures=True) for mol in mols_list]
df_FCFP4 = pd.DataFrame(np.array(FCFP4, int),index=labels)
#MACCS Keys
maccs_fps = [AllChem.GetMACCSKeysFingerprint(mol) for mol in mols_list]
df_maccs = pd.DataFrame(np.array(maccs_fps, int),index=labels)
# RDkit記述子の作成
descriptor_names = [descriptor_name[0] for descriptor_name in Descriptors._descList]
descriptor_calculation = MoleculeDescriptors.MolecularDescriptorCalculator(descriptor_names)
RDkit = [descriptor_calculation.CalcDescriptors(mol_temp) for mol_temp in mols_list]
df_RDkit = pd.DataFrame(RDkit, columns = descriptor_names,index=labels)
#mordred記述子の作成
calc_2D = Calculator(descriptors, ignore_3D=True) #2D記述子
calc_3D = Calculator(descriptors, ignore_3D=False) #3D記述子
df_mord = calc_2D.pandas(mols_list,quiet=False)
df_mord.index = labels

記述子について(補足情報)

  • MolLogP : Crippenらによる原子ベースのLogP指標(LogPは水/オクタノール分配係数)
  • MolWt : 分子量
  • NumHAcceptors : 水素結合アクセプターの数
  • NumHDonors : 水素結合ドナーの数
  • NumHeteroatoms : へテロ元素の数
  • NumRotatableBonds : 回転可能な結合数
  • FractionCSP3 : 全炭素数におけるsp3炭素の割合
  • TPSA : トポロジカル極性表面積

参考HP

関連書籍