为什么需要了解数据格式?
在开始单细胞分析之前,理解原始数据的组织结构至关重要。不同的测序平台会生成不同格式的数据, 只有了解这些格式,才能正确地读取和处理数据。
正确读取
避免读错数据或遗漏文件
高效处理
选择合适的工具和参数
问题排查
快速定位数据相关问题
10x Genomics数据格式
10x Genomics是目前最常用的单细胞测序平台,其数据输出有特定的目录结构。 理解这个结构对于后续的数据处理至关重要。
标准目录结构
关键目录说明
- • filtered_feature_bc_matrix: 过滤后的表达矩阵(常用)
- • raw_feature_bc_matrix: 原始表达矩阵(包含低质量细胞)
- • metrics_summary.csv: 质控指标汇总
- • possorted_genome_bam.bam: 比对后的BAM文件
核心文件详解
1. matrix.mtx - 表达矩阵文件
Matrix Market格式(.mtx)的稀疏矩阵文件,包含基因表达计数。
# Matrix Market format header
%%MatrixMarket matrix coordinate real general # 格式声明
%metadata_json: {"format_version": 2} # 元数据
32876 2700 2286842 # 基因数 细胞数 非零值数
1 1 5 # 行索引 列索引 表达值
2 1 1
3 1 0
...
为什么使用稀疏矩阵?单细胞数据中大部分基因都不表达(值为0), 使用稀疏矩阵格式可以节省90%以上的存储空间和内存。
2. features.tsv - 基因注释文件
包含基因ID和基因名称的对应关系。
ENSG00000243485 MIR1302-2 Gene Expression
ENSG00000237613 MIR1302-10 Gene Expression
ENSG00000186092 OR4F5 Gene Expression
...
三列含义:第一列是基因ID(Ensembl ID), 第二列是基因名称(Symbol),第三列是特征类型(通常为"Gene Expression")。
3. barcodes.tsv - 细胞条形码文件
包含所有细胞的条形码序列。
AAACATACAACCAC-1
AAACATTGAGCTAC-1
AAACATTGATCAGC-1
AAACCGTGCTTCCG-1
...
条形码格式:通常为16bp碱基序列加上"-1"后缀。 每个条形码唯一对应一个细胞,用于识别测序reads来自哪个细胞。
数据读取方法
方法1:使用Seurat的Read10X函数
library(Seurat)
library(patchwork)
# 指定数据目录
data_dir <- "path/to/filtered_feature_bc_matrix"
# 读取10x数据
pbmc.data <- Read10X(data.dir = data_dir)
# 查看数据维度
dim(pbmc.data)
# [1] 32876 2700
# (基因 × 细胞)
# 查看前几个基因的表达
pbmc.data[c("CD3D", "TCL1A", "MS4A1"), 1:30]
重要提示
文件命名必须严格:Read10X函数要求目录中的三个文件必须按照特定命名: barcodes.tsv、features.tsv、matrix.mtx。如果文件名不同,需要重命名或手动读取。
方法2:读取H5格式的数据
10x Genomics也支持H5格式的数据输出,这种格式更紧凑且读取速度更快。
library(Seurat)
library(h5)
# 读取H5文件
h5_file <- "filtered_feature_bc_matrix.h5"
pbmc.data <- Read10X_h5(filename = h5_file)
# 查看H5文件结构(可选)
h5::h5ls(h5_file)
# group type dfl obs
# matrix H5I_GROUP 4 4
# barcodes H5I_GROUP 2 2
# features H5I_GROUP 3 3
# indices H5I_GROUP 2 2
# shape H5I_DATASET 0 Scalar 3
H5 vs MTX格式
- • H5格式: 单文件,读取快,但需要特殊工具查看内容
- • MTX格式: 多文件,通用性强,可用文本编辑器查看
- • 推荐使用H5格式进行大规模数据处理
创建Seurat对象
# 创建Seurat对象
pbmc <- CreateSeuratObject(
counts = pbmc.data,
project = "pbmc3k",
min.cells = 3, # 至少在3个细胞中表达的基因
min.features = 200 # 至少表达200个基因的细胞
)
# 查看对象信息
pbmc
# An object of class Seurat
# 13714 features across 2700 samples within 1 assay
# Active assay: RNA (13714 features, 0 variable features)
# 保存对象
saveRDS(pbmc, file = "pbmc3k_raw.rds")
参数选择建议
- • min.cells: 通常设置为3-5,去除噪声基因
- • min.features: 根据平台设置,10x通常为200-500
- • 这两个参数是初步质控,后续还会进一步筛选
其他平台数据格式
🔬 Smart-seq2
全长转录组测序,通常输出FASTQ文件,需要自行比对和定量。
# 读取已定量的数据
data <- read.table("counts.txt",
header = T,
row.names = 1)
# 创建Seurat对象
seurat <- CreateSeuratObject(
counts = data,
min.cells = 3
)
🧬 Drop-seq
类似10x格式,但使用不同的条形码系统。
# Drop-seq数据读取
library(DropSeq)
data <- readDropletMatrices(
bam_file = "sample.bam",
barcodes_file = "barcodes.txt"
)
seurat <- CreateSeuratObject(
counts = data$counts
)
平台对比
| 平台 | 通量 | 覆盖率 | 数据格式 | 适用场景 |
|---|---|---|---|---|
| 10x Genomics | 高(500-10000细胞) | 3'-端或5'-端 | MTX/H5 | 大规模细胞图谱 |
| Smart-seq2 | 低(96-384细胞) | 全长 | FASTQ | 深度转录组分析 |
| Drop-seq | 中(1000-10000细胞) | 3'-端 | BAM+MTX | 成本敏感型研究 |
数据读取后的质控检查
必备质控步骤
# 1. 检查数据维度
dim(pbmc)
# 基因数 × 细胞数
# 2. 检查sparsity(稀疏度)
sparsity <- sum(pbmc[["RNA"]]@counts == 0) / prod(dim(pbmc))
# 通常在95%以上
# 3. 检查线粒体基因比例
pbmc[["percent.mt"]] <- PercentageFeatureSet(
pbmc,
pattern = "^MT-"
)
# 4. 可视化质控指标
VlnPlot(pbmc,
features = c("nFeature_RNA", "nCount_RNA", "percent.mt"),
ncol = 3)
质控指标参考值
- • nFeature_RNA: 200-5000基因(根据组织调整)
- • nCount_RNA: 1000-50000reads
- • percent.mt: <5-20%(心肌/神经细胞可更高)
- • Sparsity: 通常>95%
常见问题与解决方案
❌ 问题:文件名不匹配
Read10X报错:"Error in Read10X : cannot open file"
解决:检查文件名是否严格按照barcodes.tsv、features.tsv、matrix.mtx命名
❌ 问题:H5读取失败
Read10X_h5报错:"Error in hdf5"
解决:安装h5包:install.packages("h5")
❌ 问题:数据维度异常
基因数或细胞数与预期不符
解决:检查是否使用了filtered而非raw目录,确认CreateSeuratObject的min参数
❌ 问题:内存不足
大规模数据读取时内存溢出
解决:使用H5格式,或在CreateSeuratObject中设置更严格的min.cells参数