当前位置:首页>python>Python 数据科学三剑客与 RDKit 深度解析

Python 数据科学三剑客与 RDKit 深度解析

  • 2026-09-02 20:20:30
Python 数据科学三剑客与 RDKit 深度解析
在人工智能驱动药物发现的流程中,我们经常需要处理海量的分子结构和生物活性数据。今天,我们通过一段实操代码,深度拆解 AIDD 研发中最常用的三大“神兵利法”。

一、 NumPy:高维张量与分子坐标的基石

NumPy 是处理数值阵列的王者。在药物设计中,原子的 3D 坐标、分子的指纹向量都以 ndarray 的形式存储。

Python

import numpy as np# 1. 创建数组:将普通数据转化为高效张量print(np.array(12))            # 创建标量print(np.array(range(12)))     # 创建包含 0-11 的一维数组a = np.array([[1, 2, 3],[4, 5, 6]]) # 创建 2x3 的二维矩阵(常用于存储原子特征)# 2. 探查数组属性:理解数据的“形状”print(a.shape)   # 输出 (2, 3),代表 2 行 3 列print(a.ndim)    # 维度,输出 2print(a.size)    # 元素总数,输出 6print(a.dtype)   # 数据类型,如 int64# 3. 数组运算:实现分子性质的批量计算a = np.array()b = np.arange(4) # 生成 print(a - b)     # 对应元素相减print(b**2)      # 平方运算print(a < 35)    # 布尔筛选:找出满足条件的元素索引(如:筛选低毒性评分)print(a @ b)     # 矩阵乘法(点积),常用于模型参数加权# 4. 切片与索引:精准提取感兴趣的原子或特征a = np.arange(10)print(a[2:7:2])  # 步长切片:从索引 2 到 7,步长为 2a_2d = np.array([[1, 2, 3],[3, 4, 5],[4, 5, 6]])print(a_2d[1, 2]) # 提取第 2 行第 3 列的元素print(a_2d[:,0]) # 提取所有行的第 1 列(如:所有原子的 X 坐标)# 5. 数组合并:拼接不同维度的特征a = np.array([[1, 2],[3, 4]])b = np.array([[5, 6],[7, 8]])print(np.concatenate((a,b)))          # 纵向拼接print(np.concatenate((a,b), axis=1))  # 横向拼接(如:合并分子指纹与物理性质)

二、 Pandas:化合物活性数据集的“超级管家”

Pandas 是处理结构化表格(如 CSV、Excel)的核心工具。在处理来自 ChEMBL 或 PubChem 的百万级活性数据时,它是清洗数据的首选。

Python

import pandas as pd# 1. 数据读取与初步查探df = pd.read_csv('People.csv') # 加载数据集print(df.shape)                # 数据规模(行数, 列数)df.info()                      # 字段详细信息(非空数、内存占用)print(df.dtypes)               # 各列数据类型# 2. 缺失值处理:确保建模数据的质量print(df['age'].isnull())      # 检查 age 列是否有空值df.fillna(value=0)             # 用 0 填充所有空值df['age'].fillna(df['age'].mean()) # 用平均年龄填充空缺(常用于填充缺失的实验数值)# 3. 数据类型转换与去重df['age'].astype('int')        # 转换为整型df['id'].drop_duplicates()     # 删除重复的化合物 ID,保证数据唯一性# 4. 精准数据提取 (iloc)print(df.iloc[3])              # 提取第 4 行数据print(df.iloc[0:5])            # 提取前 5 行print(df.iloc[,])  # 提取特定行和特定列# 5. 条件筛选与结果保存# 场景:筛选活性在特定范围内的候选分子df1 = df[(df['age'] > 20) & (df['age'] < 28)] df1.to_csv('people2.csv', index=None) # 将清洗后的结果导出,index=None 防止多出一列索引

三、 RDKit:连接化学语言与 AI 的“灵魂翻译官”

RDKit 是化学信息学的工业标准库。它能将 SMILES 字符串(分子的文本表示)转化为 AI 能“读懂”的数学特征。

Python

from rdkit import Chemfrom rdkit.Chem import AllChem, Descriptors, MACCSkeys, DataStructs# 1. 分子对象创建与可视化# 将 Toluene (甲苯) 的 SMILES 转化为分子对象 mm = Chem.MolFromSmiles('Cc1ccccc1') smi = Chem.MolToSmiles(m) # 将分子对象重新转回规范化 SMILES# 在 Jupyter 环境中输入 m 即可直接看到分子的 2D 结构图# 2. 物理化学性质计算 (Descriptors)logp = Descriptors.MolLogP(m) # 计算脂水分配系数(亲脂性)mw = Descriptors.MolWt(m)     # 计算分子量(MW)print(f"LogP: {logp}, MW: {mw}")# 3. 生成分子指纹:将化学结构转化为 0/1 向量# Morgan 指纹 (类似 ECFP4):捕捉分子的局部拓扑环境fp_morgan = AllChem.GetMorganFingerprintAsBitVect(m, 2, nBits=1024)# MACCS 指纹:基于 166 个特定子结构的预定义指纹fp_macss = MACCSkeys.GenMACCSKeys(m)print(list(fp_macss)) # 转化为列表供模型输入# 4. 分子相似度计算:药物筛选的关键# 计算两个分子之间的 Tanimoto 相似度ms =fps =similarity = DataStructs.FingerprintSimilarity(fps, fps[1])print(f"分子的结构相似度为: {similarity}")

🌟 总结:代码背后的 AIDD 逻辑

这段代码完整展示了一个药物活性筛选预备工作流:

  1. Pandas 负责从原始 CSV 文件中清洗出具有确切活性值的化合物。

  2. RDKit 将清洗出的分子的文本描述(SMILES)转化为数值向量(Fingerprints)。

  3. NumPy 对这些向量进行矩阵化处理,并计算它们之间的相似度,最终输送给机器学习模型进行预测。

掌握了这一套“组合拳”,你就叩开了人工智能驱动药物发现的大门!

最新文章

随机文章