空間トランスクリプトーム解析(spatial transcriptomics)のうちイメージング型(Xenium・CosMx・MERSCOPE など顕微鏡で1分子ずつ数える方式)は、前処理の途中で、扱う対象そのものが入れ替わります。最初は1行が1分子の表を扱っているのに、セグメンテーションを境に1行が1細胞の行列に変わる。この切り替わりが、前処理の順番を決めています。この記事では、なぜその順番でなければならないのかを説明します。
1. 前処理の順番

7つの手順は、3つの領域に分かれます。1〜3 は分子を扱い、4 が境目、5〜7 は細胞を扱います。
| 手順 | 扱うもの | 行数の目安 |
|---|---|---|
| 1〜3(読み込み・QC・フィルタ) | 1行 = 1分子 | 数千万〜数億 |
| 4(セグメンテーション) | 境目 | ─ |
| 5〜7(QC・正規化・アノテーション) | 1行 = 1細胞 | 数万〜数十万 |
2. 境目の前と後では、できることが違う

ここが順番の理由です。細胞に割り当てられなかった分子は、行列に入らないまま消えます。だから、分子に対してやるべきことは、切る前に済ませておく必要があります。
python
import spatialdata_io as sdio
sdata = sdio.xenium("data/run")
tx = sdata.points["transcripts"]
# 分子の世界:ここでできることは、切ったあとには戻ってこない
tx = tx[tx["qv"] >= 20]
tx = tx[~tx["feature_name"].astype(str).str.contains(
"NegControl|BLANK|Unassigned|Deprecated", case=False)]
# この時点で残った分子だけが、細胞に割り当てられる候補になる
print("解析に使う分子:", len(tx))
各社の出力に含まれる細胞 × 遺伝子の行列は、品質スコアの閾値を通り、かつ細胞に割り当てられた分子だけで作られています。たとえば Xenium の cell-feature matrix は、Q-Score が 20 以上の分子だけを含みます。一方、転写産物のファイルには閾値を通らなかった分子も残っています。自分でセグメンテーションをやり直すなら、そのフィルタは自分で当て直す必要があります。10x の Baysor 向けの前処理スクリプトが Q-Score 20 を既定にしているのは、この理由です。
3. 分子のフィルタ ─ 対照プローブを外す
パネルには、実際の遺伝子を狙ったプローブのほかに、対照プローブが混ざっています。生体内に存在しない配列を狙ったもの、どのプローブにも対応しないコードワードなど、いくつかの種類があります。
これらはデータの品質を測るための道具であって、解析の対象ではありません。外し忘れると、クラスタリングや細胞型アノテーションに紛れ込みます。詳しい種類と読み方は 転写産物レベルの QCで扱います。
対照プローブは外しますが、外す前にその割合を計算して記録してください。その値が、そのデータの背景ノイズの水準をそのまま表しているからです。あとから「このサンプルは信用してよかったのか」を振り返るとき、この数字が判断材料になります。
4. 境目 ─ セグメンテーション
ここが最も重い判断です。画像ベース、転写産物ベース、ハイブリッドという3つの系統があり、どれを選んでも分子の回収量と細胞の純度のトレードオフから逃れられません。手法の選び方は セグメンテーション手法の選び方で詳しく扱います。
セグメンテーションを変えると、細胞の数も、各細胞の発現プロファイルも変わります。つまりその先の QC・正規化・クラスタリング・アノテーションは、すべて無効です。だからこそ、この段階で複数の手法を試し、納得してから先に進む価値があります。先に進んでから戻ると、それまでの作業がまるごと失われます。
5. 細胞レベルの QC ─ 3つの指標を並べて見る
細胞の世界に入ったら、QC の指標は scRNA-seq の QCに近づきます。ただし、面積という指標が加わり、しかもそれが重要な役割を持ちます。
python
import scanpy as sc
import squidpy as sq
import numpy as np
# 細胞の世界に入ってからの QC
adata = sdata["table"].copy()
sc.pp.calculate_qc_metrics(adata, inplace=True, log1p=False)
# 面積あたりの分子数。切り方の良し悪しが、ここに出る
adata.obs["density"] = adata.obs["total_counts"] / adata.obs["cell_area"]
# 3つを並べて見る。片方だけでは判断できない
sq.pl.spatial_scatter(
adata, color=["total_counts", "cell_area", "density"],
shape=None, ncols=3,
)
# 面積が大きいのに density が低い細胞は、広げすぎている疑い
| 指標 | 何を意味するか | おかしい場合 |
|---|---|---|
| 細胞あたりの分子数 | その細胞から回収できた量 | 少なすぎると、型を決められない |
| 細胞の面積 | セグメンテーションが引いた輪郭の大きさ | 大きすぎるなら、複数細胞をまとめている |
| 面積あたりの分子数 | 切り方の良し悪しがここに出る | 面積が大きいのに低いなら、広げすぎ |
分子数が少ない細胞は、2通りに解釈できます。もともと発現の低い細胞か、輪郭が小さすぎて取りこぼした細胞か。面積を並べて見ると、この2つが区別できます。面積が小さくて分子数も少ないなら、切り方の問題である可能性が高い。面積は普通なのに分子数が少ないなら、生物学かもしれません。指標を1つずつ見る習慣は、ここでは通用しません。
2つの細胞を1つにまとめてしまうと、互いに排他的なはずのマーカーを同時に持つ細胞ができます。scRNA-seq のダブレットと見かけは似ていますが、原因が違います。scRNA-seq では実験由来ですが、ここでは計算由来です。だから、セグメンテーションを直せば減らせます。面積が大きく、排他的マーカーを併せ持つ細胞を疑ってください。
6. 正規化 ─ 総カウントに何が入っているか
正規化の前に、1細胞の総カウントが何でできているかを整理します。

4つの成分があります。細胞の大きさと転写の活発さは生物学、輪郭の切り方は計算由来、パネルの中身は設計由来です。
python
# 生カウントは必ず残す
adata.layers["counts"] = adata.X.copy()
# 面積は obs に持っておく。正規化で消える情報だから
adata.obs["cell_area"] = adata.obs["cell_area"].astype(float)
# クラスタリングのための正規化
sc.pp.normalize_total(adata)
sc.pp.log1p(adata)
# 細胞の大きさが問いに関わるなら、共変量として明示的に扱う
# 例:クラスタごとの面積の分布を比べる
print(adata.obs.groupby("leiden")["cell_area"].median())
シーケンス型では、総カウントに細胞密度という生物学が入り込み、それが正規化を難しくしていました。イメージング型では、1行が1細胞なので細胞密度は入りません。その代わりにセグメンテーションの切り方が入り込みます。総カウントで割ると、切り方の影響を消せる一方で、細胞の大きさという生物学も一緒に消えます。大きさが問いに関わるなら、面積を obs に残し、別に扱ってください。
7. クラスタリングと、複数スライス
正規化から先は scRNA-seq の手順とほぼ同じです。ただし、使える遺伝子はパネルの範囲に限られます。高変動遺伝子を 2,000 選ぼうとしても、パネルが 300 遺伝子ならそもそも足りません。パネルが小さい場合は、全遺伝子を使うほうが素直なこともあります。
複数のスライドがある場合、スライド間の差は Harmony などで補正できます。道具立ては scRNA-seq と同じです。
スライド間で細胞の分子数が違うとき、原因は2つ考えられます。実験のばらつきか、スライドごとにセグメンテーションの出来が違うか。後者なら、バッチ補正では直りません。面積と面積あたりの分子数をスライドごとに比べて、どちらなのかを先に見分けてください。
8. 前処理チェックリスト
- 対照プローブの割合を計算し、記録してから外したか
- 品質スコアのフィルタを、自分で切り直すなら自分で当てたか
- セグメンテーションを複数試して比べたか
- 細胞の分子数・面積・面積あたりの分子数を並べて見たか
- 面積が大きく排他的マーカーを併せ持つ細胞を確認したか
- 生カウントを layers に残したか
- 面積を obs に残したか(正規化で消える情報)
- パネルの遺伝子数に対して、高変動遺伝子の数は妥当か
- スライド間の差が、実験由来かセグメンテーション由来かを見分けたか
まとめ
- 前処理は3つの領域に分かれる。分子の世界(1〜3)、境目(4)、細胞の世界(5〜7)。
- 細胞に割り当てられなかった分子は、行列に入らないまま消える。分子に対する作業は、切る前に済ませる。
- ベンダーの行列はすでに品質フィルタ済み。自分で切り直すなら、フィルタも自分で当て直す。
- 対照プローブは外す。ただし外す前に割合を記録する。
- セグメンテーションをやり直すと、5 以降はすべてやり直し。ここで時間をかける。
- 細胞レベルの QC は分子数・面積・面積あたりの分子数の3つを並べて見る。1つずつでは判断できない。
- 総カウントには切り方が入り込む。総カウントで割ると、切り方と一緒に細胞の大きさも消える。面積は別に残す。
- 使える遺伝子はパネルの範囲。パネルが小さいなら全遺伝子を使う選択もある。
関連記事
- イメージング型 空間トランスクリプトーム解析の全体像
- イメージング型 空間トランスクリプトーム:データ読み込みとデータ構造
- イメージング型 空間トランスクリプトーム:転写産物レベルの QC
- イメージング型 空間トランスクリプトーム:セグメンテーション手法の選び方
- scRNA-seqの前処理 入門 ─ 全体像と進め方をやさしく解説
- scRNA-seq解析:データの読み込みと品質管理(QC)
- scRNA-seq解析:正規化・特徴選択・次元削減・クラスタリング
- scRNA-seq解析:ダブレット検出の基本(Scrublet)
- scRNA-seq解析:サンプル統合とバッチ補正 ─ Harmony
- scRNA-seq解析の土台:AnnData のデータ構造をリレーショナルDBの発想で理解する
参考文献
- Petukhov, V., Xu, R. J., Soldatov, R. A., et al. (2022). Cell segmentation in imaging-based spatial transcriptomics. Nature Biotechnology, 40(3), 345–354. doi:10.1038/s41587-021-01044-w
- Stringer, C., Wang, T., Michaelos, M., & Pachitariu, M. (2021). Cellpose: a generalist algorithm for cellular segmentation. Nature Methods, 18(1), 100–106. doi:10.1038/s41592-020-01018-x
- Heidari, E., Moorman, A., Unyi, D., et al. (2025). Segger: fast and accurate cell segmentation of imaging-based spatial transcriptomics data. bioRxiv(プレプリント). doi:10.1101/2025.03.14.643160
- Cervilla, S., Grases, D., Perez, E., et al. (2026). A technical comparison of spatial transcriptomics platforms across six cancer types. Genome Biology, 27, 22. doi:10.1186/s13059-026-03937-y
- Janesick, A., Shelansky, R., Gottscho, A. D., et al. (2023). High resolution mapping of the tumor microenvironment using integrated single-cell, spatial and in situ analysis. Nature Communications, 14(1), 8353. doi:10.1038/s41467-023-43458-x
- Marconato, L., Palla, G., Yamauchi, K. A., et al. (2025). SpatialData: an open and universal data framework for spatial omics. Nature Methods, 22(1), 58–62. doi:10.1038/s41592-024-02212-x
- Palla, G., Spitzer, H., Klein, M., et al. (2022). Squidpy: a scalable framework for spatial omics analysis. Nature Methods, 19(2), 171–178. doi:10.1038/s41592-021-01358-2
- Wolf, F. A., Angerer, P., & Theis, F. J. (2018). SCANPY: large-scale single-cell gene expression data analysis. Genome Biology, 19, 15. doi:10.1186/s13059-017-1382-0


コメント