3. 蛋白质结构数据库:从哪里找到我们需要的材料
做蛋白质结构预测,说白了就是在找一张「折叠地图」。而这张地图的原材料——序列和结构——就散落在几个大型数据库中。我刚开始接触这个领域时,面对PDB、UniProt这些名字也是一脸懵。今天我们就把这些数据源理清楚。
3.1 PDB:结构生物学的「黄金档案」
PDB(Protein Data Bank)是目前最权威的蛋白质三维结构数据库。截止到写这段内容时,它已经存了超过20万个结构。我每次做项目,第一件事就是去PDB看看目标蛋白有没有同源结构。
PDB里的每条记录都有一个唯一的四字符ID。比如血红蛋白的经典结构是1A3N。你下载下来的文件是.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里的序列做比对,结果发现注释有误,后来查证是自动注释把信号肽区域标错了。从那以后,我对自动注释的数据都会多留一个心眼。
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)
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个字符,方便阅读。
3.5 一张图理清数据流转
说了这么多,我画一张流程图,帮你把这三个数据库的关系和获取路径串起来。
这张图展示了核心流程:实验结构流向PDB,测序数据流向UniProt。两个数据库通过序列-结构配对,最终汇入训练数据。而在AlphaFold训练时,你需要把PDB的坐标和UniProt的序列对齐,才能构造训练样本。
3.6 实战避坑指南
讲几个我亲身踩过的坑,你们提前防着点:
- 序列名称对不上:UniProt里的蛋白质ID和PDB里的链ID往往不同。我曾经用UniProt ID直接去PDB搜,结果搜不出来。正确做法是用序列去BLAST。
- 结构文件缺失原子:有的PDB文件只存了主链原子,侧链缺失了。特别是在AlphaFold训练时,需要完整的全原子坐标。我后来用了mmCIF格式,这种情况明显少了。
- 分辨率大于3.5Å的结构要谨慎使用:结构质量差,会影响模型训练效果。我一般只选分辨率≤3.0Å的结构。
好了,关于三大数据库和数据格式,我们今天就讲到这里。把这些搞清楚,后面做AlphaFold的训练数据处理就不会手忙脚乱了。