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

Jer*_*lim 149 git version-control r

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

但是,我正在评估采用像git这样的版本控制系统是否值得.

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

关于版本控制,我已经阅读了许多好处,但它们似乎与独立数据分析师的相关性较低.

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

采用版本控制还涉及几个潜在成本:

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

但是,我仍然觉得我错过了什么.关于版本控制的一般指南似乎比数据分析师更多地针对计算机科学家.

因此,特别在类似于上面列出的情况下的数据分析师:

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

Sha*_*pie 83

我觉得你的问题的答案是肯定的 - 使用版本控制系统管理文件的好处远远超过实现这样一个系统的成本.

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

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

是的,我也一样.但是,对于依赖通用备份系统来充分跟踪与您的工作相关的重要和活动文件的适当性,需要考虑一些问题.在表现方面:

  • 您的备份系统以什么时间间隔拍摄快照?
  • 构建快照需要多长时间?
  • 是否必须在拍摄快照时对整个硬盘进行映像,或者是否可以轻松告知只备份刚收到关键更新的两个文件?
  • 您的备份系统能否准确地向您显示文本文件中从一个备份到下一个备份的更改?

最重要的是:

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

例如,有一台Mac并使用Time Machine备份到我的计算机中的另一个硬盘驱动器.如果事情搞砸了,Time Machine非常适合恢复奇怪的文件或恢复我的系统.然而,它根本没有我的重要工作所需要的东西:

  • 备份时,Time Machine必须对整个硬盘进行映像,这需要相当长的时间.如果我继续工作,则无法保证在我启动备份时的状态下捕获我的文件.在第一次备份完成之前,我也可能想要保存另一个点.

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

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

这相当于让我的工作在四台不同的计算机上进行镜像 - 没有任何上帝的行为可能会破坏我的文件和数据,此时我可能不会太在意.

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

作为独奏家,我也不会那么多.然而,我通过选择倒带而节省的时间已经单独支付了我多次学习版本控制系统的投资.你说你从来没有觉得有必要这样做 - 但是在你当前的备份系统下重写任何文件真的是一个无痛,可行的选择吗?

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

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

是的,但如果您最终在项目中与其他人合作,您将学习一种可能被证明是必不可少的工具.

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

不要太担心这个.版本控制系统就像编程语言一样 - 它们有一些需要学习的关键概念,其余的只是语法糖.基本上,您学习的第一个版本控制系统需要投入大部分时间 - 转换到另一个版本,只需要了解新系统如何表达关键概念.

选择一个受欢迎的系统,然后去吧!

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

你有一个文件夹,比如Projects包含与你的数据分析活动相关的所有文件夹和文件吗?如果是这样,那么对其进行版本控制就会严重增加文件系统的复杂性0.如果您的项目遍布计算机 - 那么您应该在应用版本控制之前集中它们,这最终会降低管理Documents文件的复杂性 - 这就是为什么我们有一个文件夹.

  1. 版本控制是值得的吗?

是! 它为您提供了一个巨大的撤销按钮,使您可以轻松地将工作从一台机器转移到另一台机器,而无需担心丢失USB驱动器等问题.

2采用版本控制的主要优点和缺点是什么?

我唯一能想到的是文件大小的略微增加 - 但是现代版本控制系统可以通过压缩和选择性保存来完成绝对令人惊奇的事情,所以这几乎没有实际意义.

3使用R开始使用版本控制进行数据分析的好策略是什么(例如,示例,工作流程思路,软件,指南链接)?

保持在版本控制下生成数据或报告的文件是有选择性的.如果您正在使用类似的东西Sweave,请存储您的.Rnw文件而不是.tex从它们生成的文件.存储原始数据,如果重新获取会很痛苦.如果可能,编写并存储一个用于获取数据的脚本,另一个用于清理或修改数据的脚本,而不是存储对原始数据的更改.

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

这些网站还有一些与使用Git执行特定操作相关的好技巧和窍门:


Dan*_*nes 23

我在一家分析工作室工作了九年,并向我们的分析项目介绍了版本控制的概念.显然,我是版本控制的忠实信徒.不过,我会提出以下几点.

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


小智 17

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

是的,与其他人合作时版本控制还有其他好处,但即使是单独的项目也很有意义.


Jer*_*lim 17

为了完整起见,我想我会提供有关采用版本控制的最新信息.

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

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

我从博客中了解从数据分析项目的角度设置版本控制的经验.

正如帖子中所述,我发现采用版本控制在我对数据分析项目的思考方面有很多次要的好处,包括澄清:

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

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

Ken*_*ams 9

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


duf*_*ymo 7

我仍然会推荐像你这样的独奏行为的版本控制,因为有一个安全网来捕捉错误可能是一件好事.

我曾经是一名独立的Java开发人员,我仍然使用源代码控制.如果我一直在检查事情,如果出现问题,我不能失去一个多小时的工作.我可以毫不担心地进行实验和重构,因为如果它出错了我可以随时回滚到我上一个工作版本.

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


dal*_*ogm 7

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

如果要在某处发布结果,则应始终能够在生成脚本时重建脚本的状态.假设其中一个评论者在你的一个剧本中发现了一个错误:你怎么知道哪些结果有效?哪些不是?

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


Yin*_*Zhu 6

版本控制是值得的吗?

一个很大的问题.

采用版本控制的主要优点和缺点是什么?

专业人士:您可以追踪您之前所做的事情.特别适用于乳胶,因为您可能需要一个被您删除的旧段落!当您的计算机崩溃或您使用新计算机时,您可以随时恢复数据.

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

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

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


Spa*_*man 6

先回过头来,了解编写R包的优点!你说你有几千行代码的项目,但这些没有像包代码一样的结构或文档?您可以获得符合包理想的大奖,包括每个函数的文档,许多常见难以捕获的错误的测试,编写自己的测试套件的工具等.

如果你没有纪律来制作一个包,那么我不确定你是否有纪律来进行适当的修订控制.

  • 这是一段旅程,特别是当你来自非IT背景时.我现在正在使用git,它很棒.我也开始涉足R包基础设施.关于1000行代码,这通常是由大量特殊数据处理和假设驱动的图形和表创建引起的.虽然经验使得更容易看到抽象,但我发现一定数量的特殊代码只是分析心理数据集的一部分.我认为这有助于解释ProjectTemplate包和Sweave的流行度. (3认同)

Pau*_*yuk 5

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

好处;

  • 保持您的研究记录和备份,(标记)
  • 它可以让你尝试不同的想法,如果它们不起作用就回去(分支)
  • 您可以与其他人分享您的工作,他们可以与您分享他们的更改(我知道您没有指定,但它很棒)
  • 大多数版本控制系统可以轻松地为某个受控制的文件创建压缩包,例如在您提交文章以供发布时,这可以在其他人审阅您的文章时提供帮助.(你可以手动执行此操作,但为什么在版本控制时才编写这些进程)

在工具集方面,我使用Git,以及运行良好的StatEtEclipse,尽管您当然不必使用Eclipse.Eclipse有一些Git插件,但我通常使用命令行选项.