Trực quan hóa và phân tích dữ liệu khám phá của bộ dữ liệu hóa học [Python, RDKit]

Ngày 2020 tháng 2 năm 17

Là bước sơ bộ để tạo mô hình máy học/QSAR, điều quan trọng là phải lựa chọn và hiểu mô hình để phân tích toàn diện nội dung của dữ liệu phức hợp, ví dụ như bao gồm danh sách các cấu trúc và hoạt động hóa học.

Lần này, chúng tôi sẽ thực hiện phân tích dữ liệu khám phá của các bộ dữ liệu phức hợp như một phương pháp khoa học dữ liệu để tìm các tính năng liên quan đến biến mục tiêu.

Phân tích dữ liệu khám phá là gì?

Phân tích dữ liệu thăm dò là một cách tiếp cận quan trọng ở giai đoạn đầu để phân tích dữ liệu, tóm tắt các tính năng chính thông qua trực quan hóa dữ liệu và phân tích tương quan.Nó được thực hiện để xác minh xem có thể nhận ra mẫu giả định ban đầu từ dữ liệu hay không và để tìm kiếm bất kỳ mẫu nào.

Cuốn sách của nhà thống kê những năm 1970 Tukey "Phân tích dữ liệu thăm dò” hiện đã được trích dẫn khoảng 2 lần và đã trở thành một quy trình quan trọng trong phân tích dữ liệu (Tukey, John W. Phân tích dữ liệu thăm dòTập 2. 1977.).

Chuẩn bị dữ liệu

BBBP của MoleculeNet được sử dụng cho dữ liệu mẫu. Về sự thâm nhập hàng rào máu não (sự thâm nhập hàng rào máu não của hợp chất), dữ liệu tóm tắt "sự thâm nhập" bằng XNUMX và "không thâm nhập" bằng XNUMX.

Tài liệu tham khảo:https://pubs.acs.org/doi/10.1021/ci300124c

Chuẩn bị dữ liệu

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 mục nhập, 1 đến 2053 Cột dữ liệu (tổng cộng 4 cột): tên 2039 đối tượng không null p_np 2039 không null int64 smile 2039 đối tượng không null ROMol 2039 đối tượng không null kiểu dtypes: int64(1), object(3 ) ) mức sử dụng bộ nhớ: 79.6+ KB

Một cái nhìn toàn cảnh về tập dữ liệu

Trước tiên, hãy kiểm tra danh sách để xem những cấu trúc hóa học nào được bao gồm.

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

  

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

Khám phá mối tương quan với các biến mục tiêu từ các bộ mô tả phức hợp

Vì không thể nắm được đường viền chỉ bằng cách quan sát trực quan, nên hãy tạo và tổng hợp các bộ mô tả để có được cái nhìn toàn cảnh về tập dữ liệu.
Các mô tả hợp chất được tóm tắt dưới đây.

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

Vì tính thấm của hàng rào máu não, các yếu tố quan trọng hầu như đã được biết đến, nhưng chúng ta có thể thấy mối quan hệ mà tính kỵ nước (logP) và trọng lượng phân tử (MolWt) rất quan trọng đối với tính thấm của màng.

Tôi thấy những điều sau đây hữu ích như một phương pháp chung để phân tích dữ liệu khám phá ( Cách chọn và vẽ phương pháp trực quan phù hợp trong phân tích dữ liệu khám phá ).Cũng sẽ rất hay nếu áp dụng nó cho các bộ mô tả tổng hợp.