S
single-cell-cellphonedb-communication-mapping
single-cell-cellphonedb-communication-mapping について
OmicVerse の CellPhoneDB と CellChat を使い、注釈付き単一細胞集団間のリガンド・受容体コミュニケーションを解析する手順を案内します。細胞間通信の研究向けです。
主な機能
- 01CellPhoneDB v5 による通信解析
- 02CellChat による通信解析
- 03通信ヒートマップとネットワークの作成
- 04経路とリガンド・受容体の寄与の集計
- 05送信側と受信側の役割分析
活用シーン
- 01細胞集団間のリガンド・受容体相互作用の比較
- 02有意な経路の抽出とフォーカスヒートマップ作成
- 03経路ごとの主要なリガンド・受容体ペアの確認
- 04通信オブジェクトやシグナル役割の比較
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ omicverse/ omicverse --skill single-cell-cellphonedb-communication-mappingインストール後、Claude Code で/single-cell-cellphonedb-communication-mappingを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
単一細胞 CellPhoneDB 通信マッピング
概要
アノテーション済みの単一細胞集団間のリガンド・受容体間の通信を定量化し、OmicVerse の CellPhoneDB プロットスタックで結果を可視化する場合に、このスキルを適用します。このスキルでは、従来の低レベルな ov.pl.CellChatViz ワークフローと、新しい公開プロット API の両方を扱います。
ov.pl.ccc_heatmap(...)ov.pl.ccc_network_plot(...)ov.pl.ccc_stat_plot(...)
安定した公開 API を使って、論文掲載に適したプロットをすばやく作成する場合は、デフォルトで ccc_* 関数を使用してください。メソッドレベルでの制御が必要な場合や、1 つのノートブック内で複数のカスタム可視化を組み合わせる場合は、CellChatViz を使用してください。
手順
- 環境を準備する
omicverse>=0.2、scanpy、anndata、pandas、matplotlib、seaborn、および CellPhoneDB のリソースを利用できる環境を使用します。- 新しい可視化を使用する場合は、必要に応じて次のオプションのプロット用依存関係も利用できることを確認します。
- ヒートマップとバブル行列プロッターには
marsilea。 - コード図には
mpl-chord-diagram。 - 拡散プロットおよびネットワーク形式のプロットには
networkx。 - ラベルの自動反発を改善したい場合は
adjustText。
- ヒートマップとバブル行列プロッターには
ov.plot_set()を使用して OmicVerse のプロット設定を有効にします。
- アノテーション済み AnnData を読み込み、検証する
- 正規化済み発現行列を
ov.read(...)で読み込みます。 - 通信グループ列をクリーンなカテゴリ列にし、意図した識別子と一致させます。
- 推奨する確認事項:
celltype_key = "cell_labels" assert celltype_key in adata.obs.columns, f"{celltype_key} missing from adata.obs" adata.obs[celltype_key] = adata.obs[celltype_key].astype("category").cat.remove_unused_categories() assert not adata.obs[celltype_key].isna().any(), f"NaN values found in {celltype_key}" min_per_group = adata.obs[celltype_key].value_counts().min() if min_per_group < 10: print(f"WARNING: smallest group has {min_per_group} cells; sparse groups may destabilize permutations") - CellPhoneDB を実行する前に、行列がログ正規化済みであることを確認します。生のカウントは、置換ベースの有意性を歪める可能性があります。
- 正規化済み発現行列を
- OmicVerse 経由で CellPhoneDB を実行する
ov.single.run_cellphonedb_v5(...)を使用し、出力を保存します。cpdb_results, adata_cpdb = ov.single.run_cellphonedb_v5( adata, cpdb_file_path="./cellphonedb.zip", celltype_key="cell_labels", min_cell_fraction=0.005, min_genes=200, min_cells=3, iterations=1000, threshold=0.1, pvalue=0.05, threads=10, output_dir="./cpdb_results", cleanup_temp=True, )- 置換を再実行せずに後続のプロットを繰り返せるよう、
cpdb_resultsとadata_cpdbを保存します。 - CellChat の代替手段(R 不要、PyTorch 以外の追加インストール不要):
ov.single.run_cellchatは R CellChat 2.2 を再現し(過剰発現遺伝子/LR ペアは同一、確率は約 1e-15 まで一致)、adata.uns['cellchat_res']に結果を格納します。すべてのov.pl.ccc_*呼び出しはこの結果を直接読み込みます。
CellChat スコアは発現量ではなく確率(約 1e-3)です。パスウェイの要約では、スケールに応じたしきい値が自動的に選ばれます。細胞数がov.single.run_cellchat(adata, groupby="cell_labels", species="human") # log-normalised X comm = ov.single.format_cellchat_results(adata) # optional explicit comm AnnData df = ov.single.cellchat_subset_communication(adata, signaling=["TGFb"]) # significant LR table centr = ov.single.cellchat_centrality(adata) # sender/receiver/mediator/influencermin_cells(デフォルトは 10)以下のグループは、R のfilterCommunicationと同様に除外されます。
- 標準的な可視化の依頼には、新しい公開プロット API を優先する
- 行列形式のプロットには
ov.pl.ccc_heatmap(...)を使用します。plot_type="heatmap"は、集約したパスウェイレベルの通信に使用します。plot_type="focused_heatmap"は、弱い項目をしきい値で除外して、より強い相互作用を強調する場合に使用します。plot_type="dot"または"bubble"は、相互作用レベルの要約に使用します。plot_type="pathway_bubble"は、Marsilea によるパスウェイに焦点を当てたバブル要約に使用します。plot_type="bubble_lr"は、リガンド・受容体ペアごとのバブル行列に使用します。plot_type="role_heatmap"、"role_network"、または"role_network_marsilea"は、シグナル伝達の役割の要約に使用します。plot_type="diff_heatmap"は、2 つの通信 AnnData オブジェクトを比較する場合に使用します。
- グラフ形式のプロットには
ov.pl.ccc_network_plot(...)を使用します。plot_type="circle"または"circle_focused"は、全体的な通信ネットワークに使用します。plot_type="individual_outgoing"/"individual_incoming"は、送信側または受信側を中心とする円形パネルに使用します。plot_type="individual"は、単一のパスウェイと、必要に応じて選択した L-R ペアに使用します。plot_type="chord"は、細胞タイプレベルのパスウェイコードに使用します。plot_type="gene_chord"は、パスウェイ固有のリガンドノードと受容体ノードを横断する遺伝子レベルのコード図に使用します。plot_type="lr_chord"は、指定したリガンド・受容体ペアに使用します。plot_type="diffusion"は、パスウェイの類似性と拡散形式のネットワーク構造に使用します。plot_type="diff_network"は、2 つの通信オブジェクトを比較する場合に使用します。plot_type="bipartite"、"arrow"、"sigmoid"、または"embedding_network"は、別のレイアウトに使用します。
- 統計情報や要約パネルには
ov.pl.ccc_stat_plot(...)を使用します。plot_type="pathway_summary"は、通信強度と有意性に基づくパスウェイの順位付けに使用します。plot_type="lr_contribution"は、パスウェイ内で優勢なリガンド・受容体ペアを表示する場合に使用します。plot_type="scatter"または"role_scatter"は、送信側と受信側のシグナル伝達の役割を比較する場合に使用します。plot_type="role_network"または"role_network_marsilea"は、行列形式の役割の要約に使用します。plot_type="sankey"は、通信フローの要約に使用します。
- 行列形式のプロットには
- 手法レベルの制御が必要な場合は
CellChatVizを直接使用する- 細胞ラベルから安定したパレットの対応付けを作成します。
color_dict = dict(zip( adata.obs["cell_labels"].cat.categories, adata.uns["cell_labels_colors"] )) viz = ov.pl.CellChatViz(adata_cpdb, palette=color_dict) - 推奨する直接的なワークフロー:
viz.compute_aggregated_network(...)の後にviz.netVisual_circle(...)を実行します。viz.compute_pathway_communication(...)の後にviz.get_significant_pathways_v2(...)を実行します。viz.netVisual_heatmap_marsilea(...)またはviz.netVisual_heatmap_marsilea_focused(...)を使用します。- パスウェイのバブル表示には
viz.netVisual_bubble_marsilea(...)を使用します。 - 選択したリガンド・受容体ペアには
viz.netVisual_bubble_lr(...)を使用します。 viz.netVisual_chord_cell(...)、viz.netVisual_chord_gene(...)、およびviz.netVisual_chord_LR(...)を使用します。- 1 つのパスウェイ/濃縮された 1 つのペアには
viz.netVisual_individual(...)を使用します。 viz.netAnalysis_computeCentrality()の後に、役割のヒートマップ、散布図、ネットワークプロットを作成します。- パスウェイレベルのペア寄与分析には
viz.netAnalysis_contribution(pathway)を使用します。 - パスウェイの類似性構造には
viz.netVisual_diffusion(...)を使用します。
- 細胞ラベルから安定したパレットの対応付けを作成します。
- 新しい可視化機能を明確に紹介する
- 回答で紹介する価値のある新しい追加機能:
gene_chord:細胞タイプレベルのコードだけでなく、遺伝子レベルのコード図も作成できます。bubble_lr:明示的なリガンド・受容体ペアを中心とした Marsilea のバブル要約を作成できます。focused_heatmap:弱い相互作用を抑制する、しきい値適用済みのパスウェイヒートマップです。role_network_marsilea:デンドログラム、カラーバー、重要度バーを備えた、より詳細な役割の要約を作成できます。diffusion:通信パターンに基づくパスウェイ類似性ネットワークを作成できます。pathway_summaryとlr_contribution:優先順位付けに役立つ、より高次の要約/統計表示です。
- ユーザーが「新しい可視化」と言った場合は、従来の円形プロットだけでなく、これらの機能のいずれかを優先して紹介します。
- 回答で紹介する価値のある新しい追加機能:
- 新しいプロットのパラメーターに関するヒント
- パスウェイバブルの場合:
group_pathways=Trueは、個々の L-R ペアではなくパスウェイごとにまとめます。- セルペアの行が多すぎてラベルが読みにくい場合は、
transpose=Trueが便利です。 add_violin=Trueを指定するとスコア分布を確認できますが、図はより密になります。
- リガンド・受容体のバブルの場合:
- 一部のペアが弱い場合や存在しない場合でも、固定したペアの一覧を比較したいときは
show_all_pairs=Trueが便利です。 pair_lr_useまたはinteraction_useは、adata.var内のペア名と一致させる必要があります。
- 一部のペアが弱い場合や存在しない場合でも、固定したペアの一覧を比較したいときは
- 遺伝子コード図の場合:
adata.var["gene_a"]とadata.var["gene_b"]が必要です。- 遺伝子名や細胞タイプのラベルが長い場合は、
rotate_names=Trueを使用します。
- フォーカス付きヒートマップとフォーカス付き円形プロットの場合:
- プロット前に弱いエッジを除外するには、
min_interaction_thresholdを調整します。
- プロット前に弱いエッジを除外するには、
- 役割プロットの場合:
- 低レベル API を使用する場合は、最初に
viz.netAnalysis_computeCentrality()を実行します。 - 解釈しやすい送信側プログラムと受信側プログラムを表示するには、
pattern="incoming"とpattern="outgoing"を別々に使用します。
- 低レベル API を使用する場合は、最初に
- パスウェイバブルの場合:
- トラブルシューティング
- メタデータの整合性:通信グループ列はカテゴリ型で、欠損値がない必要があります。
- データベースバンドル:
cpdb_file_pathは、有効な CellPhoneDB v5 の SQLite zip を指している必要があります。 - 疎なグループ:送信側または受信側のグループが非常に小さいと、結果が不安定になったり空になったりすることがあります。
adata.var内の列の欠落:- パスウェイで絞り込むプロットには
classificationが必要です。 - 遺伝子レベルまたはリガンド・受容体ペア固有のプロットには
gene_aとgene_bが必要です。
- パスウェイで絞り込むプロットには
- オプションの依存関係に関するエラー:
pathway_bubble、bubble_lr、フォーカス付きヒートマップ、および Marsilea による役割ネットワーク表示にはmarsileaをインストールします。- コード図には
mpl-chord-diagramをインストールします。 - ラベルの重なりがひどい場合は
adjustTextをインストールします。
- パレットの不一致:
adata.obs[celltype_key].cat.categoriesのソート済みカテゴリと、対応するadata.uns[f"{celltype_key}_colors"]からパレットを再構築します。
例
- 「CellPhoneDBを実行してから、
ov.pl.ccc_heatmap(..., plot_type='focused_heatmap')を使用して、最も強い経路を表示します。」 - 「
ov.pl.ccc_network_plot(..., plot_type='gene_chord')を使用して、FGFシグナル伝達の遺伝子レベルのコード図を作成します。」 - 「
plot_type='bubble_lr'を使用して、選択したリガンド・受容体ペアを送信側と受信側の組み合わせごとに比較します。」 - 「
ccc_stat_plot(..., plot_type='pathway_summary')で上位の経路を要約し、plot_type='lr_contribution'で経路内のリガンド・受容体の寄与を順位付けします。」 - 「
CellChatVizを直接使用して、中心性を計算し、Marsileaの役割ネットワーク図を描画します。」
参考資料
- チュートリアルノートブック:
t_cellphonedb.ipynb - サンプルデータ:
omicverse_guide/docs/Tutorials-single/data/cpdb/ - コピー&ペースト用のクイックコマンド:
reference.md
コメント
Markdown 対応