跳转至

蛋白质互作数据库BioGRID

一句话概述:BioGRID(Biological General Repository for Interaction Datasets)是收录蛋白质-蛋白质、基因-基因互作关系的公共数据库,数据来源于已发表文献的人工审核,是构建蛋白质互作网络(PPI)分析的重要数据源。

核心知识点速查表

概念说明
BioGRID生物互作数据库(白话:记录蛋白质之间谁和谁"合作"的数据库)
PPIProtein-Protein Interaction,蛋白质-蛋白质互作
物理互作蛋白质直接结合(如Co-IP、Y2H实验证实)
遗传互作基因间的功能关联(如合成致死)
STRING另一个常用PPI数据库(包含预测的互作)
CytoscapePPI网络可视化和分析软件
Hub基因网络中连接度最高的核心基因
度(Degree)一个节点连接的边数(白话:一个蛋白的"朋友数")

一、BioGRID vs STRING对比

特性BioGRIDSTRING
数据来源仅文献实验验证实验+预测+文本挖掘
互作数量较少但高可信多但含预测结果
适用场景需要高可信互作时需要全面互作网络时
API有REST API有REST API
评分无评分系统有综合评分(0-1)

二、获取BioGRID数据

2.1 网页下载

# === 从BioGRID下载互作数据 ===
# 访问: https://thebiogrid.org/
# 搜索基因名或物种
# 下载对应的互作数据文件

# 下载人类全部互作数据
wget https://downloads.thebiogrid.org/Download/BioGRID/Latest-Release/BIOGRID-ALL-LATEST.tab3.zip
unzip BIOGRID-ALL-LATEST.tab3.zip

2.2 BioGRID REST API

# === Python调用BioGRID API ===
import requests
import pandas as pd

# BioGRID API参数
access_key = "YOUR_API_KEY"      # 在BioGRID网站注册获取(免费)
base_url = "https://webservice.thebiogrid.org/interactions/"

# 查询特定基因的互作
params = {
    "accesskey": access_key,      # API密钥
    "format": "json",              # 返回格式
    "searchNames": "true",         # 搜索基因名
    "geneList": "TP53|BRCA1",      # 查询的基因(|分隔多个)
    "organism": "9606",             # 物种税号(人类=9606)
    "includeInteractors": "true",   # 包含互作伙伴
    "max": "1000"                    # 最大返回数
}

response = requests.get(base_url, params=params)   # 发送请求
interactions = response.json()                       # 解析JSON

# 转为DataFrame
records = []
for key, val in interactions.items():
    records.append({
        "GeneA": val["OFFICIAL_SYMBOL_A"],     # 基因A
        "GeneB": val["OFFICIAL_SYMBOL_B"],     # 基因B
        "System": val["EXPERIMENTAL_SYSTEM"],   # 实验方法
        "Type": val["EXPERIMENTAL_SYSTEM_TYPE"],# 互作类型
        "Pubmed": val["PUBMED_ID"]              # 文献ID
    })
df = pd.DataFrame(records)
print(f"共找到 {len(df)} 条互作关系")
df.to_csv("biogrid_interactions.csv", index=False)  # 保存

三、PPI网络分析

3.1 用Cytoscape可视化

# === Cytoscape安装 ===
# 下载: https://cytoscape.org/
# Cytoscape是Java桌面应用,需要Java 11+

# 导入BioGRID数据:
# 1. File → Import → Network from File
# 2. 选择下载的BioGRID tab文件
# 3. 设置Source=GeneA, Target=GeneB, Interaction Type=System
# 4. 点击OK导入

# 常用分析插件:
# - CytoHubba: 识别Hub基因
# - MCODE: 发现蛋白质复合物/模块
# - ClueGO: 功能富集分析
# - stringApp: 导入STRING数据

3.2 Python网络分析

# === 用NetworkX分析PPI网络 ===
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt

# 读取互作数据
df = pd.read_csv("biogrid_interactions.csv")           # 读取互作数据

# 构建网络
G = nx.from_pandas_edgelist(                           # 从DataFrame构建图
    df, source="GeneA", target="GeneB"
)

# 基本网络统计
print(f"节点数(蛋白质): {G.number_of_nodes()}")        # 蛋白质数量
print(f"边数(互作): {G.number_of_edges()}")             # 互作数量
print(f"平均度: {sum(dict(G.degree()).values())/G.number_of_nodes():.1f}")

# 找Hub基因(度最高的前10个)
degree_dict = dict(G.degree())                          # 计算每个节点的度
hub_genes = sorted(degree_dict.items(),                 # 按度排序
                   key=lambda x: x[1], reverse=True)[:10]
print("\nTop 10 Hub基因:")
for gene, degree in hub_genes:
    print(f"  {gene}: degree={degree}")                 # 输出Hub基因

# 介数中心性(识别"桥梁"蛋白)
betweenness = nx.betweenness_centrality(G)              # 计算介数中心性
top_bridge = sorted(betweenness.items(),
                    key=lambda x: x[1], reverse=True)[:10]
print("\nTop 10 桥梁蛋白:")
for gene, bc in top_bridge:
    print(f"  {gene}: betweenness={bc:.4f}")

3.3 R语言网络分析

# === R语言PPI网络分析 ===
library(igraph)

# 读取互作数据
edges <- read.csv("biogrid_interactions.csv")       # 读取互作数据

# 构建图
g <- graph_from_data_frame(                          # 从数据框建图
  edges[, c("GeneA", "GeneB")],                     # 边列表
  directed = FALSE                                    # 无向图
)
g <- simplify(g)                                      # 去除自环和重复边

# Hub基因分析
deg <- degree(g)                                      # 计算度
top_hubs <- sort(deg, decreasing=TRUE)[1:10]          # 前10个Hub
print(top_hubs)

# 模块检测(社区发现)
comm <- cluster_louvain(g)                            # Louvain社区检测
print(paste("模块数:", length(comm)))                  # 模块数量

# 可视化
plot(g,
     vertex.size = sqrt(deg),                         # 节点大小=度的平方根
     vertex.label = ifelse(deg > 10, V(g)$name, NA),  # 只标注高度节点
     vertex.color = membership(comm),                  # 按社区着色
     edge.width = 0.3,                                 # 边宽度
     layout = layout_with_fr(g))                       # Fruchterman-Reingold布局

四、面试高频考点

Q1: PPI网络中Hub基因为什么重要?

  • Hub基因连接最多蛋白,通常是关键调控因子
  • 敲除Hub基因通常致死或表型严重
  • Hub基因往往是药物靶点
  • 白话:Hub基因就像社交达人,认识最多人,去掉它影响最大

Q2: 怎么判断PPI互作的可靠性?

  1. 多种实验方法验证:同一互作被Co-IP、Y2H等多种方法证实
  2. 多篇文献报道:不同实验室独立验证
  3. STRING评分:综合评分>0.7为高可信
  4. 物种保守:在多个物种中都有的互作更可靠

Q3: 常用的PPI数据库有哪些?

数据库特点
BioGRID文献实验验证,高可信
STRING最全面,含预测互作
IntActEBI维护,PSICQUIC标准
MINT分子互作数据库
DIP实验验证的互作
HPRD人类蛋白质参考数据库

常见报错与解决

问题原因解决方案
API返回空API key过期或无效重新注册获取API key
网络太大无法可视化节点太多过滤低度节点,只保留核心网络
基因ID不匹配命名系统不一致统一用HGNC symbol或Entrez ID
Cytoscape卡顿网络太大增加Java堆内存:-Xmx4g

速查表

# === PPI分析速查 ===
# BioGRID数据下载
# https://downloads.thebiogrid.org/

# STRING数据下载
# https://string-db.org/cgi/download

# NetworkX快速分析
import networkx as nx
G = nx.from_pandas_edgelist(df, "GeneA", "GeneB")
hubs = sorted(dict(G.degree()).items(), key=lambda x: x[1], reverse=True)[:10]

# R igraph快速分析
library(igraph)
g <- graph_from_data_frame(edges, directed=FALSE)
hub <- sort(degree(g), decreasing=TRUE)[1:10]