关于 gwas-database
用于查询和解读 NHGRI-EBI GWAS Catalog 中遗传关联及研究数据的技能。支持按变异、性状、基因、区域或出版物搜索,也可通过目录 API 和下载方式获取研究摘要统计数据。
主要功能
- 01按变异、性状、基因或区域搜索关联
- 02获取研究和变异元数据
- 03通过 API 或下载访问摘要统计数据
- 04按基因组位置及统计字段筛选摘要数据
- 05支持交叉引用与证据汇总
适用场景
- 01查找疾病或性状的已报告关联
- 02查看特定 rs ID 关联的性状
- 03探索基因附近的遗传关联
- 04为系统综述收集证据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill gwas-database安装后在 Claude Code 中输入/gwas-database确认已加载。
附带文件references/api_reference.md
详细介绍
GWAS Catalog 数据库
概述
GWAS Catalog 是由美国国家人类基因组研究所(NHGRI)和欧洲生物信息学研究所(EBI)维护的综合性已发表全基因组关联研究数据库。该数据库收录了数千篇 GWAS 论文中整理的 SNP-性状关联信息,包括遗传变异、相关性状和疾病、p 值、效应大小,以及许多研究的完整汇总统计数据。
何时使用此技能
当查询涉及以下内容时,应使用此技能:
- 遗传变异关联:查找与疾病或性状相关的 SNP
- SNP 查询:检索特定遗传变异(rs ID)的信息
- 性状/疾病搜索:发现表型的遗传关联
- 基因关联:查找特定基因内或附近的变异
- GWAS 汇总统计数据:访问完整的全基因组关联数据
- 研究元数据:检索出版物和队列信息
- 群体遗传学:探索特定祖源的关联
- 多基因风险评分:识别用于风险预测模型的变异
- 功能基因组学:了解变异效应和基因组背景
- 系统综述:全面综合遗传关联文献
核心功能
1. 了解 GWAS Catalog 数据结构
GWAS Catalog 围绕四个核心实体组织:
- 研究:包含元数据的 GWAS 论文(PMID、作者、队列详情)
- 关联:具有统计学证据的 SNP-性状关联(p ≤ 5×10⁻⁸)
- 变异:具有基因组坐标和等位基因的遗传标记(SNP)
- 性状:表型和疾病(映射到 EFO 本体术语)
主要标识符:
- 研究登录号:
GCSTID(例如,GCST001234) - 变异 ID:
rs编号(例如,rs7903146)或variant_id格式 - 性状 ID:EFO 术语(例如,2 型糖尿病对应 EFO_0001360)
- 基因符号: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
Author: McCarthy MI
GCST001234
返回研究详情和所有报告的关联。
3. REST API 访问
GWAS Catalog 提供两个 REST API,支持以编程方式访问:
基础 URL:
- GWAS Catalog 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 # Get a specific study url = "https://www.ebi.ac.uk/gwas/rest/api/studies/GCST001795" response = requests.get(url, headers={"Content-Type": "application/json"}) study = response.json() -
关联端点 -
/associations# Find associations for a variant 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}# Get variant details 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}# Get trait information 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" # Type 2 diabetes
base_url = "https://www.ebi.ac.uk/gwas/rest/api"
# Query associations for this trait
url = f"{base_url}/efoTraits/{trait}/associations"
response = requests.get(url, headers={"Content-Type": "application/json"})
associations = response.json()
# Process results
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={risk_allele}")
示例 2:获取变异信息及其所有性状关联
import requests
variant = "rs7903146"
base_url = "https://www.ebi.ac.uk/gwas/rest/api"
# Get variant details
url = f"{base_url}/singleNucleotidePolymorphisms/{variant}"
response = requests.get(url, headers={"Content-Type": "application/json"})
variant_data = response.json()
# Get all associations for this variant
url = f"{base_url}/singleNucleotidePolymorphisms/{variant}/associations"
params = {"projection": "associationBySnp"}
response = requests.get(url, params=params, headers={"Content-Type": "application/json"})
associations = response.json()
# Extract trait names and p-values
for assoc in associations.get('_embedded', {}).get('associations', []):
trait = assoc.get('efoTrait')
pvalue = assoc.get('pvalue')
print(f"Trait: {trait}, p-value: {pvalue}")
示例 3:访问汇总统计数据
import requests
# Query summary statistics API
base_url = "https://www.ebi.ac.uk/gwas/summary-statistics/api"
# Find associations by trait with p-value threshold
trait = "EFO_0001360" # Type 2 diabetes
p_upper = "0.000000001" # p < 1e-9
url = f"{base_url}/traits/{trait}/associations"
params = {
"p_upper": p_upper,
"size": 100 # Number of results
}
response = requests.get(url, params=params)
results = response.json()
# Process genome-wide significant hits
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
# Find variants in a specific genomic region
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 Catalog 托管了许多研究的完整汇总统计数据,可访问所有经过检验的变异(而不仅是全基因组显著的结果)。
访问方式:
- FTP 下载:http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/
- REST API:通过查询访问汇总统计数据
- Web 界面:通过网站浏览和下载
汇总统计 API 功能:
- 按染色体、位置、p 值筛选
- 跨研究查询特定变异
- 获取效应量和等位基因频率
- 访问经过协调和标准化的数据
示例:下载某项研究的汇总统计数据
import requests
import gzip
# Get available summary statistics
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()
# Download link is provided in the response
# Alternatively, use FTP:
# ftp://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCSTXXXXXX/
6. 数据整合与交叉引用
GWAS Catalog 提供指向外部资源的链接:
基因组数据库:
- Ensembl:基因注释和变异后果
- dbSNP:变异标识符和群体频率
- gnomAD:群体等位基因频率
功能资源:
- Open Targets:靶点与疾病的关联
- PGS Catalog:多基因风险评分
- UCSC Genome Browser:基因组背景
表型资源:
- EFO(Experimental Factor Ontology):标准化性状术语
- OMIM:疾病与基因的关系
- Disease Ontology:疾病层级结构
跟踪 API 响应中的链接:
import requests
# API responses include _links for related resources
response = requests.get("https://www.ebi.ac.uk/gwas/rest/api/studies/GCST001234")
study = response.json()
# Follow link to associations
associations_url = study['_links']['associations']['href']
associations_response = requests.get(associations_url)
查询工作流
工作流 1:探索某种疾病的遗传关联
-
使用 EFO 术语或自由文本确定性状:
- 在 Web 界面中搜索疾病名称
- 记下 EFO ID(例如,2 型糖尿病的 EFO_0001360)
-
通过 API 查询关联:
url = f"https://www.ebi.ac.uk/gwas/rest/api/efoTraits/{efo_id}/associations" -
按显著性和群体筛选:
- 检查 p 值(全基因组显著:p ≤ 5×10⁻⁸)
- 查看研究元数据中的祖源信息
- 按样本量或发现/重复验证状态筛选
-
提取变异详情:
- 每项关联对应的 rs ID
- 效应等位基因及其方向
- 效应量(优势比、β 系数)
- 群体等位基因频率
-
与其他数据库交叉引用:
- 在 Ensembl 中查询变异后果
- 在 gnomAD 中检查群体频率
- 探索基因功能和通路
工作流 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} -
检索基因区域内的变异:
- 获取基因的染色体坐标
- 查询区域内的变异
- 纳入启动子和调控区(扩展边界)
-
分析关联模式:
- 确定与该基因内变异关联的性状
- 查找不同研究中一致的关联
- 查看效应量和方向
-
功能解读:
- 确定变异后果(错义、调控等)
- 检查表达数量性状位点(eQTL)数据
- 查看通路和网络背景
工作流 4:系统性审查遗传证据
-
定义研究问题:
- 感兴趣的具体性状或疾病
- 人群方面的考量
- 研究设计要求
-
全面提取变异:
- 查询该性状的所有关联
- 设置显著性阈值
- 记录发现研究和重复研究
-
质量评估:
- 审查研究样本量
- 检查人群多样性
- 评估研究间的异质性
- 识别潜在偏倚
-
数据综合:
- 汇总各项研究的关联
- 适用时进行荟萃分析
- 创建汇总表
- 生成曼哈顿图或森林图
-
导出和文档记录:
- 下载完整的关联数据
- 按需导出汇总统计数据
- 记录搜索策略和日期
- 创建可复现的分析脚本
工作流 5:访问和分析汇总统计数据
-
查找包含汇总统计数据的研究:
- 浏览汇总统计数据门户
- 检查 FTP 目录列表
- 通过 API 查询可用研究
-
下载汇总统计数据:
# Via 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 Catalog
数据质量考量
- GWAS Catalog 会整理已发表的关联(可能包含不一致之处)
- 效应量按发表内容报告(可能需要统一处理)
- 部分研究报告条件关联或联合关联
- 合并结果时检查研究间是否存在样本重叠
- 注意确认偏倚和选择偏倚
Python 集成示例
查询和分析 GWAS 数据的完整工作流:
import requests
import pandas as pd
from time import sleep
def query_gwas_catalog(trait_id, p_threshold=5e-8):
"""
Query GWAS Catalog for trait associations
Args:
trait_id: EFO trait identifier (e.g., 'EFO_0001360')
p_threshold: P-value threshold for filtering
Returns:
pandas DataFrame with association results
"""
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) # Rate limiting
return pd.DataFrame(results)
# Example usage
df = query_gwas_catalog('EFO_0001360') # Type 2 diabetes
print(df.head())
print(f"\nTotal associations: {len(df)}")
print(f"Unique variants: {df['variant'].nunique()}")
资源
references/api_reference.md
全面的 API 文档,包括:
- 两个 API 的详细端点规范
- 完整的查询参数和筛选条件列表
- 响应格式规范和字段说明
- 高级查询示例和模式
- 错误处理和故障排查
- 与外部数据库的集成
在以下情况下查阅此参考文档:
- 构建复杂的 API 查询
- 了解响应结构
- 实现分页或批量操作
- 排查 API 错误
- 探索高级筛选选项
培训材料
GWAS Catalog 团队提供了研讨会材料:
- GitHub 仓库:https://github.com/EBISPOT/GWAS_Catalog-workshop
- 包含查询示例的 Jupyter 笔记本
- 可通过 Google Colab 集成在云端运行
重要说明
数据更新
- GWAS Catalog 会定期更新,纳入新的发表成果
- 定期重新运行查询,以确保全面覆盖
- 随着研究发布数据,会添加汇总统计数据
- EFO 映射可能会随时间更新
引用要求
使用 GWAS Catalog 数据时,请引用:
- 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 Catalog 网站:https://www.ebi.ac.uk/gwas/
- 文档:https://www.ebi.ac.uk/gwas/docs
- API 文档:https://www.ebi.ac.uk/gwas/rest/docs/api
- Summary Statistics 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 Catalog(多基因评分):https://www.pgscatalog.org/
- 帮助与支持:[email protected]