单独数据分析师的R和版本控制


155

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

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

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

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

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

采用版本控制还涉及一些潜在成本:

  • 是时候评估和学习版本控制系统了
  • 与我当前的文件管理系统相比,可能会增加复杂性

但是,我仍然觉得自己缺少一些东西。关于版本控制的一般指南似乎更多地针对计算机科学家而不是数据分析师。

因此,特别针对与上述情况类似的数据分析人员

  1. 版本控制值得付出努力吗?
  2. 采用版本控制的主要利弊是什么?
  3. 使用R进行数据分析的版本控制的最佳策略是什么(例如,示例,工作流程构想,软件,指南链接)?


@Marek该帖子很有用。非常感谢。我仍然想知道哪些特定问题(如果有)与数据分析,R和写作研究有关。
Jeromy Anglim

当然,第一个问题的答案是“是”。但是您通常处理哪种类型/大小的数据。大多数CVS系统很难存储二进制数据。
爱德华多·莱昂尼

3
你可能也想看看这个:stackoverflow.com/questions/2286831/...
巴蒂尔

@Eduardo我使用纯文本文件(例如,制表符分隔,固定宽度)和二进制文件(数据库,SPSS,Excel等)混合使用。数据而异:100行的典型实例×500列,以10,000×20〜2,000,000×20。
杰罗米Anglim

Answers:


89

我认为您的问题的答案是肯定的-使用版本控制系统管理文件的好处远远超过了实施这种系统的成本。

我将尝试详细回答您提出的一些观点:

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

是的,我也是。但是,对于依靠通用备份系统适当跟踪与您的工作有关的重要和活动文件的适当性,有一些问题需要考虑。在性能方面:

  • 您的备份系统每隔多长时间拍摄一次快照?
  • 建立快照需要多长时间?
  • 拍摄快照时是否必须对整个硬盘进行映像,或者是否很容易被告知仅备份两个刚刚收到关键更新的文件?
  • 您的备份系统能否准确地向您显示从一个备份到另一个备份的文本文件中发生了什么变化?

最重要的是:

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

例如,有一台Mac,然后使用Time Machine备份到计算机中的另一个硬盘驱动器。如果发生问题,Time Machine非常适合恢复奇数文件或还原我的系统。但是,根本没有什么可以让我的重要工作值得信赖的:

  • 备份时,Time Machine必须对整个硬盘进行映像,这需要花费大量时间。如果我继续工作,则不能保证以启动备份时的状态捕获文件。在第一次备份完成之前,我还想保存一点。

  • 我的Time Machine备份保存到的硬盘驱动器位于我的计算机中-这使我的数据容易受到盗窃,火灾和其他灾难的影响。

使用像Git这样的版本控制系统,我可以毫不费力地启动特定文件的备份,而无需在文本编辑器中请求保存-并且文件可以立即成像并存储。此外,Git是分布式的,因此我使用的每台计算机都具有存储库的完整副本。

这相当于将我的工作镜像到四台不同的计算机上-简直就是天灾人祸,无法破坏我的文件和数据,在这一点上我可能也不太在乎。

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

作为一个独奏家,我也没有那么多钱。但是,我可以选择倒带节省的时间已经单手收回了我在学习版本控制系统上的很多次投资。您说您从未感到过这样做的必要-但在当前备份系统下倒带任何文件确实是一种轻松可行的选择吗?

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

  • 协作:大多数时候,我自己分析数据,因此,我无法获得版本控制的协作优势。

是的,但是如果您最终与项目上的其他人协作,您将学到一种必不可少的工具。

  • 是时候评估和学习版本控制系统了

不必为此担心太多。版本控制系统就像编程语言一样,它们具有一些需要学习的关键概念,其余的只是语法糖。基本上,您学习的第一个版本控制系统将需要花费大量时间才能切换到另一个版本控制系统,而这只需要学习新系统如何表达关键概念即可。

选择一个流行的系统,并为此而努力!

  • 与我当前的文件管理系统相比,可能会增加复杂性

您是否有一个文件夹,例如Projects包含与您的数据分析活动相关的所有文件夹和文件?如果这样的话,那么对其进行版本控制将使文件系统的复杂性增加3个百分点0。如果您的项目散布在计算机上,则应在应用版本控制之前将其集中化,这最终会降低Documents文件管理的复杂性,这就是我们毕竟拥有文件夹的原因。

  1. 版本控制值得付出努力吗?

是! 它为您提供了巨大的撤消按钮,使您可以轻松地在机器之间转移工作,而不必担心丢失USB驱动器之类的事情。

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

我唯一想到的缺点是文件大小略有增加,但是现代版本控制系统可以通过压缩和选择性保存来做绝对令人惊奇的事情,因此这几乎是一个有争议的问题。

3用R进行数据分析的版本控制入门的最佳策略是什么(例如,示例,工作流程构想,软件,指南链接)?

使生成数据或报告的文件在版本控制下保持选择性。如果您使用Sweave,则存储.Rnw文件,而不要存储.tex从文件中生成的文件。如果要重新获取原始数据,请存储原始数据。如果可能,编写并存储一个脚本来获取您的数据,并编写另一个脚本来清理或修改它,而不是存储对原始数据的更改。

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

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


1
+1表示“可能会增加我当前文件管理系统的复杂性”。如果版本控制中放置的项目以及对备份过程中的快照点进行精细级别的控制,则版本控制可能会降低复杂性级别(您也提供了一些说明,这对于按日期而不是按功能或更改进行恢复非常有帮助。 )。
Christopher Hackett 2013年

23

我在一家分析店工作了9年,并向该店介绍了用于我们的分析项目的版本控制的想法。显然,我是版本控制的忠实拥护者。但是,我要指出以下几点。

  1. 如果您要进行分析以便在法庭上使用,则版本控制可能不合适。听起来这并不适合您,但是让客户知道我们曾经生产的每个脚本的每个版本都有可能被发现,这会让我们非常紧张。我们将版本控制用于可在多个约定中重复使用的代码模块,但由于这个原因,我们并未将版本控制用于特定于约定的代码。
  2. 我们发现,版本控制的最大好处来自存储在多个项目中重复使用的代码的固定模块。例如,您可能具有处理某些人口普查PUMS提取数据的特定偏爱方式。将此代码整理到一个目录中,并将其放入VCS中。然后,您可以在需要时将其签入每个新项目。如果您正在对该项目的特定通用数据集进行特殊处理,则为特定项目创建特定代码的特定分支甚至会很有用。然后,当您完成该项目后,请决定将多少特殊代码合并回主分支。
  3. 不要将处理后的数据放入版本控制中。仅代码。我们的目标始终是拥有一整套脚本,以便我们可以删除所有内部处理的数据,按一个按钮并从头开始重新生成报告的每个编号。这是确保您的数据中不存在旧错误的唯一方法。
  4. 为了确保您的结果真正完全可重现,仅将代码保存在VCS中还不够。至关重要的是,密切跟踪使用哪个模块的哪个版本来创建任何特定的可交付成果。
  5. 至于软件,我对Subversion感到很幸运。易于设置和管理。我知道像git和mercurial这样的新型分布式VCS的吸引力,但是我不确定如果您自己工作,是否会有任何强大的优势。另一方面,我也不知道使用它们的负面影响-我只是没有在分析环境中使用它们。

18

为了完整起见,我认为我将提供有关版本控制的最新信息。

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

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

我已经在博客中介绍从数据分析项目的角度来学习版本控制的经验。

如文章所述,我发现采用版本控制在我对数据分析项目的思考中具有许多次要好处,包括澄清以下内容:

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

2
我也从命令行界面开始(很高兴知道),但是我也切换到主要使用RStudio来满足我的R / git需求。它提供了我想要的大多数功能,但有时我需要打开一个终端来执行一些未直接内置在界面中的功能。
戴森2012年

17

我使用R和LaTeX进行经济学研究,并且始终将我的工作置于版本控制之下。就像无限撤消一样。尝试Bazaar,它是最简单的学习和使用方法之一,如果您使用的是Windows,则它具有图形用户界面(TortoiseBZR)。

是的,与其他人一起使用时,版本控制还有其他好处,但是即使在单独项目中,这也是很有意义的。


9

现在,您可能将您的工作视为开发将完成您想要的工作的代码。在采用修订控制系统后,您会认为您的工作是在存储库中写下旧版,并对它进行出色的增量更改。感觉好多了。


7

我仍然建议像您这样的独奏者使用版本控制,因为拥有安全网来捕获错误可能是一件很棒的事情。

我曾经是Java的独立开发人员,但仍然使用源代码控制。如果我不停地检查事情,如果出现问题,我的工作不会超过一个小时。我可以进行实验和重构而不必担心,因为如果出现问题,我总是可以回滚到我的上一个工作版本。

如果是这种情况,我建议您使用源代码管理。不难学习。


7

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

如果要将结果发布到某处,则应该始终能够在生成脚本的那一刻重新构建脚本的状态。假设一位审阅者在您的一个脚本中发现了一个错误:您如何知道哪些结果有效而哪些无效?

从这个意义上说,备份系统是不够的,因为它可能一天只完成一次,并且它不会对不同的备份应用标签,因此您不知道哪个版本对应于哪个结果。学习vcs比您想的要简单,如果学习如何添加文件以及如何提交更改就足够了。


1
您提出了强有力的论据。但是,我认为没有正式的版本控制系统就可以进行可重复的研究。它不那么优雅,也不那么灵活。我尝试使用识字编程原理编写R代码,以便将R输出自动集成到最终文档中。然后可以保存与此最终产品关联的文件。
Jeromy Anglim

这样可以帮助您将整个分析重新应用到数据上,但是并不能告诉您以前的哪些结果受该错误影响。
dalloliogm 2010年

6

版本控制值得付出努力吗?

是的。

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

优点:您可以跟踪以前的工作。对于乳胶特别有用,因为您可能需要一个已被您删除的旧段落!当计算机崩溃或使用新计算机时,您的数据将立即恢复正常。

缺点:您需要进行一些设置。

使用R进行数据分析的版本控制的最佳策略是什么(例如,示例,工作流程构想,软件,指南链接)?

刚开始使用它。我在Windows上使用Torvise SVN作为客户端工具,并且我的部门有一个svn服务器,我将所有代码和数据(是的,您也将数据放在这里!)放在那里。


6

首先退后一步,学习编写R包的好处!您说您的项目中包含几千行代码,但是这些结构或文件的结构并没有像打包代码那样被记录吗?遵循软件包理想,您将大获成功,包括每个功能的文档,对许多常见的难以捕获的错误进行测试,编写自己的测试套件的工具等。

如果您没有纪律来生产软件包,那么我不确定您是否有纪律来进行适当的版本控制。


3
这都是一段旅程,尤其是当您来自非IT背景时。我现在正在使用git,这很棒。我也开始涉猎R软件包基础架构。关于几千行代码,这通常是由于大量的特殊数据处理以及假设驱动的图形和表创建所致。虽然经验使您更容易看到抽象,但是我发现一定数量的特殊代码只是分析心理数据集的一部分。我认为这有助于解释ProjectTemplate包和Sweave的流行。
Jeromy Anglim

5

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

优点;

  • 记录研究成果并进行备份(标记)
  • 它可以让您尝试不同的想法,如果它们不起作用,则返回(分支)
  • 您可以与其他人共享您的工作,他们也可以与您共享他们的更改(我知道您没有指定此项,但这很棒)
  • 大多数版本控制系统都可以轻松地在某个时候为受控文件创建压缩包,例如,在您提交文章以供发布时,这在其他人查看您的文章时会有所帮助。(您可以手动执行此操作,但是为什么要在版本控制完成时组成这些过程)

就工具集而言,尽管您当然不必使用Eclipse,但我使用Git以及StatEtEclipse都可以很好地工作。有一些Eclipse的Git插件,但是我通常使用命令行选项。


我确实将StatET和Eclipse用于R;所以也许我会先尝试git。
Jeromy Anglim

4

用于任何形式的单独开发的版本控制对于以下方面而言确实很有趣:

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

如果您看不到自己在执行这两个基本的版本控制功能之一,则可能只需要一个简单的备份工具。
如果确实需要这些功能,那么您也将获得备份(git bundle例如)


4

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


4

Dropbox具有“ ppor man's”版本控制,可以让您轻松完成工作,并获得许多额外的好处。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.