gtex-database について
gtex-databaseは、GTExのヒト組織別遺伝子発現と遺伝的制御を調べる研究者向けのスキルです。組織発現、eQTL、sQTLのAPI利用手順と、大規模解析用のデータ取得方法を扱います。
主な機能
- 01組織横断の遺伝子発現量の検索
- 02遺伝子または変異によるeQTL検索
- 03sQTLと組織別eGeneの検索
- 04組織メタデータの取得
- 05GTEx v10とv8へのアクセス案内
活用シーン
- 01GWAS座位が制御する可能性のある遺伝子の解釈
- 02組織間の遺伝子発現比較
- 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 Portal: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座位の解釈:非コードGWAS変異がeQTLを介して制御する遺伝子の特定
- 組織特異的な発現:ヒトの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変異の解釈
- GWAS変異を特定する(rs IDまたは染色体上の位置)
- GTExの変異ID形式に変換する(
chr{chrom}_{pos}_{ref}_{alt}_b38) - 全組織にわたるその変異のeQTL関連をすべて検索する
- 効果の方向を確認する:GWASのリスクアレルはeQTLの効果アレルと同じですか?
- 組織を優先順位付けする:疾患に生物学的に関連する組織を選択する
- 完全な要約統計量を使って
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:遺伝子発現アトラス
- 全組織にわたる遺伝子の発現中央値を取得する
- 主な発現部位を特定する
- 疾患に関連する組織と比較する
- 統計比較のために生データをダウンロードする
ワークフロー3:組織特異的なeQTL解析
- 疾患に関連する組織を選択する
- その組織のeGeneをすべて検索する
- GWASで有意な座位と照合する
- 共局在するシグナルを特定する
主なAPIエンドポイント
| エンドポイント | 説明 |
|---|---|
/expression/medianGeneExpression | 遺伝子の組織別TPM中央値 |
/expression/geneExpression | 組織ごとの発現分布全体 |
/association/singleTissueEqtl | 有意なeQTL関連 |
/association/singleTissueSqtl | 有意なsQTL関連 |
/association/egene | 組織内のeGene |
/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とは異なります - ページネーションに対応します:大規模なクエリ(例:すべてのeGene)では、ページを順に処理する必要があります
- 組織の命名規則:API呼び出しでは表示名ではなく、
tissueSiteDetailId(例:Whole_Blood)を使用します - FDR補正:GTExでは、eQTLの有意性のしきい値としてFDR < 0.05(q値)を使用します
- 効果アレル:
slopeフィールドは代替アレルの効果を表します。正の値は、altアレルで発現量が高いことを示します
データのダウンロード(大規模解析向け)
ゲノム全体の解析では、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
追加リソース
- 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
コメント
Markdown 対応