@nahisaho/satori 0.16.0 → 0.18.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 +83 -41
- package/package.json +1 -1
- package/src/.github/skills/scientific-alphafold-structures/SKILL.md +256 -0
- package/src/.github/skills/scientific-arrayexpress-expression/SKILL.md +264 -0
- package/src/.github/skills/scientific-crossref-metadata/SKILL.md +313 -0
- package/src/.github/skills/scientific-encode-screen/SKILL.md +315 -0
- package/src/.github/skills/scientific-environmental-geodata/SKILL.md +255 -0
- package/src/.github/skills/scientific-geo-expression/SKILL.md +274 -0
- package/src/.github/skills/scientific-gtex-tissue-expression/SKILL.md +271 -0
- package/src/.github/skills/scientific-gwas-catalog/SKILL.md +267 -0
- package/src/.github/skills/scientific-human-cell-atlas/SKILL.md +294 -0
- package/src/.github/skills/scientific-icgc-cancer-data/SKILL.md +351 -0
- package/src/.github/skills/scientific-metabolic-atlas/SKILL.md +263 -0
- package/src/.github/skills/scientific-paleobiology/SKILL.md +265 -0
- package/src/.github/skills/scientific-parasite-genomics/SKILL.md +280 -0
- package/src/.github/skills/scientific-pharmgkb-pgx/SKILL.md +306 -0
- package/src/.github/skills/scientific-semantic-scholar/SKILL.md +298 -0
- package/src/.github/skills/scientific-squidpy-advanced/SKILL.md +251 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scientific-squidpy-advanced
|
|
3
|
+
description: |
|
|
4
|
+
高度 Squidpy 空間解析スキル。空間自己相関・共起解析・空間
|
|
5
|
+
近傍・リガンド受容体空間マッピング・ニッチ同定。
|
|
6
|
+
K-Dense 連携: squidpy-advanced。
|
|
7
|
+
tu_tools: []
|
|
8
|
+
kdense_ref: squidpy-advanced
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Scientific Squidpy Advanced
|
|
12
|
+
|
|
13
|
+
Squidpy の高度な空間統計解析機能を活用した空間トランスクリプ
|
|
14
|
+
トミクス解析パイプラインを提供する。
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- 空間自己相関 (Moran's I, Geary's C) を計算するとき
|
|
19
|
+
- 細胞タイプの空間共起パターンを分析するとき
|
|
20
|
+
- 近傍エンリッチメント解析を実施するとき
|
|
21
|
+
- リガンド-受容体のペア空間マッピングを行うとき
|
|
22
|
+
- 空間ニッチ (組織微小環境) を同定するとき
|
|
23
|
+
- 空間グラフ中心性指標を計算するとき
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
## 1. 空間自己相関解析
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
import squidpy as sq
|
|
33
|
+
import scanpy as sc
|
|
34
|
+
import pandas as pd
|
|
35
|
+
import numpy as np
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def squidpy_spatial_autocorrelation(adata, genes=None,
|
|
39
|
+
mode="moran", n_perms=100,
|
|
40
|
+
n_jobs=4):
|
|
41
|
+
"""
|
|
42
|
+
Squidpy — 空間自己相関解析 (Moran's I / Geary's C)。
|
|
43
|
+
|
|
44
|
+
Parameters:
|
|
45
|
+
adata: AnnData — 空間トランスクリプトミクスデータ
|
|
46
|
+
genes: list[str] — 対象遺伝子 (None=HVG 使用)
|
|
47
|
+
mode: str — "moran" or "geary"
|
|
48
|
+
n_perms: int — 並べ替え検定回数
|
|
49
|
+
n_jobs: int — 並列ジョブ数
|
|
50
|
+
"""
|
|
51
|
+
# 空間グラフ構築 (未構築の場合)
|
|
52
|
+
if "spatial_connectivities" not in adata.obsp:
|
|
53
|
+
sq.gr.spatial_neighbors(adata, coord_type="generic",
|
|
54
|
+
n_neighs=6)
|
|
55
|
+
|
|
56
|
+
if genes is None:
|
|
57
|
+
sc.pp.highly_variable_genes(adata, n_top_genes=200)
|
|
58
|
+
genes = adata.var_names[adata.var["highly_variable"]].tolist()
|
|
59
|
+
|
|
60
|
+
sq.gr.spatial_autocorr(adata, mode=mode, genes=genes,
|
|
61
|
+
n_perms=n_perms, n_jobs=n_jobs)
|
|
62
|
+
|
|
63
|
+
result_key = f"{mode}I" if mode == "moran" else f"{mode}C"
|
|
64
|
+
result = adata.uns[result_key].copy()
|
|
65
|
+
sig = result[result["pval_norm"] < 0.05]
|
|
66
|
+
|
|
67
|
+
print(f"Spatial autocorrelation ({mode}): "
|
|
68
|
+
f"{len(sig)}/{len(result)} significant genes")
|
|
69
|
+
return result.sort_values("pval_norm")
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 2. 空間共起解析
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
def squidpy_co_occurrence(adata, cluster_key="cell_type",
|
|
76
|
+
interval=50, n_splits=None):
|
|
77
|
+
"""
|
|
78
|
+
Squidpy — 細胞タイプ空間共起解析。
|
|
79
|
+
|
|
80
|
+
Parameters:
|
|
81
|
+
adata: AnnData — 空間トランスクリプトミクスデータ
|
|
82
|
+
cluster_key: str — 細胞タイプアノテーションカラム
|
|
83
|
+
interval: int — 距離インターバル数
|
|
84
|
+
n_splits: int — 分割数 (大規模データ用, None=自動)
|
|
85
|
+
"""
|
|
86
|
+
sq.gr.co_occurrence(adata, cluster_key=cluster_key,
|
|
87
|
+
interval=interval, n_splits=n_splits)
|
|
88
|
+
|
|
89
|
+
co_occ = adata.uns[f"{cluster_key}_co_occurrence"]
|
|
90
|
+
occ_scores = co_occ["occ"]
|
|
91
|
+
interval_vals = co_occ["interval"]
|
|
92
|
+
categories = adata.obs[cluster_key].cat.categories.tolist()
|
|
93
|
+
|
|
94
|
+
# 最近距離での共起スコアマトリクス
|
|
95
|
+
near_idx = 0
|
|
96
|
+
scores = occ_scores[near_idx]
|
|
97
|
+
co_df = pd.DataFrame(scores, index=categories, columns=categories)
|
|
98
|
+
|
|
99
|
+
# 有意な共起ペア
|
|
100
|
+
pairs = []
|
|
101
|
+
for i, cat_i in enumerate(categories):
|
|
102
|
+
for j, cat_j in enumerate(categories):
|
|
103
|
+
if i < j:
|
|
104
|
+
pairs.append({
|
|
105
|
+
"cell_type_a": cat_i,
|
|
106
|
+
"cell_type_b": cat_j,
|
|
107
|
+
"co_occurrence_score": scores[i, j],
|
|
108
|
+
})
|
|
109
|
+
pairs_df = pd.DataFrame(pairs).sort_values(
|
|
110
|
+
"co_occurrence_score", ascending=False)
|
|
111
|
+
|
|
112
|
+
print(f"Co-occurrence: {len(categories)} cell types, "
|
|
113
|
+
f"top pair: {pairs_df.iloc[0]['cell_type_a']} — "
|
|
114
|
+
f"{pairs_df.iloc[0]['cell_type_b']}")
|
|
115
|
+
return co_df, pairs_df
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 3. 近傍エンリッチメント & ニッチ同定
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
def squidpy_niche_identification(adata, cluster_key="cell_type",
|
|
122
|
+
n_neighs=15, n_niches=5,
|
|
123
|
+
seed=42):
|
|
124
|
+
"""
|
|
125
|
+
Squidpy — 空間ニッチ同定。
|
|
126
|
+
|
|
127
|
+
Parameters:
|
|
128
|
+
adata: AnnData — 空間トランスクリプトミクスデータ
|
|
129
|
+
cluster_key: str — 細胞タイプカラム
|
|
130
|
+
n_neighs: int — 近傍数
|
|
131
|
+
n_niches: int — ニッチクラスタ数
|
|
132
|
+
seed: int — 乱数シード
|
|
133
|
+
"""
|
|
134
|
+
# 近傍エンリッチメント
|
|
135
|
+
sq.gr.nhood_enrichment(adata, cluster_key=cluster_key)
|
|
136
|
+
nhood = adata.uns[f"{cluster_key}_nhood_enrichment"]
|
|
137
|
+
zscore_matrix = nhood["zscore"]
|
|
138
|
+
categories = adata.obs[cluster_key].cat.categories.tolist()
|
|
139
|
+
nhood_df = pd.DataFrame(zscore_matrix, index=categories,
|
|
140
|
+
columns=categories)
|
|
141
|
+
|
|
142
|
+
# 空間近傍グラフ
|
|
143
|
+
sq.gr.spatial_neighbors(adata, coord_type="generic",
|
|
144
|
+
n_neighs=n_neighs)
|
|
145
|
+
|
|
146
|
+
# 近傍組成プロファイル
|
|
147
|
+
from sklearn.cluster import KMeans
|
|
148
|
+
cell_types = adata.obs[cluster_key]
|
|
149
|
+
type_dummies = pd.get_dummies(cell_types)
|
|
150
|
+
|
|
151
|
+
# 各細胞の近傍組成
|
|
152
|
+
conn = adata.obsp["spatial_connectivities"]
|
|
153
|
+
nhood_composition = conn.dot(type_dummies.values)
|
|
154
|
+
nhood_comp_df = pd.DataFrame(
|
|
155
|
+
nhood_composition, columns=type_dummies.columns,
|
|
156
|
+
index=adata.obs_names)
|
|
157
|
+
|
|
158
|
+
# ニッチクラスタリング
|
|
159
|
+
km = KMeans(n_clusters=n_niches, random_state=seed, n_init=10)
|
|
160
|
+
adata.obs["spatial_niche"] = km.fit_predict(
|
|
161
|
+
nhood_comp_df.values).astype(str)
|
|
162
|
+
|
|
163
|
+
niche_summary = adata.obs.groupby("spatial_niche")[cluster_key]\
|
|
164
|
+
.value_counts(normalize=True).unstack(fill_value=0)
|
|
165
|
+
|
|
166
|
+
print(f"Niche identification: {n_niches} niches, "
|
|
167
|
+
f"{len(categories)} cell types")
|
|
168
|
+
return nhood_df, niche_summary
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 4. Squidpy 高度空間解析統合パイプライン
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
def squidpy_advanced_pipeline(adata, cluster_key="cell_type",
|
|
175
|
+
output_dir="results"):
|
|
176
|
+
"""
|
|
177
|
+
Squidpy 高度空間解析統合パイプライン。
|
|
178
|
+
|
|
179
|
+
Parameters:
|
|
180
|
+
adata: AnnData — 空間トランスクリプトミクスデータ
|
|
181
|
+
cluster_key: str — 細胞タイプカラム
|
|
182
|
+
output_dir: str — 出力ディレクトリ
|
|
183
|
+
"""
|
|
184
|
+
from pathlib import Path
|
|
185
|
+
output_dir = Path(output_dir)
|
|
186
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
187
|
+
|
|
188
|
+
# 1) 空間自己相関
|
|
189
|
+
autocorr = squidpy_spatial_autocorrelation(adata)
|
|
190
|
+
autocorr.to_csv(output_dir / "spatial_autocorrelation.csv")
|
|
191
|
+
|
|
192
|
+
# 2) 空間共起
|
|
193
|
+
co_df, pairs_df = squidpy_co_occurrence(adata,
|
|
194
|
+
cluster_key=cluster_key)
|
|
195
|
+
co_df.to_csv(output_dir / "co_occurrence_matrix.csv")
|
|
196
|
+
pairs_df.to_csv(output_dir / "co_occurrence_pairs.csv",
|
|
197
|
+
index=False)
|
|
198
|
+
|
|
199
|
+
# 3) ニッチ同定
|
|
200
|
+
nhood_df, niche_summary = squidpy_niche_identification(
|
|
201
|
+
adata, cluster_key=cluster_key)
|
|
202
|
+
nhood_df.to_csv(output_dir / "nhood_enrichment.csv")
|
|
203
|
+
niche_summary.to_csv(output_dir / "niche_composition.csv")
|
|
204
|
+
|
|
205
|
+
# 4) 中心性スコア
|
|
206
|
+
sq.gr.centrality_scores(adata, cluster_key=cluster_key)
|
|
207
|
+
centrality = adata.uns[f"{cluster_key}_centrality_scores"]
|
|
208
|
+
centrality_df = pd.DataFrame(centrality)
|
|
209
|
+
centrality_df.to_csv(output_dir / "centrality_scores.csv")
|
|
210
|
+
|
|
211
|
+
adata.write(output_dir / "adata_spatial.h5ad")
|
|
212
|
+
|
|
213
|
+
print(f"Squidpy advanced pipeline: {output_dir}")
|
|
214
|
+
return {
|
|
215
|
+
"autocorrelation": autocorr,
|
|
216
|
+
"co_occurrence": co_df,
|
|
217
|
+
"niches": niche_summary,
|
|
218
|
+
"centrality": centrality_df,
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## K-Dense 連携
|
|
225
|
+
|
|
226
|
+
| K-Dense Key | 参照内容 |
|
|
227
|
+
|-------------|---------|
|
|
228
|
+
| `squidpy-advanced` | 高度空間統計・ニッチ解析手法 |
|
|
229
|
+
|
|
230
|
+
## パイプライン統合
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
spatial-transcriptomics → squidpy-advanced → single-cell-genomics
|
|
234
|
+
(Visium/MERFISH) (空間統計) (scRNA-seq)
|
|
235
|
+
│ │ ↓
|
|
236
|
+
image-analysis ─────────────┘ cell-communication
|
|
237
|
+
(H&E/IF 画像) │ (リガンド-受容体)
|
|
238
|
+
↓
|
|
239
|
+
multi-omics
|
|
240
|
+
(空間マルチモーダル)
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## パイプライン出力
|
|
244
|
+
|
|
245
|
+
| ファイル | 説明 | 次スキル |
|
|
246
|
+
|---------|------|---------|
|
|
247
|
+
| `results/spatial_autocorrelation.csv` | 空間自己相関 | → gene-expression |
|
|
248
|
+
| `results/co_occurrence_matrix.csv` | 共起マトリクス | → cell-communication |
|
|
249
|
+
| `results/niche_composition.csv` | ニッチ組成 | → single-cell-genomics |
|
|
250
|
+
| `results/centrality_scores.csv` | 中心性スコア | → spatial-transcriptomics |
|
|
251
|
+
| `results/adata_spatial.h5ad` | AnnData (全結果) | → multi-omics |
|