Visualisierung chemischer Datensätze und explorative Datenanalyse [Python, RDKit]

2020/2/17

Als vorläufiger Schritt zum maschinellen Lernen / zur Erstellung eines QSAR-Modells ist es wichtig, den Inhalt von Verbindungsdaten, die aus einer Liste chemischer Strukturen und Aktivitäten bestehen, aus der Vogelperspektive zu analysieren, um das Modell auszuwählen und zu verstehen.

Dieses Mal werden wir eine explorative Datenanalyse von zusammengesetzten Datensätzen als datenwissenschaftliche Methode durchführen, um Merkmale zu finden, die sich auf die Zielvariable beziehen.

Was ist explorative Datenanalyse?

Die explorative Datenanalyse ist ein wichtiger Ansatz in den frühen Phasen der Datenanalyse, bei dem wichtige Merkmale durch Datenvisualisierung und Korrelationsanalyse zusammengefasst werden.Es wird durchgeführt, um zu überprüfen, ob das ursprünglich erwartete Muster in den Daten erkannt wird, oder um nach einem Muster zu suchen.

1970er Jahre Statistiker Tukey's Buch "Explorative DatenanalyseIst mittlerweile mit rund 2 Zitaten ein wichtiger Prozess in der Datenanalyse (Tukey, John W. Explorative DatenanalyseVol. 2. 1977.).

Datenaufbereitung

BBBP von Molecule Net wird für Probendaten verwendet. Bezüglich der Durchdringung der Blut-Hirn-Schranke sind die Daten eine Zusammenfassung von „Durchdringung“ als XNUMX und „Nichtdurchdringung“ als XNUMX.

Referenzen:https://pubs.acs.org/doi/10.1021/ci300124c

Datenaufbereitung

import numpy as np
import pandas as pd
from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, PandasTools, Descriptors
pd.set_option('display.max_columns',250)
print('rdkit version: ',rdBase.rdkitVersion) #rdkit version:  2019.03.4
 
bbbp = pd.read_csv('./BBBP.csv',index_col=0)
 
# smilesからmolオブジェクトを作成し、DataFrameに格納
PandasTools.AddMoleculeColumnToFrame(bbbp,'smiles')
 
# molオブジェクトを作れなかった行の削除
bbbp = bbbp.dropna() 
bbbp.info()
Int64Index: 2039 Einträge, 1 bis 2053 Datenspalten (insgesamt 4 Spalten): Name 2039 Nicht-Null-Objekt p_np 2039 Nicht-Null-Int64 lächelt 2039 Nicht-Null-Objekt ROMol 2039 Nicht-Null-Objekt dtypen: int64 (1), Objekt (3 )) Speichernutzung: 79.6+ KB

Eine Vogelperspektive des Datensatzes

Überprüfen Sie zunächst die Liste der enthaltenen chemischen Strukturen.

# 化学構造を一覧で表示
PandasTools.FrameToGridImage(bbbp[:18], column='ROMol', legendsCol='name', molsPerRow=6, subImgSize=(150,150))

  

# ターゲットp-npの分布を確認
bbbp.p_np.value_counts()
1 1560 0 479 Name: p_np, dtype: int64

Suchen Sie nach der Korrelation mit der Zielvariablen aus dem zusammengesetzten Deskriptor

Da es nicht möglich ist, sich einen Überblick zu verschaffen, erstellen und aggregieren Sie Deskriptoren und betrachten Sie den Datensatz aus der Vogelperspektive.
Die zusammengesetzten Deskriptoren sind unten zusammengefasst.

# 記述子を生成する
for i,j in Descriptors.descList:
    bbbp[i] = bbbp.ROMol.map(j)

# 要約統計量の表示
bbbp.describe()

# データセット全体における構造記述子の分布
import matplotlib.pyplot as plt
import math

list = ["p_np", "RingCount", "NumAromaticRings", "NumAromaticCarbocycles", "NumAromaticHeterocycles", "NumSaturatedCarbocycles", "NumSaturatedHeterocycles", "NumSaturatedRings"]

fig = plt.figure(figsize=(15,7))
for i, c in enumerate(list):
   ax = fig.add_subplot(
       math.ceil(len(list) / 4), 4, i + 1)
   # plot the continent on these axes
   sns.countplot(x=c, data=bbbp,  ax=ax)
   ax.set_title(c)
fig.tight_layout()
plt.show()

 

# targetによる構造記述子の分布の違いを可視化
list = ["RingCount", "NumAromaticRings", "NumAromaticCarbocycles", "NumAromaticHeterocycles", "NumSaturatedCarbocycles", "NumSaturatedHeterocycles", "NumSaturatedRings"]
 
fig = plt.figure(figsize=(15,7))
for i, c in enumerate(list):
   ax = fig.add_subplot(
       math.ceil(len(list) / 4), 4, i + 1)
   # plot the continent on these axes
   sns.countplot(x=c, data=bbbp, ax=ax, hue="p_np")
   ax.set_title(c)
fig.tight_layout()
plt.show()

 

# logPと分子量でplotしてみる
import seaborn as sns
sns.scatterplot(x="MolWt", y="MolLogP", data=bbbp,
                hue="p_np",
                alpha=0.5)

Da es sich um die Permeabilität der Blut-Hirn-Schranke handelt, waren wichtige Faktoren fast bekannt, aber es ist ersichtlich, dass Hydrophobizität (logP) und Molekulargewicht (MolWt) für die Membranpermeabilität wichtig sind.

Die folgenden Methoden waren als Methoden für die allgemeine explorative Datenanalyse hilfreich ( Auswählen und Zeichnen der richtigen Visualisierungsmethode bei der explorativen Datenanalyse ).Es sieht gut aus, es auf die Aggregation von Deskriptoren anzuwenden.