自动记录数据集

时间:2011-11-02 11:30:46

标签: r metadata yaml roxygen

我正在研究一个项目,我正在慢慢地从一堆不同的来源中积累一堆不同的变量。作为一个有点聪明的人,我在主“original_data”目录下为每个子目录创建了一个不同的子目录,并包含一个.txt文件,其中包含我从中获取数据的URL和其他描述符。作为一个不够聪明的人,这些.txt文件没有结构。

现在,我面临着编译一个记录所有不同数据源的方法部分的任务。我愿意经历并为数据添加结构,但之后我需要找到或构建一个报告工具来扫描目录并提取信息。

这似乎是ProjectTemplate已经存在的东西,但我似乎无法在那里找到那些功能。

这样的工具是否存在?

如果没有,应该考虑哪些因素才能提供最大的灵活性?一些初步想法:

  1. 应该使用标记语言(YAML?)
  2. 应扫描所有子目录
  3. 为方便(2),应使用数据集描述符的标准扩展
  4. 重要的是,为了使这个最有用,需要有一些方法来将变量描述符与它们最终采用的名称进行匹配。因此,要么所有重命名变量都必须在源文件中完成,而不是在清理步骤中完成(不太理想),文档引擎必须完成一些代码解析以跟踪变量名称更改(呃!),或者某些应该使用更简单的混合,例如允许在标记文件中指定变量重命名。
  5. 理想情况下,报告也会被模板化(例如“我们从[日期]上的[dset]数据集中提取[var]变量。”),并且可能与Sweave相关联。
  6. 该工具应足够灵活,不会过于繁琐。这意味着最小文档只是一个数据集名称。

1 个答案:

答案 0 :(得分:17)

这是一个非常好的问题:人们应该非常关注数据收集,聚合,转换等所有序列,这些都构成了统计结果的基础。不幸的是,这种做法并没有得到广泛实施。

在解决您的问题之前,我想强调的是,这似乎与管理数据来源的总体目标密切相关。我不妨给你一个Google link来阅读更多内容。 :)您可以找到许多资源,例如调查,软件工具(例如维基百科条目中列出的一些),各种研究项目(例如Provenance Challenge)等等。

这是一个概念性的开端,现在是为了解决实际问题:

  

我现在正在开展一个项目,我从一堆不同的来源慢慢积累了一堆不同的变量。作为一个有点聪明的人,我在主" original_data"下创建了一个不同的子目录。目录,并包含一个.txt文件,其中包含我从中获取数据的URL和其他描述符。作为一个不够聪明的人,这些.txt文件没有结构。

欢迎大家的噩梦。 :)

  

现在,我面临着编译一个记录所有不同数据源的方法部分的任务。我愿意经历并为数据添加结构,但之后我需要找到或构建一个报告工具来扫描目录并提取信息。

没问题。 list.files(...,recursive = TRUE)可能会成为好朋友;另请参阅listDirectory()中的R.utils

值得注意的是,填写数据源的方法部分是数据来源中的一个狭窄的应用程序。事实上,CRAN Task View on Reproducible Research仅关注文档是非常不幸的。根据我的经验,数据来源的目标是可重复研究的一个子集,数据处理和结果的文档是数据来源的子集。因此,这个任务观点在可重复研究方面仍处于起步阶段。它可能对你的目标有用,但你最终会超过它。 :)

  

这样的工具是否存在?

是。什么是这样的工具? Mon dieu ...一般来说它非常以应用为中心。在R中,我认为这些工具没有得到太多关注(*见下文)。这很不幸 - 或者我错过了什么,或者R社区遗漏了我们应该使用的东西。

对于您所描述的基本流程,我通常会使用JSON(请参阅this answerthis answer以获取有关我的最新动态的评论)。对于我的大部分工作,我将其表示为数据流模型" (顺便说一句,这个术语可能含糊不清,特别是在计算环境中,但我的意思是从统计分析的角度来看)。在许多情况下,这个流程是通过JSON描述的,因此从JSON中提取序列以解决特定结果的产生并不困难。

对于更复杂或受监管的项目,JSON是不够的,我使用数据库来定义数据的收集,转换等方式。对于受监管的项目,数据库可能包含大量的身份验证,日志记录等等。确保数据来源得到充分记录。我怀疑那种数据库远远超出了你的兴趣,所以让我们继续......

  

1.应该使用标记语言(YAML?)

坦率地说,无论你需要描述什么数据流都是足够的。大多数时候,我发现有足够好的JSON,良好的数据目录布局和良好的脚本排序。

  

2.应扫描所有子目录

完成:listDirectory()

  

3.为方便(2),应使用数据集描述符的标准扩展

琐碎:" .json"。 ;-)或者" .SecretSauce"也有效。

  

4.重要的是,为了使这个最有用,需要有一些方法来将变量描述符与它们最终采用的名称进行匹配。因此,要么所有重命名变量都必须在源文件中完成,而不是在清理步骤中完成(不太理想),文档引擎必须完成一些代码解析以跟踪变量名称更改(呃!),或者某些应该使用更简单的混合,例如允许在标记文件中指定变量重命名。

如上所述,这并没有多大意义。假设我采用var1var2,并创建var3var4。也许var4只是var2到其分位数的映射,var3var1var2的观察最大值。或者我可以通过截断极值来从var4创建var2。如果我这样做,我会保留var2的名称吗?另一方面,如果您指的是简单匹配长名称"用"简单的名字" (即R变量的文本描述符),这是你可以做的事情。如果您有非常结构化的数据,那么创建与变量名称匹配的文本名称列表并不困难;或者,您可以创建可以执行字符串替换的标记。我认为很难创建一个将变量名称与描述符匹配的CSV(或者,更好的是,JSON ;-))。只需继续检查所有变量是否具有匹配的描述符字符串,并在完成后停止。

  

5.理想情况下,报告也会被模板化(例如"我们从[日期]的[dset]数据集中提取[var]变量。"),并且可能链接到Sweave

其他人' roxygenroxygen2的建议可以适用。

  

6.该工具应该足够灵活,不会过于繁琐。这意味着最小文档只是一个数据集名称。

嗯,我在这里难过。 :)

(*)顺便说一句,如果您想要一个与此相关的FOSS项目,请查看Taverna。在几个地方已经记录了integrated with R。目前这可能对您的需求有些过分,但作为一个相当成熟的工作流程系统的一个例子值得研究。


注1:因为我经常将bigmemory用于大型数据集,所以我必须为每个矩阵的列命名。它们存储在每个二进制文件的描述符文件中。该过程鼓励创建将变量名称(和矩阵)与描述符匹配的描述符。如果将数据存储在支持随机访问和多个R / W访问的数据库或其他外部文件中(例如,内存映射文件,HDF5文件,除.rdat文件之外的任何文件),您可能会发现添加描述符成为第二天性。