Visualisatie van chemische datasets en verkennende data-analyse [Python, RDKit]

2020 年 2 月 17 日

Als een voorbereidende stap voor het maken van machine learning / QSAR-modellen, is het belangrijk om de inhoud van samengestelde gegevens, bestaande uit een lijst van chemische structuren en activiteiten, vanuit vogelperspectief te analyseren om het model te selecteren en te begrijpen.

Deze keer zullen we verkennende data-analyse uitvoeren van samengestelde datasets als een data science-methode om kenmerken te vinden die verband houden met de objectieve variabele.

Wat is verkennende data-analyse?

Verkennende data-analyse is een belangrijke benadering in de vroege stadia van data-analyse, waarbij de belangrijkste kenmerken worden samengevat door middel van datavisualisatie en correlatieanalyse.Het wordt gedaan om te controleren of het oorspronkelijk verwachte patroon in de gegevens wordt herkend, of om een ​​patroon te zoeken.

Boek van statisticus Tukey uit de jaren 1970 "Verkennende gegevensanalyseIs nu gevestigd als een belangrijk proces in data-analyse, met ongeveer 2 citaties (Tukey, John W. Verkennende gegevensanalyseVol. 2. 1977.).

Data voorbereiding

BBBP van Molecule Net wordt gebruikt voor voorbeeldgegevens. Met betrekking tot de penetratie van de bloed-hersenbarrière zijn de gegevens een samenvatting van "penetratie" als XNUMX en "niet-penetratie" als XNUMX.

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

Data voorbereiding

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()
Int64 Index: 2039 vermeldingen, 1 tot 2053 Gegevenskolommen (totaal 4 kolommen): naam 2039 niet-nul object p_np 2039 niet-nul int64 smiles 2039 niet-nul object ROMol 2039 niet-nul object dtypes: int64 (1), object (3 )) geheugengebruik: 79.6+ KB

De dataset in vogelvlucht

Controleer eerst de lijst met wat voor soort chemische structuur is opgenomen.

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

  

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

Zoek naar correlatie met objectieve variabele uit samengestelde descriptor

Aangezien het niet mogelijk is om een ​​overzicht te krijgen door er alleen maar naar te kijken, moet u descriptoren maken en samenvoegen en de dataset in vogelvlucht bekijken.
De samenstellingsdescriptoren worden hieronder samengevat.

# 記述子を生成する
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)

Omdat het de doorlaatbaarheid van de bloed-hersenbarrière is, waren belangrijke factoren bijna bekend, maar men kan zien dat hydrofobiciteit (logP) en molecuulgewicht (MolWt) belangrijk zijn voor membraanpermeabiliteit.

De volgende waren nuttig als methoden voor algemene verkennende data-analyse ( Hoe u de juiste visualisatiemethode kiest en tekent bij verkennende data-analyse ).Het ziet er goed uit om het toe te passen op de aggregatie van descriptoren.