管理数据分析项目的依赖关系

时间:2014-12-12 17:30:28

标签: r dependencies dependency-management data-analysis

  

编辑:管道工具可以提供帮助,请参阅awesome list

我正在寻找一种方法来组织一个涉及分析和转换几个相当大的数据集的项目的脚本。脚本和数据依赖性将随着时间的推移而发展,因此组织方案应该是灵活的。此外,我希望从多核架构中受益,并且能够尽可能并行地执行代码。

我打算将分析拆分为单独的R脚本。每个R脚本都将其工作区保存为具有相同名称的.RData文件;此外,每个R脚本可以具有与其他R脚本对应的任意数量的输入依赖项。

哪些工具可以帮我解决这个问题?一般来说,处理此类数据驱动项目的良好做法是什么?

1 个答案:

答案 0 :(得分:1)

我有相似的问题很长一段时间了。搜索了互联网并阅读了几篇关于它的文章和博客文章。最后简单地复制其他人的想法并不适合我,所以我借用并整合了在不同地方发现的几个建议。我可以给出的一个一般性建议是从小开始,随着项目变得越来越复杂而从中添加东西。但始终努力使整个工作空间尽可能模块化,以便您可以在不影响系统其他部分的情况下修改结构的一个小角落。

根据您的描述,我会执行以下操作:

  • 单独的数据和分析。这有几个好处,因为你可以有一个像数据集这样的文件夹,只需将它符号链接到所有相关的项目。
  • 保存每个脚本的每个输出都是有争议的。我倾向于不这样做有以下几个原因:1)它会占用更多的空间2)有时你会想要将其他工具(不仅仅是R)包含在你的工作流程中,并以“.RData”格式保存所有内容将成为一个障碍。保存为更方便的格式,只保存可用/需要的部分。
  • 将代码的可重用部分与“main()”部分分开,该部分仅调用函数,加载输入并保存输出。所以你可以制作像版本控制的“/ src /”之类的东西。加载“数据集”和“src”函数的其他脚本应该转到其他位置。

这与我目前的做法类似:

  • 两个主要文件夹:数据集项目

    • 数据集每个数据集都有一个文件夹。一个数据集的每个文件夹包括几个子文件夹,如:输入,输出,元(根据需要等)。
      • 输入包含您最初收到的所有原始文件。这里没有任何修改。
      • 输出包含运行和预处理数据的所有输出。一般来说,我在输出目录中为我生成的每个输出都有一个单独的文件夹。像output / foo1 / output / foo2 / ..在那些我有脚本生成它们,RData文件等。
      • meta 包含可以描述数据集的所有其他文件(电子邮件,幻灯片,说明等)。
    • 项目每个项目都有一个文件夹。每个项目依次具有以下子文件夹:链接到数据集,输出,其中包含:数据集,分析输出,元信息和可呈现结果(如论文或幻灯片)分别。
      • output 是每个项目中的主文件夹。它包含每个分析执行的一个文件夹。在我放置的文件夹中:Rmd(R-markdown)脚本。这反过来又被编织者转变为降价和数字。然后由您选择的程序(pandoc,multimarkdown等)转换为pdf和html。
  • 主要功能(src)为Analysis和Datasets共享,并受版本控制。你可以用它制作一个包,但我倾向于不这样做。
  • 我还有一个静态内容管理系统和一个简单的脚本,用于搜索html并根据我的项目目录树生成一个带有导航的静态网站,以便快速报告结果。

对于自动化和检查依赖关系,GNU Makefiles可能仍然是最好的选择(我目前不使用它们,但计划)。最后,您可能仍然不希望为整个结构提供一个全局makefile。每次分析(在相应的分析文件夹中)通常是一个更好的主意。


以下是一些人讨论相同的事情以供参考:

  1. https://stats.stackexchange.com/questions/2910/how-to-efficiently-manage-a-statistical-analysis-project。这是SE的交叉验证部分中非常类似的讨论。

  2. http://www.bioinformaticszen.com/post/decomplected-workflows-makefiles/。关于如何将makefile合并到数据分析中的一些描述。

  3. http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1000424。关于项目组织的论文。

  4. http://arkitus.com/patterns-for-research-in-machine-learning/。关于组织项目结构的博客文章。

  5. https://news.ycombinator.com/item?id=4384317。黑客新闻讨论。