CELLxGENE Census、Tabula Sapiensを活用したシングルセルRNAデータ解析チュートリアル

こんにちは、受託コンサルティングチームのiijm_lです🐰

近年のシングルセルRNAシーケンス技術の飛躍的な進歩により、生物学研究は新たな時代を迎えました。それに伴い、Tabula MurisやTabula Sapiensといった大規模な細胞アトラスが公開され、個々の研究者が参照できる高品質なリファレンスデータとして極めて重要なリソースとなっています。

しかし、これらの巨大なデータをいかに効率的に活用するかは、多くの研究者にとって課題です。

こちらの記事では、シングルセルRNAデータセットを管理する CELLxGENEと、代表的な細胞アトラスであるTabula Sapiens (ヒト)を用い、特定の遺伝子の発現プロファイルを探索・解析する具体的な手順を解説します。


CELLxGENEとは?

CELLxGENE(セル・バイ・ジーンと読みます)は、Chan Zuckerberg Initiative (CZI) が主導するプロジェクトで、世界中の研究者が公開したシングルセルデータを閲覧・探索するための高機能なプラットフォームです。

CELLxGENEは主に2つの要素で構成されています。

  1. CELLxGENE Discover:データセットの検索・ダウンロード

  2. CELLxGENE Explorer:データセットの可視化

公開されているウェブサイト上でデータ探索もできますが、
今回はより詳細な解析を行いたい研究者向けに、自身のコンピュータでデータ解析をする方法をご紹介します。

使用するのは、「cellxgene-census」という、CZ CELLxGENE Discoverに登録されている全てのシングルセルRNAデータへコマンドラインからアクセスできるツールです。


Tabula Sapiensとは?

Tabula Sapiens(ラテン語で「賢明なる白地図」の意)は、健康なヒトの全身約24の臓器から採取した約50万個の細胞の遺伝子発現を解析した大規模なデータベースです。

いわばヒトの体を構成する全細胞の詳細な「細胞の地図(アトラス)」であり、特定の細胞がどこに存在し、どのような遺伝子的な特徴を持っているかを調べることができます。
姉妹プロジェクトとして、マウスの細胞アトラスである「Tabula Muris」もあります。

Tabula Sapiensのデータは、CELLxGENE Discoverのプラットフォーム上で公開されています。
CELLxGENE Explorerのツールを使って誰でも閲覧することが可能です。

本チュートリアルは、以下の2部構成で進行します。

  • Part 1: CELLxGENE からデータセットの探索
  • Part 2: Pythonによる解析と可視化

今回はデモとして、Tabula Sapiens (ヒト) および Tabula Muris (マウス) のデータから、特定の組織(肺)に属する細胞を対象に、免疫細胞の機能に重要な役割を果たす遺伝子CD14 (マウスではCd14) の発現プロファイルを抽出・解析することを目的とします。


解析環境

  • OS: Ubuntu 22.04 LTS (Jammy Jellyfish)
  • Python: 3.10.12

Part 1: CELLxGENE からデータセットの探索

CELLxGENEに収められたシングルセルデータセットを全てローカル環境にダウンロードするのは非効率的なので、cellxgene-censusを使用して、クラウド上にあるCensusデータにAPI経由でアクセスし、必要なデータだけを取得します。

まず、解析の拠点となる環境を準備し、クラウド上のCensusデータに接続します。

パッケージのインストール

Python 3.9以上がインストールされた環境であればインストール可能です。
pipを使い cellxgene-censusとscanpyをインストールします。
下記の例では、venvでPython3の仮想環境を作成し、その中にインストールを行います。

# ターミナルで実行

# 解析ディレクトリを作成
mkdir cellxgene

# venvで仮想環境を作成
python3 -m venv venv

# 仮想環境にログイン
source venv/bin/activate

# 仮想環境にログインんした状態で、必要なライブラリをインストール
pip install cellxgene-census scanpy

Censusデータへの接続

クラウド上の最新のCensusデータへ接続するには、Python3でopen_soma()を呼び出すだけです。

下記の例では、ターミナルでPython3を開いて解析を行います。
Jupyter Notebookでももちろん実行可能です。

$ python3
Python 3.10.12 (main, Jan 26 2026, 14:55:28) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 


cellxgene_censusライブラリを読み込み、Censusデータストアに接続します。

# ライブラリを読み込む
>>> import cellxgene_census

# Censusデータストアに接続
>>> census = cellxgene_census.open_soma()

# censusオブジェクトが正常に取得できたことを確認
>>> print(census)

# 以下が出力されます。
# <Collection 's3://cellxgene-census-public-us-west-2/cell-census/2025-01-30/soma/' (open for 'r') (3 items)
#     'census_data': 's3://cellxgene-census-public-us-west-2/cell-census/2025-01-30/soma/census_data' (unopened)
#     'census_info': 's3://cellxgene-census-public-us-west-2/cell-census/2025-01-30/soma/census_info' (unopened)
#     'census_spatial_sequencing': 's3://cellxgene-census-public-us-west-2/cell-census/2025-01-30/soma/census_spatial_sequencing' (unopened)>

Tabula Sapiensの肺組織データを対象としたAnnDataオブジェクトの作成

cellxgene-censusの真価は、膨大なデータの中から必要な部分だけを効率的に「クエリ(問い合わせ)」して抽出できる点にあります。

cellxgene_census.get_anndata()関数を用いて、生物種、obs(細胞メタデータ)のフィルタ条件、var(遺伝子メタデータ)のフィルタ条件を指定するだけで、条件に合致するデータを行列形式(AnnDataオブジェクト)で直接取得できます。

ここでは、Tabula Sapiensのデータセットから、組織が" 肺 (lung) "であり、かつ遺伝子名が" CD14 "であるデータを抽出します。
(以降、文頭の>>>を省略します。)

TABULA_SAPIENS_DATASET_ID = "53d208b0-2cfd-4366-9866-c3c6114081bc"

# クエリを実行し、条件に合うデータをAnnDataとして取得
adata_ts_lung = cellxgene_census.get_anndata(
    census=census,
    organism="homo_sapiens",
    # obs(細胞)のフィルタ条件: Tabula Sapiensのデータかつ、組織が肺
    obs_value_filter=f"dataset_id == '{TABULA_SAPIENS_DATASET_ID}' and tissue_general == 'lung'",
    # var(遺伝子)のフィルタ条件: 遺伝子名がCD14
    var_value_filter="feature_name == 'CD14'",
    # 細胞のメタデータとして細胞種(cell_type)も取得
    obs_column_names=["cell_type"]
)

# 取得した adata の var_names(インデックス)を遺伝子名に書き換える
adata_ts_lung.var_names = adata_ts_lung.var["feature_name"]

# 取得したデータの概要を表示
print(adata_ts_lung)

# 以下が出力されます。
# AnnData object with n_obs × n_vars = 65847 × 1
#     obs: 'cell_type', 'dataset_id', 'tissue_general'
#     var: 'soma_joinid', 'feature_id', 'feature_name', 'feature_type', 'feature_length', 'nnz', 'n_measured_obs'
# 1. 肺(lung)に限定し、かつ細胞数が一定数(例:100個)以上の細胞型だけに絞り込む
cell_counts = adata_ts_lung.obs['cell_type'].value_counts()
keep_cells = cell_counts[cell_counts >= 100].index

adata_filtered = adata_ts_lung[adata_ts_lung.obs['cell_type'].isin(keep_cells)].copy()

print(f"絞り込み後の細胞型数: {len(keep_cells)}")
# 絞り込み後の細胞型数: 28

わずか数行のコードで、数百万の細胞の中から目的の65,847個の細胞におけるCD14の発現データだけをピンポイントで取得できました。
全データをダウンロードする必要は全くありません。

Part 2: Pythonによる解析と可視化

取得したAnnDataオブジェクトは、シングルセル解析の標準ツールであるScanpyで直接扱うことができます。

細胞種ごとの発現量を可視化

取得した肺組織のデータ(adata_ts_lung)を使い、細胞種ごとにCD14の発現量をバイオリンプロットで可視化します

# ライブラリを読み込む
import scanpy as sc
import matplotlib.pyplot as plt

# Axesオブジェクトを取得
ax = sc.pl.violin(
    adata_ts_lung,
    keys='CD14',
    groupby='cell_type',
    rotation=90,
    show=False
)
ax = sc.pl.violin(
adata_filtered,
keys='CD14',
    groupby='cell_type',
    rotation=90,
    show=False
)

# Axesオブジェクトにタイトルを設定
ax.set_title('CD14 Expression in Tabula Sapiens (Lung)')

# レイアウトの自動調整(ラベルの重なりを防ぐ)
plt.tight_layout()

# PDFとして保存
plt.savefig("cd14_expression_lung.pdf", format="pdf", bbox_inches="tight")


このバイオリン図(Violin Plot)は、「どの細胞タイプが、どの程度CD14遺伝子を発現しているか」を示しています。

縦軸が遺伝子発現量(mRNAの数)、横軸が細胞種、1つ1つの点が個別の細胞(シングルセル)データです。


CD14は主に単球 (monocyte)やマクロファージ (macrophage)などで強く発現するマーカーとして知られています。

このプロットにより、プログラム的に取得したデータから、ヒトの肺においてCD14が単球やマクロファージで特異的に高く発現していることが、定量的かつ再現可能な形で確認できました。


(発展)Tabula Murisでの同様の解析(演習)

cellxgene-censusの強力な点は、パラメータを変更するだけで他のデータセットにも容易に応用できることです。
マウス(Tabula Muris)で同様の解析を行うには、cellxgene_census.get_anndata()の引数を、以下のように変更します。

  • organism
    • mus_musculus
  • obs_value_filter
    • Tabula Murisのdataset_idを指定
  • var_value_filter
    • "feature_name == 'Cd14'"(マウスの遺伝子名は1文字目だけ大文字)


これにより、マウスの肺組織におけるCd14の発現パターンも同様に解析でき、種を超えた比較研究が極めて効率的に行えます。



結論 (Conclusion)

本稿では、CELLxGENE、Tabula Sapiensという強力なリソースを組み合わせることで、特定の遺伝子の発現プロファイルを効率的かつ多角的に解析するワークフローを実演しました。

これらの公開データベースとプラットフォームを使いこなすことは、データ駆動型の生命科学研究を加速させる鍵となります。ぜひ、ご自身の興味ある遺伝子でこのワークフローをお試しください。