Visualización de conjuntos de datos químicos y análisis de datos exploratorios [Python, RDKit]

2020/2/17

Como paso preliminar para la creación de modelos de aprendizaje automático / QSAR, es importante analizar el contenido de los datos compuestos que consisten en una lista de estructuras químicas y actividades a vista de pájaro para seleccionar y comprender el modelo.

Esta vez, realizaremos un análisis de datos exploratorio de conjuntos de datos compuestos como un método de ciencia de datos para encontrar características relacionadas con la variable objetivo.

¿Qué es el análisis exploratorio de datos?

El análisis exploratorio de datos es un enfoque importante en las primeras etapas del análisis de datos, que resume las características clave a través de la visualización de datos y el análisis de correlación.Se hace para verificar si el patrón originalmente esperado se reconoce en los datos o para buscar algún patrón.

Libro del estadístico de la década de 1970, Tukey "Análisis exploratorio de datosActualmente se establece como un proceso importante en el análisis de datos, con cerca de 2 citas (Tukey, John W. Análisis exploratorio de datosVol. 2. 1977.).

Preparación de datos

BBBP de Molecule Net se utiliza para datos de muestra. Con respecto a la penetración de la barrera hematoencefálica, los datos son un resumen de "penetración" como XNUMX y "no penetración" como XNUMX.

Referenciashttps://pubs.acs.org/doi/10.1021/ci300124c

Preparación de datos

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 entradas, 1 a 2053 Columnas de datos (total 4 columnas): nombre 2039 objeto no nulo p_np 2039 no nulo int64 smiles 2039 objeto no nulo ROMol 2039 objeto no nulo dtypes: int64 (1), objeto (3 )) uso de memoria: 79.6+ KB

Una vista de pájaro del conjunto de datos

Primero, verifique la lista de qué tipo de estructura química está incluida.

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

  

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

Buscar correlación con la variable objetiva del descriptor compuesto

Dado que no es posible obtener una descripción general con solo mirarlo, cree y agregue descriptores y tome una vista panorámica del conjunto de datos.
Los descriptores de compuestos se resumen a continuación.

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

Dado que es la permeabilidad de la barrera hematoencefálica, casi se conocían factores importantes, pero se puede ver que la hidrofobicidad (logP) y el peso molecular (MolWt) son importantes para la permeabilidad de la membrana.

Los siguientes fueron útiles como métodos para el análisis de datos exploratorios generales ( Cómo elegir y dibujar el método de visualización correcto en el análisis exploratorio de datos ).Parece bueno aplicarlo a la agregación de descriptores.