LoginSignup
6
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-19

覚えておくためのメモ

以下は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ができる...!

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1