mordredで記述子を計算してPandas形式で出力する

Experiment Chemistry Laboratory Labインフォマティクス

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で出力する方法の紹介となります。

コメント

タイトルとURLをコピーしました