تصور مجموعات البيانات الكيميائية وتحليل البيانات الاستكشافية [Python ، RDKit]

2020 2 年 月 日 17

كخطوة أولية لإنشاء نموذج التعلم الآلي / QSAR ، من المهم تحليل محتويات البيانات المركبة التي تتكون من قائمة الهياكل والأنشطة الكيميائية من منظور عين الطائر من أجل تحديد النموذج وفهمه.

هذه المرة ، سنقوم بتحليل البيانات الاستكشافية لمجموعات البيانات المركبة كطريقة لعلوم البيانات للعثور على الميزات المتعلقة بالمتغير الهدف.

ما هو تحليل البيانات الاستكشافية؟

يعد تحليل البيانات الاستكشافية نهجًا مهمًا في المراحل المبكرة من تحليل البيانات ، ويلخص السمات الرئيسية من خلال تصور البيانات وتحليل الارتباط.يتم إجراء ذلك للتحقق مما إذا كان النمط المتوقع أصلاً قد تم التعرف عليه في البيانات ، أو للبحث عن أي نمط.

كتاب الإحصائي توكي من السبعينيات "تحليل البيانات استكشافيةتم تأسيسها الآن كعملية مهمة في تحليل البيانات ، مع حوالي 2 اقتباس (Tukey ، John W. تحليل البيانات استكشافيةالمجلد 2. 1977.).

تحضير البيانات

يتم استخدام BBBP لشبكة الجزيء لعينة البيانات. فيما يتعلق باختراق الحاجز الدموي الدماغي ، فإن البيانات هي ملخص لـ "الاختراق" كـ 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 أنواع كائن غير فارغة: int64 (1) ، كائن (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 الاسم: p_np ، نوع dtype: int479

ابحث عن ارتباط مع متغير موضوعي من واصف مركب

نظرًا لأنه من غير الممكن الحصول على نظرة عامة بمجرد النظر إليها ، قم بإنشاء وتجميع الواصفات والتقاط نظرة شاملة لمجموعة البيانات.
تم تلخيص الواصفات المركبة أدناه.

# 記述子を生成する
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) مهمان لنفاذية الغشاء.

كانت الطرق التالية مفيدة كطرق لتحليل البيانات الاستكشافية العامة ( كيفية اختيار ورسم طريقة التصور الصحيحة في تحليل البيانات الاستكشافية ).يبدو من الجيد تطبيقه على تجميع الواصفات.