跳转至

蛋白质修饰位点预测

一句话概述:蛋白质翻译后修饰(PTM)就像给蛋白质"贴标签"——磷酸化、糖基化、泛素化等修饰决定了蛋白质在哪里干活、干什么活、什么时候"下班",预测修饰位点是理解蛋白质功能调控的关键。

核心知识点表

知识点白话解释重要程度
翻译后修饰(PTM)蛋白质翻译完之后被加上的化学修饰,像"贴标签"⭐⭐⭐⭐⭐
磷酸化最常见的PTM,在S/T/Y上加磷酸基团,像"开关"⭐⭐⭐⭐⭐
糖基化在蛋白质上加糖链,影响蛋白质折叠和识别⭐⭐⭐⭐
泛素化在赖氨酸上加泛素标签,标记蛋白质"该降解了"⭐⭐⭐⭐
乙酰化在赖氨酸上加乙酰基,调控基因表达(组蛋白修饰)⭐⭐⭐⭐
NetPhos/GPS磷酸化位点预测工具⭐⭐⭐
dbPTMPTM综合数据库⭐⭐⭐

一、蛋白质翻译后修饰概览

蛋白质 = 一个刚出厂的新手机
翻译后修饰 = 给手机装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 errorFASTA格式不对确认>开头的标题行和纯序列行

速查表

========================================
蛋白质修饰位点预测 速查表
========================================

【常见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