Visualisasi dan analisis data eksplorasi kumpulan data kimia [Python, RDKit]
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.
diskusi
Daftar komentar
Belum ada komentar