実践ケモインフォマティクス

〜主にケモインフォマティクス, 個人的備忘録, 理論より実践重視〜

RDkit を用いた分子構造の描画


title: tags: ケモインフォマティクス マテリアルズインフォマティクス RDKit 分子 author: ottantachinque

slide: false

前準備

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

conda install -c conda-forge rdkit
conda install xlsxwriter

分子構造の描画

モジュールのインポート

import pandas as pd

from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem import Descriptors
from rdkit.ML.Descriptors import MoleculeDescriptors
from rdkit.Chem import PandasTools

MOLオブジェクトの準備

# 適当な化学構造のsmilesリストを準備する
smiles_list = ['Oc(cccc1)c1O', 'OC(C(C1)C1(Br)Br)=O', 'Cc(cc1)ccc1O',
       'Oc(cc1)ccc1Cl', 'OC(c1cocc1)=O', 'CC(C)c1nnn[nH]1',
       'CN(C=C1)C=CC1=N', 'CCc1cccnn1', 'C[C@H]([C@H]1NC)[C@@H]1NC',
       'CCCc1ncc[nH]1']

# 化合物のラベルを作成
label_list = ['sample_{}'.format(i) for i in range(len(smiles_list))]

# molオブジェクトのリストを作成
mols_list = [Chem.MolFromSmiles(smile) for smile in smiles_list]

分子ひとつの画像(png)を作成・保存する

# とりあえず描画したい時
Draw.MolToImage(mols[0])

# pngファイルとして出力
Draw.MolToFile(mols_list[0],'test.png',size=(300, 300))

image.png

分子セットからグリッドレイアウトの画像を作成する

img = Draw.MolsToGridImage(mols_list,
                           molsPerRow=5, #一列に配置する分子の数
                           subImgSize=(200,200),
                           legends=label_list #化合物の下に表示するラベル
                           )

#ファイルに保存する
img.save('test_grid.png')

image.png

画像が埋め込まれたエクセルファイルとして出力する

各分子の構造が貼り付けられた pandas dataframe を作成して、エクセルファイルとして出力する。 (例として、RDkitの分子記述子の DataFrameを使用する)

# RDkit記述子の作成
descriptor_names = [descriptor_name[0] for descriptor_name in Descriptors._descList[:5]]
descriptor_calculation = MoleculeDescriptors.MolecularDescriptorCalculator(descriptor_names)
RDkit = [descriptor_calculation.CalcDescriptors(mol_temp) for mol_temp in mols_list]

df = pd.DataFrame(RDkit, columns = descriptor_names,index=label_list)
df['smiles'] = smiles_list

# DataFrameへのImageの追加とエクセルファイルでの出力
PandasTools.AddMoleculeColumnToFrame(df, molCol='IMAGE', smilesCol='smiles')
PandasTools.SaveXlsxFromFrame(df, 'data_frame.xlsx', 
                              molCol='IMAGE', 
                              size=(150,150)
                              )

追記

2018年時点では、1分子の描画 "MolToImage" 及びエクセルファイルへの出力 "SaveXlsxFromFrame" が問題なく実行できていましたが、現在は以下のエラーで実行できなくなってしまいました。

'Image' object has no attribute 'tostring'

どなたか解決策を知っていましたら、コメントいただけると幸いです。

参考HP