在我們涉足單細胞數據分析不久之后就會發現,我們在和一套新的理念打交道。在這套理念中,對象是常見的,數據是多維的,往往是一張核心表及其附屬。我們對一張表是熟悉的,Excel極大地普及了這種熟悉,但是如何管理表的附屬?在這套理念中,每個cell都是不同的。
注:這里的cell是一語雙關,既指表中的單元格,又指細胞。細胞就是單元格。
單細胞數據格式
為了記錄每個細胞的信息,人們發展了相應的數據結構如seurat的S4類,monocle的CDS,SingleCellExperiment的sce,scanpy的anndata等,可見單細胞的故事遠大于一張二維的表達譜。
seurat的S4類
Seurat 是我們熟悉的單細胞數據分析工具了,也許已經用seurat分析數據了,或者已經發表了文章,你確你已經了解seurat的邏輯了嗎:以存儲記錄過程。
如Seurat會記錄所執行的計算及其信息,有了seurat對象其實就知道人們在什么時候對數據做了哪些操作以及參數是什么。
pbmc_small@commands
$NormalizeData.RNA
Command: NormalizeData(object = pbmc_small)
Time: 2018-08-28 04:32:17
assay : RNA
normalization.method : LogNormalize
scale.factor : 10000
verbose : TRUE
$RunPCA.RNA
Command: RunPCA(object = pbmc_small, features = VariableFeatures(object = pbmc_small), verbose = FALSE)
Time: 2018-08-28 04:34:56
assay : RNA
features : PPBP IGLL5 VDAC3 CD1C AKR1C3 PF4 MYL9 GNLY TREML1 CA2 SDPR PGRMC1 S100A8 TUBB1 HLA-DQA1 PARVB RUFY1 HLA-DPB1 RP11-290F20.3 S100A9
compute.dims : 20
rev.pca : FALSE
weight.by.var : TRUE
verbose : FALSE
print.dims : 1 2 3 4 5
features.print : 30
reduction.name : pca
reduction.key : PC
seed.use : 42
$BuildSNN.RNA.pca
Command: BuildSNN(pbmc_small, features = VariableFeatures(object = pbmc_small))
Time: 2018-08-28 04:43:31
assay : RNA
features : PPBP IGLL5 VDAC3 CD1C AKR1C3 PF4 MYL9 GNLY TREML1 CA2 SDPR PGRMC1 S100A8 TUBB1 HLA-DQA1 PARVB RUFY1 HLA-DPB1 RP11-290F20.3 S100A9
reduction : pca
dims : 1 2 3 4 5 6 7 8 9 10
k.param : 30
prune.SNN : 0.06666667
nn.eps : 0
verbose : TRUE
force.recalc : FALSE
do.plot : FALSE
graph.name : RNA_snn
......
SingleCellExperiment
SingleCellExperiment 對象是較老的SummarizedExperiment對象的擴展。這是一個S4類開發用于Bioconductor 包,其主要部分是一組中央矩陣“assays”,以及提供關于行和列的額外信息的表。還有一個元數據槽,它是一個包含與實驗相關的任何其他信息的列表。
A : 最小的sce對象是通過提供數據來構建的,比如每個細胞的計數矩陣(藍色方框),由特征組成,比如基因(行)和細胞(列)。還可以提供描述單元格的元數據,其中單元格表示為行,單元格的已知特征為列(橙色框)。類似地,也可以添加描述特性的元數據(綠色框)。這些不同類型的數據都存儲在sce對象的不同部分中,這些部分稱為槽(slots)。每個槽中的數據可以通過以各自的槽(箭頭)命名的訪問器以編程方式訪問,比如rowRanges指的是特征元數據,colData指的是樣本元數據,assay指的是數據。
B : 使用sce (singlecellexper, sce)兼容的工作流進行分析,將數據附加到初始sce對象。例如,計算每個單元格的庫規范化因子將創建一個新槽(粉色框)。這些可以用來推導一個歸一化計數矩陣,它與初始計數數據(深藍色方框)一起存儲在同一個檢測槽中。因此,分析槽能夠存儲任意數量的數據轉換。單元質量度量(描述單元特征)被附加到樣例元數據槽colData中。最后,以與分析槽類似的方式,可以存儲任意數量的維數縮減的數據表示形式,駐留在它們自己的槽中,reducedDim。
C : sce對象在典型分析的整個過程中不斷發展,存儲來自初始數據的各種度量和表示。有關singlecellexper類的更多信息,請參見singlecellexper(https://bioconductor.org/packages/singlecellexper)。
anndata
單細胞轉錄組的核心就是一個cell X gene的二維表,但是分群后要存儲cell的分群結果,特征選擇是要記錄gene的信息,降維后要存儲降維后的結果。所以,這張表.X的對象cell相關的信息記錄在.obs中,屬性gene的信息記錄在.var中,其他的信息在.uns中。
記得初中時學習立體幾何老師要求我們要有空間想象力,把思維提高到一個新的維度。在單細胞數據分析的過中,我們也要挑起我們的想象力,比如在RNA速率的分析中,anndata存儲的內容是這樣的:
adata
AnnData object with n_obs × n_vars = 7292 × 1999
obs: 'initial_size_unspliced', 'initial_size_spliced', 'initial_size', 'n_counts', 'velocity_self_transition', 'leiden', 'velocity_clusters'
var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand', 'means', 'dispersions', 'dispersions_norm', 'velocity_gamma', 'velocity_r2', 'velocity_genes', 'velocity_score', 'fit_alpha', 'fit_beta', 'fit_gamma', 'fit_t_', 'fit_scaling', 'fit_std_u', 'fit_std_s', 'fit_likelihood', 'fit_u0', 'fit_s0', 'fit_pval_steady', 'fit_steady_u', 'fit_steady_s', 'fit_alignment_scaling', 'fit_r2'
uns: 'pca', 'neighbors', 'connectivities_key', 'distances_key', 'velocity_settings', 'velocity_graph', 'velocity_graph_neg', 'leiden', 'umap', 'leiden_colors', 'rank_velocity_genes', 'recover_dynamics'
obsm: 'X_pca', 'X_umap', 'velocity_umap'
varm: 'PCs', 'loss'
layers: 'matrix', 'ambiguous', 'spliced', 'unspliced', 'Ms', 'Mu', 'velocity', 'variance_velocity', 'fit_t', 'fit_tau', 'fit_tau_', 'velocity_u'
obsp: 'distances', 'connectivities'
我們不僅要知道每一部分存儲的內容,還要知道各部分之間的關系。
h5
h5文件是層次格式的第5代版本,用于存儲科學數據的一種文件格式和庫文件,由美國超級計算中心與應用中心研發的文件格式,用以存儲和組織大規模數據.
H5將文件結構簡化成兩個主要的對象類型:
1 數據集dataset,就是同一類型數據的多維數組
2 組group,是一種容器結構,可以包含數據集和其他組,若一個文件中存放了不同種類的數據集,這些數據集的管理就用到了group
直觀的理解,可以參考我們的文件系統,不同的文件存放在不同的目錄下:
目錄就是hdf5文件中的group,描述了數據集DataSet的分類信息,通過group有效的將多種dataset進行管理和劃分文件就是hdf5文件中的dataset,表示具體的數據
下圖就是數據集和組的關系:
為什么是數據庫
隨著單細胞多模態數據的豐富,目前只是轉錄組的數據結構就這么豐富了,想想一下每個細胞還有表觀信息,以后還有空間信息,多組學的發展一定會再次豐富數據結構的。
另一個層面的是,數據結構是和算法結合在一起的。算法就是處理某一問題的解法,過程和步驟,不同的數據結構會簡化算法復雜度。數據結構是描述問題,算法是解決問題,二者是緊密聯系在一起的。
而數據庫的概念把我們從數據表的狹小空間中解放出來:數據庫系統是為適應數據處理的需要而發展起來的一種較為理想的數據處理系統,也是一個為實際可運行的存儲、維護和應用系統提供數據的軟件系統,是存儲介質 、處理對象和管理系統的集合體。
其實數據庫在單細胞數據分析中已經很常見了,除了上面我們提到的常見的數據格式之外,有不少研究者會把數據放到公用數據庫中。只是這類的大數據庫,初學者會覺得離自己很遙遠。
數據庫之外
我們花大力氣去存儲數據,描述數據,是為了什么呢?或者回到問題的開始,就是一張二維表,我們能得到什么信息呢?所以很多時候熱鬧是他們的,我們的關注點還是應該放在生物學的問題上。以技術為舟帆去游弋生物學的海洋。