第12期 进阶 约15分钟

蛋白互作网络分析

使用STRING和NetworkX快速识别hub基因和功能模块

⚠️
免责声明: 本内容仅供医学学习参考,不作为临床诊断依据。 实际临床决策请结合患者具体情况和多学科意见。
🎯

技能简介

蛋白互作网络(PPI网络)分析是系统生物学的核心方法, 通过构建蛋白质相互作用网络,可以揭示差异基因之间的关联, 识别hub基因(关键调控基因), 发现功能模块(协同工作的基因群)。

传统方法需要手动上传基因列表、等待分析、下载结果、用Cytoscape画图, 一套流程下来至少半天。使用STRING数据库NetworkX, 整个流程只需15分钟!

💡 使用场景

🧬

差异基因关联分析

转录组分析得到差异基因后,探索它们之间的相互作用关系,构建调控网络

🎯

Hub基因识别

在网络中找出连接度最高的关键基因,作为潜在的疾病标志物或治疗靶点

🔍

功能模块发现

检测网络中的功能模块,了解基因协同工作的生物学意义

📊

论文级图表制作

生成美观的网络可视化图,直接用于论文发表

🛠️ 核心技能调用

1 STRING Database - 蛋白互作数据库

STRING数据库整合了实验验证、计算预测、公共数据库等多种来源的蛋白质互作信息, 覆盖5000+生物、2400万蛋白质、2000万互作关系。

# 调用STRING数据库技能
# 输入:基因列表
# 输出:互作关系、置信分数、网络数据

# 示例提示词:
"用STRING构建这50个差异基因的蛋白互作网络,
设置置信度阈值>0.7,
返回互作关系和置信分数"

💡 置信度阈值: STRING的置信度范围0-1,建议设置≥0.7(高质量)或≥0.9(最高质量)。 阈值越高,互作关系越可靠,但网络规模越小。

2 NetworkX - Python网络分析库

NetworkX是Python的网络分析标准库,支持复杂网络的构建、分析、可视化。 可以计算节点度、中心性、聚类系数等拓扑指标,进行社区检测和模块划分。

# 调用NetworkX技能
# 输入:网络数据(节点、边)
# 输出:拓扑指标、hub基因、模块划分

# 示例提示词:
"用NetworkX分析网络拓扑:
- 节点度分布
- 介数中心性
- 聚类系数
- 找出hub基因(度>5)"

📖 实战示例

Step 1: 构建互作网络

首先将差异基因列表输入STRING数据库,获取蛋白质之间的互作关系。

# 输入基因列表示例
genes = ["TP53", "MYC", "EGFR", "KRAS", "PTEN",
         "PIK3CA", "AKT1", "MTOR", "MAPK1", "STAT3"]

# STRING查询
# - 物种:人类(Homo sapiens)
# - 置信度阈值:>0.7
# - 返回:互作对、置信分数

# 输出示例:
# TP53 -- MYC -- 0.999
# TP53 -- MDM2 -- 0.999
# EGFR -- KRAS -- 0.850
# ...

📌 数据说明: STRING返回的数据包含互作对的置信分数(0-1)。 分数越高,互作关系的证据越强。 可以结合实验数据(如共表达、共定位)进一步验证。

Step 2: 网络拓扑分析

使用NetworkX计算网络拓扑指标,识别关键节点。

import networkx as nx

# 创建网络图
G = nx.Graph()
G.add_edges_from(interactions)

# 计算度(degree)
degrees = dict(G.degree())
# 度越高,该蛋白与其他蛋白的连接越多

# 计算介数中心性
betweenness = nx.betweenness_centrality(G)
# 介数中心性高,说明该节点是信息传递的关键节点

# 识别hub基因(度>5)
hub_genes = [gene for gene, degree in degrees.items() if degree > 5]

# 输出:['TP53', 'MYC', 'EGFR', 'KRAS']

💡 拓扑指标含义
度(Degree):节点的连接数,高表示该蛋白参与更多互作
介数中心性:节点在网络最短路径中的重要性
聚类系数:邻居节点之间的连接密度,高表示形成紧密模块

Step 3: 功能模块检测

使用Louvain算法检测网络中的社区(功能模块),然后对每个模块进行GO富集分析。

# Louvain社区检测
from community import best_partition

partition = best_partition(G)
# partition = {'TP53': 0, 'MYC': 0, 'EGFR': 1, ...}

# 按模块分组基因
modules = {}
for gene, module_id in partition.items():
    if module_id not in modules:
        modules[module_id] = []
    modules[module_id].append(gene)

# 模块0: ['TP53', 'MYC', 'MDM2', ...] - 细胞周期
# 模块1: ['EGFR', 'KRAS', 'MAPK1', ...] - 信号转导
# 模块2: ['PIK3CA', 'AKT1', 'MTOR', ...] - 代谢调控

# GO富集分析(调用GO数据库技能)
for module_id, genes in modules.items():
    go_enrichment(genes)
Step 4: 网络可视化

生成论文级的网络可视化图,展示节点的重要性、模块归属和互作强度。

import matplotlib.pyplot as plt
import networkx as nx

# 设置布局
pos = nx.spring_layout(G, k=2, iterations=50)

# 节点属性
node_sizes = [degrees[node] * 100 for node in G.nodes()]
node_colors = [partition[node] for node in G.nodes()]

# 绘制网络
plt.figure(figsize=(12, 12))
nx.draw_networkx_nodes(G, pos, node_size=node_sizes,
                        node_color=node_colors, cmap='Set3')
nx.draw_networkx_edges(G, pos, width=0.5, alpha=0.5)

# 标注hub基因
hub_labels = {node: node for node in hub_genes}
nx.draw_networkx_labels(G, pos, labels=hub_labels, font_size=12)

plt.axis('off')
plt.savefig('ppi_network.png', dpi=300, bbox_inches='tight')

📌 可视化技巧
节点大小:与度成正比,越大越重要
节点颜色:表示模块归属,相同颜色属于同一功能模块
边粗细:与置信度成正比,越粗越可靠
布局算法:spring_layout适合中型网络,large graphs可用pyvis

Step 5: 结果汇总

整合所有分析结果,生成报告。

# 网络统计
print(f"节点数: {G.number_of_nodes()}")
print(f"边数: {G.number_of_edges()}")
print(f"模块数: {len(modules)}")
print(f"Hub基因数: {len(hub_genes)}")

# 输出示例:
# 节点数: 50
# 边数: 127
# 模块数: 3
# Hub基因数: 5

# Hub基因列表:
# 1. TP53 - 度: 12, 介数: 0.35
# 2. MYC - 度: 10, 介数: 0.28
# 3. EGFR - 度: 8, 介数: 0.22
# ...

⚠️ 注意事项

1

基因名映射

不同数据库使用不同的基因ID格式(Gene Symbol、Ensembl、Entrez), 分析前确保基因名格式一致。STRING支持多种ID格式,但建议使用Gene Symbol。

2

网络规模

基因数量过多(>500)会导致网络过于复杂,可视化困难。 建议先筛选差异基因(如p值<0.001,|logFC|>2),保留最相关的基因。

3

互作验证

STRING预测的互作需要实验验证。置信度高的互作更可靠, 但仍需考虑物种、组织、实验条件等因素。建议结合文献和公共数据库验证。

4

Hub基因≠致病基因

Hub基因只是网络中连接度高的基因, 不一定与疾病直接相关。需要结合表达差异、临床关联、功能验证等多方面证据。

🔗 相关技能链接

相关工具

KEGG通路分析 Reactome Cytoscape GO富集分析
📦

下载完整代码包

包含:示例代码、数据文件、结果图表 · 7个文件 · 1.4MB

立即下载

💡 代码包内含 README.md 文档,包含环境配置和运行说明。解压后即可使用。