Visualisation d'ensembles de données chimiques et analyse exploratoire des données [Python, RDKit]

2020er mars 2

Comme étape préliminaire à la création d'un modèle d'apprentissage automatique / QSAR, il est important d'analyser le contenu des données composées consistant en une liste de structures chimiques et d'activités à vol d'oiseau afin de sélectionner et de comprendre le modèle.

Cette fois, nous effectuerons une analyse exploratoire des données d'ensembles de données composés en tant que méthode de science des données pour trouver des caractéristiques liées à la variable objective.

Qu'est-ce que l'analyse exploratoire des données?

L'analyse exploratoire des données est une approche importante dans les premières étapes de l'analyse des données, résumant les principales caractéristiques grâce à la visualisation des données et à l'analyse de corrélation.Il est effectué pour vérifier si le modèle initialement attendu est reconnu dans les données ou pour rechercher un modèle.

Livre du statisticien Tukey des années 1970 "L'analyse exploratoire des donnéesEst maintenant établi comme un processus important dans l'analyse des données, avec environ 2 citations (Tukey, John W. L'analyse exploratoire des données. Vol. 2. 1977.).

Préparation des données

BBBP de Molecule Net est utilisé pour les données d'échantillon. En ce qui concerne la pénétration de la barrière hémato-encéphalique, les données sont un résumé de la "pénétration" par XNUMX et de la "non-pénétration" par XNUMX.

Références:https://pubs.acs.org/doi/10.1021/ci300124c

Préparation des données

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 entrées, 1 à 2053 Colonnes de données (4 colonnes au total): nom 2039 objet non nul p_np 2039 non nul int64 sourit 2039 objet non nul ROMol 2039 objet non nul dtypes: int64 (1), objet (3 )) utilisation de la mémoire: 79.6+ Ko

Vue d'ensemble du jeu de données

Tout d'abord, vérifiez la liste des types de structure chimique inclus.

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

  

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

Recherche de corrélation avec la variable objective du descripteur composé

Puisqu'il n'est pas possible d'obtenir une vue d'ensemble simplement en le regardant, créez et agrégez des descripteurs et prenez une vue d'ensemble de l'ensemble de données.
Les descripteurs de composés sont résumés ci-dessous.

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

Puisqu'il s'agit de la perméabilité de la barrière hémato-encéphalique, des facteurs importants étaient presque connus, mais on peut voir que l'hydrophobicité (logP) et le poids moléculaire (MolWt) sont importants pour la perméabilité de la membrane.

Les éléments suivants ont été utiles comme méthodes pour l'analyse exploratoire générale des données ( Comment choisir et dessiner la bonne méthode de visualisation dans l'analyse exploratoire des données ).Il semble bon de l'appliquer à l'agrégation des descripteurs.