[ PROMPT_NODE_27394 ]
Scvi Tools 工作流
[ SKILL_DOCUMENTATION ]
# 常用工作流与最佳实践
本文档涵盖了 scvi-tools 的常用工作流、最佳实践以及高级使用模式。
## 标准分析工作流
### 1. 数据加载与准备
python
import scvi
import scanpy as sc
import numpy as np
# 加载数据 (需要 AnnData 格式)
adata = sc.read_h5ad("data.h5ad")
# 或从其他格式加载
# adata = sc.read_10x_mtx("filtered_feature_bc_matrix/")
# adata = sc.read_csv("counts.csv")
# 基础质控指标
sc.pp.calculate_qc_metrics(adata, inplace=True)
adata.var['mt'] = adata.var_names.str.startswith('MT-')
sc.pp.calculate_qc_metrics(adata, qc_vars=['mt'], inplace=True)
### 2. 质量控制
python
# 过滤细胞
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_cells(adata, max_genes=5000)
# 过滤基因
sc.pp.filter_genes(adata, min_cells=3)
# 按线粒体含量过滤
adata = adata[adata.obs['pct_counts_mt'] < 20, :]
# 去除双细胞 (可选,在训练前进行)
sc.external.pp.scrublet(adata)
adata = adata[~adata.obs['predicted_doublet'], :]
### 3. scvi-tools 的预处理
python
# 重要:scvi-tools 需要原始计数 (RAW counts)
# 如果已经归一化,请使用原始层或重新加载数据
# 如果尚未提供,保存原始计数
if 'counts' not in adata.layers:
adata.layers['counts'] = adata.X.copy()
# 特征选择 (可选但推荐)
sc.pp.highly_variable_genes(
adata,
n_top_genes=4000,
subset=False, # 保留所有基因,仅标记高变基因 (HVG)
batch_key="batch" # 如果有多个批次
)
# 过滤至高变基因 (可选)
# adata = adata[:, adata.var['highly_variable']]
### 4. 使用 scvi-tools 注册数据
python
# 为 scvi-tools 设置 AnnData
scvi.model.SCVI.setup_anndata(
adata,
layer="counts", # 使用原始计数
batch_key="batch", # 技术批次
categorical_covariate_keys=["donor", "condition"],
continuous_covariate_keys=["percent_mito", "n_counts"]
)
# 检查注册情况
adata.uns['_scvi']['summary_stats']
### 5. 模型训练
python
# 创建模型
model = scvi.model.SCVI(
adata,
n_latent=30, # 潜在维度
n_layers=2, # 网络深度
n_hidden=128, # 隐藏层大小
dropout_rate=0.1,
gene_likelihood="zinb" # 零膨胀负二项分布
)
# 训练模型
model.train(
max_epochs=400,
batch_size=128,
train_size=0.9,
early_stopping=True,
check_val_every_n_epoch=10
)
# 查看训练历史
train_history = model.history["elbo_trai"