跳转至

Velocyto RNA 速率 — 计算 RNA 剪接速率推断细胞状态走向


一句话说明

Velocyto 是 RNA velocity 分析的起点工具,通过区分未剪接(nascent)和已剪接(mature)mRNA,计算每个基因的转录速率,预测细胞未来的状态走向。


安装与配置

# 激活生信分析环境
conda activate bioinfo

# 安装 Velocyto(命令行版本,用于从 BAM 文件生成 loom 文件)
pip install velocyto

# 安装必要依赖
pip install numpy scipy matplotlib pandas anndata

# 安装 pysam(处理 BAM 文件)
conda install -c bioconda pysam -y

# 安装 samtools(BAM 文件操作)
conda install -c bioconda samtools -y

# 验证安装
velocyto --version

核心用法

# ── 方法1:针对 10X Genomics 数据(最常用) ──────────────
velocyto run10x \
  /path/to/cellranger_output/ \   # Cellranger 输出目录(含 bam/)
  /path/to/refdata-gex-GRCh38/genes/genes.gtf  # 参考基因组 GTF 文件

# ── 方法2:通用 BAM 文件分析 ──────────────────────────────
velocyto run \
  -b barcodes.tsv \               # 有效 barcode 列表
  -o output_loom/ \               # 输出目录
  -m repeat_msk.gtf \             # 重复序列 GTF(可选,用于过滤)
  sample.bam \                    # 输入 BAM 文件(需要排序和索引)
  genes.gtf                       # 参考基因组 GTF 文件

# ── 方法3:Smart-seq2 数据 ────────────────────────────────
velocyto run \
  -o output_loom/ \
  smartseq2_sample.bam \
  genes.gtf

参数详解

参数说明建议值
-b有效细胞 barcode 列表文件10X filtered_barcodes.tsv
-m重复序列掩码文件(减少假阳性)UCSC rmsk.gtf
-o输出 loom 文件保存目录自定义
--dtype计数矩阵数据类型(uint32 节省内存)uint32
--samtools-threadsBAM 解析并行线程数4-8
--samtools-memory每线程内存限制(MB)4096

实战案例

import velocyto as vcy             # 导入 velocyto Python 接口
import scvelo as scv               # 通常配合 scVelo 使用
import scanpy as sc
import anndata as ad

# ── 在 Python 中加载和分析 Loom 文件 ─────────────────────

# 1. 读取 velocyto 生成的 loom 文件
loom_file = 'sample.loom'
# 使用 scVelo 读取(推荐,功能更全)
adata = scv.read(loom_file, cache=True)      # 读取并缓存,避免重复解析

# 2. 合并多个样本的 loom 文件
import loompy
# 先用命令行合并(推荐)
# loompy merge sample1.loom sample2.loom merged.loom

# 或在 Python 中用 scVelo 合并
loom_files = ['sample1.loom', 'sample2.loom']
adata = scv.read(loom_files[0], cache=True)

# 3. 与已有的 Scanpy/Seurat 注释结合
# 已有注释的 h5ad 文件(含聚类、UMAP 等)
adata_scanpy = sc.read_h5ad('annotated_adata.h5ad')

# 按 barcode 合并(velocyto loom 的细胞 barcode 需要去掉前缀)
adata.obs_names = [x.split(':')[1] for x in adata.obs_names]  # 处理 barcode 格式

# 用 Scanpy 的注释更新 velocyto 数据
adata_merge = scv.utils.merge(adata, adata_scanpy)  # 合并元数据

# 4. 可视化剪接/未剪接比例
scv.pl.proportions(adata_merge)    # 查看每个细胞的 spliced/unspliced 比例

# 5. 后续分析移交 scVelo(见 326 教程)
# scVelo 更快更准确,通常 velocyto 只用于生成 loom 文件

# ── Bash 中的实用操作 ───────────────────────────────────
# 检查 BAM 文件是否已经排序(velocyto 需要排序好的 BAM)
samtools view -H sample.bam | grep "SO:"          # 查看排序方式

# 对 BAM 文件排序(如果未排序)
samtools sort -@ 8 -o sorted.bam unsorted.bam     # 8线程排序

# 给 BAM 建索引(velocyto 必需)
samtools index sorted.bam                          # 生成 .bai 索引文件

# 运行 velocyto(10X 数据,使用 8 个线程)
velocyto run10x \
  --samtools-threads 8 \             # 8 个线程加速
  cellranger_output/ \
  genes.gtf

常见报错与解决

报错原因解决方法
BAM file is not sortedBAM 未排序samtools sort -o sorted.bam input.bam
No such file: .bai缺少 BAM 索引samtools index sorted.bam
velocyto not found未安装或未激活环境pip install velocyto
loom 文件读取报 UnicodeError文件损坏或格式问题重新生成 loom 文件
运行速度很慢(>24h)默认单线程增加 --samtools-threads 8

速查表

# 10X 数据一键运行(最常用)
velocyto run10x cellranger_out/ genes.gtf

# 指定 barcode + 线程数
velocyto run -b barcodes.tsv \
             --samtools-threads 8 \
             sample.bam genes.gtf

# 输出文件
# sample.loom  →  包含 spliced/unspliced/ambiguous 三层矩阵

# Python 中读取
import scvelo as scv
adata = scv.read('sample.loom')