化合物の構造情報から生成できる変数(記述子)のまとめ
前準備
使用するデータ
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
- 分子記述子計算ソフトウェア mordred の開発
- RDKitでフィンガープリントを使った分子類似性の判定(化学の新しいカタチ)
- RDKitにおける記述子の扱い方をリピンスキーの法則を通して学ぶ(化学の新しいカタチ)
- 化学構造・分子・化合物の扱いに関する基本的なこと(金子研究室)
関連書籍
リンク
リンク
リンク