mcpField
G
gwas-database

gwas-database

github.com/davila7数据与数据库33.0k289 次安装今天更新
代码仓库

关于 gwas-database

用于查询和解读 NHGRI-EBI GWAS Catalog 中遗传关联及研究数据的技能。支持按变异、性状、基因、区域或出版物搜索,也可通过目录 API 和下载方式获取研究摘要统计数据。

主要功能

  1. 01按变异、性状、基因或区域搜索关联
  2. 02获取研究和变异元数据
  3. 03通过 API 或下载访问摘要统计数据
  4. 04按基因组位置及统计字段筛选摘要数据
  5. 05支持交叉引用与证据汇总

适用场景

  1. 01查找疾病或性状的已报告关联
  2. 02查看特定 rs ID 关联的性状
  3. 03探索基因附近的遗传关联
  4. 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 本体术语)

主要标识符:

  • 研究登录号: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