R中大文件的数据格式是啥?
Posted
技术标签:
【中文标题】R中大文件的数据格式是啥?【英文标题】:What data format for large files in R?R中大文件的数据格式是什么? 【发布时间】:2016-04-25 13:28:07 【问题描述】:我用 Python 生成了一个非常大的数据文件,主要由 0
(false) 和少数 1
(true) 组成。它有大约 700.000 列和 15.000 行,因此大小为 10.5GB。第一行是标题。
然后需要在 R 中读取和可视化该文件。
我正在寻找合适的数据格式来从 Python 导出我的文件。
如here所述:
HDF5 是基于行的。通过使用以下表格,您可以获得很多效率 不太宽,但相当长。
由于我的桌子很宽,我认为 HDF5 不适合我的情况?
那么什么数据格式最适合这个目的呢? 压缩(zip)它也有意义吗?
我的文件示例:
id,col1,col2,col3,col4,col5,...
1,0,0,0,1,0,...
2,1,0,0,0,1,...
3,0,1,0,0,1,...
4,...
【问题讨论】:
最好的选择可能是某种形式的稀疏矩阵表示(即它表示 1 的行和列位置)。 R 中的Matrix
包有很多这样的格式,但我不知道处理与 Python 交换的最佳方法。我不知道 HDF5 是否以合理的方式处理稀疏性。
你可以转置你的矩阵,然后它们会比宽高。听起来像 SNP,所以你应该考虑一下你要用来分析它的软件;也许需要自定义或其他格式。您可以对其进行游程编码,例如 0 0 0 0 0 1 1 0 0 --> 5 2 2;您可能会更好地使用编码 5 7 9 以获得更好的随机访问。这将具有出色的压缩效果,但需要您自己的算法;看看 Bioconductor S4Vectors 中的 Rle 类。 R 将逻辑存储为整数,因此为 42 GB。
@MartinMorgan:转置矩阵到底有什么好处?
@user1170330 你说 HDF5 在长矩阵上效果很好,所以让它们变长......我个人认为这不会是典型的基于 R 的分析中的痛点。
【参考方案1】:
压缩对您没有帮助,因为您必须解压缩才能对其进行处理。如果您可以发布生成文件的代码,那可能会有很大帮助。 另外,你想在 R 中完成什么?在 Python 中可视化它可能会更快,避免 10.5GB 的读/写吗?
也许重新考虑存储数据的方法(例如:存储 1 的坐标,如果很少的话)可能是一个更好的角度。
例如,我可能只存储元组 (600492, 10786) 并在 R 中实现相同的可视化,而不是存储除第 600492 行第 10786 列中的 1 之外的全零的 700K x 15K 表。
【讨论】:
第二个建议,如果只有几个1,只导出坐标会容易得多。 有没有一个例子说明如何做到这一点?还有在 R 中导入此类文件的适当方法吗? Hvaen 没有详细研究它,但将坐标导出到 csv 或 json 似乎合乎逻辑,然后将其导入 R,然后使用 R 中的 Matrix 包创建稀疏矩阵以节省内存在那里。 @user1170330 如果您发布生成文件的 Python 代码,我可以帮助您。【参考方案2】:SciPy 有 scipy.io.mmwrite
,它可以生成 R 的 readMM
命令可以读取的文件。 SciPy 还支持几种不同的sparse matrix representations。
【讨论】:
以上是关于R中大文件的数据格式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
avi文件是啥数据格式,是raw数据,还是被压缩的数据,用的是啥压缩技术?