在我們涉足單細(xì)胞數(shù)據(jù)分析不久之后就會發(fā)現(xiàn)众眨,我們在和一套新的理念打交道。在這套理念中娩梨,對象是常見的,數(shù)據(jù)是多維的矫俺,往往是一張核心表及其附屬。我們對一張表是熟悉的厘托,Excel極大地普及了這種熟悉,但是如何管理表的附屬铅匹?在這套理念中,每個cell都是不同的流礁。
注:這里的cell是一語雙關(guān)罗丰,既指表中的單元格,又指細(xì)胞萌抵。細(xì)胞就是單元格。
單細(xì)胞數(shù)據(jù)格式
為了記錄每個細(xì)胞的信息霎桅,人們發(fā)展了相應(yīng)的數(shù)據(jù)結(jié)構(gòu)如seurat的S4類讨永,monocle的CDS滔驶,SingleCellExperiment的sce,scanpy的anndata等卿闹,可見單細(xì)胞的故事遠(yuǎn)大于一張二維的表達(dá)譜。
seurat的S4類
Seurat 是我們熟悉的單細(xì)胞數(shù)據(jù)分析工具了插佛,也許已經(jīng)用seurat分析數(shù)據(jù)了量窘,或者已經(jīng)發(fā)表了文章氢拥,你確你已經(jīng)了解seurat的邏輯了嗎:以存儲記錄過程。
如Seurat會記錄所執(zhí)行的計算及其信息嫩海,有了seurat對象其實就知道人們在什么時候?qū)?shù)據(jù)做了哪些操作以及參數(shù)是什么。
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對象的擴(kuò)展审葬。這是一個S4類開發(fā)用于Bioconductor 包,其主要部分是一組中央矩陣“assays”痴荐,以及提供關(guān)于行和列的額外信息的表官册。還有一個元數(shù)據(jù)槽,它是一個包含與實驗相關(guān)的任何其他信息的列表膝宁。
A : 最小的sce對象是通過提供數(shù)據(jù)來構(gòu)建的,比如每個細(xì)胞的計數(shù)矩陣(藍(lán)色方框)合蔽,由特征組成介返,比如基因(行)和細(xì)胞(列)。還可以提供描述單元格的元數(shù)據(jù)映皆,其中單元格表示為行,單元格的已知特征為列(橙色框)捅彻。類似地,也可以添加描述特性的元數(shù)據(jù)(綠色框)从隆。這些不同類型的數(shù)據(jù)都存儲在sce對象的不同部分中缭裆,這些部分稱為槽(slots)。每個槽中的數(shù)據(jù)可以通過以各自的槽(箭頭)命名的訪問器以編程方式訪問澈驼,比如rowRanges指的是特征元數(shù)據(jù),colData指的是樣本元數(shù)據(jù)缝其,assay指的是數(shù)據(jù)挎塌。
B : 使用sce (singlecellexper, sce)兼容的工作流進(jìn)行分析内边,將數(shù)據(jù)附加到初始sce對象。例如嘴高,計算每個單元格的庫規(guī)范化因子將創(chuàng)建一個新槽(粉色框)。這些可以用來推導(dǎo)一個歸一化計數(shù)矩陣拴驮,它與初始計數(shù)數(shù)據(jù)(深藍(lán)色方框)一起存儲在同一個檢測槽中。因此莹汤,分析槽能夠存儲任意數(shù)量的數(shù)據(jù)轉(zhuǎn)換。單元質(zhì)量度量(描述單元特征)被附加到樣例元數(shù)據(jù)槽colData中抹竹。最后止潮,以與分析槽類似的方式,可以存儲任意數(shù)量的維數(shù)縮減的數(shù)據(jù)表示形式喇闸,駐留在它們自己的槽中,reducedDim唆樊。
C : sce對象在典型分析的整個過程中不斷發(fā)展刻蟹,存儲來自初始數(shù)據(jù)的各種度量和表示。有關(guān)singlecellexper類的更多信息舆瘪,請參見singlecellexper(https://bioconductor.org/packages/singlecellexper)。
anndata
單細(xì)胞轉(zhuǎn)錄組的核心就是一個cell X gene的二維表淀衣,但是分群后要存儲cell的分群結(jié)果召调,特征選擇是要記錄gene的信息膨桥,降維后要存儲降維后的結(jié)果某残。所以陵吸,這張表.X的對象cell相關(guān)的信息記錄在.obs中,屬性gene的信息記錄在.var中澳厢,其他的信息在.uns中。
記得初中時學(xué)習(xí)立體幾何老師要求我們要有空間想象力剩拢,把思維提高到一個新的維度。在單細(xì)胞數(shù)據(jù)分析的過中徐伐,我們也要挑起我們的想象力,比如在RNA速率的分析中,anndata存儲的內(nèi)容是這樣的:
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'
我們不僅要知道每一部分存儲的內(nèi)容角雷,還要知道各部分之間的關(guān)系性穿。
h5
h5文件是層次格式的第5代版本,用于存儲科學(xué)數(shù)據(jù)的一種文件格式和庫文件,由美國超級計算中心與應(yīng)用中心研發(fā)的文件格式,用以存儲和組織大規(guī)模數(shù)據(jù).
H5將文件結(jié)構(gòu)簡化成兩個主要的對象類型:
1 數(shù)據(jù)集dataset,就是同一類型數(shù)據(jù)的多維數(shù)組
2 組group,是一種容器結(jié)構(gòu),可以包含數(shù)據(jù)集和其他組,若一個文件中存放了不同種類的數(shù)據(jù)集,這些數(shù)據(jù)集的管理就用到了group
直觀的理解,可以參考我們的文件系統(tǒng),不同的文件存放在不同的目錄下:
目錄就是hdf5文件中的group,描述了數(shù)據(jù)集DataSet的分類信息,通過group有效的將多種dataset進(jìn)行管理和劃分文件就是hdf5文件中的dataset,表示具體的數(shù)據(jù)
下圖就是數(shù)據(jù)集和組的關(guān)系:
為什么是數(shù)據(jù)庫
隨著單細(xì)胞多模態(tài)數(shù)據(jù)的豐富需曾,目前只是轉(zhuǎn)錄組的數(shù)據(jù)結(jié)構(gòu)就這么豐富了,想想一下每個細(xì)胞還有表觀信息呆万,以后還有空間信息,多組學(xué)的發(fā)展一定會再次豐富數(shù)據(jù)結(jié)構(gòu)的炊汹。
另一個層面的是,數(shù)據(jù)結(jié)構(gòu)是和算法結(jié)合在一起的讨便。算法就是處理某一問題的解法以政,過程和步驟,不同的數(shù)據(jù)結(jié)構(gòu)會簡化算法復(fù)雜度盈蛮。數(shù)據(jù)結(jié)構(gòu)是描述問題,算法是解決問題抖誉,二者是緊密聯(lián)系在一起的。
而數(shù)據(jù)庫的概念把我們從數(shù)據(jù)表的狹小空間中解放出來:數(shù)據(jù)庫系統(tǒng)是為適應(yīng)數(shù)據(jù)處理的需要而發(fā)展起來的一種較為理想的數(shù)據(jù)處理系統(tǒng)旁理,也是一個為實際可運行的存儲我磁、維護(hù)和應(yīng)用系統(tǒng)提供數(shù)據(jù)的軟件系統(tǒng)驻襟,是存儲介質(zhì) 、處理對象和管理系統(tǒng)的集合體沉衣。
其實數(shù)據(jù)庫在單細(xì)胞數(shù)據(jù)分析中已經(jīng)很常見了减牺,除了上面我們提到的常見的數(shù)據(jù)格式之外,有不少研究者會把數(shù)據(jù)放到公用數(shù)據(jù)庫中拔疚。只是這類的大數(shù)據(jù)庫,初學(xué)者會覺得離自己很遙遠(yuǎn)草雕。
數(shù)據(jù)庫之外
我們花大力氣去存儲數(shù)據(jù),描述數(shù)據(jù)嘱巾,是為了什么呢诫钓?或者回到問題的開始,就是一張二維表菌湃,我們能得到什么信息呢?所以很多時候熱鬧是他們的惧所,我們的關(guān)注點還是應(yīng)該放在生物學(xué)的問題上。以技術(shù)為舟帆去游弋生物學(xué)的海洋纽绍。