mcpField
G
gtex-database

gtex-database

github.com/leonchaox数据与数据库99471 次安装15 周前更新
代码仓库

关于 gtex-database

gtex-database 是用于查询 GTEx 人体组织基因表达及遗传调控数据的技能,面向研究组织特异性表达、eQTL 和 sQTL 的研究者。它提供 API 查询流程,也说明大规模分析所需的数据下载方式。

主要功能

  1. 01查询跨组织基因表达量
  2. 02按基因或变异检索 eQTL
  3. 03查询 sQTL 与组织 eGene
  4. 04获取组织元数据
  5. 05提供 GTEx v10 与 v8 数据访问说明

适用场景

  1. 01解释 GWAS 位点可能调控的基因
  2. 02比较基因在不同组织的表达
  3. 03查找组织特异性遗传调控信号

安装

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

$npx skills add https://github.com/leonchaox/qinyan-academic-skills --skill gtex-database

安装后在 Claude Code 中输入/gtex-database确认已加载。

附带文件references/api_reference.md

详细介绍

GTEx 数据库

概述

基因型-组织表达(Genotype-Tissue Expression,GTEx)项目提供了一项综合资源,可用于研究近 1,000 名个体的 54 种非患病人体组织中的组织特异性基因表达和遗传调控。GTEx v10(最新版本)帮助研究人员了解遗传变异如何以组织特异性的方式调控基因表达(eQTL)和剪接(sQTL),这对解读 GWAS 位点和识别调控机制至关重要。

核心资源:

何时使用此技能

在以下情况下使用 GTEx:

  • GWAS 位点解读:通过 eQTL 确定非编码 GWAS 变异调控的基因
  • 组织特异性表达:比较基因在 54 种人体组织中的表达水平
  • eQTL 共定位:检验 GWAS 信号和 eQTL 信号是否具有相同的因果变异
  • 多组织 eQTL 分析:查找可在多个组织中调控表达的变异
  • 剪接 QTL(sQTL):识别影响剪接比例的变异
  • 组织特异性分析:确定哪些组织表达目标基因
  • 基因表达探索:获取各组织中标准化后的表达水平(TPM)

核心功能

1. GTEx REST API v2

基础 URL:https://gtexportal.org/api/v2/

API 返回 JSON,无需身份验证。所有端点均支持分页。

import requests

BASE_URL = "https://gtexportal.org/api/v2"

def gtex_get(endpoint, params=None):
    """Make a GET request to the GTEx API."""
    url = f"{BASE_URL}/{endpoint}"
    response = requests.get(url, params=params, headers={"Accept": "application/json"})
    response.raise_for_status()
    return response.json()
2. 按组织查询基因表达
import requests
import pandas as pd

def get_gene_expression_by_tissue(gene_id_or_symbol, dataset_id="gtex_v10"):
    """Get median gene expression across all tissues."""
    url = "https://gtexportal.org/api/v2/expression/medianGeneExpression"
    params = {
        "gencodeId": gene_id_or_symbol,
        "datasetId": dataset_id,
        "itemsPerPage": 100
    }
    response = requests.get(url, params=params)
    data = response.json()

    records = data.get("data", [])
    df = pd.DataFrame(records)
    if not df.empty:
        df = df[["tissueSiteDetailId", "tissueSiteDetail", "median", "unit"]].sort_values(
            "median", ascending=False
        )
    return df

# Example: get expression of APOE across tissues
df = get_gene_expression_by_tissue("ENSG00000130203.10")  # APOE GENCODE ID
# Or use gene symbol (some endpoints accept both)
print(df.head(10))
# Output: tissue name, median TPM, sorted by highest expression
3. eQTL 查询
import requests
import pandas as pd

def query_eqtl(gene_id, tissue_id=None, dataset_id="gtex_v10"):
    """Query significant eQTLs for a gene, optionally filtered by tissue."""
    url = "https://gtexportal.org/api/v2/association/singleTissueEqtl"
    params = {
        "gencodeId": gene_id,
        "datasetId": dataset_id,
        "itemsPerPage": 250
    }
    if tissue_id:
        params["tissueSiteDetailId"] = tissue_id

    all_results = []
    page = 0
    while True:
        params["page"] = page
        response = requests.get(url, params=params)
        data = response.json()
        results = data.get("data", [])
        if not results:
            break
        all_results.extend(results)
        if len(results) < params["itemsPerPage"]:
            break
        page += 1

    df = pd.DataFrame(all_results)
    if not df.empty:
        df = df.sort_values("pval", ascending=True)
    return df

# Example: Find eQTLs for PCSK9
df = query_eqtl("ENSG00000169174.14")
print(df[["snpId", "tissueSiteDetailId", "slope", "pval", "gencodeId"]].head(20))
4. 按变异查询单组织 eQTL
import requests

def query_variant_eqtl(variant_id, tissue_id=None, dataset_id="gtex_v10"):
    """Get all eQTL associations for a specific variant."""
    url = "https://gtexportal.org/api/v2/association/singleTissueEqtl"
    params = {
        "variantId": variant_id,  # e.g., "chr1_55516888_G_GA_b38"
        "datasetId": dataset_id,
        "itemsPerPage": 250
    }
    if tissue_id:
        params["tissueSiteDetailId"] = tissue_id

    response = requests.get(url, params=params)
    return response.json()

# GTEx variant ID format: chr{chrom}_{pos}_{ref}_{alt}_b38
# Example: "chr17_43094692_G_A_b38"
5. 多组织 eQTL(eGenes)
import requests

def get_egenes(tissue_id, dataset_id="gtex_v10"):
    """Get all eGenes (genes with at least one significant eQTL) in a tissue."""
    url = "https://gtexportal.org/api/v2/association/egene"
    params = {
        "tissueSiteDetailId": tissue_id,
        "datasetId": dataset_id,
        "itemsPerPage": 500
    }

    all_egenes = []
    page = 0
    while True:
        params["page"] = page
        response = requests.get(url, params=params)
        data = response.json()
        batch = data.get("data", [])
        if not batch:
            break
        all_egenes.extend(batch)
        if len(batch) < params["itemsPerPage"]:
            break
        page += 1
    return all_egenes

# Example: all eGenes in whole blood
egenes = get_egenes("Whole_Blood")
print(f"Found {len(egenes)} eGenes in Whole Blood")
6. 组织列表
import requests

def get_tissues(dataset_id="gtex_v10"):
    """Get all available tissues with metadata."""
    url = "https://gtexportal.org/api/v2/dataset/tissueSiteDetail"
    params = {"datasetId": dataset_id, "itemsPerPage": 100}
    response = requests.get(url, params=params)
    return response.json()["data"]

tissues = get_tissues()
# Key fields: tissueSiteDetailId, tissueSiteDetail, colorHex, samplingSite
# Common tissue IDs:
# Whole_Blood, Brain_Cortex, Liver, Kidney_Cortex, Heart_Left_Ventricle,
# Lung, Muscle_Skeletal, Adipose_Subcutaneous, Colon_Transverse, ...
7. sQTL(剪接 QTL)
import requests

def query_sqtl(gene_id, tissue_id=None, dataset_id="gtex_v10"):
    """Query significant sQTLs for a gene."""
    url = "https://gtexportal.org/api/v2/association/singleTissueSqtl"
    params = {
        "gencodeId": gene_id,
        "datasetId": dataset_id,
        "itemsPerPage": 250
    }
    if tissue_id:
        params["tissueSiteDetailId"] = tissue_id

    response = requests.get(url, params=params)
    return response.json()

查询工作流

工作流 1:通过 eQTL 解读 GWAS 变异
  1. 确定 GWAS 变异(rs ID 或染色体位置)
  2. 转换为 GTEx 变异 ID 格式(chr{chrom}_{pos}_{ref}_{alt}_b38)
  3. 查询该变异在各组织中的所有 eQTL 关联
  4. 检查效应方向:GWAS 风险等位基因是否与 eQTL 效应等位基因相同?
  5. 优先选择组织:选择与疾病在生物学上相关的组织
  6. 使用完整汇总统计数据进行共定位分析,可使用 coloc(R 包)
import requests, pandas as pd

def interpret_gwas_variant(variant_id, dataset_id="gtex_v10"):
    """Find all genes regulated by a GWAS variant."""
    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")

# Example
results = interpret_gwas_variant("chr1_154453788_A_T_b38")
print(results.groupby("geneSymbol")["tissueSiteDetailId"].count().sort_values(ascending=False))
工作流 2:基因表达图谱
  1. 获取基因在所有组织中的表达中位数
  2. 确定主要表达部位
  3. 与疾病相关组织进行比较
  4. 下载原始数据以进行统计比较
工作流 3:组织特异性 eQTL 分析
  1. 选择与疾病相关的组织
  2. 查询该组织中的所有 eGenes
  3. 与 GWAS 显著位点进行交叉比对
  4. 识别共定位信号

主要 API 端点

端点描述
/expression/medianGeneExpression基因在各组织中的 TPM 中位数
/expression/geneExpression各组织中表达的完整分布
/association/singleTissueEqtl显著 eQTL 关联
/association/singleTissueSqtl显著 sQTL 关联
/association/egene某组织中的 eGenes
/dataset/tissueSiteDetail含元数据的可用组织
/reference/gene基因元数据(GENCODE ID、坐标)
/variant/variantPage按 rsID 或位置查询变异

可用数据集

ID描述
gtex_v10GTEx v10(当前版本;约 960 名供体,54 种组织)
gtex_v8GTEx v8(838 名供体,49 种组织)——版本较旧,但被广泛引用

最佳实践

  • 使用 GENCODE ID(例如,ENSG00000130203.10)查询基因;对于某些端点,.version 后缀很重要
  • GTEx 变异 ID 的格式为 chr{chrom}_{pos}_{ref}_{alt}_b38(GRCh38)——与 rs ID 不同
  • 处理分页:大型查询(例如,所有 eGene)需要逐页迭代
  • 组织命名规范:API 调用应使用 tissueSiteDetailId(例如,Whole_Blood),而非显示名称
  • FDR 校正:GTEx 使用 FDR < 0.05(q 值)作为 eQTL 的显著性阈值
  • 效应等位基因:slope 字段表示替代等位基因的效应;正值 = 替代等位基因对应更高的表达量

数据下载(用于大规模分析)

对于全基因组分析,请下载完整的汇总统计数据,而不要使用 API:

# All significant eQTLs (v10)
wget https://storage.googleapis.com/adult-gtex/bulk-qtl/v10/single-tissue-cis-qtl/GTEx_Analysis_v10_eQTL.tar

# Normalized expression matrices
wget https://storage.googleapis.com/adult-gtex/bulk-gex/v10/rna-seq/GTEx_Analysis_v10_RNASeQCv2.4.2_gene_reads.gct.gz

其他资源

评论

支持 Markdown