Chapter 35

RDKitで分子のDescriptorを表示

poclabweb
poclabweb
2022.11.05に更新

2. 分子のDescriptorを表示

morganfingerprint

from rdkit.Chem import AllChem
import numpy as np

fingerprints = []
safe = []
for mol_idx, mol in enumerate(df["ROMol"]):
    try:
        # 
        fingerprint = [x for x in AllChem.GetMorganFingerprintAsBitVect(mol, 2, 2048)]
        fingerprints.append(fingerprint)
        safe.append(mol_idx)
        
    except:
        print("Error", mol_idx)
        continue
fingerprints = np.array(fingerprints)
print(fingerprints.shape)
df_fp = pd.DataFrame(fingerprints)

フラグメントのところにIDとsmilesの列を追加する。

df["smiles"] = df["ROMol"].map(Chem.MolToSmiles)
df_fp["ID"] = df["ID"]
df_fp["smiles"] = df["smiles"]
df_fp.head()

morganfingerprintの可視化

from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole
from IPython.display import display
from IPython.display import Image
# 特定のsmilesを有する構造を表示してみる。
smiles = "c1c2ccc[nH0]c2ccc1"

compound = Chem.MolFromSmiles(smiles)
bitI_morgan = {}
fp_morgan = AllChem.GetMorganFingerprintAsBitVect(compound, 2, bitInfo=bitI_morgan)
print(fp_morgan.GetNumBits(),fp_morgan.GetNumOnBits()) 
print(len(bitI_morgan)) 

morgan_turples = ((compound , bit, bitI_morgan) for bit in list(bitI_morgan.keys()))
Draw.DrawMorganBits(morgan_turples, molsPerRow=4, legends=['bit: '+str(x) for x in list(bitI_morgan.keys())])

rdkit fingerprint

df_rdkit_fpsの中にrdkitのfingerprintが格納できる。

from rdkit.Chem import AllChem
rdkit_fps = []
for mol in df["ROMol"]:
    fp = AllChem.RDKFingerprint(mol)
    rdkit_fps.append(np.array(list(fp.ToBitString()), int))

df_rdkit_fps = pd.DataFrame(data=rdkit_fps)  

rdkit fingerprintのbitの可視化

dfのROMOlにmolファイルが入っているとして、何行目かの分子とみたいbitの数を指定すると表示することができる。

row_number = 0
bit_number = 2047
m = df["ROMol"][row_number]
bi = {}
_ = Chem.RDKFingerprint(m, maxPath=5, bitInfo=bi)
Draw.DrawRDKitBit(m, bit_number, bi)

rdkit fingerprintのbitの可視化 複数bit

m = df["ROMol"][row_number]
bitI_rdkit = {}
fp_rdkit = Chem.RDKFingerprint(m, maxPath=5, bitInfo=bitI_rdkit)
rdkit_turples = ((m, bit, bitI_rdkit) for bit in list(bitI_rdkit.keys())[:12])
Draw.DrawRDKitBits(rdkit_turples, molsPerRow=4, legends=['bit: '+str(x) for x in list(bitI_rdkit.keys())[:12]])