名称: ensembl-database 描述: “查询Ensembl基因组数据库REST API,覆盖250多种物种。基因查找、序列检索、变异分析、比较基因组学、直系同源物查找、VEP预测,适用于基因组学研究。”
Ensembl数据库
概述
访问和查询Ensembl基因组数据库,这是一个由EMBL-EBI维护的脊椎动物基因组数据的综合资源。该数据库提供超过250种物种的基因注释、序列、变异、调控信息和比较基因组学数据。当前版本为115(2025年9月)。
何时使用此技能
此技能应在以下场景使用:
- 通过符号或Ensembl ID查询基因信息
- 检索DNA、转录本或蛋白质序列
- 使用变异效应预测器(VEP)分析遗传变异
- 跨物种查找直系同源物和旁系同源物
- 访问调控特征和基因组注释
- 在不同基因组组装之间转换坐标(例如,GRCh37到GRCh38)
- 执行比较基因组学分析
- 将Ensembl数据集成到基因组研究流程中
核心能力
1. 基因信息检索
通过符号、Ensembl ID或外部数据库标识符查询基因数据。
常见操作:
- 通过符号查找基因信息(例如,“BRCA2”、“TP53”)
- 检索转录本和蛋白质信息
- 获取基因坐标和染色体位置
- 访问外部数据库的交叉引用(如UniProt、RefSeq等)
使用ensembl_rest包:
from ensembl_rest import EnsemblClient
client = EnsemblClient()
# 通过符号查找基因
gene_data = client.symbol_lookup(
species='human',
symbol='BRCA2'
)
# 获取详细基因信息
gene_info = client.lookup_id(
id='ENSG00000139618', # BRCA2 Ensembl ID
expand=True
)
直接REST API(无需包):
import requests
server = "https://rest.ensembl.org"
# 符号查找
response = requests.get(
f"{server}/lookup/symbol/homo_sapiens/BRCA2",
headers={"Content-Type": "application/json"}
)
gene_data = response.json()
2. 序列检索
以各种格式(JSON、FASTA、纯文本)获取基因组、转录本或蛋白质序列。
操作:
- 获取基因或基因组区域的DNA序列
- 检索转录本序列(cDNA)
- 访问蛋白质序列
- 提取带侧翼区域或修饰的序列
示例:
# 使用ensembl_rest包
sequence = client.sequence_id(
id='ENSG00000139618', # 基因ID
content_type='application/json'
)
# 获取基因组区域序列
region_seq = client.sequence_region(
species='human',
region='7:140424943-140624564' # 染色体:起始-结束
)
3. 变异分析
查询遗传变异数据并使用变异效应预测器(VEP)预测变异后果。
能力:
- 通过rsID或基因组坐标查找变异
- 预测变异的功能后果
- 访问群体频率数据
- 检索表型关联
VEP示例:
# 预测变异后果
vep_result = client.vep_hgvs(
species='human',
hgvs_notation='ENST00000380152.7:c.803C>T'
)
# 通过rsID查询变异
variant = client.variation_id(
species='human',
id='rs699'
)
4. 比较基因组学
执行跨物种比较以识别直系同源物、旁系同源物和进化关系。
操作:
- 查找直系同源物(不同物种中的相同基因)
- 识别旁系同源物(同一物种中的相关基因)
- 访问显示进化关系的基因树
- 检索基因家族信息
示例:
# 查找人类基因的直系同源物
orthologs = client.homology_ensemblgene(
id='ENSG00000139618', # 人类BRCA2
target_species='mouse'
)
# 获取基因树
gene_tree = client.genetree_member_symbol(
species='human',
symbol='BRCA2'
)
5. 基因组区域分析
查找特定区域中的所有基因组特征(基因、转录本、调控元件)。
使用场景:
- 识别染色体区域中的所有基因
- 查找调控特征(如启动子、增强子)
- 定位区域内的变异
- 检索结构特征
示例:
# 查找区域中的所有特征
features = client.overlap_region(
species='human',
region='7:140424943-140624564',
feature='gene'
)
6. 组装映射
在不同基因组组装之间转换坐标(例如,GRCh37到GRCh38)。
重要: 使用 https://grch37.rest.ensembl.org 进行GRCh37/hg19查询,使用 https://rest.ensembl.org 进行当前组装查询。
示例:
from ensembl_rest import AssemblyMapper
# 将坐标从GRCh37映射到GRCh38
mapper = AssemblyMapper(
species='human',
asm_from='GRCh37',
asm_to='GRCh38'
)
mapped = mapper.map(chrom='7', start=140453136, end=140453136)
API最佳实践
速率限制
Ensembl REST API有速率限制。遵循以下实践:
- 尊重速率限制: 匿名用户每秒最多15个请求
- 处理429响应: 当被限速时,检查
Retry-After头并等待 - 使用批处理端点: 查询多个项目时,尽可能使用批处理端点
- 缓存结果: 存储频繁访问的数据以减少API调用
错误处理
始终实施适当的错误处理:
import requests
import time
def query_ensembl(endpoint, params=None, max_retries=3):
server = "https://rest.ensembl.org"
headers = {"Content-Type": "application/json"}
for attempt in range(max_retries):
response = requests.get(
f"{server}{endpoint}",
headers=headers,
params=params
)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
# 速率限制 - 等待并重试
retry_after = int(response.headers.get('Retry-After', 1))
time.sleep(retry_after)
else:
response.raise_for_status()
raise Exception(f"Failed after {max_retries} attempts")
安装
Python包(推荐)
pip install ensembl_rest
ensembl_rest 包提供了所有Ensembl REST API端点的Pythonic接口。
直接REST API
无需安装 - 使用标准HTTP库如 requests:
pip install requests
资源
参考/
api_endpoints.md:所有17个API端点类别的全面文档,含示例和参数
脚本/
ensembl_query.py:可重用的Python脚本,用于常见Ensembl查询,内置速率限制和错误处理
常见工作流
工作流1:基因注释流程
- 通过符号查找基因以获取Ensembl ID
- 检索转录本信息
- 获取所有转录本的蛋白质序列
- 查找其他物种中的直系同源物
- 导出结果
工作流2:变异分析
- 通过rsID或坐标查询变异
- 使用VEP预测功能后果
- 检查群体频率
- 检索表型关联
- 生成报告
工作流3:比较分析
- 从参考物种中的感兴趣基因开始
- 查找目标物种中的直系同源物
- 检索所有直系同源物的序列
- 比较基因结构和特征
- 分析进化保守性
物种和组装信息
查询可用物种和组装:
# 列出所有可用物种
species_list = client.info_species()
# 获取物种的组装信息
assembly_info = client.info_assembly(species='human')
常见物种标识符:
- 人类:
homo_sapiens或human - 小鼠:
mus_musculus或mouse - 斑马鱼:
danio_rerio或zebrafish - 果蝇:
drosophila_melanogaster