2.5 Cell Ranger 计数实操:从 fastq 到矩阵 本节摘要:计数软件把 fastq 变成细胞×基因矩阵,核心动作是比对、按条码归组、按 UMI 去重、判定哪些条码对应真细胞。本节给出 Cell Ranger 的完整命令、输出目录的阅读顺序、网页报告里必须核对的指标,并对比 STARsolo 与 kallisto|bustools 两条开源路线。 从 fastq 到矩阵的一条命令 Cell Ranger 是与液滴化学版本配套的官方计数软件,跑一次计数分两步:准备参考基因组(物种参考,人鼠都有现成包可下载),然后执行 count 子命令。下面是一次典型运行的完整会话: 参数对应 fastq 文件名里的样本标识,软件靠它在目录里找到属于自己的 reads;
本节摘要:计数软件把 fastq 变成细胞×基因矩阵,核心动作是比对、按条码归组、按 UMI 去重、判定哪些条码对应真细胞。本节给出 Cell Ranger 的完整命令、输出目录的阅读顺序、网页报告里必须核对的指标,并对比 STARsolo 与 kallisto|bustools 两条开源路线。
Cell Ranger 是与液滴化学版本配套的官方计数软件,跑一次计数分两步:准备参考基因组(物种参考,人鼠都有现成包可下载),然后执行 count 子命令。下面是一次典型运行的完整会话:
# 第一步:解压现成的参考包(人,GRCh38),只需做一次 tar -xzvf refdata-gex-GRCh38-2024-A.tar.gz # 第二步:计数。四个关键参数分别指定输出名、参考、fastq 目录、样本名 cellranger count --id=pbmc_run1 \ --transcriptome=refdata-gex-GRCh38-2024-A \ --fastqs=./fastqs \ --sample=pbmc_donorA \ --expect-cells=8000 # 运行数小时后,输出在 pbmc_run1/outs/ 目录下
--sample 参数对应 fastq 文件名里的样本标识,软件靠它在目录里找到属于自己的 reads;--expect-cells 是可选的先验提示,当你对回收量有把握时给出,能帮条码判定更稳——没把握就别给,让它自己从数据里估。输出目录里真正的干货在 outs 子目录:filtered_feature_bc_matrix 是"判定为真细胞"的矩阵(h5 与 mtx 两种格式),raw_feature_bc_matrix 是所有条码的原始矩阵,web_summary.html 是汇总报告,bam 与 molecule_info 存着比对细节与分子级信息,供深度排查使用。
网页报告信息很多,但定生死的就六项。读的顺序也有讲究——先看细胞数合理不合理,再看质量水位,最后看饱和度:
| 指标 | 健康区间(参考) | 异常时先怀疑 |
|---|---|---|
| Estimated Number of Cells | 与上机目标回收数同量级 | 上机浓度失控或样本降解 |
| Mean Reads per Cell | 达到下单预算(两万以上) | 通量不足或细胞判定过松 |
| Median Genes per Cell | 数百到两千多 | 样本质量差或深度不足 |
| Valid Barcodes | 七成五以上 | 建库或测序问题,条码错读多 |
| Fraction Reads in Cells | 七成以上 | 死细胞多、环境 RNA 污染重 |
| Sequencing Saturation | 图谱类两成到五成起步 | 过低说明还值得加测 |
Fraction Reads in Cells 特别值得多说一句:它衡量所有 reads 里有多大比例落在真细胞条码上。这个值偏低,意味着大量 reads 来自空液滴里的环境 RNA——通常是死细胞释放、或培养上清里的游离 mRNA。数值差到五成以下时,问题在上游而不在参数,换样本比换软件管用。

矩阵里"哪些条码算真细胞"这一步叫细胞判定。最直观的方法是找条码排序曲线的拐点:真细胞条码 UMI 数高、数量少,在曲线上形成陡峭的头部;空液滴靠环境 RNA 攒出几十几百个 UMI,形成又长又平的尾巴。拐点上下就是两群条码的分界。更严谨的思路是空液滴模型:用尾巴条码的背景分布,给每个头部条码算"它是空滴"的概率,只有显著高于背景的才收进 filtered 矩阵——这类方法能捞回拐点法容易漏掉的小细胞(比如血小板、部分淋巴细胞)。
对判定结果不满意时的调节手段有限且有代价:force-cells 类参数可以强制指定细胞数,但那是把你的猜测压过数据的判断,除非有上机记录背书,否则不建议用。分析端更常见的做法是把 raw 矩阵读进来,用分析侧工具重新判定一遍,与官方 filtered 结果对照。
Cell Ranger 不是唯一选择,两条开源路线已经足够成熟。STARsolo 复用久经考验的 STAR 比对器,加了对条码 UMI 结构的支持,输出格式与官方工具对齐,适合已有比对管线、想精细控制比对参数的团队;kallisto|bustools 走伪比对待路线,不逐碱基比对、直接把片段指派给转录本,速度快一个量级,内存占用也小,适合大规模数据的快速迭代。三个工具在多数常规样本上给出的矩阵高度一致,差异集中在低表达基因与背景估计上。选型建议朴实一点:第一次跑通选官方工具少折腾,建流水线与省钱选开源,两边互相验证也是一种质控。
计数完成后,把 filtered 矩阵读进 Scanpy 只要三行:adata = sc.read_10x_h5("outs/filtered_feature_bc_matrix.h5"),随后 adata.var_names_make_unique() 去掉重复基因名。到这里,细胞×基因矩阵正式到手——第三章开始,全册进入分析主场。
以单通道八千细胞、每细胞三万 reads 的常规规模为例,官方工具在十六核六十四 G 内存的机器上跑数小时量级完成,中间峰值内存主要被比对环节吃掉。开源路线的资源需求差着量级:伪比对方案的运行时间可以压到官方工具的零头,一张笔记本就能跑动中等规模样本。规划资源时给参考基因组建库、输出目录(bam 与中间文件动辄几十 G)留足磁盘,比给内存留余量更容易被忽略。
默认的计数范围只统计外显子比对,这对常规细胞测序是合理的。但两种场景要改:单核测序数据的转录本大多未完全剪接,内含子读段占比极高,必须打开内含子统计选项,否则矩阵会薄得离谱;研究未剪接转录本的场景(比如要做 RNA 速率分析)也会主动收集内含子。参数是计数软件的一个开关项,跑之前确认它与你的数据类型匹配,比事后发现矩阵异常再排查省得多。
矩阵到手还远不能直接用:里面混着死细胞、双联体和空滴残留,表达量还带着测序深度带来的假差异。第三章从质控开始,把这张表逐层洗干净。