scientific-nci60-screening

star 3

NCI-60 がん細胞株薬剤応答スキル。CellMiner API 薬剤感受性・ NCI-60 GI50/LC50 データ・DepMap cancer dependency 統合・ 薬剤-分子マーカー相関・細胞株パネル比較解析。

nahisaho By nahisaho schedule Updated 2/15/2026

name: scientific-nci60-screening description: | NCI-60 がん細胞株薬剤応答スキル。CellMiner API 薬剤感受性・ NCI-60 GI50/LC50 データ・DepMap cancer dependency 統合・ 薬剤-分子マーカー相関・細胞株パネル比較解析。 tu_tools:

  • key: nci60 name: NCI-60 description: がん細胞株スクリーニングデータ検索

Scientific NCI-60 Screening

CellMiner / NCI-60 / DepMap を活用したがん細胞株薬剤応答 パイプラインを提供する。高スループットスクリーニングデータの 統合解析、薬剤感受性マーカー同定、パネル比較。

When to Use

  • NCI-60 細胞株パネルの薬剤応答 (GI50) を解析するとき
  • CellMiner から化合物活性データを取得するとき
  • 薬剤感受性と分子マーカー (変異/発現) の相関を調べるとき
  • DepMap CRISPR/RNAi 依存性データを併用するとき
  • 細胞株間の薬剤応答パターンを比較するとき
  • 新規化合物のスクリーニング結果を NCI-60 と比較するとき

Quick Start

1. CellMiner データ取得

import requests
import pandas as pd
import numpy as np
from io import StringIO

CELLMINER_BASE = "https://discover.nci.nih.gov/cellminer/api"


def cellminer_drug_activity(nsc_id=None, drug_name=None):
    """
    CellMiner — NCI-60 薬剤活性データ取得。

    Parameters:
        nsc_id: str — NSC ID (例: "740")
        drug_name: str — 薬剤名 (例: "Paclitaxel")
    """
    if nsc_id:
        url = f"{CELLMINER_BASE}/compound/{nsc_id}/activity"
    elif drug_name:
        url = f"{CELLMINER_BASE}/compound/search"
        params = {"name": drug_name}
        resp = requests.get(url, params=params, timeout=30)
        resp.raise_for_status()
        compounds = resp.json()
        if not compounds:
            print(f"Drug not found: {drug_name}")
            return pd.DataFrame()
        nsc_id = compounds[0].get("nsc", "")
        url = f"{CELLMINER_BASE}/compound/{nsc_id}/activity"

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

    results = []
    for cell_line, values in data.get("activity", {}).items():
        results.append({
            "cell_line": cell_line,
            "tissue": values.get("tissue", ""),
            "gi50_log": values.get("gi50", None),
            "tgi_log": values.get("tgi", None),
            "lc50_log": values.get("lc50", None),
        })

    df = pd.DataFrame(results)
    print(f"CellMiner: NSC {nsc_id} → {len(df)} cell lines")
    return df

2. NCI-60 バルクデータ取得

def nci60_bulk_download(data_type="drug_activity"):
    """
    NCI-60 バルクデータセット取得。

    Parameters:
        data_type: str — "drug_activity", "gene_expression",
                         "mutation", "copy_number"
    """
    urls = {
        "drug_activity": "https://discover.nci.nih.gov/cellminer/download/DTP_NCI60_ZSCORE.csv",
        "gene_expression": "https://discover.nci.nih.gov/cellminer/download/GeneExpr_RMA.csv",
        "mutation": "https://discover.nci.nih.gov/cellminer/download/Exome_Mutation.csv",
    }

    url = urls.get(data_type)
    if not url:
        raise ValueError(f"Unknown data type: {data_type}")

    resp = requests.get(url, timeout=120)
    resp.raise_for_status()

    df = pd.read_csv(StringIO(resp.text))
    print(f"NCI-60 bulk: {data_type} → {df.shape}")
    return df

3. 薬剤-分子マーカー相関

from scipy import stats


def drug_marker_correlation(drug_activity, molecular_data,
                             marker_type="expression", top_n=50):
    """
    薬剤感受性と分子マーカーの相関解析。

    Parameters:
        drug_activity: pd.DataFrame — GI50 データ (cell_line, gi50)
        molecular_data: pd.DataFrame — 分子データ (cell_line, gene, value)
        marker_type: str — "expression", "mutation", "copy_number"
        top_n: int — 上位相関遺伝子数
    """
    # 細胞株一致
    common_lines = set(drug_activity["cell_line"]) & set(molecular_data["cell_line"])
    drug_sub = drug_activity[drug_activity["cell_line"].isin(common_lines)]
    mol_sub = molecular_data[molecular_data["cell_line"].isin(common_lines)]

    # 遺伝子ごとの相関
    correlations = []
    genes = mol_sub["gene"].unique() if "gene" in mol_sub.columns else mol_sub.columns[1:]

    drug_values = drug_sub.set_index("cell_line")["gi50_log"]

    for gene in genes:
        if "gene" in mol_sub.columns:
            gene_data = mol_sub[mol_sub["gene"] == gene].set_index("cell_line")["value"]
        else:
            gene_data = mol_sub.set_index("cell_line")[gene]

        common = drug_values.index.intersection(gene_data.index)
        if len(common) < 10:
            continue

        r, p = stats.pearsonr(drug_values[common], gene_data[common])
        correlations.append({
            "gene": gene,
            "pearson_r": r,
            "p_value": p,
            "n_samples": len(common),
        })

    corr_df = pd.DataFrame(correlations)
    corr_df["adj_p"] = corr_df["p_value"] * len(corr_df)  # Bonferroni
    corr_df = corr_df.sort_values("p_value")

    print(f"Drug-marker correlation: {len(corr_df)} genes tested, "
          f"top |r| = {corr_df['pearson_r'].abs().max():.3f}")
    return corr_df.head(top_n)

4. 組織別薬剤応答パターン

def tissue_response_pattern(drug_activity, min_lines=3):
    """
    組織別の薬剤応答パターン解析。

    Parameters:
        drug_activity: pd.DataFrame — GI50 データ
        min_lines: int — 最小細胞株数
    """
    tissue_stats = drug_activity.groupby("tissue").agg(
        n_lines=("gi50_log", "count"),
        mean_gi50=("gi50_log", "mean"),
        std_gi50=("gi50_log", "std"),
        min_gi50=("gi50_log", "min"),
        max_gi50=("gi50_log", "max"),
    ).reset_index()

    tissue_stats = tissue_stats[tissue_stats["n_lines"] >= min_lines]
    tissue_stats = tissue_stats.sort_values("mean_gi50")

    # 感受性/耐性スコア
    overall_mean = drug_activity["gi50_log"].mean()
    tissue_stats["sensitivity_z"] = (
        (tissue_stats["mean_gi50"] - overall_mean)
        / drug_activity["gi50_log"].std()
    )

    print(f"Tissue patterns: {len(tissue_stats)} tissues")
    for _, row in tissue_stats.iterrows():
        label = "Sensitive" if row["sensitivity_z"] < -0.5 else (
            "Resistant" if row["sensitivity_z"] > 0.5 else "Neutral"
        )
        print(f"  {row['tissue']}: GI50={row['mean_gi50']:.2f} ({label})")
    return tissue_stats

5. DepMap 統合スクリーニング

DEPMAP_BASE = "https://depmap.org/portal/api"


def depmap_gene_dependency(gene_symbol, dataset="Chronos_Combined"):
    """
    DepMap — CRISPR/RNAi 遺伝子依存性取得。

    Parameters:
        gene_symbol: str — 遺伝子シンボル
        dataset: str — データセット名
    """
    url = f"{DEPMAP_BASE}/download/custom"
    params = {
        "gene": gene_symbol,
        "dataset": dataset,
    }
    resp = requests.get(url, params=params, timeout=30)
    resp.raise_for_status()
    data = resp.json()

    results = []
    for entry in data.get("data", []):
        results.append({
            "cell_line": entry.get("cell_line_name", ""),
            "lineage": entry.get("lineage", ""),
            "dependency_score": entry.get("score", None),
        })

    df = pd.DataFrame(results)
    if len(df) > 0:
        n_dependent = (df["dependency_score"] < -0.5).sum()
        print(f"DepMap {gene_symbol}: {len(df)} lines, "
              f"{n_dependent} dependent (score < -0.5)")
    return df

6. NCI-60 統合スクリーニングパイプライン

def nci60_screening_pipeline(drug_name=None, nsc_id=None,
                              target_gene=None, output_dir="results"):
    """
    NCI-60 + DepMap 統合スクリーニングパイプライン。

    Parameters:
        drug_name: str — 薬剤名
        nsc_id: str — NSC ID
        target_gene: str — 標的遺伝子 (DepMap 連携)
        output_dir: str — 出力ディレクトリ
    """
    from pathlib import Path
    output_dir = Path(output_dir)
    output_dir.mkdir(parents=True, exist_ok=True)

    # 1) NCI-60 薬剤活性
    drug_data = cellminer_drug_activity(nsc_id=nsc_id, drug_name=drug_name)
    drug_data.to_csv(output_dir / "drug_activity.csv", index=False)

    # 2) 組織別パターン
    tissue_patterns = tissue_response_pattern(drug_data)
    tissue_patterns.to_csv(output_dir / "tissue_patterns.csv", index=False)

    # 3) 発現相関
    expr_data = nci60_bulk_download("gene_expression")
    correlations = drug_marker_correlation(drug_data, expr_data)
    correlations.to_csv(output_dir / "marker_correlations.csv", index=False)

    # 4) DepMap 連携 (標的遺伝子あれば)
    if target_gene:
        depmap_data = depmap_gene_dependency(target_gene)
        depmap_data.to_csv(output_dir / "depmap_dependency.csv", index=False)

    print(f"Pipeline complete: {output_dir}")
    return {
        "drug_activity": drug_data,
        "tissue_patterns": tissue_patterns,
        "correlations": correlations,
    }

パイプライン統合

compound-screening → nci60-screening → precision-oncology
  (ZINC/VS)           (NCI-60/DepMap)    (MTB レポート)
       │                     │                 ↓
drug-target-profiling ──────┘          cancer-genomics
  (ChEMBL/DGIdb)        │              (COSMIC/DepMap)
                         ↓
                   cell-line-resources
                   (Cellosaurus)

パイプライン出力

ファイル 説明 次スキル
results/drug_activity.csv NCI-60 GI50 データ → precision-oncology
results/tissue_patterns.csv 組織別応答パターン → cancer-genomics
results/marker_correlations.csv 薬剤-マーカー相関 → drug-target-profiling
results/depmap_dependency.csv DepMap 依存性スコア → cell-line-resources

ToolUniverse 連携

TU Key ツール名 連携内容
nci60 NCI-60 がん細胞株スクリーニングデータ検索
Install via CLI
npx skills add https://github.com/nahisaho/satori --skill scientific-nci60-screening
Repository Details
star Stars 3
call_split Forks 1
navigation Branch main
article Path SKILL.md
More from Creator