scientific-monarch-ontology

star 3

Monarch Initiative 疾患-表現型オントロジースキル。 Monarch Initiative API を用いた疾患-遺伝子-表現型 アソシエーション・HPO フェノタイピング・ 遺伝子-疾患推定・オントロジーセマンティック検索。 ToolUniverse 連携: monarch。

nahisaho By nahisaho schedule Updated 2/12/2026

name: scientific-monarch-ontology description: | Monarch Initiative 疾患-表現型オントロジースキル。 Monarch Initiative API を用いた疾患-遺伝子-表現型 アソシエーション・HPO フェノタイピング・ 遺伝子-疾患推定・オントロジーセマンティック検索。 ToolUniverse 連携: monarch。 tu_tools:

  • key: monarch name: Monarch Initiative description: 疾患-表現型-遺伝子オントロジー統合 API

Scientific Monarch Initiative Ontology

Monarch Initiative API を活用した疾患-遺伝子-表現型 アソシエーション取得・HPO ベースフェノタイピング・ セマンティックオントロジー検索パイプラインを提供する。

When to Use

  • 疾患の関連遺伝子・表現型 (HPO) を検索するとき
  • 遺伝子から関連疾患・表現型を逆引きするとき
  • HPO 用語でフェノタイプマッチングするとき
  • オントロジー用語間の意味的類似度を計算するとき
  • 疾患-表現型-遺伝子の三者間アソシエーションを統合するとき

Quick Start

1. 疾患-遺伝子-表現型アソシエーション

import requests
import pandas as pd

MONARCH_API = "https://api.monarchinitiative.org/v3/api"


def monarch_disease_genes(disease_id, limit=50):
    """
    Monarch — 疾患→関連遺伝子取得。

    Parameters:
        disease_id: str — 疾患 ID
            (例: "MONDO:0007254" = breast cancer)
        limit: int — 最大結果数
    """
    url = f"{MONARCH_API}/association"
    params = {
        "subject": disease_id,
        "category": "biolink:GeneToDiseaseAssociation",
        "limit": limit,
    }
    resp = requests.get(url, params=params, timeout=30)
    resp.raise_for_status()
    data = resp.json()

    rows = []
    for item in data.get("items", []):
        obj = item.get("object", {})
        rows.append({
            "disease_id": disease_id,
            "gene_id": obj.get("id", ""),
            "gene_label": obj.get("label", ""),
            "relation": item.get("predicate", ""),
            "source": "; ".join(
                item.get("provided_by", [])),
        })

    df = pd.DataFrame(rows)
    print(f"Monarch disease→genes: {disease_id} "
          f"→ {len(df)} genes")
    return df


def monarch_disease_phenotypes(disease_id, limit=100):
    """
    Monarch — 疾患→表現型 (HPO) 取得。

    Parameters:
        disease_id: str — 疾患 ID
        limit: int — 最大結果数
    """
    url = f"{MONARCH_API}/association"
    params = {
        "subject": disease_id,
        "category":
            "biolink:DiseaseToPhenotypicFeatureAssociation",
        "limit": limit,
    }
    resp = requests.get(url, params=params, timeout=30)
    resp.raise_for_status()
    data = resp.json()

    rows = []
    for item in data.get("items", []):
        obj = item.get("object", {})
        rows.append({
            "disease_id": disease_id,
            "phenotype_id": obj.get("id", ""),
            "phenotype_label": obj.get("label", ""),
            "frequency": item.get("frequency_qualifier",
                                  ""),
            "onset": item.get("onset_qualifier", ""),
        })

    df = pd.DataFrame(rows)
    print(f"Monarch disease→phenotypes: {disease_id} "
          f"→ {len(df)} HPO terms")
    return df

2. 遺伝子→疾患逆引き

def monarch_gene_diseases(gene_id, limit=50):
    """
    Monarch — 遺伝子→関連疾患取得。

    Parameters:
        gene_id: str — 遺伝子 ID
            (例: "HGNC:1100" = BRCA1)
        limit: int — 最大結果数
    """
    url = f"{MONARCH_API}/association"
    params = {
        "subject": gene_id,
        "category": "biolink:GeneToDiseaseAssociation",
        "limit": limit,
    }
    resp = requests.get(url, params=params, timeout=30)
    resp.raise_for_status()
    data = resp.json()

    rows = []
    for item in data.get("items", []):
        obj = item.get("object", {})
        rows.append({
            "gene_id": gene_id,
            "disease_id": obj.get("id", ""),
            "disease_label": obj.get("label", ""),
            "relation": item.get("predicate", ""),
        })

    df = pd.DataFrame(rows)
    print(f"Monarch gene→diseases: {gene_id} "
          f"→ {len(df)} diseases")
    return df

3. エンティティ検索・オントロジー用語

def monarch_search(query, category=None, limit=25):
    """
    Monarch — エンティティテキスト検索。

    Parameters:
        query: str — 検索クエリ
        category: str — カテゴリフィルタ
            (例: "biolink:Disease", "biolink:Gene",
             "biolink:PhenotypicFeature")
        limit: int — 最大結果数
    """
    url = f"{MONARCH_API}/search"
    params = {"q": query, "limit": limit}
    if category:
        params["category"] = category

    resp = requests.get(url, params=params, timeout=30)
    resp.raise_for_status()
    data = resp.json()

    rows = []
    for item in data.get("items", []):
        rows.append({
            "id": item.get("id", ""),
            "label": item.get("name", ""),
            "category": item.get("category", ""),
            "description": (item.get("description", "")
                            or "")[:200],
        })

    df = pd.DataFrame(rows)
    print(f"Monarch search: '{query}' → {len(df)}")
    return df

4. Monarch 統合パイプライン

def monarch_pipeline(disease_query,
                        output_dir="results"):
    """
    Monarch 統合パイプライン。

    Parameters:
        disease_query: str — 疾患名 or ID
        output_dir: str — 出力ディレクトリ
    """
    from pathlib import Path
    output_dir = Path(output_dir)
    output_dir.mkdir(parents=True, exist_ok=True)

    # 1) 疾患検索
    diseases = monarch_search(disease_query,
                              category="biolink:Disease")
    diseases.to_csv(output_dir / "monarch_diseases.csv",
                    index=False)

    if diseases.empty:
        print(f"Monarch: '{disease_query}' not found")
        return {"diseases": diseases}

    disease_id = diseases.iloc[0]["id"]

    # 2) 関連遺伝子
    genes = monarch_disease_genes(disease_id)
    genes.to_csv(output_dir / "monarch_genes.csv",
                 index=False)

    # 3) 表現型 (HPO)
    phenotypes = monarch_disease_phenotypes(disease_id)
    phenotypes.to_csv(
        output_dir / "monarch_phenotypes.csv",
        index=False)

    print(f"Monarch pipeline: {disease_query} "
          f"→ {output_dir}")
    return {"genes": genes, "phenotypes": phenotypes}

ToolUniverse 連携

TU Key ツール名 連携内容
monarch Monarch Initiative 疾患-表現型-遺伝子オントロジー統合

パイプライン統合

disease-research → monarch-ontology → rare-disease-genetics
  (GWAS/DisGeNET)   (Monarch API)     (OMIM/Orphanet)
        │                  │                 ↓
variant-interpretation ───┘       ontology-enrichment
  (ClinVar/ACMG)                 (EFO/OLS/Enrichr)

パイプライン出力

ファイル 説明 次スキル
results/monarch_diseases.csv 疾患検索結果 → disease-research
results/monarch_genes.csv 関連遺伝子 → variant-interpretation
results/monarch_phenotypes.csv HPO 表現型 → rare-disease-genetics
Install via CLI
npx skills add https://github.com/nahisaho/satori --skill scientific-monarch-ontology
Repository Details
star Stars 3
call_split Forks 1
navigation Branch main
article Path SKILL.md
More from Creator