化學資訊學入門:分子描述符(molecular descriptor)
Mar 31, 2024
分子描述符在化學資訊學上扮演相當重要的角色。分子描述符為包含了分子資訊的各式數值,允許電腦對化學物質進行一些數學處理。Todeschini 和 Consonni 將其定義為:
“分子描述符是邏輯和數學程序的最終結果,它將分子符號表示中編碼的化學信息轉換為有用的數字或某些標準化實驗的結果。”
化學資訊學中所使用的一般描述子依照所描述的次元一般可以分類成:
- 0D描述符: 主要由結構描述符(constitutional descriptors), 和數量描述符(count descriptors)組成, 具體的例子如分子量,原子的數量(H、O、鹵素原子等),各種環的數量, 雙鍵的數量 等等。
- 1D描述符: 由結構片段(fragment)或分子指紋(fingerprint)構成。 具體的例子有一些基團例如羥基、羧基、酮基、疊氮基、氨基等等
- 2D描述符: 比較經典的是拓樸學描述符(topological descriptor),這一類的描述符比較難以理解。 拓樸學描述符是基於圖論將化學結構看做一個分子圖進行相關的矩陣計算得出一個象徵性的值。 拓樸學描述子的優點是在進行具體的QSPR/QSAR的模型組成的時候容易得到更好的結果,缺點是這一類的描述子難以解釋究竟表達了什麼意義,以及計算的結果難以理解。
- 3D描述符: 由一些描述三次元結構的描述子, 第一原理計算得到的計算結果(Bond Gap, LUMO-HOMO等等),分子的van der Waals體積,分子體積,表面積,半徑等等量組成。
化學資訊學裡常用的 Rdkit 裡面提供了約200個描述符,包含了上述的幾種類型。 官網上有關於這些描述子的具體介紹。
我們將輸入的的SDF或MOL格式的化學結構式透過RDkit計算出他們的描述子之後就可以用機械學習的方法和對應的目的性質(毒性,水溶性,類藥性等等)建構相關的QSPR/QSAR 定量結構性質關係的模型了。
實際測試
以下是計算RDKit描述符的程式碼,可以在Jupyter Notebook中執行。
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Descriptors
from rdkit.ML.Descriptors import MoleculeDescriptors
descs_list = [desc_name[0] for desc_name in Descriptors._descList]
desc_calc = MoleculeDescriptors.MolecularDescriptorCalculator(descs_list)
smiles = "Cc1ccccc1"
mol = Chem.MolFromSmiles(smiles)
descriptors = pd.DataFrame(desc_calc.CalcDescriptors(mol)).T
descriptors.index = [smiles]
descriptors.columns = descs_list
descriptors
執行輸入的儲存格(Shift+Enter),將得到以下輸出。