返回Skills库

GTEx 数据库

MIT
📊 数据知识
K-Dense-AI数据库

查询GTEx(基因型-组织表达)门户,获取组织特异性基因表达、eQTLs(表达数量性状位点)和sQTLs。对于将GWAS变异与基因调控联系起来、理解组织特异性表达和解释非编码变异效应至关重要。

GTEx 数据库

概述

基因型-组织表达(GTEx)项目为研究跨54个非疾病人类组织的组织特异性基因表达和遗传调控提供了全面的资源。GTEx v10(最新版本)使研究人员能够理解遗传变体如何以组织特异性方式调控基因表达(eQTL)和剪接(sQTL),这对于解释GWAS位点和识别调控机制至关重要。

关键资源:

  • GTEx门户:https://gtexportal.org/
  • GTEx API v2:https://gtexportal.org/api/v2/
  • 数据下载:https://gtexportal.org/home/downloads/adult-gtex/
  • 文档:https://gtexportal.org/home/documentationPage

何时使用此技能

使用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):
    """向GTEx API发出GET请求。"""
    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"):
    """获取所有组织的基因中位数表达。"""
    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

# 示例:获取APOE跨组织的表达
df = get_gene_expression_by_tissue("ENSG00000130203.10")  # APOE GENCODE ID
# 或使用基因符号(某些端点接受两者)
print(df.head(10))
# 输出:组织名称、中位数TPM,按最高表达排序

3. eQTL查找

import requests
import pandas as pd

def query_eqtl(gene_id, tissue_id=None, dataset_id="gtex_v10"):
    """查询基因的显著eQTL,可选择按组织过滤。"""
    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

# 示例:查找PCSK9的eQTL
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"):
    """获取特定变体的所有eQTL关联。"""
    url = "https://gtexportal.org/api/v2/association/singleTissueEqtl"
    params = {
        "variantId": variant_id,  # 例如"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变体ID格式:chr{chrom}_{pos}_{ref}_{alt}_b38
# 示例:"chr17_43094692_G_A_b38"

5. 多组织eQTL(eGenes)

import requests

def get_egenes(tissue_id, dataset_id="gtex_v10"):
    """获取组织中的所有eGenes(至少有一个显著eQTL的基因)。"""
    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

# 示例:全血中的所有eGenes
egenes = get_egenes("Whole_Blood")
print(f"在Whole Blood中找到{len(egenes)}个eGenes")

6. 组织列表

import requests

def get_tissues(dataset_id="gtex_v10"):
    """获取所有可用组织及其元数据。"""
    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()
# 关键字段:tissueSiteDetailId、tissueSiteDetail、colorHex、samplingSite
# 常见组织ID:
# 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"):
    """查询基因的显著sQTL。"""
    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"):
    """查找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:基因表达图谱

  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_v10 | GTEx v10(当前;~960个供体,54个组织) |

| gtex_v8 | GTEx v8(838个供体,49个组织)——较旧但被广泛引用 |

最佳实践

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

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

对于全基因组分析,下载完整汇总统计而不是使用API:

# 所有显著eQTL(v10)
wget https://storage.googleapis.com/adult-gtex/bulk-qtl/v10/single-tissue-cis-qtl/GTEx_Analysis_v10_eQTL.tar

# 标准化表达矩阵
wget https://storage.googleapis.com/adult-gtex/bulk-gex/v10/rna-seq/GTEx_Analysis_v10_RNASeQCv2.4.2_gene_reads.gct.gz

其他资源

  • GTEx门户: https://gtexportal.org/
  • API文档: https://gtexportal.org/api/v2/
  • 数据下载: https://gtexportal.org/home/downloads/adult-gtex/
  • GitHub: https://github.com/broadinstitute/gtex-pipeline
  • 引用: GTEx Consortium (2020) Science. PMID: 32913098

兼容工具

Claude CodeOpenClawHermes Agent

数据来源:claude-scientific-skillsMIT 许可) | 查看上游来源

上游项目:K-Dense-AI/scientific-agent-skills / claude-scientific-skills | 收录时间:2026-08-18 | 更新:2026-08-18

本页面内容基于上游开源许可项目整理,仅供学习参考。AI铺子不对第三方内容承担责任, 详情请参阅免责声明