查询 NHGRI-EBI GWAS Catalog 的 SNP-性状关联数据,可按 rs 编号、疾病性状或基因检索变异,获取 P 值与汇总统计量,适用于遗传流行病学与多基因风险评分研究。
GWAS 目录数据库
概述
GWAS目录是由国家人类基因组研究所(NHGRI)和欧洲生物信息学研究所(EBI)维护的已发表全基因组关联研究的综合存储库。该目录包含来自数千个GWAS发表的精选SNP-性状关联,包括遗传变体、相关性状和疾病、p值、效应大小,以及许多研究的完整汇总统计。
何时使用此技能
此技能应在以下情况下使用:
- 遗传变体关联: 查找与疾病或性状相关的SNP
- SNP查找: 检索特定遗传变体(rs ID)的信息
- 性状/疾病搜索: 发现表型的遗传关联
- 基因关联: 查找特定基因内或附近的变体
- GWAS汇总统计: 访问完整的全基因组关联数据
- 研究元数据: 检索发表和队列信息
- 群体遗传学: 探索祖先特异性关联
- 多基因风险评分: 识别风险预测模型的变体
- 功能基因组学: 理解变体效应和基因组背景
- 系统评价: 遗传关联的全面文献综合
核心功能
1. 理解GWAS目录数据结构
GWAS目录围绕四个核心实体组织:
- 研究: 具有元数据(PMID、作者、队列详情)的GWAS发表
- 关联: 具有统计证据(p ≤ 5×10⁻⁸)的SNP-性状关联
- 变体: 具有基因组坐标和等位基因的遗传标记(SNP)
- 性状: 表型和疾病(映射到EFO本体术语)
关键标识符:
- 研究访问号:
GCSTID(例如GCST001234) - 变体ID:
rs编号(例如rs7903146)或variant_id格式 - 性状ID:EFO术语(例如EFO_0001360用于2型糖尿病)
- 基因符号:HGNC批准的名称(例如TCF7L2)
2. Web界面搜索
位于https://www.ebi.ac.uk/gwas/的Web界面支持多种搜索模式:
按变体(rs ID):
rs7903146返回此SNP的所有性状关联。
按疾病/性状:
type 2 diabetes
Parkinson disease
body mass index返回所有相关遗传变体。
按基因:
APOE
TCF7L2返回基因区域内的变体。
按染色体区域:
10:114000000-115000000返回指定基因组区间内的变体。
按发表:
PMID:20581827
作者: McCarthy MI
GCST001234返回研究详情和所有报告的关联。
3. REST API 访问
GWAS目录提供两个REST API用于程序化访问:
基础URL:
- GWAS目录API:
https://www.ebi.ac.uk/gwas/rest/api - 汇总统计API:
https://www.ebi.ac.uk/gwas/summary-statistics/api
API文档:
- 主要API文档:https://www.ebi.ac.uk/gwas/rest/docs/api
- 汇总统计文档:https://www.ebi.ac.uk/gwas/summary-statistics/docs/
核心端点:
- 研究端点 -
/studies/{accessionID}
import requests
# 获取特定研究
url = "https://www.ebi.ac.uk/gwas/rest/api/studies/GCST001795"
response = requests.get(url, headers={"Content-Type": "application/json"})
study = response.json()- 关联端点 -
/associations
# 查找变体的关联
variant = "rs7903146"
url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/{variant}/associations"
params = {"projection": "associationBySnp"}
response = requests.get(url, params=params, headers={"Content-Type": "application/json"})
associations = response.json()- 变体端点 -
/singleNucleotidePolymorphisms/{rsID}
# 获取变体详情
url = "https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/rs7903146"
response = requests.get(url, headers={"Content-Type": "application/json"})
variant_info = response.json()- 性状端点 -
/efoTraits/{efoID}
# 获取性状信息
url = "https://www.ebi.ac.uk/gwas/rest/api/efoTraits/EFO_0001360"
response = requests.get(url, headers={"Content-Type": "application/json"})
trait_info = response.json()4. 查询示例和模式
示例1:查找疾病的所有关联
import requests
trait = "EFO_0001360" # 2型糖尿病
base_url = "https://www.ebi.ac.uk/gwas/rest/api"
# 查询此性状的关联
url = f"{base_url}/efoTraits/{trait}/associations"
response = requests.get(url, headers={"Content-Type": "application/json"})
associations = response.json()
# 处理结果
for assoc in associations.get('_embedded', {}).get('associations', []):
variant = assoc.get('rsId')
pvalue = assoc.get('pvalue')
risk_allele = assoc.get('strongestAllele')
print(f"{variant}: p={pvalue}, 风险等位基因={risk_allele}")示例2:获取变体信息和所有性状关联
import requests
variant = "rs7903146"
base_url = "https://www.ebi.ac.uk/gwas/rest/api"
# 获取变体详情
url = f"{base_url}/singleNucleotidePolymorphisms/{variant}"
response = requests.get(url, headers={"Content-Type": "application/json"})
variant_data = response.json()
# 获取此变体的所有关联
url = f"{base_url}/singleNucleotidePolymorphisms/{variant}/associations"
params = {"projection": "associationBySnp"}
response = requests.get(url, params=params, headers={"Content-Type": "application/json"})
associations = response.json()
# 提取性状名称和p值
for assoc in associations.get('_embedded', {}).get('associations', []):
trait = assoc.get('efoTrait')
pvalue = assoc.get('pvalue')
print(f"性状: {trait}, p值: {pvalue}")示例3:访问汇总统计
import requests
# 查询汇总统计API
base_url = "https://www.ebi.ac.uk/gwas/summary-statistics/api"
# 按性状和p值阈值查找关联
trait = "EFO_0001360" # 2型糖尿病
p_upper = "0.000000001" # p < 1e-9
url = f"{base_url}/traits/{trait}/associations"
params = {
"p_upper": p_upper,
"size": 100 # 结果数
}
response = requests.get(url, params=params)
results = response.json()
# 处理全基因组显著命中
for hit in results.get('_embedded', {}).get('associations', []):
variant_id = hit.get('variant_id')
chromosome = hit.get('chromosome')
position = hit.get('base_pair_location')
pvalue = hit.get('p_value')
print(f"{chromosome}:{position} ({variant_id}): p={pvalue}")示例4:按染色体区域查询
import requests
# 查找特定基因组区域中的变体
chromosome = "10"
start_pos = 114000000
end_pos = 115000000
base_url = "https://www.ebi.ac.uk/gwas/rest/api"
url = f"{base_url}/singleNucleotidePolymorphisms/search/findByChromBpLocationRange"
params = {
"chrom": chromosome,
"bpStart": start_pos,
"bpEnd": end_pos
}
response = requests.get(url, params=params, headers={"Content-Type": "application/json"})
variants_in_region = response.json()5. 使用汇总统计
GWAS目录为许多研究提供完整汇总统计,提供对所有测试变体(不仅仅是全基因组显著命中)的访问。
访问方法:
- FTP下载:http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/
- REST API:基于查询的汇总统计访问
- Web界面:通过网站浏览和下载
汇总统计API功能:
- 按染色体、位置、p值过滤
- 跨研究查询特定变体
- 检索效应大小和等位基因频率
- 访问标准化和标准化数据
示例:下载研究汇总统计
import requests
import gzip
# 获取可用汇总统计
base_url = "https://www.ebi.ac.uk/gwas/summary-statistics/api"
url = f"{base_url}/studies/GCST001234"
response = requests.get(url)
study_info = response.json()
# 下载链接在响应中提供
# 或者,使用FTP:
# ftp://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCSTXXXXXX/6. 数据集成和交叉引用
GWAS目录提供到外部资源的链接:
基因组数据库:
- Ensembl:基因注释和变体后果
- dbSNP:变体标识符和群体频率
- gnomAD:群体等位基因频率
功能资源:
- Open Targets:靶点-疾病关联
- PGS目录:多基因风险评分
- UCSC基因组浏览器:基因组背景
表型资源:
- EFO(实验因子本体):标准化性状术语
- OMIM:疾病基因关系
- 疾病本体:疾病层次结构
在API响应中跟踪链接:
import requests
# API响应包含相关资源的_links
response = requests.get("https://www.ebi.ac.uk/gwas/rest/api/studies/GCST001234")
study = response.json()
# 跟随链接到关联
associations_url = study['_links']['associations']['href']
associations_response = requests.get(associations_url)查询工作流
工作流1:通过eQTL解释GWAS变体
- 识别GWAS变体(rs ID或染色体位置)
- 转换为GTEx变体ID格式(
chr{chrom}_{pos}_{ref}_{alt}_b38) - 跨组织查询所有eQTL关联
- 检查效应方向:GWAS风险等位基因是否与eQTL效应等位基因相同?
- 优先考虑组织:选择与疾病生物学相关的组织
- 考虑共定位:使用
coloc(R包)和完整汇总统计
import requests, pandas as pd
def interpret_gwas_variant(variant_id, dataset_id="gtex_v10"):
"""查找GWAS变体调控的所有基因。"""
url = "https://gtexportal.org/api/v2/association/singleTissueEqtl"
params = {"variantId": variant_id, "datasetId": dataset_id, "itemsPerPage": 500}
response = requests.get(url, params=params)
data = response.json()
df = pd.DataFrame(data.get("data", []))
if df.empty:
return df
return df[["geneSymbol", "tissueSiteDetailId", "slope", "pval", "maf"]].sort_values("pval")
# 示例
results = interpret_gwas_variant("chr1_154453788_A_T_b38")
print(results.groupby("geneSymbol")["tissueSiteDetailId"].count().sort_values(ascending=False))工作流2:调查特定遗传变体
- 查询变体:
url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/{rs_id}"- 检索所有性状关联:
url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/{rs_id}/associations"- 分析多效性:
- 识别与此变体相关的所有性状
- 跨性状检查效应方向
- 寻找共享生物学通路
- 检查基因组背景:
- 确定附近基因
- 识别变体是否在编码/调控区域
- 审查与其他变体的连锁不平衡
工作流3:基因中心关联分析
- 按基因符号搜索在Web界面或:
url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/search/findByGene"
params = {"geneName": gene_symbol}- 检索基因区域变体:
- 获取基因的染色体坐标
- 查询区域变体
- 包括启动子和调控区域(扩展边界)
- 分析关联模式:
- 识别此基因中关联的性状
- 寻找跨研究的一致关联
- 审查效应大小和方向
- 功能解释:
- 确定变体后果(错义、调控等)
- 检查表达QTL(eQTL)数据
- 审查通路和网络背景
工作流4:遗传证据系统评价
- 定义研究问题:
- 特定性状或疾病
- 群体考虑
- 研究设计要求
- 全面变体提取:
- 查询性状的所有关联
- 设置显著性阈值
- 注意发现和重复研究
- 质量评估:
- 审查研究样本量
- 检查群体多样性
- 评估跨研究异质性
- 识别潜在偏差
- 数据综合:
- 跨研究聚合关联
- 如适用,执行荟萃分析
- 创建汇总表
- 生成曼哈顿或森林图
- 导出和文档:
- 下载完整关联数据
- 如需要,导出汇总统计
- 记录搜索策略和日期
- 创建可重现分析脚本
工作流5:访问和分析汇总统计
- 识别具有汇总统计的研究:
- 浏览汇总统计门户
- 检查FTP目录列表
- 查询API获取可用研究
- 下载汇总统计:
# 通过FTP
wget ftp://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCSTXXXXXX/harmonised/GCSTXXXXXX-harmonised.tsv.gz- 通过API查询特定变体:
url = f"https://www.ebi.ac.uk/gwas/summary-statistics/api/chromosomes/{chrom}/associations"
params = {"start": start_pos, "end": end_pos}- 处理和分析:
- 按p值阈值过滤
- 提取效应大小和置信区间
- 执行下游分析(精细定位、共定位等)
响应格式和数据字段
关联记录中的关键字段:
rsId:变体标识符(rs编号)strongestAllele:关联的风险等位基因pvalue:关联p值pvalueText:P值作为文本(可能包含不等式)orPerCopyNum:优势比或beta系数betaNum:效应大小(用于数量性状)betaUnit:beta的测量单位range:置信区间efoTrait:相关性状名称mappedLabel:EFO映射的性状术语
研究元数据字段:
accessionId:GCST研究标识符pubmedId:PubMed IDauthor:第一作者publicationDate:发表日期ancestryInitial:发现群体祖先ancestryReplication:重复群体祖先sampleSize:总样本量
分页:
结果已分页(默认每页20项)。使用以下方式导航:
size参数:每页结果数page参数:页码(从0开始索引)- 响应中的
_links:下一页/上一页的URL
最佳实践
查询策略
- 从Web界面开始以识别相关EFO术语和研究访问号
- 对批量数据提取和自动化分析使用API
- 对大型结果集实施分页处理
- 最小化冗余请求,缓存API响应
数据解释
- 始终检查p值阈值(全基因组:5×10⁻⁸)
- 审查群体信息的群体适用性
- 考虑评估证据强度时的样本量
- 检查跨独立研究的重复
- 注意效应大小估计中的赢家诅咒
速率限制和伦理
- 尊重API使用指南(无过度请求)
- 对全基因组分析使用汇总统计下载
- 在迭代分析中实施API调用之间的适当延迟
- 执行迭代分析时在本地缓存结果
- 在发表时引用GWAS目录
数据质量考虑
- GWAS目录精选已发表的关联(可能包含不一致)
- 按发表报告效应大小(可能需要标准化)
- 某些研究报告条件或联合关联
- 组合结果时检查研究重叠
- 注意抽样和选择偏差
Python 集成示例
查询和分析GWAS数据的完整工作流:
import requests
import pandas as pd
from time import sleep
def query_gwas_catalog(trait_id, p_threshold=5e-8):
"""
查询GWAS目录获取性状关联
参数:
trait_id: EFO性状标识符(例如'EFO_0001360')
p_threshold: P值阈值用于过滤
返回:
包含关联结果的pandas DataFrame
"""
base_url = "https://www.ebi.ac.uk/gwas/rest/api"
url = f"{base_url}/efoTraits/{trait_id}/associations"
headers = {"Content-Type": "application/json"}
results = []
page = 0
while True:
params = {"page": page, "size": 100}
response = requests.get(url, params=params, headers=headers)
if response.status_code != 200:
break
data = response.json()
associations = data.get('_embedded', {}).get('associations', [])
if not associations:
break
for assoc in associations:
pvalue = assoc.get('pvalue')
if pvalue and float(pvalue) <= p_threshold:
results.append({
'variant': assoc.get('rsId'),
'pvalue': pvalue,
'risk_allele': assoc.get('strongestAllele'),
'or_beta': assoc.get('orPerCopyNum') or assoc.get('betaNum'),
'trait': assoc.get('efoTrait'),
'pubmed_id': assoc.get('pubmedId')
})
page += 1
sleep(0.1) # 速率限制
return pd.DataFrame(results)
# 示例用法
df = query_gwas_catalog('EFO_0001360') # 2型糖尿病
print(df.head())
print(f"\n总关联数: {len(df)}")
print(f"唯一变体数: {df['variant'].nunique()}")资源
references/api_reference.md
全面的API文档包括:
- 两个API的详细端点规范
- 完整的查询参数和过滤器列表
- 响应格式规范和字段描述
- 高级查询示例和模式
- 错误处理和故障排除
- 与外部数据库的集成
在以下情况下查阅此参考:
- 构建复杂的API查询
- 理解响应结构
- 实施分页或批量操作
- 故障排除API错误
- 探索高级过滤选项
培训材料
GWAS目录团队提供研讨会材料:
- GitHub仓库:https://github.com/EBISPOT/GWAS_Catalog-workshop
- 带有示例查询的Jupyter笔记本
- 用于云执行的Google Colab集成
重要说明
数据更新
- GWAS目录定期更新新发表
- 定期重新运行查询以实现全面覆盖
- 随着研究发布数据,添加汇总统计
- EFO映射可能随时间更新
引用要求
使用GWAS目录数据时,请引用:
- Sollis E, et al. (2023) The NHGRI-EBI GWAS Catalog: knowledgebase and deposition resource. Nucleic Acids Research. PMID: 37953337
- 包括访问日期和版本(如果可用)
- 讨论特定发现时引用原始研究
局限性
- 并非所有GWAS发表都包括在内(应用精选标准)
- 汇总统计可用于研究子集
- 跨研究的效应大小可能需要标准化
- 群体多样性在增长但历史上有限
- 某些关联代表条件或联合效应
数据访问
- Web界面:免费,无需注册
- REST API:免费,无需API密钥
- FTP下载:开放访问
- API适用速率限制(请尊重)
其他资源
- GWAS目录网站: https://www.ebi.ac.uk/gwas/
- 文档: https://www.ebi.ac.uk/gwas/docs
- API文档: https://www.ebi.ac.uk/gwas/rest/docs/api
- 汇总统计API: https://www.ebi.ac.uk/gwas/summary-statistics/docs/
- FTP站点: http://ftp.ebi.ac.uk/pub/databases/gwas/
- 培训材料: https://github.com/EBISPOT/GWAS_Catalog-workshop
- PGS目录(多基因评分): https://www.pgscatalog.org/
- 帮助和支持: gwas-info@ebi.ac.uk
兼容工具
站内相关工具
数据来源:claude-scientific-skills(MIT 许可) | 查看上游来源
上游项目:K-Dense-AI/scientific-agent-skills / claude-scientific-skills | 收录时间:2026-08-20 | 更新:2026-08-20
本页面内容基于上游开源许可项目整理,仅供学习参考。AI铺子不对第三方内容承担责任, 详情请参阅免责声明。