pythonで使用できる分子の記述子を計算するパッケージとしてmordredが存在します。
GitHub - mordred-descriptor/mordred: a molecular descriptor calculator
a molecular descriptor calculator. Contribute to mordred-descriptor/mordred development by creating an account on GitHub.
mordredは、計算できる記述子の数が約2000と、RDKitの100個程度と比較して圧倒的に多い大変ありがたいパッケージです。
今回は、mordredにて記述子を計算する方法について紹介します。
mordredのインストール
condaを用いている場合、以下でインストールを行います。
mordredを使用するには、rdkitが必要なため、合わせてインストールする必要があります。
conda install -c rdkit -c mordred-descriptor mordred
記述子を計算してPandas DataFrame形式で出力
以下のようなコードで記述子を計算し、DataFrame形式で出力を行うことができます。
from rdkit import Chem
from mordred import Calculator, descriptors
import pandas as pd
# 計算したい分子のSMILES式のデータフレームを作成
df = pd.DataFrame({'SMILES':['[Hg]','c1ccccc1Cl', 'c1ccccc1O', 'c1ccccc1N']})
# SMILESからMolオブジェクトに変換
df['MOL'] = df['SMILES'].apply(Chem.MolFromSmiles)
# 記述子を計算
calc = Calculator(descriptors, ignore_3D=True)
df_descriptors_mordred = calc.pandas(df['MOL'])
df_descriptors_mordred.head()
実行を行うとプログレスバーが表示され、進捗がわかります。
計算する分子と記述子の組み合わせによっては、計算できない 記述子が 存在するため、下の画像のように、文字列でエラーが表示されます。 下記の例では「divide by zero encountered in power (mZagreb1) 」となっています。

用途によっては以下のように、エラーの発生した項目を一括でNaNで置き換えたほうが使いやすいかもしれません。
df_descriptors = df_descriptors_mordred.astype(str)
masks = df_descriptors.apply(lambda d: d.str.contains('[a-zA-Z]' ,na=False))
df_descriptors = df_descriptors[~masks]
df_descriptors = df_descriptors.astype(float)
df_descriptors.head()
以上が、mordredで記述子を計算してDataFrameで出力する方法の紹介となります。
コメント