化學資訊學入門:化學資料庫的使用方法(Python)

Chemistry with data magic
7 min readMar 23, 2024

--

前言

人類到目前為止成功地合成了大量的化合物。 同時圍繞著這些合成的化合物,我們進行過大量的實驗來測量他們的各種化學性質,累積了大量的知識與經驗。 隨著電腦的發展,將這些先人的知識與經驗進行相關的整理之後便有了化學資訊的資料庫。 本文將介紹收集了這樣的化學資訊的其中的一個資料庫 Pubchem 。 之後我們使用 Python 來完成 Pubchem 的一些基本操作。

什麼是 Pubchem?

Pubchem 是NCBI(美國國家生物技術資訊中心)自2004年以來開始運作及管理的大型化合物資料庫,主要收錄了原子數在1000以下以及化學鍵結數在1000以下相對較小的分子資料。 Pubchem裡的資料主要分成三個類別,可以在以下網址查看: https://pubchem.ncbi.nlm.nih.gov/

Compound: 化合物純物質的數據,收集的數量約9,390萬種化合物

Substance: 混合物的數據,約2,360萬種混合物數據

BioAssay: 收錄了125個生物活性數據

如何使用 Python 使用 Pubchem 數據

①安装 PubChemPy

參考官方使用方法用 pip 來安裝 PubChemPy ,我們開啟終端機輸入:

pip install pubchempy

②測試 PubChemPy

啟動jupyter notebook確認pubchem的相關模組

我們可以透過化合物的英文名,分子式,SMILES(Simplified molecular input line entry specification, 簡化分子線性輸入規範),SDF,CID(Compound ID)代號等方式來檢索目的化合物的相關資訊。

首先我們可以透過化合物的CID

import pubchempy as pcp
c = pcp.Compound.from_cid(4396)

接下來,我們可以得知CID代號為4396的化合物的相關資訊:

>>>c.molecular_formula #分子式
'C17H20N6O4'
>>>c.molecular_weight #分子量
372.385
>>>c.isomeric_smiles #smiles
'C1=CC(=CC=C1CNC2=NC=NC3=C2N=CN3C4C(C(C(O4)CO)O)O)N'
>>>c.iupac_name #IUPAC名
'2-[6-[(4-aminophenyl)methylamino]purin-9-yl]-5-(hydroxymethyl)oxolane-3,4-diol'

上面僅列舉一部分,pubchem裡其他記載的資訊還有電荷,分子複雜度,溶解度等等。

也可以透過化合物的種類來檢索指定化合物以及資訊。 我們輸入丙胺酸,可以得到丙胺酸的外消旋,左旋,右旋的資訊。

>>>results = pcp.get_compounds('alanine', 'name')
>>>for i in results:
print('CID: {}\tName: {}'.format(i.cid, i.iupac_name))

CID: 602 Name: 2-aminopropanoic acid
CID: 5950 Name: (2S)-2-aminopropanoic acid
CID: 71080 Name: (2R)-2-aminopropanoic acid

get_compounds的預設設定是2D化合物結構訊息,所以如果要取得3D結構式的相關資訊我們可以修改設定參數來查看:

>>>c_4396 = pcp.get_compounds(4396, 'cid', record_type='3d')
>>>c_4396 = c_4396[0]
>>>c_4396.mmff94_energy_3d, c_4396.volume_3d
(79.7133, 269.1)

當我們需要取得目標化合物的多種資訊時,我們可以使用get_properties()來得到多種化合物的多種指定資訊。 例如我們輸入,IUPAC名稱,分子式,SMILES,分子量,xlogP,tPSA,分子複雜度:

>>>properties = ['IUPACName', 'MolecularFormula','canonical_smiles', 'MolecularWeight', 'XLogP','complexity' ]
>>>a = pcp.get_properties(properties, 'alanine', 'name')
[{'CID': 5950,
'MolecularFormula': 'C3H7NO2',
'MolecularWeight': 89.094,
'CanonicalSMILES': 'CC(C(=O)O)N',
'IUPACName': '(2S)-2-aminopropanoic acid',
'XLogP': -3,
'Complexity': 61},
{'CID': 602,
'MolecularFormula': 'C3H7NO2',
'MolecularWeight': 89.094,
'CanonicalSMILES': 'CC(C(=O)O)N',
'IUPACName': '2-aminopropanoic acid',
'XLogP': -3,
'Complexity': 61},
{'CID': 71080,
'MolecularFormula': 'C3H7NO2',
'MolecularWeight': 89.094,
'CanonicalSMILES': 'CC(C(=O)O)N',
'IUPACName': '(2R)-2-aminopropanoic acid',
'XLogP': -3,
'Complexity': 61}]

③ 利用 Pandas 整理 PubChem 數據

這裡我們需要導入 pandas。 首先在 terminal 或是 conda promt 輸入:

pip install pandas

之後啟動 jupyter notebook 導入其他所需的模組以及 pandas 。
透過調整參數 as_dataframe=True 我們可以把所需的資訊轉換成 Dataframe 格式方便瀏覽和檢閱。 對於 SMILES 形式是 C6H6Cl6 的化合物,其中包含了我們熟悉的六氯化苯以及他們所有的同分異構體,我們可以利用 get_compounds() 來獲得這些化合物的全部資訊:

>>>import pandas as pd
>>>C6H6Cl6_info = pcp.get_compounds('C6H6Cl6', 'formula', as_dataframe=True)
>>>C6H6Cl6_info.head()

同樣的,我們也可以利用 get_properties() 來得到選定的化合物性質資訊:

>>>C6H6Cl6_info_properties = pcp.get_properties(['isomeric_smiles', 'xlogp', 'rotatable_bond_count'], 'C6H6Cl6', 'formula', as_dataframe=True)
>>>C6H6Cl6_info_properties

可取得包含所需資訊的如下表格:

結語

Pubchem 資料庫提供了大量的化合物資料,我們可以提取出所需的相關化合物的性質…等等數據,之後我們可以用 Python 裡化學資訊學裡常用的的庫 RDKit 來進行進一步的分析。

(感謝@yweilin753@uentinnlea共同編輯)

--

--

Chemistry with data magic

I am working on improving material developments by creating machine learning analytical tools for chemical data to accelerate the material discovery.