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))
分子セットからグリッドレイアウトの画像を作成する
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'
どなたか解決策を知っていましたら、コメントいただけると幸いです。