Visualização de conjuntos de dados químicos e análise exploratória de dados [Python, RDKit]

2020 ano 2 mês 17 dia

Como uma etapa preliminar para a criação do modelo de aprendizado de máquina / QSAR, é importante analisar o conteúdo dos dados compostos que consistem em uma lista de estruturas químicas e atividades de uma visão panorâmica, a fim de selecionar e compreender o modelo.

Desta vez, vamos realizar uma análise exploratória de dados de conjuntos de dados compostos como um método de ciência de dados para encontrar recursos relacionados à variável objetiva.

O que é análise exploratória de dados?

A análise exploratória de dados é uma abordagem importante nos estágios iniciais da análise de dados, resumindo os principais recursos por meio da visualização de dados e da análise de correlação.Isso é feito para verificar se o padrão originalmente esperado é reconhecido nos dados ou para procurar algum padrão.

Livro de Tukey, estatístico dos anos 1970 "Análise exploratória de dadosJá se consolida como um importante processo de análise de dados, com cerca de 2 citações (Tukey, John W. Análise exploratória de dados. Vol. 2. 1977.).

Preparação de dados

BBBP do Molecule Net é usado para dados de amostra. Com relação à penetração da barreira hematoencefálica, os dados são um resumo de "penetração" como XNUMX e "não penetração" como XNUMX.

Referências:https://pubs.acs.org/doi/10.1021/ci300124c

Preparação de dados

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 Colunas de dados (total de 4 colunas): nome 2039 objeto não nulo p_np 2039 não nulo int64 sorrisos 2039 objeto não nulo ROMol 2039 objeto não nulo dtipos: int64 (1), objeto (3 )) uso de memória: 79.6+ KB

Uma visão panorâmica do conjunto de dados

Primeiro, verifique a lista de que tipo de estrutura química está incluída.

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

  

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

Pesquisa de correlação com a variável objetiva do descritor composto

Como não é possível obter uma visão geral apenas olhando para ele, crie e agregue descritores e tenha uma visão panorâmica do conjunto de dados.
Os descritores compostos estão resumidos abaixo.

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

Por se tratar da permeabilidade da barreira hematoencefálica, fatores importantes eram quase conhecidos, mas pode-se observar que a hidrofobicidade (logP) e o peso molecular (MolWt) são importantes para a permeabilidade da membrana.

Os seguintes foram úteis como métodos para análise exploratória geral de dados ( Como escolher e desenhar o método de visualização correto na análise exploratória de dados )Parece bom aplicá-lo à agregação de descritores.