前準備
モジュールのインストール
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))
分子セットからグリッドレイアウトの画像を作成する
img = Draw.MolsToGridImage(mols_list,
molsPerRow=5, #一列に配置する分子の数
subImgSize=(200,200),
legends=label_list #化合物の下に表示するラベル
)
#ファイルに保存する
img.save('test_grid.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'
どなたか解決策を知っていましたら、コメントいただけると幸いです。