3. 蛋白质结构数据库:从哪里找到我们需要的材料

做蛋白质结构预测,说白了就是在找一张「折叠地图」。而这张地图的原材料——序列和结构——就散落在几个大型数据库中。我刚开始接触这个领域时,面对PDB、UniProt这些名字也是一脸懵。今天我们就把这些数据源理清楚。

3.1 PDB:结构生物学的「黄金档案」

PDB(Protein Data Bank)是目前最权威的蛋白质三维结构数据库。截止到写这段内容时,它已经存了超过20万个结构。我每次做项目,第一件事就是去PDB看看目标蛋白有没有同源结构。

PDB里的每条记录都有一个唯一的四字符ID。比如血红蛋白的经典结构是1A3N。你下载下来的文件是.pdb格式,里面包含了原子坐标、键长键角、温度因子等信息。

PDB的最新结构通过实验方法(X射线、核磁共振、冷冻电镜)获得。AlphaFold预测的结构也会被提交到PDB。

我记得有一次做药物设计项目,需要找一个激酶结构。直接在PDB搜索「kinase」能返回上千条结果。怎么办?我建议你学会用高级搜索,按分辨率、物种、实验方法过滤。

PDB的典型查询命令:

# 使用Python的Bio.PDB模块查询
from Bio.PDB import PDBList
pdbl = PDBList()
pdbl.retrieve_pdb_file('1A3N', pdir='./structures')

3.2 UniProt:蛋白质序列的「百科全书」

如果说PDB存的是结构,那UniProt存的就是序列和功能注释。我经常会遇到这种情况:手里只有一条序列,想找同源结构。那就得先去UniProt查这条序列的注释信息。

UniProt下有三大子库:

子库名称 内容特点 我常用的场景
UniProtKB/Swiss-Prot 人工校验过的高质量条目 做功能注释时最稳妥
UniProtKB/TrEMBL 自动注释的条目 查新物种或大规模数据时用
UniRef 去冗余后的序列簇 做序列比对前必用

我建议你直接使用UniProtKB/Swiss-Prot部分。人工校验过的数据,靠谱得多。曾有一次我用TrEMBL里的序列做比对,结果发现注释有误,后来查证是自动注释把信号肽区域标错了。从那以后,我对自动注释的数据都会多留一个心眼。

UniProt的REST API非常实用。你可以直接用URL查询:https://www.uniprot.org/uniprot/P00519.fasta 就能拿到ABL1激酶的序列。

3.3 序列与结构数据的获取

数据获取其实就两个路子:网页下载和API批量拉取。我们来分别看一下。

3.3.1 网页下载

PDB和UniProt都有友好的网页界面。你输入某个人工蛋白的ID,就能看到可视化结构、序列、参考文献。我个人习惯先看Structure Summary页,那里有分辨率、R-factor等质量指标。

  • PDB:https://www.rcsb.org/
  • UniProt:https://www.uniprot.org/

3.3.2 批量API下载

当你需要处理成百上千个蛋白质时,网页下载就太慢了。AlphaFold的训练数据就是通过API批量获取的。

PDB的批量查询示例:

# 使用requests库批量下载
import requests
pdbs = ['1A3N', '2B5E', '3C8K']
for pdb_id in pdbs:
    url = f"https://files.rcsb.org/download/{pdb_id}.pdb"
    response = requests.get(url)
    with open(f"{pdb_id}.pdb", 'wb') as f:
        f.write(response.content)

UniProt的批量查询示例:

# 使用UniProt REST API
url = "https://rest.uniprot.org/uniprotkb/search?query=human%20AND%20kinase&format=fasta&size=5"
response = requests.get(url)
print(response.text)
注意:API调用频率不要太高。我之前写脚本时没加延时,结果IP被临时封了。建议每次请求间隔0.5秒以上。

3.4 数据格式:不仅要会用,还要懂

拿到数据后,你面对的是各种格式文件。新手最常犯的错就是格式混用。我来给你梳理一下。

3.4.1 PDB格式

PDB格式是固定宽度的文本格式。每列有特定含义。举个例子:

ATOM      1  N   ALA A   1       7.910   4.794   2.248  1.00  0.00           N
ATOM      2  CA  ALA A   1       8.708   5.124   3.510  1.00  0.00           C
ATOM      3  C   ALA A   1       8.156   4.465   4.767  1.00  0.00           C

看到了吗?序列号、原子名、残基名、链标识、坐标、占据率、温度因子。每个字段都有严格的位置要求。我踩过一个坑:使用Bio.PDB读取PDB文件时,如果残基编号不连续,解析会报错。后来我发现是因为某些结构有插入突变,残基编号跳过了。

3.4.2 mmCIF格式

mmCIF是PDBx格式的新标准,现在PDB主要提供这种格式。它比PDB格式更灵活,能存储更多元数据。

loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_comp_id
ATOM 1 N N ALA
ATOM 2 CA C ALA

我建议你在做大规模数据处理时,优先使用mmCIF格式。因为它的数据完整性更好,解析也更稳定。

3.4.3 FASTA格式

序列数据的标准格式。简单但不简单。

>sp|P00519|ABL1_HUMAN Tyrosine-protein kinase ABL1
MLEICLKLVGCKSKKGLSSSSSCYLEEALQRPVASDFEPQGLSEAARWNSKENLLAGPSENDPNLFVALYDFVASGDNTLSITKGEKLRVLGYNHNGEWCEAQTKNGQGWVPSNYITPVNSLEKHSWYHGPVSRNAAEYLLSSGINGSFLVRESESSPGQRSISLRYEGRVYHYRINTASDGKLYVSSESRFNTLAELVHHHSTVADGLITTTPAPRTPPTSTS

行首的'>'是序列标识符。后面跟着物种、蛋白质名等信息。序列行推荐每行60-80个字符,方便阅读。

关键区别:PDB/mmCIF存的是三维坐标,FASTA存的是氨基酸序列。做AlphaFold训练时,你需要先找到序列(UniProt/FASTA),再找到对应的结构(PDB/mmCIF),然后才能配对训练。

3.5 一张图理清数据流转

说了这么多,我画一张流程图,帮你把这三个数据库的关系和获取路径串起来。

蛋白质结构数据获取流程 实验解析结构 X射线 / 核磁共振 / 冷冻电镜 PDB数据库 三维坐标 + 元数据 格式转换 PDB ↔ mmCIF 测序 / 基因组 原始序列数据 UniProt数据库 序列 + 功能注释 FASTA格式 序列文件 结构与序列配对 训练数据准备 序列-结构 对应关系构建 输入AlphaFold模型 获取方式:网页下载 / REST API Python + Bio.PDB 批量处理

这张图展示了核心流程:实验结构流向PDB,测序数据流向UniProt。两个数据库通过序列-结构配对,最终汇入训练数据。而在AlphaFold训练时,你需要把PDB的坐标和UniProt的序列对齐,才能构造训练样本。

3.6 实战避坑指南

讲几个我亲身踩过的坑,你们提前防着点:

  • 序列名称对不上:UniProt里的蛋白质ID和PDB里的链ID往往不同。我曾经用UniProt ID直接去PDB搜,结果搜不出来。正确做法是用序列去BLAST。
  • 结构文件缺失原子:有的PDB文件只存了主链原子,侧链缺失了。特别是在AlphaFold训练时,需要完整的全原子坐标。我后来用了mmCIF格式,这种情况明显少了。
  • 分辨率大于3.5Å的结构要谨慎使用:结构质量差,会影响模型训练效果。我一般只选分辨率≤3.0Å的结构。
有一个实用技巧:使用`pdb_selres`工具可以快速从PDB文件中提取出具体区域。比如只想保留活性位点附近5Å范围内的残基,一条命令就搞定。

好了,关于三大数据库和数据格式,我们今天就讲到这里。把这些搞清楚,后面做AlphaFold的训练数据处理就不会手忙脚乱了。