蛋白质域注释InterPro¶
一句话概述:InterPro是蛋白质"身份证系统"——把蛋白质按功能域(domain)分类,告诉你这个蛋白质有哪些功能模块,就像看一把瑞士军刀上有哪些工具。
核心知识点表¶
| 知识点 | 白话解释 | 重要程度 |
|---|---|---|
| 蛋白质域(Domain) | 蛋白质上的独立功能单元,像积木块一样 | ⭐⭐⭐⭐⭐ |
| InterPro | 整合了多个蛋白质域数据库的"超级数据库" | ⭐⭐⭐⭐⭐ |
| InterProScan | 用序列搜索InterPro数据库的工具 | ⭐⭐⭐⭐⭐ |
| Pfam | 蛋白质家族数据库,基于HMM模型 | ⭐⭐⭐⭐ |
| PROSITE | 用模式(pattern)描述蛋白质功能位点 | ⭐⭐⭐ |
| GO注释 | InterPro自带的Gene Ontology功能注释 | ⭐⭐⭐⭐ |
| 信号肽/跨膜域 | InterProScan还能预测蛋白质的信号肽和跨膜区 | ⭐⭐⭐ |
一、InterPro是什么?(白话解释)¶
蛋白质 = 一把瑞士军刀
蛋白质域 = 瑞士军刀上的每个工具(刀片、剪刀、开瓶器...)
InterPro的工作:
1. 你给它一个蛋白质序列
2. 它告诉你这个蛋白质上有哪些"工具"(功能域)
3. 每个工具在序列的哪个位置
4. 这些工具有什么功能
InterPro整合了这些数据库:
Pfam → 蛋白质家族(HMM模型,最常用)
PROSITE → 功能位点模式
PRINTS → 蛋白质指纹
PANTHER → 蛋白质进化分类
CDD → 保守域数据库
SMART → 简单模块化架构
SUPERFAMILY → 蛋白质超家族
Gene3D → 基因组3D结构域
HAMAP → 微生物蛋白注释
...等13+个数据库
二、InterProScan安装¶
2.1 本地安装¶
# ========== 下载InterProScan ==========
# 官网:https://www.ebi.ac.uk/interpro/download/
wget https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.71-102.0/interproscan-5.71-102.0-64-bit.tar.gz # 下载最新版
tar -xzf interproscan-5.71-102.0-64-bit.tar.gz # 解压
cd interproscan-5.71-102.0 # 进入目录
# ========== 安装依赖 ==========
# 需要Java 11+
java -version # 检查Java版本
# 如果没有Java
conda install -c conda-forge openjdk=17 # 用conda安装Java 17
# ========== 测试安装 ==========
./interproscan.sh -i test_all_appl.fasta -f tsv # 运行测试
# 如果正常输出结果表格,说明安装成功
# ========== 添加到PATH ==========
echo 'export PATH=$PATH:/path/to/interproscan-5.71-102.0' >> ~/.bashrc # 添加到环境变量
source ~/.bashrc # 刷新环境变量
2.2 conda安装(简化版)¶
# conda安装InterProScan
conda create -n interpro python=3.10 # 创建环境
conda activate interpro # 激活环境
conda install -c bioconda interproscan # 安装(可能需要较长时间下载数据库)
三、InterProScan使用¶
3.1 基本命令行使用¶
# ========== 基本用法 ==========
# 对单个蛋白质序列注释
interproscan.sh \
-i protein.fasta \ # 输入:蛋白质FASTA文件
-o protein_interpro.tsv \ # 输出:TSV格式结果
-f tsv,gff3,json \ # 输出格式:TSV + GFF3 + JSON
-goterms \ # 包含GO注释
-iprlookup \ # 包含InterPro注释
-pa \ # 包含通路注释
-t p \ # 序列类型:p=蛋白质, n=核酸
-cpu 8 # 使用8个CPU核心
# ========== 批量注释 ==========
# 对基因组预测的所有蛋白质进行注释
interproscan.sh \
-i all_proteins.fasta \ # 输入:所有蛋白质序列
-o all_proteins_interpro \ # 输出文件前缀
-f tsv,gff3 \ # 输出格式
-goterms \ # GO注释
-iprlookup \ # InterPro注释
-pa \ # 通路注释
-dp \ # 禁用预计算匹配查找(本地运行必须加)
-t p \ # 蛋白质类型
-cpu 16 # 16核并行
# ========== 只运行特定分析 ==========
# 只用Pfam和PANTHER分析(更快)
interproscan.sh \
-i protein.fasta \
-appl Pfam,PANTHER \ # 只用Pfam和PANTHER两个数据库
-o protein_pfam.tsv \
-f tsv \
-goterms # 还是要GO注释
3.2 输出文件解读¶
# ========== TSV输出列说明 ==========
# 用head命令查看输出
head -5 protein_interpro.tsv
# TSV文件的列(用tab分隔):
# 列1: 蛋白质ID → 你的蛋白质名称
# 列2: 序列MD5 → 序列的MD5哈希值
# 列3: 序列长度 → 蛋白质长度(氨基酸数)
# 列4: 分析类型 → Pfam/PANTHER/CDD等
# 列5: 匹配ID → 数据库中的条目ID(如PF00069)
# 列6: 匹配描述 → 功能域描述(如Protein kinase domain)
# 列7: 起始位置 → 域在序列上的起始位置
# 列8: 结束位置 → 域在序列上的结束位置
# 列9: E-value → 统计显著性(越小越可靠)
# 列10: 状态 → T=真匹配
# 列11: 日期 → 分析日期
# 列12: InterPro ID → InterPro整合后的ID(如IPR000719)
# 列13: InterPro描述 → InterPro描述
# 列14: GO注释 → Gene Ontology条目
# 列15: 通路注释 → 代谢通路信息
# ========== 统计注释结果 ==========
# 统计各数据库的匹配数
cut -f4 protein_interpro.tsv | sort | uniq -c | sort -rn # 按分析类型统计
# 统计InterPro域分布
cut -f12,13 protein_interpro.tsv | sort | uniq -c | sort -rn | head -20 # Top20域
# 提取GO注释
awk -F'\t' '$14!=""' protein_interpro.tsv | cut -f1,14 | sort -u > go_annotations.txt # 提取非空GO注释
四、Python解析InterPro结果¶
#!/usr/bin/env python3
"""解析InterProScan结果并进行统计分析"""
import pandas as pd # 数据处理
from collections import Counter # 计数器
import matplotlib.pyplot as plt # 绑图
# ========== 读取TSV结果 ==========
# InterProScan TSV文件没有表头,需要手动指定列名
columns = [
"protein_id", # 蛋白质ID
"md5", # 序列MD5
"length", # 序列长度
"analysis", # 分析数据库
"match_id", # 匹配条目ID
"match_desc", # 匹配描述
"start", # 起始位置
"end", # 结束位置
"evalue", # E值
"status", # 匹配状态
"date", # 日期
"interpro_id", # InterPro ID
"interpro_desc", # InterPro描述
"go_terms", # GO注释
"pathway" # 通路注释
]
df = pd.read_csv(
"protein_interpro.tsv",
sep="\t", # Tab分隔
header=None, # 无表头
names=columns # 使用自定义列名
)
print(f"总注释记录数: {len(df)}") # 打印总记录数
print(f"注释的蛋白质数: {df['protein_id'].nunique()}") # 唯一蛋白质数
# ========== 统计分析 ==========
# 1. 各数据库贡献
db_counts = df["analysis"].value_counts() # 统计每个数据库的匹配数
print("\n各数据库注释数量:")
print(db_counts)
# 2. 最常见的蛋白质域
domain_counts = df["interpro_desc"].dropna().value_counts() # 统计最常见的域
print("\n最常见的蛋白质域 TOP10:")
print(domain_counts.head(10))
# 3. GO注释统计
go_series = df["go_terms"].dropna() # 获取非空GO注释
all_go = []
for go_str in go_series: # 遍历每条GO注释
all_go.extend(go_str.split("|")) # GO注释用|分隔
go_counts = Counter(all_go) # 统计GO term频率
print(f"\n总GO注释数: {len(go_counts)}")
# ========== 可视化 ==========
# 蛋白质域分布柱状图
fig, axes = plt.subplots(1, 2, figsize=(16, 6)) # 创建两个子图
# 子图1:各数据库注释数
db_counts.head(10).plot(kind="barh", ax=axes[0], color="steelblue") # 水平柱状图
axes[0].set_xlabel("Number of annotations") # X轴标签
axes[0].set_title("Annotations per database") # 标题
# 子图2:最常见的域
domain_counts.head(10).plot(kind="barh", ax=axes[1], color="coral") # 水平柱状图
axes[1].set_xlabel("Frequency") # X轴标签
axes[1].set_title("Top 10 protein domains") # 标题
plt.tight_layout() # 自动布局
plt.savefig("interpro_stats.png", dpi=300, bbox_inches="tight") # 保存图片
print("统计图已保存到 interpro_stats.png")
五、InterPro在线API查询¶
#!/usr/bin/env python3
"""使用InterPro REST API查询蛋白质域信息"""
import requests # HTTP请求
import json # JSON解析
# ========== 查询单个蛋白质的InterPro注释 ==========
def query_interpro(uniprot_id):
"""通过UniProt ID查询InterPro注释"""
url = f"https://www.ebi.ac.uk/interpro/api/entry/interpro/protein/uniprot/{uniprot_id}" # API地址
response = requests.get(url, headers={"Accept": "application/json"}) # 发送GET请求
if response.status_code == 200: # 请求成功
data = response.json()
results = data.get("results", []) # 获取结果列表
print(f"\n蛋白质 {uniprot_id} 的InterPro注释:")
print(f"{'InterPro ID':<15}{'类型':<20}{'描述'}")
print("-" * 70)
for entry in results: # 遍历每个InterPro条目
metadata = entry.get("metadata", {})
print(f"{metadata.get('accession', 'N/A'):<15}" # InterPro ID
f"{metadata.get('type', 'N/A'):<20}" # 条目类型
f"{metadata.get('name', 'N/A')}") # 描述
return results
else:
print(f"查询失败: HTTP {response.status_code}")
return []
# ========== 查询特定InterPro条目 ==========
def get_interpro_entry(interpro_id):
"""获取InterPro条目详细信息"""
url = f"https://www.ebi.ac.uk/interpro/api/entry/interpro/{interpro_id}" # 条目API
response = requests.get(url, headers={"Accept": "application/json"})
if response.status_code == 200:
data = response.json()
metadata = data.get("metadata", {})
print(f"\nInterPro条目: {interpro_id}")
print(f"名称: {metadata.get('name', 'N/A')}") # 域名称
print(f"类型: {metadata.get('type', 'N/A')}") # 域类型
print(f"蛋白质数: {metadata.get('counters', {}).get('proteins', 'N/A')}") # 包含的蛋白质数
return data
else:
print(f"查询失败: HTTP {response.status_code}")
return {}
# ========== 使用示例 ==========
# 查询TP53蛋白(UniProt: P04637)的功能域
query_interpro("P04637")
# 查询特定域的详细信息
get_interpro_entry("IPR011615") # p53 DNA结合域
常见报错与解决¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
Java not found | 没安装Java或版本太低 | 安装Java 11+:conda install openjdk=17 |
OutOfMemoryError | Java内存不够 | 修改interproscan.sh中的-Xmx参数,如-Xmx8g |
No matches found | 序列太短或不是蛋白质 | 确认输入是蛋白质序列,检查序列质量 |
Binary not found | 某个分析工具没装好 | 运行python3 setup.py重新初始化 |
Lookup service error | 网络问题或数据库未下载 | 用-dp参数禁用预计算查找 |
Timeout | 序列太多处理超时 | 分批运行,每批<1000条 |
速查表¶
========================================
蛋白质域注释InterPro 速查表
========================================
【InterProScan基本命令】
标准注释 → interproscan.sh -i input.fasta -f tsv -goterms
快速注释(Pfam) → interproscan.sh -i input.fasta -appl Pfam -f tsv
批量注释 → interproscan.sh -i all.fasta -f tsv -goterms -cpu 16 -dp
【输出格式】
TSV → 制表符分隔(推荐,易解析)
GFF3 → 基因组注释格式
JSON → 结构化数据
XML → XML格式
【常用参数】
-i → 输入文件(FASTA格式)
-o → 输出文件
-f → 输出格式(tsv,gff3,json,xml)
-t → 序列类型(p=蛋白质, n=核酸)
-appl → 指定使用的数据库
-goterms → 包含GO注释
-iprlookup → 包含InterPro注释
-pa → 包含通路注释
-dp → 禁用预计算查找(本地运行)
-cpu → CPU核数
【InterPro整合的数据库】
Pfam → 蛋白质家族(HMM模型)
PANTHER → 进化分类
CDD → 保守域
SMART → 模块化架构
Gene3D → 3D结构域
SUPERFAMILY → 蛋白质超家族
PROSITE → 功能位点模式
PRINTS → 蛋白质指纹
【InterPro条目类型】
Domain → 功能域(独立折叠单元)
Family → 蛋白质家族
Homologous_superfamily → 同源超家族
Repeat → 重复序列
Site → 功能位点
【API查询】
蛋白质注释 → /api/entry/interpro/protein/uniprot/{ID}
条目详情 → /api/entry/interpro/{IPR_ID}
基地址 → https://www.ebi.ac.uk/interpro/api/
【面试考点】
Q: InterPro和Pfam的关系?
A: InterPro整合了Pfam等13+个数据库,Pfam是其中最大的子库
Q: InterProScan输出怎么看?
A: 主要看:蛋白质ID、匹配域ID、域描述、起止位置、E-value
Q: 什么是蛋白质域?
A: 蛋白质中能独立折叠的功能单元,一个蛋白可含多个域
========================================
参考资料:InterPro官方文档 | www.ebi.ac.uk/interpro | Pfam数据库 | InterProScan用户手册