蛋白质亚细胞定位预测¶
一句话概述:蛋白质亚细胞定位预测就是回答"这个蛋白质在细胞哪个房间工作"——是在细胞核里当管理层,还是在细胞膜上当保安,还是在线粒体里发电,对理解蛋白质功能至关重要。
核心知识点表¶
| 知识点 | 白话解释 | 重要程度 |
|---|---|---|
| 亚细胞定位 | 蛋白质在细胞哪个"房间"工作 | ⭐⭐⭐⭐⭐ |
| 信号肽 | 蛋白质N端的"地址标签",指引蛋白去分泌途径 | ⭐⭐⭐⭐⭐ |
| 跨膜域 | 蛋白质穿过细胞膜的部分,像"钉子"钉在膜上 | ⭐⭐⭐⭐ |
| 核定位信号(NLS) | 把蛋白质送进细胞核的"通行证" | ⭐⭐⭐⭐ |
| DeepLoc | 基于深度学习的亚细胞定位预测工具(最新) | ⭐⭐⭐⭐⭐ |
| SignalP | 信号肽预测的金标准工具 | ⭐⭐⭐⭐⭐ |
| TMHMM/DeepTMHMM | 跨膜域预测工具 | ⭐⭐⭐⭐ |
一、亚细胞定位基础¶
细胞 = 一栋大楼,蛋白质 = 大楼里的员工
主要"房间"(亚细胞区室):
──────────────────────────────────
区室 白话解释 常驻蛋白质
──────────────────────────────────
细胞核(Nucleus) 总经理办公室 转录因子、组蛋白
细胞质(Cytoplasm) 开放式办公区 代谢酶、信号分子
细胞膜(Membrane) 大门保安 受体、通道蛋白
线粒体 发电机房 呼吸链复合体
内质网(ER) 快递包装中心 蛋白质折叠酶
高尔基体 快递分发站 糖基化酶
溶酶体 垃圾处理厂 水解酶
过氧化物酶体 危险品处理间 氧化酶
分泌途径 快递出门 分泌蛋白
──────────────────────────────────
"地址标签"(定位信号):
信号肽 → "请送到分泌途径"(N端,20-30个氨基酸)
NLS → "请送进细胞核"(如PKKKRKV)
NES → "请送出细胞核"(富含亮氨酸)
MTS → "请送进线粒体"(N端,正电荷+两亲性α螺旋)
跨膜域 → "请钉在膜上"(约20个疏水氨基酸)
二、DeepLoc 2.0 亚细胞定位预测¶
2.1 在线使用¶
# DeepLoc 2.0 在线工具
# 网址:https://services.healthtech.dtu.dk/services/DeepLoc-2.0/
# 输入:蛋白质FASTA序列
# 输出:每个亚细胞区室的预测概率
# 支持的定位类别(10类):
# 1. Cytoplasm(细胞质)
# 2. Nucleus(细胞核)
# 3. Extracellular(胞外/分泌)
# 4. Cell membrane(细胞膜)
# 5. Mitochondrion(线粒体)
# 6. Endoplasmic reticulum(内质网)
# 7. Golgi apparatus(高尔基体)
# 8. Lysosome/Vacuole(溶酶体)
# 9. Peroxisome(过氧化物酶体)
# 10. Plastid(质体,植物专用)
2.2 批量预测(Python)¶
#!/usr/bin/env python3
"""批量进行蛋白质亚细胞定位预测"""
import requests # HTTP请求
import time # 延迟
from Bio import SeqIO # 序列解析
import pandas as pd # 数据处理
# ========== 使用UniProt注释获取定位信息 ==========
def get_subcellular_location(uniprot_id):
"""从UniProt获取蛋白质的亚细胞定位注释"""
url = f"https://rest.uniprot.org/uniprotkb/{uniprot_id}.json" # UniProt API
response = requests.get(url) # 发送请求
if response.status_code != 200:
return None
data = response.json()
# 提取亚细胞定位信息
locations = []
comments = data.get("comments", [])
for comment in comments:
if comment.get("commentType") == "SUBCELLULAR LOCATION": # 找亚细胞定位注释
for loc in comment.get("subcellularLocations", []):
location = loc.get("location", {}).get("value", "")
locations.append(location)
return locations
# ========== 使用示例 ==========
test_proteins = ["P04637", "P00533", "P42336", "Q9UHD2"] # TP53, EGFR, PIK3CA, TBK1
results = []
for uid in test_proteins:
locs = get_subcellular_location(uid)
results.append({"UniProt_ID": uid, "Locations": "; ".join(locs) if locs else "N/A"})
print(f"{uid}: {locs}")
time.sleep(0.5) # 每次请求间隔0.5秒(避免被限流)
# 转为表格
df = pd.DataFrame(results)
print("\n===== 亚细胞定位结果 =====")
print(df.to_string(index=False))
三、SignalP 6.0 信号肽预测¶
# ========== SignalP在线使用 ==========
# 网址:https://services.healthtech.dtu.dk/services/SignalP-6.0/
# 输入:蛋白质FASTA序列
# 输出:是否有信号肽、切割位点位置
# ========== 命令行安装(需申请license) ==========
# 下载SignalP 6.0
# 注册后从DTU下载
# 运行SignalP
signalp6 \
--fastafile proteins.fasta \ # 输入文件
--output_dir signalp_results \ # 输出目录
--format txt \ # 输出格式
--organism eukarya \ # 生物类型:真核/古菌/革兰氏阳性/阴性
--mode fast # 运行模式:fast或slow
#!/usr/bin/env python3
"""解析SignalP结果"""
import pandas as pd # 数据处理
# ========== 简单的信号肽特征检测 ==========
def check_signal_peptide_features(sequence):
"""基于基本规则检查信号肽特征"""
# 信号肽的三个区域
# n-region: N端正电荷区(1-5个氨基酸)
# h-region: 中间疏水核心(7-15个氨基酸)
# c-region: C端切割位点区(3-7个氨基酸)
if len(sequence) < 20: # 序列太短
return {"has_sp": False, "reason": "序列太短"}
n_region = sequence[:5] # 前5个氨基酸
h_region = sequence[5:20] # 5-20位氨基酸
# 检查N端正电荷(K或R)
positive_count = sum(1 for aa in n_region if aa in "KR")
# 检查疏水核心
hydrophobic = "AILMFVW" # 疏水氨基酸
hydro_count = sum(1 for aa in h_region if aa in hydrophobic)
hydro_ratio = hydro_count / len(h_region)
# 简单判断
has_sp = positive_count >= 1 and hydro_ratio > 0.5
return {
"has_sp": has_sp, # 是否可能有信号肽
"n_positive_charge": positive_count, # N端正电荷数
"h_hydrophobicity": round(hydro_ratio, 2), # 疏水比例
"n_region": n_region, # N端序列
"h_region": h_region # 疏水核心序列
}
# ========== 测试 ==========
# 有信号肽的蛋白质(人胰岛素前体)
insulin = "MALWMRLLPLLALLALWGPDPAAA" # 胰岛素信号肽
result = check_signal_peptide_features(insulin)
print(f"胰岛素前体: {result}")
# 没有信号肽的蛋白质(p53)
p53 = "MEEPQSDPSVEPPLSQETFSDLWKL"
result2 = check_signal_peptide_features(p53)
print(f"p53蛋白: {result2}")
四、TMHMM/DeepTMHMM 跨膜域预测¶
# ========== DeepTMHMM在线使用 ==========
# 网址:https://services.healthtech.dtu.dk/services/DeepTMHMM-1.0/
# 输入:蛋白质FASTA序列
# 输出:每个残基的拓扑预测
# i = 细胞内
# o = 细胞外
# M = 跨膜区
# S = 信号肽
#!/usr/bin/env python3
"""简单的跨膜域预测(基于疏水性分析)"""
import matplotlib.pyplot as plt # 画图
import numpy as np # 数值计算
# Kyte-Doolittle疏水性量表
KD_SCALE = {
'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5,
'Q': -3.5, 'E': -3.5, 'G': -0.4, 'H': -3.2, 'I': 4.5,
'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6,
'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, 'V': 4.2
}
def hydropathy_plot(sequence, window=19, name="protein"):
"""
Kyte-Doolittle疏水性图
跨膜域通常是连续的高疏水性区域(平均值>1.6,长度≥20)
"""
scores = []
positions = []
for i in range(len(sequence) - window + 1): # 滑动窗口
window_seq = sequence[i:i+window] # 取窗口内的序列
avg_score = np.mean([KD_SCALE.get(aa, 0) for aa in window_seq]) # 计算平均疏水性
scores.append(avg_score)
positions.append(i + window // 2) # 窗口中心位置
# 找潜在跨膜域(疏水性>1.6的连续区域)
tm_regions = []
in_tm = False
start = 0
for i, s in enumerate(scores):
if s > 1.6 and not in_tm: # 进入跨膜域
in_tm = True
start = positions[i]
elif s <= 1.6 and in_tm: # 离开跨膜域
in_tm = False
if positions[i] - start >= 15: # 长度≥15个氨基酸才算
tm_regions.append((start, positions[i]))
# 画图
plt.figure(figsize=(14, 5))
plt.plot(positions, scores, color="steelblue", linewidth=1.5) # 疏水性曲线
plt.axhline(y=1.6, color="red", linestyle="--", alpha=0.7, label="TM threshold (1.6)") # 阈值线
plt.axhline(y=0, color="gray", linestyle="-", alpha=0.3) # 零线
# 标注跨膜域
for start, end in tm_regions:
plt.axvspan(start, end, alpha=0.2, color="red", label=f"TM {start}-{end}")
plt.xlabel("Residue Position", fontsize=12)
plt.ylabel("Hydropathy Score", fontsize=12)
plt.title(f"Kyte-Doolittle Hydropathy Plot - {name}", fontsize=14)
plt.legend()
plt.tight_layout()
plt.savefig(f"hydropathy_{name}.png", dpi=300)
plt.close()
print(f"预测的跨膜域: {tm_regions if tm_regions else '无'}")
return tm_regions
# ========== 测试 ==========
# EGFR(有一个跨膜域)
egfr_tm_region = "IATGMVGALLLLLVVALGIGLFMRR" # EGFR跨膜区附近序列
# 完整序列太长,这里只展示原理
print("跨膜域预测工具:建议使用DeepTMHMM在线版获取准确结果")
常见报错与解决¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
Sequence too long | 在线工具有序列长度限制 | 分批提交或使用本地版 |
Invalid characters | 序列含非标准氨基酸 | 将X/U等替换为标准氨基酸或删除 |
Server busy | 在线服务器繁忙 | 过一会再试,或使用本地安装版 |
No prediction | 序列格式不是FASTA | 确保有>开头的标题行 |
License expired | SignalP本地版license过期 | 重新申请academic license |
速查表¶
========================================
蛋白质亚细胞定位预测 速查表
========================================
【主要预测工具】
DeepLoc 2.0 → 综合定位预测(深度学习,10类)
SignalP 6.0 → 信号肽预测(金标准)
DeepTMHMM → 跨膜域预测
TargetP 2.0 → 分泌途径/线粒体/叶绿体分选
NucPred → 核定位预测
MitoFates → 线粒体定位预测
【定位信号特征】
信号肽 → N端, 20-30aa, 疏水核心
NLS核定位信号 → 富含K/R(如PKKKRKV)
NES核输出信号 → 富含L(LxxxLxxLxL)
MTS线粒体靶向信号 → N端, 正电荷, 两亲性螺旋
GPI锚定信号 → C端, 预测切割位点
【定位信号识别规则】
分泌蛋白 → 有信号肽, 无跨膜域
膜蛋白 → 有信号肽或跨膜域
细胞核蛋白 → 有NLS
线粒体蛋白 → 有MTS
细胞质蛋白 → 无上述信号
【在线工具网址】
DeepLoc → services.healthtech.dtu.dk
SignalP → services.healthtech.dtu.dk
DeepTMHMM → services.healthtech.dtu.dk
UniProt定位注释 → uniprot.org
【面试考点】
Q: 信号肽的结构是什么?
A: 三段式:n区(正电荷)+ h区(疏水核心)+ c区(切割位点)
Q: 怎么区分分泌蛋白和膜蛋白?
A: 分泌蛋白有信号肽但无跨膜域;膜蛋白有跨膜域
Q: DeepLoc用的什么算法?
A: 基于预训练蛋白质语言模型(如ESM)的深度学习分类器
========================================
参考资料:DeepLoc 2.0 | SignalP 6.0 | DeepTMHMM | UniProt | DTU Health Tech