用于存储数据的简单、可靠、开放和可互操作的纯文本格式

机器算法验证 项目管理
2022-01-27 21:38:38

在上一个问题中,我询问了用于编辑CSV 文件的工具。

Gavin 链接到Duncan Murdoch对 R 帮助的评论,该评论 暗示数据交换格式是一种比 CSV 更可靠的数据存储方式。

对于某些应用程序,需要一个专用的数据库管理系统。然而,对于小规模的数据分析项目,更轻量级的东西似乎更合适。

考虑以下评估文件格式的标准:

  • 可靠:输入的数据应与输入的数据保持一致;数据应该在不同的软件中一致地打开;
  • 简单:如果文件格式易于理解并且理想情况下可以使用简单的文本编辑器阅读,那就太好了;编写一个简单的程序来读取和写入格式应该很容易。
  • open : 格式应该是开放的
  • 互操作性:文件格式应该被许多系统支持

我发现制表符和逗号分隔值格式在可靠性标准上失败。虽然我想我可以责怪导入和导出程序而不是文件格式。我经常发现自己不得不对选项进行一些调整, read.table以防止某些奇怪的字符破坏数据框的加载。

问题

  • 哪种文件格式最能满足这些需求?
  • 数据交换格式是更好的选择吗?还是它有自己的问题?
  • 还有其他更好的格式吗?
  • 我是否不公平地评估 TSV 和 CSV?是否有一套简单的技巧来处理这些文件,使文件格式更可靠?
4个回答

我想知道这里是否发生了标准冲突。

关于 Excel、SQL 等文件格式的一个抱怨是,您必须提前定义数据类型才能使其表现良好,这与“更轻量级”的标准背道而驰(因为我理解您的限制是更多时间相关而不是计算相关)。

相反,它不弄乱数据或允许弄乱数据的标准需要一些错误检查。除非您让系统自动神奇地找出数据类型(这本质上是 Excel 让您失败的地方),否则您没有办法吃掉您的蛋糕。

IMO,在这两者中,第二个标准更为重要。一旦违反数据完整性,就会使分析变得困难或不可能。丢失的观察值或无效值(如果未正确检查)可能会搞砸一切。

关于 DIF,实际的原始文本不是人类可读的,并且人类很难 (IMO) 进行数据输入。

IMO,你应该给定界文件一个公平的震动。正如上面评论中提到的,“数据修改”主要是您正在使用的工具子集的错误。行为良好的程序不应破坏分隔文件。重整的最大来源是指定不明确的分隔符。例如,如果您的数据可能包含逗号,则 CSV 是不合适的。如果它可能有标签 TSV 是不合适的。对于许多(但不是全部)程序,您可以指定备用分隔符。例如,我在几个困难的情况下使用了波浪号 (~)。

说真的,我会考虑 R 本身创建的 RData 文件,因为它适合

  • 可靠(检查)
  • 简单(称之为平局——格式是二进制)
  • 开放(检查:没有比 R 源代码更开放)
  • 可互操作(检查:在 R 工作的任何地方都可以工作)

对我来说足够近了。如果系统指的是应用程序而不是操作系统,那么最后一点就是失败。

哦,RData 是高效的,因为现在默认压缩文件(这曾经是默认关闭的选项)。

针对 Dirk Eddelbuettel 的回答,我建议使用HDF5 文件格式它不像 RData 格式那么简单,或者您可能会说“更丰富”,但肯定更具有互操作性(可用于 C、Java、Matlab 等)。我发现涉及大型 HDF5 文件的 I/O 非常快。

我不太确定为什么具有适当元数据的固定文本格式不符合您的标准。它不像分隔符那样简单易读,但无论如何您都需要元数据才能使用信息。编写语法以读取程序的任务仅取决于数据集结构的大小和复杂程度。SPSS 和 Excel 有一个 GUI 来帮助完成这些任务。

我遇到的 CSV 文件只有两个错误:

  1. 缺少没有分隔符的字段(因此该记录中的所有其他字段都放错了位置,我也遇到了 XML 中缺少标签的问题)
  2. 文本字符串中的逗号

(如果您遇到其他问题,请随时举例)

正如 drnexus 建议的那样,使用更不规则的定界符解决了两个问题(管道 (|) 是我以前遇到过的,但波浪号 (~) 的效果也很好,因为它们都不可能包含在字符串字段中。)一个是您使用的任何软件都不容易解决问题,并且两者都是人们开始编写文件的方式的问题,而不是用于读取文件的软件。

我还想说我同意 drnexus 在这个线程上以及他你最近关于编辑这些文件的另一个线程的回应。您似乎在抱怨您使用的软件(尤其是 Excel),并要求以符合您的不良软件的格式存储数据。也许问题应该是如何让 Excel 停止自动格式化纯文本文件。在我看来,您的可靠标准是读取纯文本文件的软件问题。我不使用 R 进行数据管理,但我并没有像您建议的那样在 SPSS 中阅读分隔文件。

如果原始文件没有正确写入,是什么让您期望任何软件能够可靠地读取文件?并且特定的文件格式肯定不会阻止您将数据错误地写入您选择开始使用的任何文件类型。