Visualisasi dan analisis data eksplorasi kumpulan data kimia [Python, RDKit]

2020 2 年 月 日 17

Sebagai langkah awal untuk membuat model pembelajaran mesin/QSAR, penting untuk pemilihan dan pemahaman model untuk menganalisis secara komprehensif konten data senyawa, yang terdiri dari daftar struktur dan aktivitas kimia, misalnya.

Kali ini, kami akan melakukan analisis data eksplorasi dari kumpulan data majemuk sebagai metode ilmu data untuk menemukan fitur yang terkait dengan variabel target.

Apa itu analisis data eksplorasi?

Analisis data eksplorasi adalah pendekatan tahap awal yang penting untuk analisis data yang merangkum fitur-fitur utama melalui visualisasi data dan analisis korelasi.Ini dilakukan untuk memverifikasi apakah pola yang diasumsikan semula dapat dikenali dari data dan untuk mencari pola apa pun.

Buku ahli statistik Tukey tahun 1970-an "Analisis data eksplorasi” sekarang telah dikutip sekitar 2 kali, dan telah ditetapkan sebagai proses penting dalam analisis data (Tukey, John W. Analisis data eksplorasiVol.2. 1977.).

Persiapan data

BBBP dari MoleculeNet digunakan untuk data sampel. Mengenai penetrasi penghalang darah-otak (penetrasi penghalang darah-otak senyawa), itu adalah data yang merangkum "penetrasi" dengan XNUMX dan "non-penetrasi" dengan XNUMX.

Referensi:https://pubs.acs.org/doi/10.1021/ci300124c

Persiapan data

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 entri, 1 hingga 2053 Kolom data (total 4 kolom): nama 2039 objek non-null p_np 2039 non-null int64 smiles 2039 objek non-null ROMol 2039 objek non-null dtypes: int64(1), objek(3 ) ) penggunaan memori: 79.6+ KB

Tampilan menyeluruh dari kumpulan data

Pertama, periksa daftar untuk melihat struktur kimia apa yang disertakan.

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

  

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

Jelajahi korelasi dengan variabel target dari deskriptor majemuk

Karena tidak mungkin untuk memahami garis besar hanya dengan pengamatan visual, buat dan agregat deskriptor untuk mendapatkan tampilan menyeluruh dari kumpulan data.
Deskriptor senyawa dirangkum di bawah ini.

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

Karena ini adalah permeabilitas penghalang darah-otak, faktor-faktor penting hampir diketahui, tetapi kita dapat melihat hubungan bahwa hidrofobisitas (logP) dan berat molekul (MolWt) penting untuk permeabilitas membran.

Saya menemukan yang berikut berguna sebagai metode umum untuk analisis data eksplorasi ( Bagaimana memilih dan menggambar metode visualisasi yang tepat dalam analisis data eksplorasi ).Akan menyenangkan juga untuk menerapkannya pada deskriptor agregat.