独立数据分析员的 R 和版本控制

我所尊重的许多数据分析师都使用版本控制。 例如:

但是,我正在评估采用诸如 git 之类的版本控制系统是否值得。

简要概述: 我是社会科学家,用 R 分析研究出版物的数据。 我目前不生产 R 包。 我的项目 R 代码通常包括几千行用于数据输入、清理、操作、分析和输出生成的代码。 发布通常使用 LaTeX 编写。

关于版本控制,我已经读到了很多好处,但是它们似乎与单独的数据分析师关系不大。

  • 备份: 我已经有了一个备份系统。
  • 分叉和倒带: 我从来没有觉得有必要这样做, 但是我可以看到它是如何有用的(例如,你正在准备多个 基于同一数据集的期刊文章; 你正在准备一份报告 每月更新等)
  • 合作: 大多数时候我是 我自己分析数据,因此,我 不会得到合作 版本控制的好处。

采用版本控制还有几个潜在的成本:

  • 评估和学习版本控制系统的时间
  • 可能会比我当前的文件管理系统更复杂

然而,我仍然觉得我错过了什么。 版本控制的一般指南似乎更多地针对计算机科学家,而不是数据分析人员。

因此,特别是在类似上述情况下的 与数据分析员有关:

  1. 版本控制值得吗?
  2. 采用版本控制的主要利弊是什么?
  3. 什么是开始使用版本控制的好策略 使用 R 进行数据分析(例如,示例、工作流思路、软件、指南链接) ?
44689 次浏览

我仍然建议像你这样的独奏版本控制,因为有一个安全网捕捉错误可以是一件伟大的事情。

我曾经是一个独立的 Java 开发人员,现在仍然使用源代码控制。如果我不断检查东西,我不能失去超过一个小时的工作,如果出了问题。我可以不用担心地进行试验和重构,因为如果出了问题,我总是可以回滚到最后一个工作版本。

如果是这样的话,我建议你使用源代码控制,这并不难学。

我使用 R 和 LaTeX 进行经济学研究,我总是将我的工作置于版本控制之下。这就像是无限制的撤销。试试 Bazaar,它是最简单的学习和使用工具之一,如果你使用的是 Windows 系统,它还有一个图形用户界面(tortoiseBZR)。

是的,当与他人合作时,版本控制还有额外的好处,但是即使是在单独的项目中,它也有很大的意义。

一个独立开发的版本控制(任何类型)是非常有趣的:

  • 探索历史,比较当前的工作和过去的提交
  • 分支 并为同一组文件尝试不同的版本

如果您没有看到自己正在执行这两个基本版本控制特性中的一个,那么您可能只需要一个简单的备份工具。
如果您确实需要这些特性,那么您也将获得备份(例如使用 译自: 美国广播公司网站(git bundle))

我也做单独的脚本工作,我发现它使事情更简单,而不是使它们更复杂。备份集成到编码工作流中,不需要单独的一组文件系统过程。学习任何版本控制系统的基础知识所花费的时间肯定是值得的。

您必须使用版本控制软件,否则您的分析将无法完全重现。

如果您想在某个地方发布您的结果,那么您应该总是能够在生成脚本的那一刻重建它们的状态。让我们假设一个评审人员在您的一个脚本中发现了一个错误: 您如何知道哪些结果受到影响,哪些不受影响?

从这个意义上说,备份系统是不够的,因为它可能每天只做一次,而且它不会对不同的备份应用标签,所以您不知道哪个版本对应哪个结果。如果学习如何添加文件以及如何提交更改,那么学习 vcs 比你想象的要简单得多。

现在,您可能认为您的工作是开发能够完成您希望它完成的任务的代码。在使用修订控制系统之后,您将认为您的工作是在存储库中写下遗产,并对其进行卓越的增量更改。感觉好多了。

版本控制值得吗?

一个大大的“是”。

采用版本控制的主要利弊是什么?

优点: 可以跟踪以前做过的事情。特别有用的乳胶,因为你可能需要一个旧段落,被你删除!当你的计算机崩溃或者你在使用一台新的时候,你的数据就会随时恢复。

缺点: 你需要做一些设置。

对于使用 R 进行数据分析的版本控制(例如,示例、工作流想法、软件、指南链接) ,什么是一个好的策略?

开始用吧。我在 windows 上使用 tortoise SVN 作为客户端工具,我的部门有一个 SVN 服务器,我把我所有的代码和数据(是的,你也把你的数据放在那里!)那里。

我觉得你的问题的答案是肯定的——用版本控制系统管理文件的好处远远大于实现这样一个系统的成本。

我将试图对你提出的一些观点作出详细回应:

  • 备份: 我已经有了一个备份系统。

是的,我也是。然而,关于依赖通用备份系统来充分跟踪与您的工作相关的重要和活跃文件是否合适,还有一些问题需要考虑。在表演方面:

  • 您的备份系统每隔多长时间进行一次快照?
  • 构建快照需要多长时间?
  • 它是否需要在拍摄快照时将您的整个硬盘进行成像,或者仅仅备份两个刚刚接收到关键更新的文件?
  • 备份系统能够精确地显示文本文件中从一个备份到下一个备份的变化吗?

最重要的是:

  • 备份保存在多少个位置? 它们是否与您的计算机位于同一物理位置?
  • 从备份系统恢复单个文件的给定版本有多容易?

例如,有一台 Mac 电脑,并使用时间机器备份到另一个硬盘驱动器在我的计算机。时间机器是伟大的恢复奇怪的文件或恢复我的系统,如果事情搞砸了。然而,在我的重要工作中,它根本不值得信任:

  • 备份时,时间机器必须对整个硬盘进行成像,这需要相当长的时间。如果我继续工作,就不能保证我的文件会以启动备份时的状态被捕获。在第一个备份完成之前,我也可能到达另一个我想要保存的点。

  • 我的时间机器备份保存在我的机器的硬盘驱动器-这使我的数据容易被盗窃,火灾和其他灾难。

使用像 Git 这样的版本控制系统,我可以启动特定文件的备份,而不需要在文本编辑器中请求保存——文件可以立即成像和存储。此外,Git 是分布式的,这样我工作的每台计算机都有一个完整的存储库副本。

这相当于让我的工作在四台不同的计算机上进行镜像——除了上帝的行为,没有什么能够摧毁我的文件和数据,在这一点上,我可能不会太在意。

  • 分叉和倒带: 我从未觉得有必要这样做,但我可以看到它可能是有用的(例如,你正在准备基于同一数据集的多篇期刊文章; 你正在准备一份每月更新的报告,等等)

作为一个独奏者,我也不会付那么多钱。然而,我通过选择倒带节省的时间已经单枪匹马地回报了我在学习版本控制系统上的投资很多很多次。你说你从来没有觉得需要这样做-但是在你当前的备份系统下倒回任何文件真的是一个无痛苦的,可行的选择吗?

有时候45分钟前,一两天前的报告看起来会更好。

  • 合作: 大多数时候我是 我自己分析数据,因此,我 不会得到合作 版本控制的好处。

是的,但是如果您最终在一个项目中与其他人合作,那么您将学到一种可能被证明是不可或缺的工具。

  • 评估和学习版本控制系统的时间

别太担心这个。版本控制系统类似于编程语言——它们有一些关键的概念需要学习,其余的只是语法糖。基本上,您学习的第一个版本控制系统将需要投入最多的时间-切换到另一个只需要学习新系统如何表达关键概念。

选择一个流行的系统,并为它去!

  • 可能会比我当前的文件管理系统更复杂

您是否有一个文件夹,比如说 Projects,其中包含与您的数据分析活动相关的所有文件夹和文件?如果是这样的话,那么对它进行版本控制将会增加文件系统的复杂性,正好是 0。如果您的项目散布在您的计算机上-那么您应该在应用版本控制之前将它们集中起来,这将最终导致 减少管理您的文件的复杂性-这就是为什么我们有一个 Documents文件夹毕竟。

  1. 版本控制值得吗?

太棒了!它提供了一个巨大的撤销按钮,让您可以轻松地将工作从一台机器转移到另一台机器,而不用担心丢失 USB 驱动器之类的事情。

2采用版本控制的主要利弊是什么?

我能想到的唯一缺点是文件大小的轻微增加——但是现代版本控制系统可以通过压缩和选择性保存做到绝对惊人的事情,所以这是一个没有意义的问题。

3对于使用 R 进行数据分析的版本控制(例如,示例、工作流想法、软件、指南链接) ,什么是一个好的策略?

将生成数据或报表的文件置于版本控制之下,要有选择性。如果您正在使用类似于 Sweave的东西,请存储您的 .Rnw文件,而不是由它们生成的 .tex文件。存储原始数据,如果重新获取这些数据会很麻烦的话。如果可能,编写和存储一个脚本来获取数据,另一个脚本来清理或修改数据,而不是存储对原始数据的更改。

至于学习版本控制系统,我强烈推荐 Git 和 这本指南

这些网站还提供了一些与使用 Git 执行特定操作相关的技巧:

我同意上面的观点,并且说,是的,版本控制是有用的。

优点;

  • 保持你的研究记录和备份,(标签)
  • 它可以让你尝试不同的想法出去,如果他们不工作回来(分支)
  • 你可以与其他人分享你的工作,他们也可以与你分享他们对工作所做的改变(我知道你没有详细说明这一点,但这很好)
  • 大多数版本控制系统都可以很容易地为所有受控文件创建一个压缩包,例如,在您提交文章发表的时候,这可以帮助其他人查看您的文章。(您可以手动完成这项工作,但是为什么要在版本控制完成这项工作的情况下完成这些流程呢?)

在工具集方面,我使用 饭桶,以及工作得很好的 状态日食,尽管您当然不必使用 Eclipse。有一些 Eclipse 的 Git 插件,但我通常使用命令行选项。

我在一家分析工作室工作了九年,并向那家工作室介绍了我们的分析项目版本控制的想法。显然,我非常相信版本控制。不过,我想说明以下几点。

  1. 如果您正在进行分析以便在法庭上使用,则版本控制可能不合适。听起来这不适用于你,但这会让我们的客户非常紧张,因为他们知道我们制作的每一个脚本的每一个版本都有可能被发现。出于这个原因,我们对在多个项目中重用的代码模块使用了版本控制,但是没有对特定于项目的代码使用版本控制。
  2. 我们发现版本控制的最大好处来自于存储可以跨多个项目重用的代码模块。例如,您可能有一种特别喜欢的处理某些人口普查 PUMS 提取的方法。将此代码组织到一个目录中,并将其放入您的 VCS 中。然后,您可以在每次需要时将其签入到每个新项目中。如果您正在对某个项目的特定公共数据集进行特殊处理,那么为该项目创建特定代码的特定分支甚至可能是有用的。然后,当您完成该项目时,决定将多少特殊代码合并回主分支。
  3. 不要将处理过的数据放入版本控制中。只有密码。我们的目标始终是拥有一套完整的脚本,这样我们就可以删除所有内部处理的数据,按一个按钮,然后从头开始重新生成报表的每个数字。这是确保您的数据中不存在神秘的老 bug 的唯一方法。
  4. 为了确保结果真的是完全可重现的,仅仅将代码保存在 VCS 中是不够的。关键是要仔细跟踪哪个版本的模块被用来创建任何特定的交付品。
  5. 至于软件,我在 Subversion 上运气不错。它易于设置和管理。我认识到新式的分布式 VCS 的吸引力,比如 git 和 mercurial,但我不确定如果您自己工作的话有什么强大的优势。另一方面,我也不知道使用它们有什么不好的地方——我只是没有在分析环境中使用过它们。

为了完整起见,我想我应该提供一个版本控制的更新。

我发现独立数据分析项目的版本控制非常有用。

我已经采用了 git 作为我的主要版本控制工具。我首先开始在 Eclipse 中使用 Egit 和 StatET。现在我通常只使用命令行界面,尽管与 rStudio 的集成非常好。

我在博客中从数据分析项目的角度讲述了我的经历 设置版本控制

正如在文章中所说,我发现采用版本控制对我如何看待数据分析项目有很多次要的好处,包括澄清:

  • 源文件和派生文件之间的区别
  • 依赖关系的性质:
    • 代码元素之间的依赖关系
    • 项目中文件之间的依赖关系
    • 以及与存储库外部的文件和程序的依赖关系
  • 存储库的性质以及如何划分存储库
  • 提交和记录变更和项目里程碑的性质

先退后一步,学习编写 R 包的优势!你说你有几千行代码的项目,但是这些不像包代码那样是结构化的或者文档化的?通过遵循包的理念,您可以获得巨大的成功,包括每个函数的文档,许多通常难以捕捉的错误的测试,编写您自己的测试套件等等。

如果您不具备生成软件包的纪律,那么我不确定您是否具备进行适当的修订控制的纪律。

Dropbox 有一个“ ppor man’s”版本控制,它可以让你在付出很少努力的同时获得很多额外的好处。

毫无疑问,版本控制是值得的。版本控制允许您解决分析师面临的常见问题。 比如说,你的代码过去运行得更快。使用版本控制,您可以回到项目的过去状态。并使用旧版本运行快速代码。

版本控制跟踪存储库、一组文件和文件夹的保存历史。版本控制为该存储库的每个保存版本分配一个提交。您可以很容易地跟踪提交的演变。并了解每个存储库版本的特征。您可以将新开发的特性与旧的快速代码合并。

将来您可能会面临更多的版本控制。特别是如果你在数据分析方面有长远打算的话。我鼓励你学习它。安装 git 并跟踪一个存储库。学会承诺。你很快就会发现许多有用的用途。