关于 string-database
string-database 是面向研究人员的 STRING 蛋白质互作与通路分析技能,提供 Python 辅助函数和 API 参考,支持网络查询、富集及同源性分析。
主要功能
- 01映射蛋白质标识符
- 02获取互作网络
- 03查找互作伙伴
- 04执行功能与 PPI 富集
- 05生成网络图像
- 06查询同源性与版本
适用场景
- 01分析实验获得的蛋白质列表
- 02探索种子蛋白的互作伙伴
- 03检验蛋白质是否构成功能模块
- 04比较不同物种的互作网络
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ovachiever/ droid-tings --skill string-database安装后在 Claude Code 中输入/string-database确认已加载。
附带文件references/string_reference.mdscripts/string_api.py
详细介绍
STRING 数据库
概述
STRING 是一个综合性数据库,涵盖 5000 多种生物体中的 5900 万个蛋白质和 200 多亿种已知及预测的蛋白质-蛋白质相互作用。通过 REST API 查询相互作用网络、进行功能富集分析、发现相互作用对象,适用于系统生物学和通路分析。
何时使用此技能
在以下情况下应使用此技能:
- 获取单个或多个蛋白质的蛋白质-蛋白质相互作用网络
- 对蛋白质列表进行功能富集分析(GO、KEGG、Pfam)
- 发现相互作用对象并扩展蛋白质网络
- 检验蛋白质是否构成功能显著富集的模块
- 使用基于证据的配色生成网络可视化
- 分析同源性和蛋白质家族关系
- 开展跨物种蛋白质相互作用比较
- 识别枢纽蛋白和网络连接模式
快速入门
此技能提供:
- 用于所有 STRING REST API 操作的 Python 辅助函数(
scripts/string_api.py) - 包含详细 API 规范的全面参考文档(
references/string_reference.md)
当用户请求 STRING 数据时,请确定所需的操作,并使用 scripts/string_api.py 中相应的函数。
核心操作
1. 标识符映射(string_map_ids)
将基因名称、蛋白质名称和外部 ID 转换为 STRING 标识符。
使用时机:开始任何 STRING 分析、验证蛋白质名称、查找规范标识符。
用法:
from scripts.string_api import string_map_ids
# Map single protein
result = string_map_ids('TP53', species=9606)
# Map multiple proteins
result = string_map_ids(['TP53', 'BRCA1', 'EGFR', 'MDM2'], species=9606)
# Map with multiple matches per query
result = string_map_ids('p53', species=9606, limit=5)
参数:
species:NCBI 分类群 ID(9606 = 人类,10090 = 小鼠,7227 = 果蝇)limit:每个标识符的匹配数量(默认值:1)echo_query:在输出中包含查询词(默认值:1)
最佳实践:始终先映射标识符,以加快后续查询。
2. 网络检索(string_network)
以表格格式获取蛋白质-蛋白质相互作用网络数据。
使用时机:构建相互作用网络、分析连接性、检索相互作用证据。
用法:
from scripts.string_api import string_network
# Get network for single protein
network = string_network('9606.ENSP00000269305', species=9606)
# Get network with multiple proteins
proteins = ['9606.ENSP00000269305', '9606.ENSP00000275493']
network = string_network(proteins, required_score=700)
# Expand network with additional interactors
network = string_network('TP53', species=9606, add_nodes=10, required_score=400)
# Physical interactions only
network = string_network('TP53', species=9606, network_type='physical')
参数:
required_score:置信度阈值(0-1000)- 150:低置信度(探索性)
- 400:中等置信度(默认值,标准分析)
- 700:高置信度(保守)
- 900:最高置信度(非常严格)
network_type:'functional'(所有证据,默认值)或'physical'(仅直接结合)add_nodes:添加连接数最多的 N 个蛋白质(0-10)
输出列:相互作用对、置信度分数以及各项证据分数(邻域、融合、共表达、实验、数据库、文本挖掘)。
3. 网络可视化(string_network_image)
生成 PNG 格式的网络可视化图像。
使用时机:制作图表、进行可视化探索、准备演示材料。
用法:
from scripts.string_api import string_network_image
# Get network image
proteins = ['TP53', 'MDM2', 'ATM', 'CHEK2', 'BRCA1']
img_data = string_network_image(proteins, species=9606, required_score=700)
# Save image
with open('network.png', 'wb') as f:
f.write(img_data)
# Evidence-colored network
img = string_network_image(proteins, species=9606, network_flavor='evidence')
# Confidence-based visualization
img = string_network_image(proteins, species=9606, network_flavor='confidence')
# Actions network (activation/inhibition)
img = string_network_image(proteins, species=9606, network_flavor='actions')
网络样式:
'evidence':用不同颜色的线条表示证据类型(默认值)'confidence':线条粗细表示置信度'actions':显示激活/抑制关系
4. 相互作用对象(string_interaction_partners)
查找与给定蛋白质相互作用的所有蛋白质。
使用时机:发现新的相互作用、查找枢纽蛋白、扩展网络。
用法:
from scripts.string_api import string_interaction_partners
# Get top 10 interactors of TP53
partners = string_interaction_partners('TP53', species=9606, limit=10)
# Get high-confidence interactors
partners = string_interaction_partners('TP53', species=9606,
limit=20, required_score=700)
# Find interactors for multiple proteins
partners = string_interaction_partners(['TP53', 'MDM2'],
species=9606, limit=15)
参数:
limit:要返回的相互作用对象数量上限(默认值:10)required_score:置信度阈值(0-1000)
用例:
- 识别枢纽蛋白
- 从种子蛋白扩展网络
- 发现间接连接
5. 功能富集(string_enrichment)
对 Gene Ontology、KEGG 通路、Pfam 结构域等进行富集分析。
适用场景:解读蛋白质列表、通路分析、功能表征、了解生物过程。
用法:
from scripts.string_enrichment import string_enrichment
# Enrichment for a protein list
proteins = ['TP53', 'MDM2', 'ATM', 'CHEK2', 'BRCA1', 'ATR', 'TP73']
enrichment = string_enrichment(proteins, species=9606)
# Parse results to find significant terms
import pandas as pd
df = pd.read_csv(io.StringIO(enrichment), sep='\t')
significant = df[df['fdr'] < 0.05]
富集类别:
- Gene Ontology:生物过程、分子功能、细胞组分
- KEGG Pathways:代谢和信号通路
- Pfam:蛋白质结构域
- InterPro:蛋白质家族和结构域
- SMART:结构域架构
- UniProt Keywords:人工整理的功能关键词
输出列:
category:注释数据库(例如,“KEGG Pathways”、“GO Biological Process”)term:术语标识符description:易于理解的术语描述number_of_genes:具有此注释的输入蛋白质数量p_value:未校正的富集 p 值fdr:错误发现率(校正后的 p 值)
统计方法:Fisher 精确检验,并使用 Benjamini-Hochberg 方法校正 FDR。
结果解读:FDR < 0.05 表示富集具有统计显著性。
6. PPI 富集(string_ppi_enrichment)
检验蛋白质网络中的相互作用是否显著多于随机情况下的预期值。
适用场景:验证蛋白质是否构成功能模块、检验网络连通性。
用法:
from scripts.string_api import string_ppi_enrichment
import json
# Test network connectivity
proteins = ['TP53', 'MDM2', 'ATM', 'CHEK2', 'BRCA1']
result = string_ppi_enrichment(proteins, species=9606, required_score=400)
# Parse JSON result
data = json.loads(result)
print(f"Observed edges: {data['number_of_edges']}")
print(f"Expected edges: {data['expected_number_of_edges']}")
print(f"P-value: {data['p_value']}")
输出字段:
number_of_nodes:网络中的蛋白质数量number_of_edges:观察到的相互作用数量expected_number_of_edges:随机网络中的预期相互作用数量p_value:统计显著性
结果解读:
- p 值 < 0.05:网络富集具有显著性(蛋白质可能构成功能模块)
- p 值 ≥ 0.05:富集不显著(蛋白质之间可能无关)
7. 同源性评分(string_homology)
获取蛋白质相似性和同源性信息。
适用场景:识别蛋白质家族、分析旁系同源物、进行跨物种比较。
用法:
from scripts.string_api import string_homology
# Get homology between proteins
proteins = ['TP53', 'TP63', 'TP73'] # p53 family
homology = string_homology(proteins, species=9606)
适用场景:
- 蛋白质家族识别
- 旁系同源物发现
- 演化分析
8. 版本信息(string_version)
获取当前 STRING 数据库版本。
适用场景:确保结果可复现、记录方法。
用法:
from scripts.string_api import string_version
version = string_version()
print(f"STRING version: {version}")
常见分析工作流
工作流 1:蛋白质列表分析(标准工作流)
适用场景:分析实验所得的蛋白质列表(例如,差异表达分析、蛋白质组学)。
from scripts.string_api import (string_map_ids, string_network,
string_enrichment, string_ppi_enrichment,
string_network_image)
# Step 1: Map gene names to STRING IDs
gene_list = ['TP53', 'BRCA1', 'ATM', 'CHEK2', 'MDM2', 'ATR', 'BRCA2']
mapping = string_map_ids(gene_list, species=9606)
# Step 2: Get interaction network
network = string_network(gene_list, species=9606, required_score=400)
# Step 3: Test if network is enriched
ppi_result = string_ppi_enrichment(gene_list, species=9606)
# Step 4: Perform functional enrichment
enrichment = string_enrichment(gene_list, species=9606)
# Step 5: Generate network visualization
img = string_network_image(gene_list, species=9606,
network_flavor='evidence', required_score=400)
with open('protein_network.png', 'wb') as f:
f.write(img)
# Step 6: Parse and interpret results
工作流 2:单个蛋白质研究
适用场景:深入研究一种蛋白质的相互作用及其互作伙伴。
from scripts.string_api import (string_map_ids, string_interaction_partners,
string_network_image)
# Step 1: Map protein name
protein = 'TP53'
mapping = string_map_ids(protein, species=9606)
# Step 2: Get all interaction partners
partners = string_interaction_partners(protein, species=9606,
limit=20, required_score=700)
# Step 3: Visualize expanded network
img = string_network_image(protein, species=9606, add_nodes=15,
network_flavor='confidence', required_score=700)
with open('tp53_network.png', 'wb') as f:
f.write(img)
工作流 3:以通路为中心的分析
适用场景:识别并可视化特定生物通路中的蛋白质。
from scripts.string_api import string_enrichment, string_network
# Step 1: Start with known pathway proteins
dna_repair_proteins = ['TP53', 'ATM', 'ATR', 'CHEK1', 'CHEK2',
'BRCA1', 'BRCA2', 'RAD51', 'XRCC1']
# Step 2: Get network
network = string_network(dna_repair_proteins, species=9606,
required_score=700, add_nodes=5)
# Step 3: Enrichment to confirm pathway annotation
enrichment = string_enrichment(dna_repair_proteins, species=9606)
# Step 4: Parse enrichment for DNA repair pathways
import pandas as pd
import io
df = pd.read_csv(io.StringIO(enrichment), sep='\t')
dna_repair = df[df['description'].str.contains('DNA repair', case=False)]
工作流 4:跨物种分析
适用场景:比较不同生物体中的蛋白质相互作用。
from scripts.string_api import string_network
# Human network
human_network = string_network('TP53', species=9606, required_score=700)
# Mouse network
mouse_network = string_network('Trp53', species=10090, required_score=700)
# Yeast network (if ortholog exists)
yeast_network = string_network('gene_name', species=4932, required_score=700)
工作流 5:网络扩展与发现
适用场景:从种子蛋白质出发,发现相关的功能模块。
from scripts.string_api import (string_interaction_partners, string_network,
string_enrichment)
# Step 1: Start with seed protein(s)
seed_proteins = ['TP53']
# Step 2: Get first-degree interactors
partners = string_interaction_partners(seed_proteins, species=9606,
limit=30, required_score=700)
# Step 3: Parse partners to get protein list
import pandas as pd
import io
df = pd.read_csv(io.StringIO(partners), sep='\t')
all_proteins = list(set(df['preferredName_A'].tolist() +
df['preferredName_B'].tolist()))
# Step 4: Perform enrichment on expanded network
enrichment = string_enrichment(all_proteins[:50], species=9606)
# Step 5: Filter for interesting functional modules
enrichment_df = pd.read_csv(io.StringIO(enrichment), sep='\t')
modules = enrichment_df[enrichment_df['fdr'] < 0.001]
常见物种
指定物种时,请使用 NCBI 分类群 ID:
| 生物体 | 常用名 | 分类群 ID |
|---|---|---|
| Homo sapiens | 人 | 9606 |
| Mus musculus | 小鼠 | 10090 |
| Rattus norvegicus | 大鼠 | 10116 |
| Drosophila melanogaster | 果蝇 | 7227 |
| Caenorhabditis elegans | 秀丽隐杆线虫 | 6239 |
| Saccharomyces cerevisiae | 酵母 | 4932 |
| Arabidopsis thaliana | 拟南芥 | 3702 |
| Escherichia coli | 大肠杆菌 | 511145 |
| Danio rerio | 斑马鱼 | 7955 |
完整列表请访问:https://string-db.org/cgi/input?input_page_active_form=organisms
了解置信度评分
STRING 提供综合置信度评分(0-1000),整合了多种证据类型:
证据渠道
- Neighborhood(nscore):跨物种保守的基因组邻域
- Fusion(fscore):基因融合事件
- Phylogenetic Profile(pscore):跨物种共现模式
- Coexpression(ascore):相关的 RNA 表达
- Experimental(escore):生化和遗传实验
- Database(dscore):人工整理的通路和复合物数据库
- Text-mining(tscore):文献共现和 NLP 提取
推荐阈值
根据分析目标选择阈值:
- 150(低置信度):探索性分析、生成假设
- 400(中等置信度):标准分析,在敏感度和特异度之间取得平衡
- 700(高置信度):保守分析,筛选高置信度的相互作用
- 900(最高置信度):非常严格,优先考虑实验性证据
权衡:
- 较低的阈值:相互作用更多(召回率更高,假阳性更多)
- 较高的阈值:相互作用更少(精确率更高,假阴性更多)
网络类型
功能网络(默认)
包含所有类型的证据(实验、计算、文本挖掘)。表示在功能上存在关联的蛋白质,即使它们之间没有直接的物理结合。
适用场景:
- 通路分析
- 功能富集研究
- 系统生物学
- 大多数常规分析
物理网络
仅包含直接物理结合的证据(物理相互作用的实验数据和数据库注释)。
适用场景:
- 结构生物学研究
- 蛋白质复合物分析
- 直接结合验证
- 需要物理接触的场景
API 最佳实践
- 始终先映射标识符:在其他操作前使用
string_map_ids(),以加快查询速度 - 尽可能使用 STRING ID:使用格式
9606.ENSP00000269305,而不是基因名称 - 网络包含超过 10 个蛋白质时指定物种:这是获得准确结果的必要条件
- 遵守速率限制:API 调用之间等待 1 秒
- 使用带版本号的 URL 以确保可复现性:可在参考文档中找到
- 妥善处理错误:检查返回字符串是否以 "Error:" 开头
- 选择合适的置信度阈值:根据分析目标选择阈值
详细参考
如需完整的 API 文档、完整参数列表、输出格式和高级用法,请参阅 references/string_reference.md。其中包括:
- 完整的 API 端点规范
- 所有支持的输出格式(TSV、JSON、XML、PSI-MI)
- 高级功能(批量上传、values/ranks 富集)
- 错误处理和故障排除
- 与其他工具的集成(Cytoscape、R、Python 库)
- 数据许可和引用信息
故障排除
未找到蛋白质:
- 确认物种参数与标识符匹配
- 先使用
string_map_ids()尝试映射标识符 - 检查蛋白质名称是否有拼写错误
网络结果为空:
- 降低置信度阈值(
required_score) - 检查蛋白质之间是否确实存在相互作用
- 确认物种是否正确
查询超时或速度缓慢:
- 减少输入蛋白质的数量
- 使用 STRING ID,而不是基因名称
- 将大型查询拆分为多个批次
“Species required” 错误:
- 网络包含超过 10 个蛋白质时添加
species参数 - 为保持一致性,始终包含物种信息
结果看起来不符合预期:
- 使用
string_version()检查 STRING 版本 - 确认
network_type是否合适(功能或物理) - 重新检查置信度阈值的选择
其他资源
如需进行蛋白质组规模分析或上传完整物种网络:
- 访问 https://string-db.org
- 使用“Upload proteome”功能
- STRING 将生成完整的相互作用网络并预测功能
如需批量下载完整数据集:
- 下载页面:https://string-db.org/cgi/download
- 包含完整的相互作用文件、蛋白质注释和通路映射
数据许可
STRING 数据可依据 Creative Commons BY 4.0 许可免费使用:
- 可免费用于学术和商业用途
- 发布时必须注明出处
- 引用 STRING 的最新出版物
引用
在出版物中使用 STRING 时,请引用以下页面中的最新出版物:https://string-db.org/cgi/about