Chapter 33

RDKitで分子の読み込みと表示

poclabweb
poclabweb
2022.11.05に更新

0. rdkitのインストールと呼び出し及びversion確認

!pip install pubchempy
!pip install rdkit==2022.3.5
from rdkit import rdBase, Chem
print(rdBase.rdkitVersion)

今回使用したソフトとversionは、以下の通り。rdkit以外のものについても、念の為に示しておきます。

pubchemとpandasとrdkitのバージョン

1. 分子の読み込みと表示

1分子の読み込み

rdkit.Chem.MolFromSmiles(smiles)

pubchempyでquercetineのsmilesを取得して、そのsmilesを

import pubchempy as pcp
quercetine = pcp.get_compounds('quercetine', 'name')
quercetine_smiles = quercetine[0].isomeric_smiles
quercetine_smiles

quercetine_mol = Chem.MolFromSmiles(quercetine_smiles)
type(quercetine_mol)

rdkit.Chem.rdchem.Molという形式で保存される。この形式から色々な化合物の情報へと変換できる。

google colabolatory上で構造を表示したい場合には、Drawをimportして使用する。

from rdkit.Chem import Draw
Draw.MolsToGridImage([quercetine_mol])

rdkit.Chem.MolFromMolBlock(mol_block)

quercetineのsdfファイル(molファイル)をpubchemで取得して表示する。

quercetine_sdf = pcp.get_sdf('quercetine', 'name')
print(quercetine_sdf)

このSDFファイルから、分子をmolファイルへと変換することもできる。
SDFファイルには座標情報も含まれている。もとの座標情報も読み込んでmolファイルにしてくれる。

quercetine_mol_fromSDF = Chem.MolFromMolBlock(quercetine_sdf)
Draw.MolsToGridImage([quercetine_mol_fromSDF])

rdkit.Chem.MolFromInchi(Inchi)

inchiからもmolファイルへと変換することができる。

quercetine_inchi = quercetine[0].inchi
quercetine_inchi
Draw.MolsToGridImage([Chem.MolFromInchi(quercetine_inchi)])

その他の読み込み方法もあるが、必要に応じて調べてみてください。

たとえば、PDBのファイル形式でも読み取ることができます。

help(Chem.MolFromPDBFile)

複数分子の読み込み

rdkit.Chem.SDMolSupplier(SDF)

SDFファイルのダウンロード

from google.colab import drive
drive.mount('/content/drive')
!wget -P /content/drive/MyDrive/data https://raw.githubusercontent.com/chemoinformatics-lecture/lecture-beginner/main/lesson04_RDKit/data/PubChem_TCI_phenol_records.sdf

suppl = Chem.SDMolSupplier('/content/drive/MyDrive/data/PubChem_TCI_phenol_records.sdf')
# supplを変換してリストにする。
mols = [mol for mol in suppl]
Draw.MolsToGridImage(mols)

Pandasのデータフレームに変換

from rdkit.Chem import PandasTools

df = PandasTools.LoadSDF('/content/drive/MyDrive/data/PubChem_TCI_phenol_records.sdf')

SDFファイルを読み取ってdfにしてくれる。

すでにPandasでdaraframeになっていてsmilesの列があるものをPandasToolsで変換する。

from rdkit.Chem import PandasTools
PandasTools.AddMoleculeColumnToFrame(df, "smiles")

Pandasの復習

読み取ったものからの変換

df["smiles"] = df["ROMol"].map(Chem.MolToSmiles)

これでsmilesの列を追加することができる。