关于单细胞的那些存储类型
他的出现一定有他的理由,他的离开也有他的理由
随着单细胞测序数据的增长,如果把数据全部导入内存则占用的内存太大,如何处理这个问题呢,一种思路是不一次直接将数据导入内存,一种是优化内存存储。针对这两种思路们都有相应的包。现在的格式太多了,h5ad,loom,h5seurat,这些格式有什么区别呢?
1、loom和h5seurat
底层都是基于基于HDF5的数据结构,还不明白这两者之间的区别。loom这个包主打的思路就是不一次将数据加载进入内存。后续再填坑。这个链接详细说明了loom的用法,主要的地方在于内置了apply函数,可以多次取数据。关于h5seurat,更多感觉像是一个在seurat对象和anndata之间转换的中间状态。
2、h5ad
这个包是针对python的,底层存储也是HDF5,ad指的是anndata存储格式。这个包在存储的时候很有意思,不像seurat将三种类型的数据"counts","data","scale.data"都存储下来,而是加载counts,然后将counts数据冻结,需要的时候再拿出来,scale只是为了计算PCA等等,计算完之后就可以重新拿出data覆盖scale.data。这个操作还是挺特别的。函数说可以直接对磁盘数据进行操作,但是发现操作很有限,比如说不能进行行和计算,有时间可以比较一下这个和.loom文件的区别。
写在最后
建议使用h5ad文件,速度快,占用内存小,如果数据量实在太大,可以考虑loom,觉得h5ad的磁盘操作做得还不够好。我这边暂时内存够用,所以调研还不够充分,欢迎补充。这篇文章的的出现是因为数据量太大,不调研磁盘操作是因为还不至于那么大。呼应开头,狗头。