あるケミストの独り言(winchemwinの日記)

ケミスト(化学者)の視点で、面白そうな情報(シミュレーション関係など)を発信

Pythonを活用した機械学習用データ作成 その1(分子体積1)

 機械学習を活用した材料開発が活発になってきています。機械学習には元になるデータセットが必要ですが、実験データ数には限界もあることから、計算機シュミレーションを活用したデータセットも作成されています。その中でもQMデータセットは数多くの機械学習研究においてベンチマークとして用いられている代表的なデータセットになります。QMデータセットの中でもQM9は10万以上の低分子有機化合物の高レベル量子化学計算のデータが収集されているデータセットで様々な場面で活用されています。ただQM9に収集されていないパラメーターを機械学習に使いたい場面もしばしば遭遇します。そこでQM9のデータを活用して新たに機械学習用のパラメータデータを作成するコードを作成してみましたので紹介したいと思います。今回は分子体積になります(追加できそうなパラメーターが新たにできましたら、随時紹介したいと思います。)

import pandas as pd
import re
from rdkit import Chem
from rdkit.Chem import AllChem

# QM9データ読み込み
dfqm9=pd.read_csv("Mol_Net_qm9.csv")
qm9_smi=dfqm9['smiles']

Smiles_list=[i for i in qm9_smi]
Mol_list=[Chem.MolFromSmiles(smiles) for smiles in qm9_smi]

Volume_list=[]

for mol in Mol_list:
    
    mol_H = Chem.AddHs(mol)
    
    # 分子体積をRdkitで計算
    try:
        AllChem.EmbedMolecule(mol_H)
        rdvdwvol=AllChem.ComputeMolVolume(mol_H)
    except ValueError:
        pass
        
    Volume_list.append(rdvdwvol)
    # print (rdvdwvol)
            
print ('calculation finished')

df_qm_Vol1=pd.DataFrame(list(zip(Smiles_list, Volume_list)),index=Smiles_list, columns=['Smiles', 'VdwVolume/Angstrom3/mol'])

df_qm_Vol1.to_csv('qm_vol1.csv')

print ('data_save finished')

 最初にQM9のデータセット(MoleculeNet等から入手可能)をpandasのデータフレーム(dfqm9)として読み込んでいます。分子体積の計算はRdkitライブラリーの関数でmolファイルから算出可能ですので、QM9のデータセットからmolファイルデータを作成します。
 まず化学構造情報のSMILESデータを取り出した後(qm9_smi)、molファイルに変換しています。分子体積は水素原子を加えた形から計算されますので、molファイルに水素原子を加えた(Chem.AddHs(mol))後にAllChem.EmbedMoleculeで3D構造を発生させています。得られた構造対してAllChem.ComputeMolVolumeの処理を行うことで分子体積を発生させています。最終的に算出されたデータをリスト化したものをデータフレームとした後にcsvファイルとして保存しています。
 以上の処理で分子体積は算出されますが、データ処理にある程度(私のPCでは数時間程度)かかってしまいました。上記の方法でも問題はないかと思いますが、数分程度で終了する別の方法もありますので、次回はその方法を紹介したいと思います。