ご注文はリード化合物ですか?〜医薬化学録にわ〜

自分の勉強や備忘録などを兼ねて好き勝手なことを書いていくブログです。

分子記述子算出ライブラリ Mordred

機械学習でデータを解析する際、入力するデータは数字である必要があります。一方、化合物は化学者にとって分かりやすい構造式として表記されることが多いです。そのため、構造式を数字に落とし込む必要があります。構造式の数字表現としては色々ありますが、例えば分子量であったり、ヒドロキシ基の個数などが考えられます。また、構造式を点と線の集合体、数学でいうところのグラフと見なして構造式を数字表現することも可能で(Wiener index など)す。これら、分子の情報を数値表現したものを記述子、あるいは特徴量と呼びます。

世の中便利なもので、記述子を計算してくれるライブラリも存在します。その一つに、Mordred というライブラリがあります。

github.com

 

元論文はこちら。大阪大学で開発されました。

jcheminf.biomedcentral.com

 

インストールは簡単で、terminal で 

 conda install -c rdkit -c mordred-descriptor mordred

を実行するだけです。

コードも簡単で、以下の通りです。

import numpy as np
import pandas as pd
from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole

from mordred import Calculator, descriptors

# 記述子計算用インスタンスを用意
calc = Calculator(descriptors, ignore_3D = True)

# 計算したい化合物データを用意(mol 形式のリストを作る)
mols = [Chem.MolFromSmiles(smiles) for smiles in ['c1ccccc1Cl', 'c1ccccc1O', 'c1ccccc1N']]

# Pandas のデータフレームとして出力
df = calc.pandas(mols)

 

最初に、Calculator でインスタンスを作成します。ignore_3D を False にすると三次元記述子を計算することも可能ですが、化合物の立体配座の情報も必要となります。このあたりは信頼できる立体構造をどのように決定するか、難しい問題なので、最初は False にして良いと思います。続いて、記述子計算インスタンスに入力するデータを用意しますが、化合物の mol データのリストを用意します。つまり、[mol, mol, mol, ・・・] というイメージです。sdf を読み込んだ場合は以下のようにすると楽です。

supplier = Chem.SDMolSupplier("hoge.sdf")

mols = [mol for mol in supplier]

最後に、記述子を計算し、pandas 形式で出力してくれます。

計算してくれる記述子も 2D だけで 1613 種類あるので、もっと広く使われて欲しいライブラリです。

 

余談:Mordred って絶対 FGO からとっただろ・・・

有償の記述子算出ソフトウェアとしては Dragon が有名だし、ケモインフォのライブラリのネーミングはフリーダム。