mcpField
G
gwas-database

gwas-database

github.com/ovachiever数据与数据库5657 次安装48 周前更新
代码仓库

关于 gwas-database

gwas-database 是查询 NHGRI-EBI GWAS Catalog 及其汇总统计数据的技能,面向研究变异与性状关联、研究元数据和全基因组关联数据的人员,支持网页搜索和 REST API。

主要功能

  1. 01搜索研究、变异、性状和基因
  2. 02获取 SNP-性状关联详情
  3. 03检索研究元数据和出版信息
  4. 04查询并下载汇总统计数据
  5. 05按基因组区域和 p 值筛选

适用场景

  1. 01探索疾病相关的遗传关联
  2. 02调查特定变异关联的性状
  3. 03比较某个基因的关联模式
  4. 04为系统综述收集证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ovachiever/droid-tings --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 本体术语)

主要标识符:

  • 研究登录号:GCST ID(例如,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 文档:

核心端点:

  1. 研究端点 - /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()
    
  2. 关联端点 - /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()
    
  3. 变异端点 - /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()
    
  4. 性状端点 - /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 托管了许多研究的完整汇总统计数据,可访问所有经过检验的变异(而不仅是全基因组显著的结果)。

访问方式:

  1. FTP 下载:http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/
  2. REST API:通过查询访问汇总统计数据
  3. 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:探索某种疾病的遗传关联
  1. 使用 EFO 术语或自由文本确定性状:

    • 在 Web 界面中搜索疾病名称
    • 记下 EFO ID(例如,2 型糖尿病的 EFO_0001360)
  2. 通过 API 查询关联:

    url = f"https://www.ebi.ac.uk/gwas/rest/api/efoTraits/{efo_id}/associations"
    
  3. 按显著性和群体筛选:

    • 检查 p 值(全基因组显著:p ≤ 5×10⁻⁸)
    • 查看研究元数据中的祖源信息
    • 按样本量或发现/重复验证状态筛选
  4. 提取变异详情:

    • 每项关联对应的 rs ID
    • 效应等位基因及其方向
    • 效应量(优势比、β 系数)
    • 群体等位基因频率
  5. 与其他数据库交叉引用:

    • 在 Ensembl 中查询变异后果
    • 在 gnomAD 中检查群体频率
    • 探索基因功能和通路
工作流 2:调查特定遗传变异
  1. 查询变异:

    url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/{rs_id}"
    
  2. 检索所有性状关联:

    url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/{rs_id}/associations"
    
  3. 分析多效性:

    • 确定与该变异关联的所有性状
    • 查看不同性状的效应方向
    • 查找共同的生物学通路
  4. 检查基因组背景:

    • 确定附近的基因
    • 判断变异是否位于编码区/调控区
    • 查看与其他变异的连锁不平衡
工作流 3:以基因为中心的关联分析
  1. 在 Web 界面中按基因符号搜索,或:

    url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/search/findByGene"
    params = {"geneName": gene_symbol}
    
  2. 检索基因区域内的变异:

    • 获取基因的染色体坐标
    • 查询区域内的变异
    • 纳入启动子和调控区(扩展边界)
  3. 分析关联模式:

    • 确定与该基因内变异关联的性状
    • 查找不同研究中一致的关联
    • 查看效应量和方向
  4. 功能解读:

    • 确定变异后果(错义、调控等)
    • 检查表达数量性状位点(eQTL)数据
    • 查看通路和网络背景
工作流 4:系统性审查遗传证据
  1. 定义研究问题:

    • 感兴趣的具体性状或疾病
    • 人群方面的考量
    • 研究设计要求
  2. 全面提取变异:

    • 查询该性状的所有关联
    • 设置显著性阈值
    • 记录发现研究和重复研究
  3. 质量评估:

    • 审查研究样本量
    • 检查人群多样性
    • 评估研究间的异质性
    • 识别潜在偏倚
  4. 数据综合:

    • 汇总各项研究的关联
    • 适用时进行荟萃分析
    • 创建汇总表
    • 生成曼哈顿图或森林图
  5. 导出和文档记录:

    • 下载完整的关联数据
    • 按需导出汇总统计数据
    • 记录搜索策略和日期
    • 创建可复现的分析脚本
工作流 5:访问和分析汇总统计数据
  1. 查找包含汇总统计数据的研究:

    • 浏览汇总统计数据门户
    • 检查 FTP 目录列表
    • 通过 API 查询可用研究
  2. 下载汇总统计数据:

    # Via FTP
    wget ftp://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCSTXXXXXX/harmonised/GCSTXXXXXX-harmonised.tsv.gz
    
  3. 通过 API 查询特定变异:

    url = f"https://www.ebi.ac.uk/gwas/summary-statistics/api/chromosomes/{chrom}/associations"
    params = {"start": start_pos, "end": end_pos}
    
  4. 处理和分析:

    • 按 p 值阈值筛选
    • 提取效应量和置信区间
    • 执行下游分析(精细定位、共定位等)

响应格式和数据字段

关联记录中的关键字段:

  • rsId:变异标识符(rs 编号)
  • strongestAllele:该关联的风险等位基因
  • pvalue:关联的 p 值
  • pvalueText:文本形式的 p 值(可能包含不等号)
  • orPerCopyNum:比值比或 beta 系数
  • betaNum:效应量(用于定量性状)
  • betaUnit:beta 的测量单位
  • range:置信区间
  • efoTrait:关联性状名称
  • mappedLabel:映射至 EFO 的性状术语

研究元数据字段:

  • accessionId:GCST 研究标识符
  • pubmedId:PubMed ID
  • author:第一作者
  • 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 团队提供了研讨会材料:

重要说明

数据更新
  • 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 设有速率限制(请合理使用)

更多资源

评论

支持 Markdown