gwas-database について
NHGRI-EBI GWAS Catalogの遺伝的関連や研究データを検索・解釈するためのスキルです。バリアント、形質、遺伝子、領域、論文から検索でき、APIやダウンロードで研究のサマリー統計にもアクセスできます。
主な機能
- 01バリアント、形質、遺伝子、領域別の関連検索
- 02研究およびバリアントのメタデータ取得
- 03APIやダウンロードによるサマリー統計へのアクセス
- 04ゲノム位置や統計項目によるサマリー統計の絞り込み
- 05外部情報との照合とエビデンスの集約
活用シーン
- 01疾患や形質の報告済み関連の検索
- 02特定のrs IDに関連する形質の確認
- 03遺伝子周辺の遺伝的関連の調査
- 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 は、National Human Genome Research Institute (NHGRI) と European Bioinformatics Institute (EBI) が管理する、発表済みのゲノムワイド関連解析(GWAS)を網羅したリポジトリです。数千件の GWAS 論文から厳選された SNP と形質の関連情報を収録しており、遺伝的変異、関連する形質および疾患、p 値、効果量、多数の研究について完全なサマリー統計量が含まれています。
このスキルを使用する場合
このスキルは、次のようなクエリに使用します。
- 遺伝的変異の関連: 疾患や形質に関連する SNP を見つける
- SNP の検索: 特定の遺伝的変異(rs ID)に関する情報を取得する
- 形質・疾患の検索: 表現型に対する遺伝的関連を見つける
- 遺伝子との関連: 特定の遺伝子内またはその近傍の変異を見つける
- GWAS サマリー統計量: ゲノムワイド関連解析データ全体にアクセスする
- 研究のメタデータ: 論文およびコホートの情報を取得する
- 集団遺伝学: 祖先ごとに特有の関連を調べる
- ポリジェニックリスクスコア: リスク予測モデルに用いる変異を特定する
- 機能ゲノミクス: 変異の効果とゲノム上の文脈を理解する
- システマティックレビュー: 遺伝的関連に関する文献の包括的な統合
コア機能
1. GWAS Catalog のデータ構造の理解
GWAS Catalog は、次の 4 つの中核的なエンティティを中心に構成されています。
- Studies(研究): メタデータ(PMID、著者、コホートの詳細)を持つ GWAS 論文
- Associations(関連): 統計的根拠(p ≤ 5×10⁻⁸)を持つ SNP と形質の関連
- Variants(変異): ゲノム座標と対立遺伝子を持つ遺伝子マーカー(SNP)
- Traits(形質): 表現型および疾患(EFO オントロジー用語に対応付け)
主な識別子:
- 研究のアクセッション:
GCSTID(例: 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 は、プログラムからアクセスするための 2 つの 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 ドキュメント:
- メイン API ドキュメント: https://www.ebi.ac.uk/gwas/rest/docs/api
- サマリー統計量のドキュメント: https://www.ebi.ac.uk/gwas/summary-statistics/docs/
主要エンドポイント:
-
Studies エンドポイント -
/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() -
Associations エンドポイント -
/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() -
Variants エンドポイント -
/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() -
Traits エンドポイント -
/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 は多数の研究について完全なサマリー統計を公開しており、ゲノムワイド有意なヒットだけでなく、検定されたすべてのバリアントにアクセスできます。
アクセス方法:
- FTP ダウンロード: http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/
- REST API: クエリベースでサマリー統計にアクセス
- 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: 疾患に関する遺伝的関連の調査
-
形質を特定する。EFO 用語またはフリーテキストを使用します:
- 疾患名で Web インターフェースを検索する
- EFO ID を控える (例: 2 型糖尿病の EFO_0001360)
-
API で関連を照会する:
url = f"https://www.ebi.ac.uk/gwas/rest/api/efoTraits/{efo_id}/associations" -
有意性と集団で絞り込む:
- p 値を確認する (ゲノムワイド有意: p ≤ 5×10⁻⁸)
- 研究メタデータで祖先情報を確認する
- サンプルサイズまたは発見/再現の状況で絞り込む
-
バリアントの詳細を抽出する:
- 各関連の rs ID
- 効果アレルと方向
- 効果量 (オッズ比、ベータ係数)
- 集団のアレル頻度
-
他のデータベースと相互参照する:
- Ensembl でバリアントの影響を調べる
- gnomAD で集団頻度を確認する
- 遺伝子の機能および経路を調べる
ワークフロー 2: 特定の遺伝的バリアントの調査
-
バリアントを照会する:
url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/{rs_id}" -
すべての形質関連を取得する:
url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/{rs_id}/associations" -
多面発現を分析する:
- このバリアントに関連するすべての形質を特定する
- 形質間での効果の方向を確認する
- 共通する生物学的経路を探す
-
ゲノム上の文脈を確認する:
- 近傍の遺伝子を特定する
- バリアントがコード領域または制御領域にあるかを判定する
- 他のバリアントとの連鎖不平衡を確認する
ワークフロー 3: 遺伝子中心の関連解析
-
遺伝子記号で検索する。Web インターフェースで行うか、次のように実行します:
url = f"https://www.ebi.ac.uk/gwas/rest/api/singleNucleotidePolymorphisms/search/findByGene" params = {"geneName": gene_symbol} -
遺伝子領域内のバリアントを取得する:
- 遺伝子の染色体座標を取得する
- 領域内のバリアントを照会する
- プロモーターおよび制御領域を含める (境界を拡張する)
-
関連パターンを分析する:
- この遺伝子のバリアントに関連する形質を特定する
- 研究間で一貫した関連があるかを確認する
- 効果量および方向を確認する
-
機能的解釈:
- バリアントの影響を判定する (ミスセンス、制御など)
- 発現量形質座位 (eQTL) データを確認する
- 経路およびネットワーク上の文脈を確認する
ワークフロー 4: 遺伝学的エビデンスの体系的レビュー
-
研究課題の定義:
- 対象となる特定の形質または疾患
- 集団に関する考慮事項
- 研究デザインの要件
-
包括的なバリアント抽出:
- 形質に関するすべての関連をクエリ
- 有意性の閾値を設定
- 発見研究と再現研究を記録
-
品質評価:
- 研究のサンプルサイズを確認
- 集団の多様性を確認
- 研究間の不均一性を評価
- 潜在的なバイアスを特定
-
データ統合:
- 研究をまたいで関連を集約
- 該当する場合はメタアナリシスを実施
- 要約表を作成
- マンハッタンプロットまたはフォレストプロットを生成
-
エクスポートと文書化:
- 関連データの全体をダウンロード
- 必要に応じて要約統計量をエクスポート
- 検索戦略と日付を文書化
- 再現可能な分析スクリプトを作成
ワークフロー 5: 要約統計量へのアクセスと分析
-
要約統計量が利用可能な研究を特定:
- 要約統計量ポータルを参照
- FTP ディレクトリの一覧を確認
- API で利用可能な研究を照会
-
要約統計量をダウンロード:
# Via FTP wget ftp://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCSTXXXXXX/harmonised/GCSTXXXXXX-harmonised.tsv.gz -
API で特定のバリアントを照会:
url = f"https://www.ebi.ac.uk/gwas/summary-statistics/api/chromosomes/{chrom}/associations" params = {"start": start_pos, "end": end_pos} -
処理と分析:
- p 値の閾値でフィルタリング
- 効果量と信頼区間を抽出
- 下流の分析を実施(ファインマッピング、共局在解析など)
レスポンス形式とデータフィールド
関連レコードの主要フィールド:
rsId: バリアント識別子(rs 番号)strongestAllele: 関連におけるリスクアレルpvalue: 関連の p 値pvalueText: テキスト形式の p 値(不等号を含む場合あり)orPerCopyNum: オッズ比またはベータ係数betaNum: 効果量(量的形質の場合)betaUnit: ベータの測定単位range: 信頼区間efoTrait: 関連する形質名mappedLabel: EFO にマッピングされた形質用語
研究メタデータのフィールド:
accessionId: GCST 研究識別子pubmedId: PubMed IDauthor: 筆頭著者publicationDate: 出版日ancestryInitial: 発見集団の祖先系統ancestryReplication: 再現集団の祖先系統sampleSize: 総サンプルサイズ
ページネーション: 結果はページ単位で返されます(既定では 1 ページあたり 20 件)。次のパラメーターを使用して移動します:
sizeパラメーター: 1 ページあたりの結果数pageパラメーター: ページ番号(0 始まり)- レスポンス内の
_links: 次ページ・前ページの URL
ベストプラクティス
クエリ戦略
- Web インターフェースから開始し、関連する EFO 用語と研究アクセッション番号を特定する
- 大量データの抽出と自動化された分析には API を使用する
- 大規模な結果セットに対してページネーションの処理を実装する
- API レスポンスをキャッシュして、冗長なリクエストを最小限に抑える
データの解釈
- 常に p 値の閾値を確認する(ゲノムワイド: 5×10⁻⁸)
- 集団への適用性を判断するため、祖先系統の情報を確認する
- エビデンスの強さを評価する際はサンプルサイズを考慮する
- 独立した研究間で再現性があるかを確認する
- 効果量の推定値に含まれる勝者の呪い(winner's curse)に注意する
レート制限と倫理
- API の利用ガイドラインを守る(過度なリクエストを避ける)
- ゲノムワイドな分析には要約統計量のダウンロードを利用する
- API 呼び出しの間には適切な待機時間を設ける
- 反復的な分析を行う場合は結果をローカルにキャッシュする
- 出版物では GWAS Catalog を引用する
データ品質に関する考慮事項
- GWAS Catalog は公表された関連をキュレーションしたものであり、不整合を含む場合がある
- 効果量は公表された値のまま報告されており、調和処理(harmonization)が必要な場合がある
- 一部の研究では条件付きまたは同時の関連が報告されている
- 結果を統合する際は、研究間の重複を確認する
- 症例の抽出方法や選択によるバイアスに注意する
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 チームはワークショップ資料を提供しています。
- GitHub リポジトリ: https://github.com/EBISPOT/GWAS_Catalog-workshop
- 例となるクエリを含む Jupyter ノートブック
- クラウド実行のための Google Colab 連携
重要な注意事項
データの更新
- 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 論文が含まれているわけではありません(キュレーション基準が適用されます)
- 完全なサマリー統計量が利用できるのは一部の研究のみです
- 効果量は、研究間で調和化(harmonization)が必要な場合があります
- 集団の多様性は拡大しつつありますが、これまでは限られていました
- 一部の関連は、条件付きまたは同時の効果を表しています
データへのアクセス
- Web インターフェース: 無料、登録不要
- REST API: 無料、API キー不要
- FTP ダウンロード: オープンアクセス
- API にはレート制限が適用されます(過度なリクエストは控えてください)
追加リソース
- GWAS Catalog ウェブサイト: https://www.ebi.ac.uk/gwas/
- ドキュメント: https://www.ebi.ac.uk/gwas/docs
- API ドキュメント: https://www.ebi.ac.uk/gwas/rest/docs/api
- Summary Statistics API: https://www.ebi.ac.uk/gwas/summary-statistics/docs/
- FTP サイト: http://ftp.ebi.ac.uk/pub/databases/gwas/
- トレーニング資料: https://github.com/EBISPOT/GWAS_Catalog-workshop
- PGS Catalog(ポリジェニックスコア): https://www.pgscatalog.org/
- ヘルプとサポート: [email protected]