scanpy について
scanpy は、AnnData を用いたスケーラブルなシングルセル RNA-seq 解析のための Python ツールキットおよびスキルです。品質管理から前処理、クラスタリング、細胞注釈、軌跡解析、可視化まで扱います。
主な機能
- 01AnnData によるデータ管理
- 02品質管理と正規化
- 03PCA、UMAP、t-SNE
- 04クラスタリングとマーカー検出
- 05細胞注釈と軌跡解析
- 06作図と解析テンプレート
活用シーン
- 01scRNA-seq データの選別と前処理
- 02細胞クラスターとマーカー遺伝子の特定
- 03発現データに基づく細胞型の注釈
- 04軌跡と疑似時間の可視化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ crazymsn/ academic-skills --skill scanpyインストール後、Claude Code で/scanpyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/analysis_template.pyreferences/api_reference.mdplotting_guide.mdstandard_workflow.mdscripts/qc_analysis.py詳細
Scanpy: シングルセル解析
概要
Scanpy は、AnnData 上に構築された、スケーラブルな単一細胞 RNA-seq データ解析用の Python ツールキットです。品質管理、正規化、次元削減、クラスタリング、マーカー遺伝子の特定、可視化、軌跡解析を含む、単一細胞ワークフロー全体にこのスキルを適用します。
このスキルを使用するタイミング
このスキルは次の場合に使用します:
- 単一細胞 RNA-seq データ(.h5ad、10X、CSV 形式)を解析するとき
- scRNA-seq データセットの品質管理を行うとき
- UMAP、t-SNE、または PCA の可視化を作成するとき
- 細胞クラスターを特定し、マーカー遺伝子を見つけるとき
- 遺伝子発現に基づいて細胞型をアノテーションするとき
- 軌跡推定または擬時間解析を実施するとき
- 論文品質の単一細胞プロットを生成するとき
クイックスタート
基本的なインポートとセットアップ
import scanpy as sc
import pandas as pd
import numpy as np
# Configure settings
sc.settings.verbosity = 3
sc.settings.set_figure_params(dpi=80, facecolor='white')
sc.settings.figdir = './figures/'
データの読み込み
# From 10X Genomics
adata = sc.read_10x_mtx('path/to/data/')
adata = sc.read_10x_h5('path/to/data.h5')
# From h5ad (AnnData format)
adata = sc.read_h5ad('path/to/data.h5ad')
# From CSV
adata = sc.read_csv('path/to/data.csv')
AnnData 構造の理解
AnnData オブジェクトは、scanpy におけるコアのデータ構造です:
adata.X # Expression matrix (cells × genes)
adata.obs # Cell metadata (DataFrame)
adata.var # Gene metadata (DataFrame)
adata.uns # Unstructured annotations (dict)
adata.obsm # Multi-dimensional cell data (PCA, UMAP)
adata.raw # Raw data backup
# Access cell and gene names
adata.obs_names # Cell barcodes
adata.var_names # Gene names
標準的な解析ワークフロー
1. 品質管理
低品質の細胞と遺伝子を特定してフィルタリングします:
# Identify mitochondrial genes
adata.var['mt'] = adata.var_names.str.startswith('MT-')
# Calculate QC metrics
sc.pp.calculate_qc_metrics(adata, qc_vars=['mt'], inplace=True)
# Visualize QC metrics
sc.pl.violin(adata, ['n_genes_by_counts', 'total_counts', 'pct_counts_mt'],
jitter=0.4, multi_panel=True)
# Filter cells and genes
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_genes(adata, min_cells=3)
adata = adata[adata.obs.pct_counts_mt < 5, :] # Remove high MT% cells
自動解析には QC スクリプトを使用します:
python scripts/qc_analysis.py input_file.h5ad --output filtered.h5ad
2. 正規化と前処理
# Normalize to 10,000 counts per cell
sc.pp.normalize_total(adata, target_sum=1e4)
# Log-transform
sc.pp.log1p(adata)
# Save raw counts for later
adata.raw = adata
# Identify highly variable genes
sc.pp.highly_variable_genes(adata, n_top_genes=2000)
sc.pl.highly_variable_genes(adata)
# Subset to highly variable genes
adata = adata[:, adata.var.highly_variable]
# Regress out unwanted variation
sc.pp.regress_out(adata, ['total_counts', 'pct_counts_mt'])
# Scale data
sc.pp.scale(adata, max_value=10)
3. 次元削減
# PCA
sc.tl.pca(adata, svd_solver='arpack')
sc.pl.pca_variance_ratio(adata, log=True) # Check elbow plot
# Compute neighborhood graph
sc.pp.neighbors(adata, n_neighbors=10, n_pcs=40)
# UMAP for visualization
sc.tl.umap(adata)
sc.pl.umap(adata, color='leiden')
# Alternative: t-SNE
sc.tl.tsne(adata)
4. クラスタリング
# Leiden clustering (recommended)
sc.tl.leiden(adata, resolution=0.5)
sc.pl.umap(adata, color='leiden', legend_loc='on data')
# Try multiple resolutions to find optimal granularity
for res in [0.3, 0.5, 0.8, 1.0]:
sc.tl.leiden(adata, resolution=res, key_added=f'leiden_{res}')
5. マーカー遺伝子の特定
# Find marker genes for each cluster
sc.tl.rank_genes_groups(adata, 'leiden', method='wilcoxon')
# Visualize results
sc.pl.rank_genes_groups(adata, n_genes=25, sharey=False)
sc.pl.rank_genes_groups_heatmap(adata, n_genes=10)
sc.pl.rank_genes_groups_dotplot(adata, n_genes=5)
# Get results as DataFrame
markers = sc.get.rank_genes_groups_df(adata, group='0')
6. 細胞型のアノテーション
# Define marker genes for known cell types
marker_genes = ['CD3D', 'CD14', 'MS4A1', 'NKG7', 'FCGR3A']
# Visualize markers
sc.pl.umap(adata, color=marker_genes, use_raw=True)
sc.pl.dotplot(adata, var_names=marker_genes, groupby='leiden')
# Manual annotation
cluster_to_celltype = {
'0': 'CD4 T cells',
'1': 'CD14+ Monocytes',
'2': 'B cells',
'3': 'CD8 T cells',
}
adata.obs['cell_type'] = adata.obs['leiden'].map(cluster_to_celltype)
# Visualize annotated types
sc.pl.umap(adata, color='cell_type', legend_loc='on data')
7. 結果の保存
# Save processed data
adata.write('results/processed_data.h5ad')
# Export metadata
adata.obs.to_csv('results/cell_metadata.csv')
adata.var.to_csv('results/gene_metadata.csv')
よくあるタスク
論文品質のプロットの作成
# Set high-quality defaults
sc.settings.set_figure_params(dpi=300, frameon=False, figsize=(5, 5))
sc.settings.file_format_figs = 'pdf'
# UMAP with custom styling
sc.pl.umap(adata, color='cell_type',
palette='Set2',
legend_loc='on data',
legend_fontsize=12,
legend_fontoutline=2,
frameon=False,
save='_publication.pdf')
# Heatmap of marker genes
sc.pl.heatmap(adata, var_names=genes, groupby='cell_type',
swap_axes=True, show_gene_labels=True,
save='_markers.pdf')
# Dot plot
sc.pl.dotplot(adata, var_names=genes, groupby='cell_type',
save='_dotplot.pdf')
包括的な可視化の例については、references/plotting_guide.md を参照してください。
軌跡推定
# PAGA (Partition-based graph abstraction)
sc.tl.paga(adata, groups='leiden')
sc.pl.paga(adata, color='leiden')
# Diffusion pseudotime
adata.uns['iroot'] = np.flatnonzero(adata.obs['leiden'] == '0')[0]
sc.tl.dpt(adata)
sc.pl.umap(adata, color='dpt_pseudotime')
条件間の差次的発現解析
# Compare treated vs control within cell types
adata_subset = adata[adata.obs['cell_type'] == 'T cells']
sc.tl.rank_genes_groups(adata_subset, groupby='condition',
groups=['treated'], reference='control')
sc.pl.rank_genes_groups(adata_subset, groups=['treated'])
遺伝子セットスコアリング
# Score cells for gene set expression
gene_set = ['CD3D', 'CD3E', 'CD3G']
sc.tl.score_genes(adata, gene_set, score_name='T_cell_score')
sc.pl.umap(adata, color='T_cell_score')
バッチ補正
# ComBat batch correction
sc.pp.combat(adata, key='batch')
# Alternative: use Harmony or scVI (separate packages)
調整すべき主要パラメーター
品質管理
min_genes: 細胞あたりの最小遺伝子数(通常 200〜500)min_cells: 遺伝子あたりの最小細胞数(通常 3〜10)pct_counts_mt: ミトコンドリア割合の閾値(通常 5〜20%)
正規化
target_sum: 細胞あたりの目標カウント数(デフォルトは 1e4)
特徴量選択
n_top_genes: HVG の数(通常 2000〜3000)min_mean、max_mean、min_disp: HVG 選択のパラメーター
次元削減
n_pcs: 主成分の数(分散比プロットで確認)n_neighbors: 近傍数(通常 10〜30)
クラスタリング
resolution: クラスタリングの粒度(0.4〜1.2、値が大きいほどクラスター数が増加)
よくある落とし穴とベストプラクティス
- 必ず生カウントを保存する: 遺伝子をフィルタリングする前に
adata.raw = adataを実行します - QC プロットを慎重に確認する: データセットの品質に基づいて閾値を調整します
- Louvain より Leiden を使用する: より効率的で、より良い結果が得られます
- 複数のクラスタリング解像度を試す: 最適な粒度を見つけます
- 細胞型アノテーションを検証する: 複数のマーカー遺伝子を使用します
- 遺伝子発現プロットには
use_raw=Trueを使用する: 元のカウントを表示します - PCA の分散比を確認する: 最適な PC の数を決定します
- 中間結果を保存する: 長いワークフローは途中で失敗することがあります
同梱リソース
scripts/qc_analysis.py
指標の計算、プロットの生成、データのフィルタリングを行う自動品質管理スクリプト:
python scripts/qc_analysis.py input.h5ad --output filtered.h5ad \
--mt-threshold 5 --min-genes 200 --min-cells 3
references/standard_workflow.md
次の内容について、詳細な説明とコード例を含む完全な段階的ワークフロー:
- データの読み込みとセットアップ
- 可視化を伴う品質管理
- 正規化とスケーリング
- 特徴量選択
- 次元削減(PCA、UMAP、t-SNE)
- クラスタリング(Leiden、Louvain)
- マーカー遺伝子の特定
- 細胞型のアノテーション
- 軌跡推定
- 差次的発現解析
ゼロから完全な解析を行うときは、このリファレンスを読んでください。
references/api_reference.md
モジュール別に整理された scanpy 関数のクイックリファレンスガイド:
- データの読み書き(
sc.read_*、adata.write_*) - 前処理(
sc.pp.*) - ツール(
sc.tl.*) - プロット(
sc.pl.*) - AnnData の構造と操作
- 設定とユーティリティ
関数のシグネチャや一般的なパラメーターを素早く調べるときに使用してください。
references/plotting_guide.md
以下を含む包括的な可視化ガイドです。
- 品質管理プロット
- 次元削減の可視化
- クラスタリングの可視化
- マーカー遺伝子プロット(ヒートマップ、ドットプロット、バイオリンプロット)
- 軌跡および擬時間プロット
- 出版品質のカスタマイズ
- マルチパネル図
- カラーパレットとスタイル設定
論文投稿用の図を作成する際は、このガイドを参照してください。
assets/analysis_template.py
データの読み込みから細胞タイプのアノテーションまでの完全なワークフローを提供する分析テンプレートです。新しい分析にはこのテンプレートをコピーしてカスタマイズしてください。
cp assets/analysis_template.py my_analysis.py
# Edit parameters and run
python my_analysis.py
このテンプレートには、設定可能なパラメータと分かりやすいコメント付きで、標準的なすべてのステップが含まれています。
追加リソース
- scanpy 公式ドキュメント: https://scanpy.readthedocs.io/
- scanpy チュートリアル: https://scanpy-tutorials.readthedocs.io/
- scverse エコシステム: https://scverse.org/ (関連ツール: squidpy, scvi-tools, cellrank)
- ベストプラクティス: Luecken & Theis (2019) "Current best practices in single-cell RNA-seq"
効果的な分析のためのヒント
- テンプレートから始める:
assets/analysis_template.pyを出発点として使用します - まず QC スクリプトを実行する: 初期フィルタリングには
scripts/qc_analysis.pyを使用します - 必要に応じて参照資料を確認する: ワークフローと API のリファレンスをコンテキストに読み込みます
- クラスタリングを繰り返し調整する: 複数の解像度と可視化手法を試します
- 生物学的に検証する: マーカー遺伝子が想定される細胞タイプと一致するか確認します
- パラメータを記録する: QC のしきい値と分析設定を記録します
- チェックポイントを保存する: 主要なステップで中間結果を書き出します