第4章:公共数据库使用——UniProt、PDB、ChEMBL

做药物靶点挖掘这事,很多新手上来就直奔PubMed查文献。我的经验是——先别急。真正干活儿的老手都知道,先把几个公共数据库摸透,后面能省80%的力气。

这一章咱们就盯住三个核心库:UniProt(蛋白序列和功能)、PDB(三维结构)、ChEMBL(活性数据)。我习惯叫它们「靶点三件套」。你把这套组合拳打熟了,大多数靶点相关的信息都能快速捞出来。

4.1 UniProt——靶点序列与功能的主源头

UniProt是目前最权威的蛋白序列和功能注释数据库。我个人做靶点调研时,第一站永远是它。

它其实有三个子库,但常用的就两个:

  • Swiss-Prot:人工审核的,靠谱但更新慢
  • TrEMBL:自动注释的,量大但质量参差
我的习惯:做论文级分析,尽量用Swiss-Prot的条目。如果是高通量筛选初期,先用TrEMBL拉全了再降噪。

4.1.1 怎么查?怎么用?

假设我们要查人源EGFR靶点。直接在UniProt首页搜「EGFR human」,点进第一个结果(P00533)。你会看到这些关键字段:

字段内容示例我的用法
EntryP00533全局唯一ID,后面做关联的钥匙
Protein namesEpidermal growth factor receptor确认靶点全名和别名
Gene namesEGFR基因名,用于跨库检索
FunctionReceptor tyrosine kinase...快速了解靶点角色
Subcellular locationCell membrane判断成药性,膜蛋白还是胞内?
Sequence1210 aa长度和FASTA序列,下游对接用

我最常做的事——把FASTA序列拉下来,然后直接丢到后续的分析流程里。怎么做?

# Python调用UniProt REST API,批量拉指定靶点序列
import requests

target_id = "P00533"
url = f"https://www.uniprot.org/uniprot/{target_id}.fasta"
response = requests.get(url)

if response.ok:
    with open(f"{target_id}.fasta", "w") as f:
        f.write(response.text)
    print("FASTA下载成功")
else:
    print("查不到这个ID,检查一下")
避坑指南:我曾经在这里犯过蠢——直接用基因名「EGFR」去搜,结果出来一堆同名的其他物种条目。正确做法是加物种限定,比如「EGFR AND human」。或者在URL里指定organism参数。

4.1.2 实战——批量下载靶点家族

搞药化的人经常需要检索整个激酶家族的序列。我习惯这么干:

# 用UniProt的REST API,检索人源所有激酶
query = "organism:9606 AND keyword:Kinase"
url = f"https://rest.uniprot.org/uniprotkb/search?query={query}&format=fasta&size=500"

response = requests.get(url)
with open("human_kinases.fasta", "w") as f:
    f.write(response.text)

这一步跑完,你就拿到了500条激酶序列。后面做多序列比对、构建系统发育树,底子就有了。

4.2 PDB——三维结构,物化对接的根基

拿到序列后,下一步是看结构。PDB(Protein Data Bank)是全球最大的生物大分子结构库。做分子对接、虚拟筛选的人,天天跟它打交道。

PDB里的结构主要来自X射线、NMR、冷冻电镜。我个人最信任X射线解析的,分辨率2.5Å以上的才好用。

4.2.1 结构查询和下载

搜PDB的结构跟UniProt不太一样。你用基因名或蛋白名搜,有时会出来一堆entry。

筛选条件原因
Resolution < 2.5 Å分辨率高了,电子密度图清楚
No mutations野生型更接近真实生理状态
Has ligand带了小分子配体的结构,更值钱
Full-length截短的可能缺关键domain

我在实际项目中通常这样做——先找到目标靶点的PDB ID列表,然后批量下载结构文件。

# 假设我们已经有了PDB ID列表
pdb_ids = ["1M17", "2GS6", "3W2R"]

for pdb_id in pdb_ids:
    url = f"https://files.rcsb.org/download/{pdb_id}.pdb"
    os.system(f"wget {url}")
    print(f"下载{pdb_id}完成")
小技巧:PDB文件有时候很大,尤其是来自冷冻电镜的。我一般优先下载.pdb格式,内存紧张时用.pdb.gz压缩的也行。工具用wget或curl,别用浏览器手动点。

4.2.2 如何准备结构文件

下载完原始PDB文件,不能直接用。结构里可能含有水分子、缓冲液、无关配体。得先清理。我常用的清洗流程:

# 用pdb4amber自动清理,去掉水和杂原子
pdb4amber -i 1M17.pdb -o 1M17_clean.pdb --dry --reduce
# 或者用pyMOL手工删
# 在pymol里: remove solvent; remove organic

嗯,这里要注意——如果是做对接,共价配体或金属离子要去掉,但结合位点的关键水分子反而要保留,它们参与了氢键网络。

4.3 ChEMBL——活性数据的金矿

有了靶点和结构,还得知道有没有已知的活性分子。ChEMBL就是干这个的——化合物-靶点活性数据库,目前收录了超过2000万个活性数据点。

4.3.1 核心数据字段

字段说明筛选建议
Molecule ChEMBL ID化合物唯一标识关联结构用
Standard Type活性类型(IC50/Ki/EC50)尽量统一标准
Standard Value活性数值(nM)过滤掉模糊值
Relation等于/小于/大于= 和 ~ 比较可靠
Assay Type结合/功能/ADME明确靶点属性

4.3.2 实战——查一个靶点的已知活性分子

还是EGFR这个例子。ChEMBL支持REST API,也可以直接web搜索。我一般优先用web查,确认后再批量用API拉。

# Python调用ChEMBL API,搜EGFR的活性化合物
import requests

url = "https://www.ebi.ac.uk/chembl/api/data/activity.json"
params = {
    "target_chembl_id": "CHEMBL203",
    "standard_type": "IC50",
    "standard_relation": "=",
    "limit": 100
}
r = requests.get(url, params=params)
data = r.json()

for act in data['activities']:
    print(act['molecule_chembl_id'], act['standard_value'], act['standard_units'])

关键一步:拿到的活性数据不能直接用。要先做标准化——把不同assay、不同单位、不同关系的数据,统一到同一尺度。我习惯的方法是:

  1. 只保留IC50/Ki类型
  2. 将值统一转为nM
  3. 去重,保留活性最好的记录
  4. 剔除数据量少于3个点的条目

4.3.3 常见错误——「活性」不等于「选择性」

我曾经看到有人把ChEMBL里拉到的数据直接拿去训练模型,结果模型输出的活性很高,但实际在细胞实验里完全无效。为什么?

因为ChEMBL的活性数据主要是生化实验(binding assay),而不是细胞实验(cellular assay)。生化活性不等于细胞渗透性,更不等于体内有效性。数据清洗时一定要标注assay_type,分开用。

4.4 三库联用——一条完整的靶点信息管道

单用一个库是不够的。我搭建的靶点Pipeline里,这三个库是串起来用的。下面这张图展示了我个人实战中的调用流程:

靶点信息检索三库联动流程 靶点名称 / 基因名 UniProt:确认序列、功能、domain 输出:FASTA + 功能注释 + 跨库ID PDB 结构文件 ChEMBL:活性数据 + 已知配体 输出:活性矩阵 + 化合物结构 靶点信息汇总 用于虚拟筛选、活性预测、药效模型 注意:UniProt提供序列索引 → PDB提供结构 → ChEMBL提供活性证据,三层数据必须交叉验证

你看,实际流程是单向的:先有序列(UniProt),再找结构(PDB),最后跑活性数据(ChEMBL)。每层数据都要往回对照,防止ID搞混。

4.5 避坑指南——我踩过的三个坑

在实战中,我会遇到几个让新手很崩溃的问题。说说我的血泪史:

  • 坑一:ID映射出错。 我曾经把一个UniProt ID直接当成PDB entry用,程序报错查了半天,才发现ID系统完全不一样。正确做法是:UniProt的「Cross-reference」板块里明确标注了对应PDB条目,手动核对一遍再批量。
  • 坑二:ChEMBL活性数据里的假阳性。 有些化合物在生化实验里很强,但纯属假阳性(比如聚集剂、荧光干扰)。我的做法是——用PAINS过滤器先扫一遍,扔掉那些可疑的。
  • 坑三:PDB里配体坐标乱。 下载的结构里配体位置可能不对,尤其是来自同源建模的。必须看着电子密度图验证一下,否则对接结果全废。

4.6 本章小结

数据库核心功能我的常用操作
UniProt序列、功能、跨库ID拉FASTA,批量检索,ID映射
PDB三维结构、配体复合物下载结构,清洗,生成对接输入
ChEMBL化合物活性数据批量API拉取,标准化,去假阳性