Edited at

SMILES記法の化合物のMACCS keysを求める

More than 1 year has passed since last update.


覚えておくためのメモ

以下はMochimasa氏のQiitaエントリ化合物をベクトルにして比較しプロットするを参考にしました

np.zeros()の使い方は0を要素とする配列を生成するnumpy.zerosの使い方を参考にしました

モジュールはRDkitとNumpyを使う

#モジュールの読み込み

from rdkit import Chem
from rdkit.Chem import MACCSkeys
from rdkit import DataStructs
import numpy as np

化合物をSMILES形式で読み込む(ChEMBLで取得)

MACCS Keysの計算

mol = Chem.MolFromSmiles('CS(=O)(=O)NCCC1CCN(CC1)c2ncnc3cc(sc23)C(=O)N')

fps = MACCSkeys.GenMACCSKeys(mol)

fpsにMACCS keyが入っているはずなのでprintしてみよう

print(fps)

<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x10aef65d0>

BitVector?なのでそのままでは数値や文字としては表示できない


Tanimoto係数などSimilalityはBitVectorのまま比較すればよい

fp_bits = tuple(fps.GetOnBits())

print(fp_bits)

(32, 33, 36, 38, 51, 55, 58, 60, 61, 62, 65, 67, 69, 73, 75, 77, 80, 81, 82, 83, 84, 85, 86, 88, 91, 92, 93, 94, 96, 98, 100, 101, 102, 104, 105, 106, 108, 110, 111, 112, 116, 117, 118, 120, 121, 122, 124, 125, 128, 129, 130, 131, 133, 135, 136, 137, 138, 142, 145, 146, 147, 148, 151, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165)

MACCS KeysのどのbitがOn,つまり"1"になっているかを示す


これをnumpyで1 or 0のベクトルとして表すと

fp_arr = np.zeros((1,))

DataStructs.ConvertToNumpyArray(fps,fp_arr)
print(np.array(fp_arr))

[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.

0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0.
1. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.
0. 1. 0. 0. 1. 0. 1. 1. 1. 0. 0. 1. 0. 1. 0. 1. 0. 0.
0. 1. 0. 1. 0. 1. 0. 0. 1. 1. 1. 1. 1. 1. 1. 0. 1. 0.
0. 1. 1. 1. 1. 0. 1. 0. 1. 0. 1. 1. 1. 0. 1. 1. 1. 0.
1. 0. 1. 1. 1. 0. 0. 0. 1. 1. 1. 0. 1. 1. 1. 0. 1. 1.
0. 0. 1. 1. 1. 1. 0. 1. 0. 1. 1. 1. 1. 0. 0. 0. 1. 0.
0. 1. 1. 1. 1. 0. 0. 1. 0. 1. 1. 1. 1. 0. 1. 1. 1. 1.
1. 1. 1. 1. 0.]

np.zeros((3,4)) で3x4の行列, つまりnp.zeros((1,)) では1行だけの,0が並んだベクトル


これをひとつひとつの化合物に適用して積み重ねた行列を作れば、PCAができる...!