蛋白质修饰位点预测¶
一句话概述:蛋白质翻译后修饰(PTM)就像给蛋白质"贴标签"——磷酸化、糖基化、泛素化等修饰决定了蛋白质在哪里干活、干什么活、什么时候"下班",预测修饰位点是理解蛋白质功能调控的关键。
核心知识点表¶
| 知识点 | 白话解释 | 重要程度 |
|---|---|---|
| 翻译后修饰(PTM) | 蛋白质翻译完之后被加上的化学修饰,像"贴标签" | ⭐⭐⭐⭐⭐ |
| 磷酸化 | 最常见的PTM,在S/T/Y上加磷酸基团,像"开关" | ⭐⭐⭐⭐⭐ |
| 糖基化 | 在蛋白质上加糖链,影响蛋白质折叠和识别 | ⭐⭐⭐⭐ |
| 泛素化 | 在赖氨酸上加泛素标签,标记蛋白质"该降解了" | ⭐⭐⭐⭐ |
| 乙酰化 | 在赖氨酸上加乙酰基,调控基因表达(组蛋白修饰) | ⭐⭐⭐⭐ |
| NetPhos/GPS | 磷酸化位点预测工具 | ⭐⭐⭐ |
| dbPTM | PTM综合数据库 | ⭐⭐⭐ |
一、蛋白质翻译后修饰概览¶
蛋白质 = 一个刚出厂的新手机
翻译后修饰 = 给手机装APP、贴膜、装壳
常见修饰类型:
──────────────────────────────────────────
修饰类型 修饰位点 白话解释
──────────────────────────────────────────
磷酸化 S/T/Y 给蛋白质装"开关",控制活性
糖基化 N/S/T 给蛋白质穿"糖衣",保护和识别
泛素化 K 给蛋白质贴"该回收"标签
乙酰化 K 给组蛋白"松绑",打开基因
甲基化 K/R 微调蛋白质功能
SUMO化 K 给蛋白质加"定位标签"
脂质修饰 C/G 给蛋白质装"锚",固定在膜上
二硫键 C-C 用S-S键"拉住"蛋白质结构
──────────────────────────────────────────
修饰的作用:
├── 开关功能(磷酸化↔去磷酸化)
├── 蛋白质定位(信号肽、膜锚定)
├── 蛋白质降解(泛素化→蛋白酶体)
├── 蛋白质互作(修饰后才能结合伙伴)
└── 基因表达调控(组蛋白修饰)
二、磷酸化位点预测¶
2.1 NetPhos 3.1(在线工具)¶
# NetPhos在线预测(最经典的磷酸化预测工具)
# 网址:https://services.healthtech.dtu.dk/services/NetPhos-3.1/
# 输入格式:FASTA蛋白质序列
# 输出:每个S/T/Y位点的磷酸化概率
# 示例输入(p53蛋白部分序列):
# >P04637 TP53
# MEEPQSDPSVEPPLSQETFSDLWKLLPENNVLSPLPSQAMDDLMLSPDDIEQWFTEDPGP
# DEAPRMPEAAPPVAPAPAAPTPAAPAPAPSWPLSSSVPSQKTYPQGLNGTVNLPGRNSFEV
2.2 使用GPS-Palm预测(Python实现)¶
#!/usr/bin/env python3
"""蛋白质磷酸化位点预测 - 基于序列特征"""
import re # 正则表达式
from collections import defaultdict # 默认字典
# ========== 已知磷酸化共识序列 ==========
# 不同激酶识别不同的序列模式
KINASE_MOTIFS = {
"PKA": r"[RK][RK].S", # PKA识别模式:R/K-R/K-X-S(X=任意氨基酸)
"PKC": r"[RK]..S.[RK]", # PKC识别模式
"CK2": r"S..[DE]", # CK2识别模式:S-X-X-D/E
"CDK": r"SP.K", # CDK识别模式:S-P-X-K
"MAPK": r"P.SP", # MAPK识别模式:P-X-S-P
"ATM/ATR": r"SQ", # ATM/ATR识别模式:S-Q
"Akt": r"R.R..S", # Akt识别模式
}
def predict_phospho_sites(sequence, protein_name="unknown"):
"""基于激酶共识序列预测磷酸化位点"""
results = []
# 1. 找所有S/T/Y位点
for i, aa in enumerate(sequence): # 遍历序列中每个氨基酸
if aa in "STY": # 只看丝氨酸(S)、苏氨酸(T)、酪氨酸(Y)
pos = i + 1 # 位置(从1开始计数)
# 提取上下文窗口(前后7个氨基酸)
start = max(0, i - 7) # 窗口起始
end = min(len(sequence), i + 8) # 窗口结束
window = sequence[start:end] # 上下文序列
# 2. 匹配激酶共识序列
matched_kinases = []
for kinase, motif in KINASE_MOTIFS.items(): # 遍历每个激酶模式
# 在位点周围搜索模式
local_seq = sequence[max(0, i-5):min(len(sequence), i+6)]
if re.search(motif, local_seq): # 如果匹配到模式
matched_kinases.append(kinase) # 记录匹配的激酶
results.append({
"position": pos, # 位点位置
"residue": aa, # 残基类型
"context": window, # 上下文序列
"predicted_kinases": matched_kinases # 匹配的激酶
})
# 3. 输出结果
print(f"\n===== {protein_name} 磷酸化位点预测 =====")
print(f"{'位置':<8}{'残基':<6}{'上下文':<20}{'可能的激酶'}")
print("-" * 60)
for r in results:
kinases = ", ".join(r["predicted_kinases"]) if r["predicted_kinases"] else "无匹配"
if r["predicted_kinases"]: # 只显示有激酶匹配的位点
print(f"{r['position']:<8}{r['residue']:<6}{r['context']:<20}{kinases}")
return results
# ========== 使用示例 ==========
# p53蛋白质序列(部分)
p53_seq = ("MEEPQSDPSVEPPLSQETFSDLWKLLPENNVLSPLPSQAMDDLMLSPDDIEQWFTEDPGP"
"DEAPRMPEAAPPVAPAPAAPTPAAPAPAPSWPLSSSVPSQKTYPQGLNGTVNLPGRNSFEV"
"RVCACPHERCSQSTQENLLNMMLERSQ")
results = predict_phospho_sites(p53_seq, "TP53") # 预测p53的磷酸化位点
2.3 使用dbPTM数据库查询¶
#!/usr/bin/env python3
"""查询dbPTM数据库获取已知PTM信息"""
import requests # HTTP请求
# ========== 从UniProt获取PTM注释 ==========
def get_uniprot_ptm(uniprot_id):
"""从UniProt获取蛋白质的PTM注释"""
url = f"https://rest.uniprot.org/uniprotkb/{uniprot_id}.json" # UniProt REST API
response = requests.get(url) # 发送请求
if response.status_code != 200: # 请求失败
print(f"查询失败: {response.status_code}")
return []
data = response.json() # 解析JSON
features = data.get("features", []) # 获取所有特征注释
# 筛选PTM相关的特征
ptm_types = [
"Modified residue", # 修饰残基
"Cross-link", # 交联
"Lipidation", # 脂质修饰
"Glycosylation", # 糖基化
"Disulfide bond" # 二硫键
]
ptm_list = []
for feat in features: # 遍历每个特征
if feat.get("type") in ptm_types: # 如果是PTM类型
ptm_info = {
"type": feat["type"], # 修饰类型
"description": feat.get("description", ""), # 描述
"start": feat.get("location", {}).get("start", {}).get("value"), # 起始位置
"end": feat.get("location", {}).get("end", {}).get("value"), # 结束位置
}
ptm_list.append(ptm_info)
# 输出结果
print(f"\n===== {uniprot_id} 的已知PTM修饰 =====")
print(f"{'类型':<25}{'位置':<10}{'描述'}")
print("-" * 70)
for ptm in ptm_list:
pos = f"{ptm['start']}-{ptm['end']}" if ptm['start'] != ptm['end'] else str(ptm['start'])
print(f"{ptm['type']:<25}{pos:<10}{ptm['description']}")
print(f"\n总计 {len(ptm_list)} 个PTM位点")
return ptm_list
# ========== 使用示例 ==========
# 查询TP53蛋白的PTM
ptms = get_uniprot_ptm("P04637")
# 查询EGFR蛋白的PTM
ptms_egfr = get_uniprot_ptm("P00533")
三、糖基化位点预测¶
#!/usr/bin/env python3
"""N-糖基化位点预测(基于N-X-S/T共识序列)"""
import re # 正则表达式
def predict_n_glycosylation(sequence, protein_name="unknown"):
"""
预测N-糖基化位点
N-糖基化共识序列:N-X-S/T(X不能是P)
"""
# N-X-S/T模式(X≠P)
pattern = r"N[^P][ST]" # 正则:N + 非P的任意氨基酸 + S或T
sites = []
for match in re.finditer(pattern, sequence): # 搜索所有匹配
pos = match.start() + 1 # 位置(从1开始)
motif = match.group() # 匹配到的序列
sites.append({
"position": pos, # 修饰位置(N的位置)
"motif": motif, # 共识序列
"context": sequence[max(0, match.start()-5):match.end()+5] # 上下文
})
print(f"\n===== {protein_name} N-糖基化位点预测 =====")
print(f"共识序列: N-X-S/T (X≠P)")
print(f"{'位置':<8}{'模式':<8}{'上下文序列'}")
print("-" * 40)
for site in sites:
print(f"N{site['position']:<7}{site['motif']:<8}{site['context']}")
print(f"\n预测到 {len(sites)} 个潜在N-糖基化位点")
return sites
# ========== 使用示例 ==========
# 示例:人IgG1 Fc区域
igg_seq = "DKTHTCPPCPAPELLGGPSVFLFPPKPKDTLMISRTPEVTCVVVDVSHEDPEVKFNWYVDGVEVHNAKTKPREEQYNSTYRVVSVLTVLHQDWLNGKEYKCKVSNKALPAPIEKTISKAK"
predict_n_glycosylation(igg_seq, "IgG1_Fc")
四、常用PTM预测工具汇总¶
#!/usr/bin/env python3
"""整合多个PTM预测工具的结果"""
# ========== 常用PTM预测工具一览 ==========
ptm_tools = {
"磷酸化": {
"NetPhos 3.1": "https://services.healthtech.dtu.dk/services/NetPhos-3.1/",
"GPS 6.0": "http://gps.biocuckoo.cn/",
"PhosphoSitePlus": "https://www.phosphosite.org/",
"Scansite 4": "https://scansite4.mit.edu/",
},
"糖基化": {
"NetNGlyc 1.0": "https://services.healthtech.dtu.dk/services/NetNGlyc-1.0/",
"NetOGlyc 4.0": "https://services.healthtech.dtu.dk/services/NetOGlyc-4.0/",
"GlycoMine": "https://glycomine.erc.monash.edu/",
},
"泛素化": {
"UbPred": "http://www.ubpred.org/",
"BDM-PUB": "http://bdmpub.biocuckoo.org/",
},
"乙酰化": {
"PLMD": "http://plmd.biocuckoo.org/",
"GPS-PAIL": "http://pail.biocuckoo.org/",
},
"SUMO化": {
"GPS-SUMO": "http://sumosp.biocuckoo.org/",
"JASSA": "http://www.jassa.fr/",
},
"综合数据库": {
"dbPTM": "https://dbptm.mbc.nctu.edu.tw/",
"PhosphoSitePlus": "https://www.phosphosite.org/",
"UniProt PTM": "https://www.uniprot.org/",
}
}
# 打印工具列表
for ptm_type, tools in ptm_tools.items():
print(f"\n{'='*50}")
print(f" {ptm_type} 预测工具")
print(f"{'='*50}")
for name, url in tools.items():
print(f" {name:<20} → {url}")
常见报错与解决¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
Sequence too short | 输入序列太短 | PTM预测通常需要≥20个氨基酸的上下文 |
Invalid amino acid | 序列包含非标准氨基酸 | 删除X、U等非标准字符 |
Server timeout | 在线工具超时 | 分批提交,或使用本地安装版 |
No results | 序列中没有可修饰的残基 | 确认序列是蛋白质序列而非核酸 |
API rate limit | 请求太频繁 | 添加延迟,每次请求间隔1-2秒 |
Format error | FASTA格式不对 | 确认>开头的标题行和纯序列行 |
速查表¶
========================================
蛋白质修饰位点预测 速查表
========================================
【常见PTM类型与修饰位点】
磷酸化 → S(丝氨酸)/T(苏氨酸)/Y(酪氨酸)
N-糖基化 → N-X-S/T (X≠P)
O-糖基化 → S/T
泛素化 → K(赖氨酸)
乙酰化 → K(赖氨酸)
甲基化 → K/R(赖氨酸/精氨酸)
SUMO化 → ΨKXE (Ψ=疏水氨基酸)
二硫键 → C-C(两个半胱氨酸)
脂质修饰 → C(半胱氨酸)/G(甘氨酸)
【常用激酶共识序列】
PKA → R-R-X-S
PKC → R-X-X-S-X-R
CK2 → S-X-X-D/E
CDK → S-P-X-K
MAPK → P-X-S-P
ATM/ATR → S-Q
【关键预测工具】
磷酸化 → NetPhos, GPS, Scansite
糖基化 → NetNGlyc, NetOGlyc
泛素化 → UbPred, BDM-PUB
综合 → dbPTM, PhosphoSitePlus
【UniProt PTM查询】
REST API → https://rest.uniprot.org/uniprotkb/{ID}.json
特征类型 → "Modified residue", "Glycosylation", etc.
【分析流程】
1. 获取蛋白质序列 → UniProt/NCBI
2. 预测PTM位点 → 多工具交叉验证
3. 查已知PTM → dbPTM/PhosphoSitePlus
4. 功能分析 → 修饰对功能的影响
5. 可视化 → PyMOL标注修饰位点
【面试考点】
Q: 磷酸化的生物学意义?
A: 蛋白质功能的"开关",调控信号转导、细胞周期、代谢等
Q: 怎么验证预测的PTM位点?
A: 质谱鉴定(MS/MS)、位点突变实验、Western blot
Q: N-糖基化的共识序列是什么?
A: N-X-S/T(N=天冬酰胺,X=非脯氨酸的任意氨基酸,S/T=丝/苏氨酸)
========================================
参考资料:dbPTM数据库 | PhosphoSitePlus | UniProt | NetPhos | GPS Suite