AgentSkillsCN

scientific-pharmacology-targets

药理学靶点剖析技能。整合BindingDB结合亲和性数据、GPCRdb GPCR结构-活性数据、GtoPdb药理学数据、BRENDA酶动力学数据,以及Pharos未解明靶点(TDL)的整合分析流程。

SKILL.md
--- frontmatter
name: scientific-pharmacology-targets
description: |
  薬理学的ターゲットプロファイリングスキル。BindingDB 結合親和性、
  GPCRdb GPCR 構造-活性、GtoPdb 薬理学、BRENDA 酵素動態、
  Pharos 未解明ターゲット(TDL)の統合解析パイプライン。

Scientific Pharmacology Targets

複数の薬理学データベース (BindingDB, GPCRdb, GtoPdb, BRENDA, Pharos) を 統合した包括的ターゲットプロファイリングパイプラインを提供する。

When to Use

  • 特定タンパク質の既知リガンド・結合親和性を調べるとき
  • GPCR のリガンド・変異・構造情報を取得するとき
  • 薬物-ターゲット相互作用のデータベース横断検索を行うとき
  • 酵素阻害剤データ (BRENDA) を調べるとき
  • 未解明ターゲット (Tdark/Tbio) のドラッガビリティを評価するとき

Quick Start

1. BindingDB 結合親和性データ取得

python
import requests
import pandas as pd


def get_bindingdb_ligands(uniprot_id, cutoff=None):
    """
    BindingDB から UniProt ID ベースのリガンド結合データを取得。

    Parameters:
        uniprot_id: str — UniProt accession (e.g., "P00533")
        cutoff: float | None — affinity cutoff nM

    ToolUniverse:
        BindingDB_get_ligands_by_uniprot(uniprot_id=uniprot_id)
        BindingDB_get_targets_by_compound(smiles=smiles)
    """
    url = "https://bindingdb.org/axis2/services/BDBService"
    params = {
        "uniprot": uniprot_id,
        "response": "json",
    }
    if cutoff:
        params["cutoff"] = cutoff

    resp = requests.get(f"{url}/getLigandsByUniprot", params=params)
    resp.raise_for_status()
    data = resp.json()

    ligands = data.get("getLigandsByUniprotResponse", {}).get("affinities", [])
    results = []
    for lig in ligands:
        results.append({
            "monomer_id": lig.get("monomerid", ""),
            "smiles": lig.get("smiles", ""),
            "affinity_type": lig.get("affinity_type", ""),
            "affinity_value_nm": lig.get("affinity", ""),
            "source": lig.get("source", ""),
        })

    df = pd.DataFrame(results)
    print(f"BindingDB '{uniprot_id}': {len(df)} ligands")
    return df

2. GPCRdb GPCR プロファイリング

python
def get_gpcrdb_profile(protein_entry):
    """
    GPCRdb から GPCR のリガンド・変異・構造情報を取得。

    Parameters:
        protein_entry: str — GPCRdb entry name (e.g., "adrb2_human")

    ToolUniverse:
        GPCRdb_get_protein(entry_name=protein_entry)
        GPCRdb_get_ligands(entry_name=protein_entry)
        GPCRdb_get_mutations(entry_name=protein_entry)
        GPCRdb_get_structures(entry_name=protein_entry)
        GPCRdb_list_proteins()
    """
    base = "https://gpcrdb.org/services"

    # Protein info
    resp_p = requests.get(f"{base}/protein/{protein_entry}/")
    resp_p.raise_for_status()
    protein = resp_p.json()

    # Ligands
    resp_l = requests.get(f"{base}/ligands/{protein_entry}/")
    ligands = resp_l.json() if resp_l.status_code == 200 else []

    # Mutations
    resp_m = requests.get(f"{base}/mutants/{protein_entry}/")
    mutations = resp_m.json() if resp_m.status_code == 200 else []

    # Structures
    resp_s = requests.get(f"{base}/structure/protein/{protein_entry}/")
    structures = resp_s.json() if resp_s.status_code == 200 else []

    profile = {
        "entry_name": protein.get("entry_name", ""),
        "name": protein.get("name", ""),
        "family": protein.get("family", ""),
        "species": protein.get("species", ""),
        "num_ligands": len(ligands),
        "num_mutations": len(mutations),
        "num_structures": len(structures),
    }

    print(f"GPCRdb '{protein_entry}': "
          f"{profile['num_ligands']} ligands, "
          f"{profile['num_mutations']} mutations, "
          f"{profile['num_structures']} structures")
    return profile, ligands, mutations, structures

3. GtoPdb 薬理学データ

python
def get_gtopdb_target_pharmacology(target_id):
    """
    Guide to PHARMACOLOGY (GtoPdb) から
    ターゲットの薬理学的相互作用データを取得。

    ToolUniverse:
        GtoPdb_get_target(target_id=target_id)
        GtoPdb_get_target_interactions(target_id=target_id)
        GtoPdb_get_ligand(ligand_id=ligand_id)
        GtoPdb_search_interactions(query=query)
    """
    base = "https://www.guidetopharmacology.org/services"

    # Target info
    resp_t = requests.get(f"{base}/targets/{target_id}")
    resp_t.raise_for_status()
    target = resp_t.json()

    # Interactions
    resp_i = requests.get(f"{base}/targets/{target_id}/interactions")
    interactions = resp_i.json() if resp_i.status_code == 200 else []

    results = []
    for ix in interactions:
        results.append({
            "ligand_id": ix.get("ligandId", ""),
            "ligand_name": ix.get("ligandName", ""),
            "type": ix.get("type", ""),
            "action": ix.get("action", ""),
            "affinity_type": ix.get("affinityType", ""),
            "affinity_median": ix.get("affinityMedian", ""),
            "approved": ix.get("approvedDrug", False),
        })

    df = pd.DataFrame(results)
    print(f"GtoPdb target {target_id} ({target.get('name', '')}): "
          f"{len(df)} interactions")
    return target, df

4. Pharos/TCRD 未解明ターゲット検索

python
def search_pharos_targets(query, tdl=None):
    """
    Pharos / TCRD からターゲット情報を取得。
    Target Development Level (TDL) でフィルタ可能。

    Parameters:
        query: str — gene symbol or target name
        tdl: str | None — "Tclin", "Tchem", "Tbio", "Tdark"

    ToolUniverse:
        Pharos_search_targets(q=query)
        Pharos_get_target(q=query)
        Pharos_get_tdl_summary()
        Pharos_get_disease_targets(disease_name=disease_name)
    """
    url = "https://pharos-api.ncats.io/graphql"
    gql = """
    query TargetSearch($term: String!, $top: Int) {
        targets(filter: { term: $term }, top: $top) {
            targets {
                name
                sym
                uniprot { accession }
                tdl
                fam
                novelty
                jensenScore
                diseaseCount
                ligandCount
            }
            count
        }
    }
    """
    variables = {"term": query, "top": 20}
    resp = requests.post(url, json={"query": gql, "variables": variables})
    resp.raise_for_status()
    data = resp.json()["data"]["targets"]

    results = []
    for t in data["targets"]:
        results.append({
            "symbol": t.get("sym", ""),
            "name": t.get("name", ""),
            "uniprot": t.get("uniprot", {}).get("accession", ""),
            "tdl": t.get("tdl", ""),
            "family": t.get("fam", ""),
            "novelty": t.get("novelty", 0),
            "disease_count": t.get("diseaseCount", 0),
            "ligand_count": t.get("ligandCount", 0),
        })

    df = pd.DataFrame(results)
    if tdl:
        df = df[df["tdl"] == tdl]

    print(f"Pharos '{query}': {len(df)} targets"
          f"{f' (TDL={tdl})' if tdl else ''}")
    return df

5. 統合ターゲットプロファイリング

python
def integrated_target_profile(uniprot_id, gene_symbol):
    """
    複数データベースを統合したターゲットプロファイル。

    ToolUniverse (横断):
        BindingDB_get_ligands_by_uniprot(uniprot_id)
        Pharos_get_target(q=gene_symbol)
        GtoPdb_get_targets() → GtoPdb_get_target_interactions()
    """
    profile = {
        "uniprot_id": uniprot_id,
        "gene_symbol": gene_symbol,
    }

    # BindingDB ligands
    try:
        bdb_df = get_bindingdb_ligands(uniprot_id)
        profile["bindingdb_ligand_count"] = len(bdb_df)
    except Exception:
        profile["bindingdb_ligand_count"] = 0

    # Pharos TDL
    try:
        pharos_df = search_pharos_targets(gene_symbol)
        if not pharos_df.empty:
            row = pharos_df.iloc[0]
            profile["tdl"] = row.get("tdl", "")
            profile["novelty"] = row.get("novelty", 0)
    except Exception:
        profile["tdl"] = "Unknown"

    print(f"Integrated profile {gene_symbol}: TDL={profile.get('tdl', '?')}, "
          f"BindingDB={profile['bindingdb_ligand_count']} ligands")
    return profile

References

Output Files

ファイル形式
results/bindingdb_ligands.csvCSV
results/gpcrdb_profile.jsonJSON
results/gtopdb_interactions.csvCSV
results/pharos_targets.csvCSV
results/integrated_target_profile.jsonJSON

利用可能ツール

カテゴリ主要ツール用途
BindingDBBindingDB_get_ligands_by_uniprotUniProt→リガンド
BindingDBBindingDB_get_ligands_by_uniprotsバッチ
BindingDBBindingDB_get_ligands_by_pdbPDB→リガンド
BindingDBBindingDB_get_targets_by_compound化合物→ターゲット
GPCRdbGPCRdb_get_proteinGPCR 詳細
GPCRdbGPCRdb_get_ligandsGPCR リガンド
GPCRdbGPCRdb_get_mutationsGPCR 変異
GPCRdbGPCRdb_get_structuresGPCR 構造
GPCRdbGPCRdb_list_proteinsGPCR 一覧
GtoPdbGtoPdb_get_targetターゲット情報
GtoPdbGtoPdb_get_target_interactions相互作用
GtoPdbGtoPdb_get_ligandリガンド情報
GtoPdbGtoPdb_get_targetsターゲット一覧
GtoPdbGtoPdb_list_ligandsリガンド一覧
GtoPdbGtoPdb_get_disease疾患関連
GtoPdbGtoPdb_list_diseases疾患一覧
GtoPdbGtoPdb_search_interactions相互作用検索
BRENDABRENDA_get_inhibitors酵素阻害剤
PharosPharos_search_targetsターゲット検索
PharosPharos_get_targetターゲット詳細
PharosPharos_get_tdl_summaryTDL サマリー
PharosPharos_get_disease_targets疾患→ターゲット

参照スキル

スキル関連
scientific-drug-target-interactionDTI 予測
scientific-compound-similarity化合物類似性
scientific-compound-screening化合物スクリーニング
scientific-molecular-docking分子ドッキング
scientific-protein-interaction-networkPPI ネットワーク

依存パッケージ

requests, pandas