Визуализация наборов химических данных и исследовательский анализ данных [Python, RDKit]

2020 год 2 месяц 17 день

В качестве предварительного шага к созданию модели машинного обучения / QSAR важно проанализировать содержание составных данных, состоящих из списка химических структур и действий с высоты птичьего полета, чтобы выбрать и понять модель.

На этот раз мы проведем исследовательский анализ данных составных наборов данных в качестве метода науки о данных для поиска функций, связанных с целевой переменной.

Что такое исследовательский анализ данных?

Исследовательский анализ данных - важный подход на ранних этапах анализа данных, обобщающий ключевые особенности посредством визуализации данных и корреляционного анализа.Это делается для проверки того, распознается ли изначально ожидаемый шаблон в данных, или для поиска какого-либо шаблона.

Книга статистика 1970-х годов Тьюки "Исследовательский анализ данныхСейчас это важный процесс анализа данных, на который ссылается около 2 (Tukey, John W. Исследовательский анализ данныхТ. 2. 1977 г.).

Подготовка данных

BBBP из Molecule Net используется для выборки данных. Что касается проникновения через гематоэнцефалический барьер, данные представляют собой сводку «проникновения» как XNUMX и «непроникания» как XNUMX.

Ссылки:https://pubs.acs.org/doi/10.1021/ci300124c

Подготовка данных

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 записей, от 1 до 2053 Столбцы данных (всего 4 столбца): имя 2039 ненулевой объект p_np 2039 ненулевой int64 улыбается 2039 ненулевой объект ROMol 2039 ненулевой объект dtypes: int64 (1), object (3) )) использование памяти: 79.6+ КБ

Набор данных с высоты птичьего полета

Во-первых, проверьте список того, какая химическая структура включена.

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

  

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

Поиск корреляции с целевой переменной из составного дескриптора

Поскольку невозможно получить обзор, просто взглянув на него, создайте и объедините дескрипторы и взгляните на набор данных с высоты птичьего полета.
Составные дескрипторы суммированы ниже.

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

Поскольку это проницаемость гематоэнцефалического барьера, важные факторы были почти известны, но можно видеть, что гидрофобность (logP) и молекулярная масса (MolWt) важны для проницаемости мембраны.

Следующие методы были полезны в качестве методов для общего исследовательского анализа данных ( Как выбрать и нарисовать правильный метод визуализации при исследовательском анализе данных ).Хорошо бы применить его к агрегированию дескрипторов.