【发布时间】:2014-09-26 10:04:22
【问题描述】:
我目前正在尝试重新设计我实验室的一般工作流程,并且遇到了一个概念障碍,这主要是由于我普遍缺乏这方面的知识。 我们的数据目前是按照典型的文件系统结构组织的:
日期\单元格#\扫描#
对于特定日期,通常有多个 Cell 文件夹,并且在这些 Cell 文件夹内有多个 Sweep 文件(这些是相对简单的 .csv 文件,其中记录参数单独保存在 .xml 文件中)。因此,在任何 Date 文件夹中,可能有几十到几百个用于当天录制的文件,这些文件组织在多个 Cell 子目录文件夹中。
我们的工作流程通常涉及在一个 Cell 文件夹中打开多个扫描文件,对它们进行平均,然后对来自其他 Cell 文件夹的数据点的这些文件进行平均,通常需要数天时间。
这对于 Pandas 和 Numpy 来说相对简单,尽管在远程访问保存到实验室服务器的文件夹时会有某种“手动”的感觉。我们有时也会遇到问题,因为我们经常需要同时从许多这些文件中提取数据。虽然这通常不是问题,但文件的大小可能在几 MB 到 1000 MB 之间。在后一种情况下,我们必须采取措施不将整个文件加载到内存中(或至少一次不加载多个文件)以避免内存问题。
作为这次重新设计的一部分,我一直在阅读有关用于数据组织和访问可能太大而无法存储在内存中的数据集的 Pytables。所以我想我的两个主要问题是
- 如果内存不足问题不严重(即不会经常使用该实用程序),那么与仅在服务器上维护文件系统相比,使用 Pytables 之类的东西进行数据组织是否有任何显着优势(或本地)?
- 有什么理由不走 Pytables 数据库路线吗?我们正在重新设计我们的数据收集和存储,一种选择是将数据直接收集到 Pandas 数据帧中,并将文件保存为 HDF5 文件类型。我目前正在权衡当前系统的成本/收益,该系统将数据存储到 csv 文件中,然后加载到 Pandas 中以供稍后分析。
我的想法是,通过创建数据库而不是我们当前拥有的文件系统,我们可能 1. 能够通过 hdf5 提供的压缩减少(无论如何)磁盘上的文件大小,以及 2. 访问数据总体上可能会变得更容易,因为基于不同参数的查询能力。但我对 2 的担忧是,最终,由于我们通常只是打开整个文件,因此我们不会过多地利用它来实现功能——我们基本上会执行我们需要执行的相同步骤在文件系统中打开一个文件(或一系列文件)。这让我想知道,就我们的整体工作流程而言,这需要的前期工作是否值得。
【问题讨论】:
标签: python csv organization pytables