@nahisaho/satori 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -39
- package/package.json +1 -1
- package/src/.github/skills/scientific-admet-pharmacokinetics/SKILL.md +4 -0
- package/src/.github/skills/scientific-biobank-cohort/SKILL.md +268 -0
- package/src/.github/skills/scientific-cancer-genomics/SKILL.md +7 -0
- package/src/.github/skills/scientific-cell-line-resources/SKILL.md +4 -0
- package/src/.github/skills/scientific-chembl-assay-mining/SKILL.md +4 -0
- package/src/.github/skills/scientific-civic-evidence/SKILL.md +292 -0
- package/src/.github/skills/scientific-compound-screening/SKILL.md +4 -0
- package/src/.github/skills/scientific-depmap-dependencies/SKILL.md +239 -0
- package/src/.github/skills/scientific-disease-research/SKILL.md +4 -0
- package/src/.github/skills/scientific-drug-target-profiling/SKILL.md +4 -0
- package/src/.github/skills/scientific-drugbank-resources/SKILL.md +269 -0
- package/src/.github/skills/scientific-gdc-portal/SKILL.md +280 -0
- package/src/.github/skills/scientific-gnomad-variants/SKILL.md +356 -0
- package/src/.github/skills/scientific-immunoinformatics/SKILL.md +4 -0
- package/src/.github/skills/scientific-metabolic-flux/SKILL.md +306 -0
- package/src/.github/skills/scientific-metabolic-modeling/SKILL.md +4 -0
- package/src/.github/skills/scientific-metabolomics/SKILL.md +4 -0
- package/src/.github/skills/scientific-metabolomics-databases/SKILL.md +4 -0
- package/src/.github/skills/scientific-microbiome-metagenomics/SKILL.md +4 -0
- package/src/.github/skills/scientific-monarch-ontology/SKILL.md +260 -0
- package/src/.github/skills/scientific-opentargets-genetics/SKILL.md +299 -0
- package/src/.github/skills/scientific-pharmacology-targets/SKILL.md +10 -0
- package/src/.github/skills/scientific-precision-oncology/SKILL.md +4 -0
- package/src/.github/skills/scientific-protein-interaction-network/SKILL.md +4 -0
- package/src/.github/skills/scientific-rare-disease-genetics/SKILL.md +4 -0
- package/src/.github/skills/scientific-rcsb-pdb-search/SKILL.md +280 -0
- package/src/.github/skills/scientific-reactome-pathways/SKILL.md +242 -0
- package/src/.github/skills/scientific-spatial-multiomics/SKILL.md +293 -0
- package/src/.github/skills/scientific-stitch-chemical-network/SKILL.md +318 -0
- package/src/.github/skills/scientific-string-network-api/SKILL.md +4 -0
- package/src/.github/skills/scientific-uniprot-proteome/SKILL.md +273 -0
- package/src/.github/skills/scientific-variant-interpretation/SKILL.md +4 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scientific-civic-evidence
|
|
3
|
+
description: |
|
|
4
|
+
CIViC 臨床エビデンススキル。CIViC (Clinical Interpretation
|
|
5
|
+
of Variants in Cancer) REST API を用いたバリアント臨床解釈・
|
|
6
|
+
エビデンスアイテム・分子プロファイル・アサーション検索。
|
|
7
|
+
ToolUniverse 連携: civic。
|
|
8
|
+
tu_tools:
|
|
9
|
+
- key: civic
|
|
10
|
+
name: CIViC
|
|
11
|
+
description: がんバリアント臨床解釈データベース
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Scientific CIViC Evidence
|
|
15
|
+
|
|
16
|
+
CIViC (Clinical Interpretation of Variants in Cancer) REST API
|
|
17
|
+
を活用したバリアント臨床解釈・エビデンスアイテム取得・
|
|
18
|
+
分子プロファイル・アサーションパイプラインを提供する。
|
|
19
|
+
|
|
20
|
+
## When to Use
|
|
21
|
+
|
|
22
|
+
- がんバリアントの臨床的解釈を検索するとき
|
|
23
|
+
- エビデンスアイテム (薬剤応答・予後・診断) を取得するとき
|
|
24
|
+
- 遺伝子ごとのバリアントサマリーを確認するとき
|
|
25
|
+
- 分子プロファイル (Molecular Profile) を検索するとき
|
|
26
|
+
- アサーション (ガイドライン推奨) を取得するとき
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
## 1. バリアント検索・臨床解釈
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
import requests
|
|
36
|
+
import pandas as pd
|
|
37
|
+
|
|
38
|
+
CIVIC_API = "https://civicdb.org/api"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def civic_variant_search(gene_name, variant_name=None,
|
|
42
|
+
limit=50):
|
|
43
|
+
"""
|
|
44
|
+
CIViC — バリアント検索。
|
|
45
|
+
|
|
46
|
+
Parameters:
|
|
47
|
+
gene_name: str — 遺伝子名 (例: "BRAF")
|
|
48
|
+
variant_name: str — バリアント名
|
|
49
|
+
(例: "V600E")
|
|
50
|
+
limit: int — 最大結果数
|
|
51
|
+
"""
|
|
52
|
+
url = f"{CIVIC_API}/variants"
|
|
53
|
+
params = {"count": limit}
|
|
54
|
+
|
|
55
|
+
# 遺伝子名で検索
|
|
56
|
+
gene_url = f"{CIVIC_API}/genes/{gene_name}"
|
|
57
|
+
try:
|
|
58
|
+
resp = requests.get(gene_url, timeout=30)
|
|
59
|
+
if resp.status_code == 200:
|
|
60
|
+
gene_data = resp.json()
|
|
61
|
+
else:
|
|
62
|
+
# 検索 API フォールバック
|
|
63
|
+
search_url = f"{CIVIC_API}/genes"
|
|
64
|
+
params_g = {"name": gene_name, "count": 5}
|
|
65
|
+
resp = requests.get(search_url,
|
|
66
|
+
params=params_g,
|
|
67
|
+
timeout=30)
|
|
68
|
+
resp.raise_for_status()
|
|
69
|
+
records = resp.json().get("records", [])
|
|
70
|
+
gene_data = records[0] if records else {}
|
|
71
|
+
except Exception as e:
|
|
72
|
+
print(f" CIViC gene lookup: {e}")
|
|
73
|
+
gene_data = {}
|
|
74
|
+
|
|
75
|
+
if not gene_data:
|
|
76
|
+
return pd.DataFrame()
|
|
77
|
+
|
|
78
|
+
variants = gene_data.get("variants", [])
|
|
79
|
+
rows = []
|
|
80
|
+
for v in variants[:limit]:
|
|
81
|
+
name = v.get("name", "")
|
|
82
|
+
if variant_name and variant_name.lower() \
|
|
83
|
+
not in name.lower():
|
|
84
|
+
continue
|
|
85
|
+
rows.append({
|
|
86
|
+
"variant_id": v.get("id", ""),
|
|
87
|
+
"gene": gene_name,
|
|
88
|
+
"variant_name": name,
|
|
89
|
+
"description": (v.get("description", "")
|
|
90
|
+
[:200]),
|
|
91
|
+
"evidence_count": len(
|
|
92
|
+
v.get("evidence_items", [])),
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
df = pd.DataFrame(rows)
|
|
96
|
+
print(f"CIViC variants: {gene_name} → {len(df)}")
|
|
97
|
+
return df
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def civic_gene_summary(gene_name):
|
|
101
|
+
"""
|
|
102
|
+
CIViC — 遺伝子サマリー取得。
|
|
103
|
+
|
|
104
|
+
Parameters:
|
|
105
|
+
gene_name: str — 遺伝子名 (例: "EGFR")
|
|
106
|
+
"""
|
|
107
|
+
url = f"{CIVIC_API}/genes/{gene_name}"
|
|
108
|
+
resp = requests.get(url, timeout=30)
|
|
109
|
+
resp.raise_for_status()
|
|
110
|
+
data = resp.json()
|
|
111
|
+
|
|
112
|
+
result = {
|
|
113
|
+
"gene_id": data.get("id", ""),
|
|
114
|
+
"name": data.get("name", ""),
|
|
115
|
+
"description": data.get("description", ""),
|
|
116
|
+
"n_variants": len(data.get("variants", [])),
|
|
117
|
+
"aliases": "; ".join(
|
|
118
|
+
data.get("aliases", [])),
|
|
119
|
+
}
|
|
120
|
+
return result
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 2. エビデンスアイテム取得
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
def civic_evidence_items(variant_id, limit=50):
|
|
127
|
+
"""
|
|
128
|
+
CIViC — エビデンスアイテム取得。
|
|
129
|
+
|
|
130
|
+
Parameters:
|
|
131
|
+
variant_id: int — バリアント ID
|
|
132
|
+
limit: int — 最大結果数
|
|
133
|
+
"""
|
|
134
|
+
url = f"{CIVIC_API}/variants/{variant_id}"
|
|
135
|
+
resp = requests.get(url, timeout=30)
|
|
136
|
+
resp.raise_for_status()
|
|
137
|
+
data = resp.json()
|
|
138
|
+
|
|
139
|
+
rows = []
|
|
140
|
+
for ev in data.get("evidence_items", [])[:limit]:
|
|
141
|
+
drugs = [d.get("name", "")
|
|
142
|
+
for d in ev.get("drugs", [])]
|
|
143
|
+
rows.append({
|
|
144
|
+
"evidence_id": ev.get("id", ""),
|
|
145
|
+
"variant_id": variant_id,
|
|
146
|
+
"evidence_type": ev.get(
|
|
147
|
+
"evidence_type", ""),
|
|
148
|
+
"evidence_level": ev.get(
|
|
149
|
+
"evidence_level", ""),
|
|
150
|
+
"evidence_direction": ev.get(
|
|
151
|
+
"evidence_direction", ""),
|
|
152
|
+
"clinical_significance": ev.get(
|
|
153
|
+
"clinical_significance", ""),
|
|
154
|
+
"disease": ev.get("disease", {}).get(
|
|
155
|
+
"name", ""),
|
|
156
|
+
"drugs": "; ".join(drugs),
|
|
157
|
+
"rating": ev.get("rating", ""),
|
|
158
|
+
"status": ev.get("status", ""),
|
|
159
|
+
"source_citation": ev.get(
|
|
160
|
+
"source", {}).get("citation", ""),
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
df = pd.DataFrame(rows)
|
|
164
|
+
print(f"CIViC evidence: variant {variant_id} "
|
|
165
|
+
f"→ {len(df)} items")
|
|
166
|
+
return df
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 3. アサーション取得
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
def civic_assertions(gene_name=None, limit=50):
|
|
173
|
+
"""
|
|
174
|
+
CIViC — アサーション (ガイドライン推奨) 取得。
|
|
175
|
+
|
|
176
|
+
Parameters:
|
|
177
|
+
gene_name: str — 遺伝子名フィルタ
|
|
178
|
+
limit: int — 最大結果数
|
|
179
|
+
"""
|
|
180
|
+
url = f"{CIVIC_API}/assertions"
|
|
181
|
+
params = {"count": limit}
|
|
182
|
+
|
|
183
|
+
resp = requests.get(url, params=params, timeout=30)
|
|
184
|
+
resp.raise_for_status()
|
|
185
|
+
data = resp.json()
|
|
186
|
+
|
|
187
|
+
rows = []
|
|
188
|
+
for a in data.get("records", []):
|
|
189
|
+
genes = [g.get("name", "")
|
|
190
|
+
for g in a.get("genes", [])]
|
|
191
|
+
if gene_name and gene_name not in genes:
|
|
192
|
+
continue
|
|
193
|
+
drugs = [d.get("name", "")
|
|
194
|
+
for d in a.get("drugs", [])]
|
|
195
|
+
rows.append({
|
|
196
|
+
"assertion_id": a.get("id", ""),
|
|
197
|
+
"genes": "; ".join(genes),
|
|
198
|
+
"variant": a.get("variant", {}).get(
|
|
199
|
+
"name", ""),
|
|
200
|
+
"disease": a.get("disease", {}).get(
|
|
201
|
+
"name", ""),
|
|
202
|
+
"drugs": "; ".join(drugs),
|
|
203
|
+
"assertion_type": a.get(
|
|
204
|
+
"assertion_type", ""),
|
|
205
|
+
"assertion_direction": a.get(
|
|
206
|
+
"assertion_direction", ""),
|
|
207
|
+
"clinical_significance": a.get(
|
|
208
|
+
"clinical_significance", ""),
|
|
209
|
+
"amp_level": a.get("amp_level", ""),
|
|
210
|
+
"status": a.get("status", ""),
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
df = pd.DataFrame(rows)
|
|
214
|
+
print(f"CIViC assertions: {len(df)}")
|
|
215
|
+
return df
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## 4. CIViC 統合パイプライン
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
def civic_pipeline(gene_name, variant_name=None,
|
|
222
|
+
output_dir="results"):
|
|
223
|
+
"""
|
|
224
|
+
CIViC 統合パイプライン。
|
|
225
|
+
|
|
226
|
+
Parameters:
|
|
227
|
+
gene_name: str — 遺伝子名 (例: "BRAF")
|
|
228
|
+
variant_name: str — バリアント名 (例: "V600E")
|
|
229
|
+
output_dir: str — 出力ディレクトリ
|
|
230
|
+
"""
|
|
231
|
+
from pathlib import Path
|
|
232
|
+
output_dir = Path(output_dir)
|
|
233
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
234
|
+
|
|
235
|
+
# 1) 遺伝子サマリー
|
|
236
|
+
summary = civic_gene_summary(gene_name)
|
|
237
|
+
pd.DataFrame([summary]).to_csv(
|
|
238
|
+
output_dir / "civic_gene.csv", index=False)
|
|
239
|
+
|
|
240
|
+
# 2) バリアント検索
|
|
241
|
+
variants = civic_variant_search(gene_name,
|
|
242
|
+
variant_name)
|
|
243
|
+
variants.to_csv(output_dir / "civic_variants.csv",
|
|
244
|
+
index=False)
|
|
245
|
+
|
|
246
|
+
# 3) トップバリアントのエビデンス
|
|
247
|
+
if not variants.empty:
|
|
248
|
+
top_vid = variants.iloc[0]["variant_id"]
|
|
249
|
+
evidence = civic_evidence_items(top_vid)
|
|
250
|
+
evidence.to_csv(
|
|
251
|
+
output_dir / "civic_evidence.csv",
|
|
252
|
+
index=False)
|
|
253
|
+
|
|
254
|
+
# 4) アサーション
|
|
255
|
+
assertions = civic_assertions(gene_name)
|
|
256
|
+
assertions.to_csv(
|
|
257
|
+
output_dir / "civic_assertions.csv",
|
|
258
|
+
index=False)
|
|
259
|
+
|
|
260
|
+
print(f"CIViC pipeline: {gene_name} → {output_dir}")
|
|
261
|
+
return {"variants": variants}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## ToolUniverse 連携
|
|
267
|
+
|
|
268
|
+
| TU Key | ツール名 | 連携内容 |
|
|
269
|
+
|--------|---------|---------|
|
|
270
|
+
| `civic` | CIViC | がんバリアント臨床解釈 (~12 tools) |
|
|
271
|
+
|
|
272
|
+
## パイプライン統合
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
variant-interpretation → civic-evidence → precision-oncology
|
|
276
|
+
(ClinVar バリアント) (CIViC REST) (精密腫瘍学)
|
|
277
|
+
│ │ ↓
|
|
278
|
+
gnomad-variants ────────────┘ drug-target-profiling
|
|
279
|
+
(集団頻度) │ (標的プロファイリング)
|
|
280
|
+
↓
|
|
281
|
+
opentargets-genetics
|
|
282
|
+
(OT 標的-疾患)
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## パイプライン出力
|
|
286
|
+
|
|
287
|
+
| ファイル | 説明 | 次スキル |
|
|
288
|
+
|---------|------|---------|
|
|
289
|
+
| `results/civic_gene.csv` | 遺伝子サマリー | → cancer-genomics |
|
|
290
|
+
| `results/civic_variants.csv` | バリアント一覧 | → variant-interpretation |
|
|
291
|
+
| `results/civic_evidence.csv` | エビデンス | → precision-oncology |
|
|
292
|
+
| `results/civic_assertions.csv` | アサーション | → pharmacogenomics |
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scientific-depmap-dependencies
|
|
3
|
+
description: |
|
|
4
|
+
DepMap 依存性スキル。Cancer Dependency Map (DepMap) Portal
|
|
5
|
+
API によるがん細胞株 CRISPR/RNAi 依存性スコア・薬剤
|
|
6
|
+
感受性データ・遺伝子効果取得。ToolUniverse 連携: depmap。
|
|
7
|
+
tu_tools:
|
|
8
|
+
- key: depmap
|
|
9
|
+
name: DepMap
|
|
10
|
+
description: がん細胞株依存性マップ API
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Scientific DepMap Dependencies
|
|
14
|
+
|
|
15
|
+
Cancer Dependency Map (DepMap) Portal API を活用した
|
|
16
|
+
がん細胞株の CRISPR/RNAi 遺伝子依存性スコア取得・
|
|
17
|
+
薬剤感受性データ・遺伝子効果パイプラインを提供する。
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- がん細胞株の遺伝子依存性 (CRISPR/RNAi) を調べるとき
|
|
22
|
+
- 遺伝子のがん選択的必須性を評価するとき
|
|
23
|
+
- 薬剤感受性データと遺伝子発現の相関を調べるとき
|
|
24
|
+
- 細胞株メタデータ (組織型・疾患サブタイプ) を取得するとき
|
|
25
|
+
- Cell Model Passports データを参照するとき
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
## 1. DepMap 細胞株検索・メタデータ
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
import requests
|
|
35
|
+
import pandas as pd
|
|
36
|
+
|
|
37
|
+
DEPMAP_API = "https://api.cellmodelpassports.sanger.ac.uk/v1"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def depmap_cell_lines(tissue=None, cancer_type=None,
|
|
41
|
+
limit=50):
|
|
42
|
+
"""
|
|
43
|
+
DepMap / Cell Model Passports — 細胞株検索。
|
|
44
|
+
|
|
45
|
+
Parameters:
|
|
46
|
+
tissue: str — 組織型フィルタ (例: "Breast")
|
|
47
|
+
cancer_type: str — がん種フィルタ
|
|
48
|
+
(例: "Breast Carcinoma")
|
|
49
|
+
limit: int — 最大結果数
|
|
50
|
+
"""
|
|
51
|
+
url = f"{DEPMAP_API}/models"
|
|
52
|
+
params = {"page_size": limit}
|
|
53
|
+
if tissue:
|
|
54
|
+
params["tissue"] = tissue
|
|
55
|
+
if cancer_type:
|
|
56
|
+
params["cancer_type"] = cancer_type
|
|
57
|
+
|
|
58
|
+
resp = requests.get(url, params=params, timeout=30)
|
|
59
|
+
resp.raise_for_status()
|
|
60
|
+
data = resp.json()
|
|
61
|
+
|
|
62
|
+
rows = []
|
|
63
|
+
for model in data.get("data", data
|
|
64
|
+
if isinstance(data, list)
|
|
65
|
+
else []):
|
|
66
|
+
if isinstance(model, dict):
|
|
67
|
+
rows.append({
|
|
68
|
+
"model_id": model.get("model_id", ""),
|
|
69
|
+
"model_name": model.get("model_name", ""),
|
|
70
|
+
"tissue": model.get("tissue", ""),
|
|
71
|
+
"cancer_type": model.get(
|
|
72
|
+
"cancer_type", ""),
|
|
73
|
+
"sample_site": model.get(
|
|
74
|
+
"sample_site", ""),
|
|
75
|
+
"gender": model.get("gender", ""),
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
df = pd.DataFrame(rows[:limit])
|
|
79
|
+
print(f"DepMap cell lines: {len(df)} models")
|
|
80
|
+
return df
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 2. CRISPR 遺伝子依存性スコア
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
def depmap_gene_dependency(gene_symbol,
|
|
87
|
+
dataset="Chronos_Combined"):
|
|
88
|
+
"""
|
|
89
|
+
DepMap — 遺伝子依存性スコア取得。
|
|
90
|
+
|
|
91
|
+
Parameters:
|
|
92
|
+
gene_symbol: str — 遺伝子シンボル (例: "KRAS")
|
|
93
|
+
dataset: str — データセット名
|
|
94
|
+
(例: "Chronos_Combined", "RNAi_merged")
|
|
95
|
+
"""
|
|
96
|
+
# DepMap Public Portal download URL
|
|
97
|
+
DEPMAP_PORTAL = "https://depmap.org/portal/api"
|
|
98
|
+
|
|
99
|
+
url = f"{DEPMAP_PORTAL}/dataset/search"
|
|
100
|
+
params = {"gene": gene_symbol,
|
|
101
|
+
"dataset": dataset}
|
|
102
|
+
|
|
103
|
+
try:
|
|
104
|
+
resp = requests.get(url, params=params,
|
|
105
|
+
timeout=30)
|
|
106
|
+
resp.raise_for_status()
|
|
107
|
+
data = resp.json()
|
|
108
|
+
except Exception:
|
|
109
|
+
# Fallback: alternative DepMap API
|
|
110
|
+
print(f" DepMap portal fallback for "
|
|
111
|
+
f"{gene_symbol}")
|
|
112
|
+
data = []
|
|
113
|
+
|
|
114
|
+
rows = []
|
|
115
|
+
if isinstance(data, list):
|
|
116
|
+
for entry in data:
|
|
117
|
+
if isinstance(entry, dict):
|
|
118
|
+
rows.append({
|
|
119
|
+
"gene": gene_symbol,
|
|
120
|
+
"cell_line": entry.get(
|
|
121
|
+
"cell_line_name", ""),
|
|
122
|
+
"depmap_id": entry.get(
|
|
123
|
+
"depmap_id", ""),
|
|
124
|
+
"dependency_score": entry.get(
|
|
125
|
+
"dependency", 0),
|
|
126
|
+
"dataset": dataset,
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
df = pd.DataFrame(rows)
|
|
130
|
+
if not df.empty:
|
|
131
|
+
df = df.sort_values("dependency_score")
|
|
132
|
+
print(f"DepMap dependency: {gene_symbol} "
|
|
133
|
+
f"→ {len(df)} cell lines")
|
|
134
|
+
return df
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## 3. 薬剤感受性データ
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
def depmap_drug_sensitivity(compound_name=None,
|
|
141
|
+
limit=100):
|
|
142
|
+
"""
|
|
143
|
+
DepMap — 薬剤感受性データ取得。
|
|
144
|
+
|
|
145
|
+
Parameters:
|
|
146
|
+
compound_name: str — 化合物名フィルタ
|
|
147
|
+
(例: "Paclitaxel")
|
|
148
|
+
limit: int — 最大結果数
|
|
149
|
+
"""
|
|
150
|
+
url = f"{DEPMAP_API}/drugs"
|
|
151
|
+
params = {"page_size": limit}
|
|
152
|
+
if compound_name:
|
|
153
|
+
params["name"] = compound_name
|
|
154
|
+
|
|
155
|
+
resp = requests.get(url, params=params, timeout=30)
|
|
156
|
+
resp.raise_for_status()
|
|
157
|
+
data = resp.json()
|
|
158
|
+
|
|
159
|
+
rows = []
|
|
160
|
+
for drug in data.get("data", data
|
|
161
|
+
if isinstance(data, list)
|
|
162
|
+
else []):
|
|
163
|
+
if isinstance(drug, dict):
|
|
164
|
+
rows.append({
|
|
165
|
+
"drug_id": drug.get("drug_id", ""),
|
|
166
|
+
"drug_name": drug.get("drug_name", ""),
|
|
167
|
+
"target": drug.get("target", ""),
|
|
168
|
+
"pathway": drug.get("pathway", ""),
|
|
169
|
+
"n_cell_lines": drug.get(
|
|
170
|
+
"n_cell_lines_tested", 0),
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
df = pd.DataFrame(rows[:limit])
|
|
174
|
+
print(f"DepMap drugs: {len(df)} compounds")
|
|
175
|
+
return df
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 4. DepMap 統合パイプライン
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
def depmap_pipeline(gene_symbol,
|
|
182
|
+
output_dir="results"):
|
|
183
|
+
"""
|
|
184
|
+
DepMap 統合パイプライン。
|
|
185
|
+
|
|
186
|
+
Parameters:
|
|
187
|
+
gene_symbol: str — 遺伝子シンボル
|
|
188
|
+
output_dir: str — 出力ディレクトリ
|
|
189
|
+
"""
|
|
190
|
+
from pathlib import Path
|
|
191
|
+
output_dir = Path(output_dir)
|
|
192
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
193
|
+
|
|
194
|
+
# 1) 遺伝子依存性
|
|
195
|
+
deps = depmap_gene_dependency(gene_symbol)
|
|
196
|
+
deps.to_csv(output_dir / "depmap_dependency.csv",
|
|
197
|
+
index=False)
|
|
198
|
+
|
|
199
|
+
# 2) 関連薬剤
|
|
200
|
+
drugs = depmap_drug_sensitivity()
|
|
201
|
+
drugs.to_csv(output_dir / "depmap_drugs.csv",
|
|
202
|
+
index=False)
|
|
203
|
+
|
|
204
|
+
# 3) 依存性の高い細胞株
|
|
205
|
+
if not deps.empty:
|
|
206
|
+
top_dependent = deps.head(10)
|
|
207
|
+
top_dependent.to_csv(
|
|
208
|
+
output_dir / "depmap_top_dependent.csv",
|
|
209
|
+
index=False)
|
|
210
|
+
|
|
211
|
+
print(f"DepMap pipeline: {gene_symbol} → {output_dir}")
|
|
212
|
+
return {"dependency": deps, "drugs": drugs}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## ToolUniverse 連携
|
|
218
|
+
|
|
219
|
+
| TU Key | ツール名 | 連携内容 |
|
|
220
|
+
|--------|---------|---------|
|
|
221
|
+
| `depmap` | DepMap | がん細胞株依存性マップ API |
|
|
222
|
+
|
|
223
|
+
## パイプライン統合
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
cancer-genomics → depmap-dependencies → precision-oncology
|
|
227
|
+
(がんゲノム) (DepMap Portal) (精密腫瘍学)
|
|
228
|
+
│ │ ↓
|
|
229
|
+
expression-analysis ──────┘ drug-target-profiling
|
|
230
|
+
(発現リスト) (標的プロファイリング)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## パイプライン出力
|
|
234
|
+
|
|
235
|
+
| ファイル | 説明 | 次スキル |
|
|
236
|
+
|---------|------|---------|
|
|
237
|
+
| `results/depmap_dependency.csv` | 依存性スコア | → cancer-genomics |
|
|
238
|
+
| `results/depmap_drugs.csv` | 薬剤感受性 | → drug-target-profiling |
|
|
239
|
+
| `results/depmap_top_dependent.csv` | 依存細胞株 | → precision-oncology |
|
|
@@ -5,6 +5,10 @@ description: |
|
|
|
5
5
|
を活用したドラッグターゲットインテリジェンス。ドラッガビリティ評価、安全性プロファイリング、
|
|
6
6
|
ターゲット-疾患アソシエーション、競合パイプライン分析を統合的に実行。
|
|
7
7
|
「ターゲット評価して」「druggability 分析して」「標的タンパク質を調べて」で発火。
|
|
8
|
+
tu_tools:
|
|
9
|
+
- key: dgidb
|
|
10
|
+
name: DGIdb
|
|
11
|
+
description: 薬物-遺伝子相互作用データベース
|
|
8
12
|
---
|
|
9
13
|
|
|
10
14
|
# Scientific Drug Target Profiling
|