無論是單細(xì)胞、空間組還是ATAC的數(shù)據(jù),有時(shí)由于下游分析的需求或可視化的需求,同時(shí)由于python的運(yùn)算速度的優(yōu)勢,目前越來越多單細(xì)胞分析的工具開始在python環(huán)境下開發(fā)(scanpy/spGCN/scVelo……),但是大家大多都習(xí)慣了R的分析環(huán)境(Seurat/Harmony/Monocle3……),所以我們經(jīng)常需要在不同的環(huán)境中運(yùn)行同一個(gè)分析對象,這所以涉及到的數(shù)據(jù)類型的轉(zhuǎn)變就非常關(guān)鍵了。
想直接想找工具將RDS轉(zhuǎn)為python可讀數(shù)據(jù)對象的包,目前還沒有……(如果有大佬可以開發(fā)一下)。
目前所以從數(shù)據(jù)本身出發(fā)有三種方式,總結(jié)自目前網(wǎng)絡(luò)上一些可行的方法:
1,提取矩陣(稀疏/稠密)和特征信息(metadata),手動(dòng)構(gòu)筑anndata(單細(xì)胞分析時(shí)python中的一種數(shù)據(jù)結(jié)構(gòu),具體了解可以看一下:http://www.itdecent.cn/p/9b057e105c42,寫得挺好)就好。前提是對R的S4對象和python的anndata對象有基礎(chǔ)的認(rèn)識(shí),就可以搞定,這是最本質(zhì)也是最萬能的方法,除了門檻高。
2,存儲(chǔ)的時(shí)候就注意,不要保存成rds,或者已經(jīng)這樣保存了也無所謂,可以讀入再重新存:
(1)存儲(chǔ)成h5ad格式。Seurat數(shù)據(jù)寫成h5需要借助包SeuratDisk: https://github.com/mojaveazure/seurat-disk
從R環(huán)境下Seurat的對象保存成h5ad的格式:
library('SeuratDisk')
DefaultAssay(sdata) <- "Spatial" #選擇你要保存的Assay
SaveH5Seurat(sdata, filename = "data.h5Seurat",overwrite = TRUE)
Convert("data.h5Seurat", dest = "h5ad",overwrite = TRUE)
然后用python的anndata包/scanpy包直接讀入就好,因?yàn)閔5ad本來就是單細(xì)胞在跑一python環(huán)境中分析最基礎(chǔ)的格式,對標(biāo)R中的seurat對象或sce對象
adata=anndata.read('./data.h5ad') #用anndata
adata=scanpy.read('./data.h5ad') #用scanpy
這個(gè)方法可以具體參考:http://www.itdecent.cn/p/c438d545f696 他寫得更加詳細(xì)一點(diǎn)
(2)Seurat官方設(shè)置loom格式也是可行方式之一:
參見:http://www.itdecent.cn/p/147da295fc34
將Seurat對象轉(zhuǎn)為loom:
#讀入seurat處理后的rds文件
library(Seurat)
library(SeuratDisk)
library(loomR)
sdata <- readRDS(file = "./seurat_project.rds")
# 在R環(huán)境下將seurat對象轉(zhuǎn)換為loom文件
sdata.loom <- as.loom(x = sdata, filename = "./data.loom", verbose = FALSE)
# Always remember to close loom files when done
sdata.loom$close_all()
在python環(huán)境下讀入loom,成為adata:
import scanpy as sc
adata = sc.read_loom("./data.loom", cleanup=False, X_name='spliced', obs_names='CellID', var_names='Gene', dtype='float32'))
總而言之,經(jīng)個(gè)人使用和實(shí)際操作來說,第二個(gè)存儲(chǔ)成為h5ad的方法時(shí)最好用的、也最友好,除了只能保存一個(gè)assay之外,就都沒問題,但是如果許多保存多個(gè)assay成為anndata中的多個(gè)layer,這就的用手動(dòng)的方法了。
更新
現(xiàn)在有一鍵的工具包了:sceasy。測試過效果還不錯(cuò)