我尊重的许多数据分析师都使用版本控制。例如:
http://github.com/hadley/请参阅http://permut.wordpress.com/2010/04/21/revision-control-statistics-bleg/上的注释
但是,我正在评估采用诸如 git 之类的版本控制系统是否值得。
简要概述:我是一名社会科学家,使用 R 分析研究出版物的数据。我目前不生产 R 包。我的项目 R 代码通常包括几千行代码,用于数据输入、清理、操作、分析和输出生成。出版物通常使用 LaTeX 编写。
关于版本控制,我读过很多好处,但它们似乎与单独的数据分析师不太相关。
备份:我已经有一个备份系统。
分叉和倒带:我从来没有觉得有必要这样做,但我可以看到它是如何有用的(例如,您正在准备基于同一数据集的多个期刊文章;您正在准备每月更新的报告等)
协作:大多数时候我自己分析数据,因此,我不会得到版本控制的协作好处。
采用版本控制还涉及一些潜在成本:
评估和学习版本控制系统的时间
与我当前的文件管理系统相比,可能会增加复杂性
然而,我仍然觉得我错过了一些东西。版本控制的一般指南似乎更多地针对计算机科学家而不是数据分析师。
因此,在类似于上面列出的情况下,特别是与数据分析师相关:
版本控制值得努力吗?
采用版本控制的主要优点和缺点是什么?
什么是开始使用 R 进行数据分析的版本控制的好策略(例如,示例,工作流想法,软件,指南链接)?
我觉得你的问题的答案是一个响亮的是-使用版本控制系统管理文件的好处远远超过实现这样一个系统的成本。
我将尝试详细回应您提出的一些观点:
备份:我已经有一个备份系统。
是的,我也是。然而,关于依靠通用备份系统来充分跟踪与您的工作相关的重要和活动文件的适当性,有一些问题需要考虑。在性能方面:
您的备份系统以什么时间间隔拍摄快照?
构建快照需要多长时间?
拍摄快照时是否必须对整个硬盘驱动器进行映像,还是可以轻松地告知只备份两个刚刚收到关键更新的文件?
您的备份系统可以准确地向您显示文本文件从一次备份到下一次备份的变化吗?
最重要的是:
备份保存在多少个位置?它们是否与您的计算机位于同一物理位置?
从备份系统还原单个文件的给定版本有多容易?
例如,拥有一台 Mac 并使用 Time Machine 备份到我计算机中的另一个硬盘驱动器。如果事情搞砸了,Time Machine 非常适合恢复奇数文件或恢复我的系统。但是,它根本没有被我的重要工作所信任的条件:
备份时,Time Machine 必须对整个硬盘驱动器进行映像,这需要相当长的时间。如果我继续工作,则无法保证我的文件将在启动备份时的状态下被捕获。我也可能会在第一次备份完成之前达到我想要保存的另一点。
保存我的时间机器备份的硬盘位于我的机器中-这使得我的数据容易被盗,火灾和其他灾难。
使用像 Git 这样的版本控制系统,我可以启动特定文件的备份,而不需要在文本编辑器中请求保存-并且文件被立即映像和存储。此外,Git 是分布式的,因此我工作的每台计算机都有一个完整的存储库副本。
这相当于把我的工作镜像到四台不同的计算机上 — — 只要是上帝的行为就不会我的文件和数据,在这一点上,我可能不会太在意。
分叉和倒带:我从来没有觉得有必要这样做,但我可以看到它是如何有用的(例如,您正在准备基于同一数据集的多个期刊文章;您正在准备每月更新的报告等)
作为独奏者,我也不会花那么多钱。但是,通过选择倒带而节省的时间已经单枪匹马地偿还了我在学习版本控制系统方面的投资。您说您从来没有觉得有必要这样做-但是在当前的备份系统下倒带任何文件真的是一个无痛,可行的选择吗?
有时报告看起来更好 45 分钟,一两个小时前。
协作:大多数时候我自己分析数据,因此,我不会得到版本控制的协作好处。
是的,但是如果你最终在一个项目上与其他人合作,你会学到一个可能被证明是不可或缺的工具。
评估和学习版本控制系统的时间
不要太担心这个。版本控制系统就像编程语言 — — 它们有几个关键概念需要学习,其余的只是语法糖。基本上,你学习的第一个版本控制系统需要投入最多的时间 — — 切换到另一个版本控制系统只需要学习新系统如何表达关键概念。
选择一个流行的系统,去吧!
与我当前的文件管理系统相比,可能会增加复杂性
您是否有一个文件夹,例如Projects
,其中包含与您的数据分析活动相关的所有文件夹和文件?如果是这样,那么对其进行版本控制将使文件系统的复杂性增加0
。
版本控制值得努力吗?
是的!它为您提供了一个巨大的撤消按钮,使您可以轻松地将工作从一台机器转移到另一台机器,而不必担心丢失 USB 驱动器等问题。
2 采用版本控制的主要优点和缺点是什么?
我能想到的唯一的缺点是文件大小略有增加-但现代版本控制系统可以通过压缩和选择性保存来做绝对惊人的事情,所以这几乎是一个有争议的问题。
3 使用 R 进行数据分析的版本控制入门的好策略是什么(例如,示例,工作流思想,软件,指南链接)?
将生成数据或报告的文件置于版本控制之下,要有选择性。如果您使用的是Sweave
之类的文件,请存储您的.Rnw
文件,而不是从中生成的.tex
文件。如果重新获取数据很麻烦,请存储原始数据。如果可能,请编写并存储一个脚本来获取数据,另一个脚本清理或修改数据,而不是存储对原始数据的
至于学习版本控制系统,我强烈推荐 Git 和this guide。
这些网站也有一些很好的提示和技巧,与使用 Git 执行特定操作有关:
http://www.gitready.com/ http://progit.org/blog.html我在一家分析商店工作了xx年,并向该商店介绍了我们分析项目的版本控制思想。显然,我非常相信版本控制。但是,我会提出以下几点。
我们对在多个项目中重复使用的代码模块使用了版本控制,但由于这个原因,我们没有对项目特定的代码使用版本控制。
我们发现版本控制的最大好处来自存储在多个项目中重复使用的代码的罐装模块。例如,您可能有一种特别喜欢的处理某些 Census PUMS 提取的方式。将此代码组织到一个目录中,并将其放入您的 VCS。然后,您可以在每次需要时将其签出到每个新项目中。如果您正在对某个项目进行特殊处理,那么为该项目创建特定代码的特定分支可能会很
不要将处理后的数据放入版本控制中。只有代码。我们的目标始终是拥有一套完整的脚本,以便我们可以删除所有内部处理的数据,按一个按钮,并从头开始重新生成报告的每个数字。这是确保您的数据中不会神秘地存在旧错误的唯一方法。
为了确保你的结果是完全可复制的,仅仅将你的代码保存在 VCS 中是不够的。仔细跟踪哪些模块的哪个版本用于创建任何特定的可交付成果是至关重要的。
至于软件,我在 Subversion 上运气不错。它很容易设置和管理。我认识到 git 和 mercurial 等新型分布式 VCS 的吸引力,但是如果您自己工作,我不确定是否有任何强大的优势。另一方面,我也不知道使用它们有什么负面影响-我只是没有在分析环境中使用它们。
为了完整起见,我想我会提供一个关于我采用版本控制的更新。
我发现单独数据分析项目的版本控制非常有用。
我已经采用 git 作为我的主要版本控制工具。我首先开始在 Eclipse 中使用 Egit with StatET。现在我一般只使用命令行界面,尽管与 RStudio 的集成相当不错。
我已经从数据分析项目的角度写了关于我的经验的博客getting set up with version control。
正如帖子中所述,我发现采用版本控制在我如何看待数据分析项目方面有许多次要好处,包括澄清:
源文件和派生文件之间的区别
依赖关系的性质:
代码元素之间的依赖关系
项目中文件之间的依赖关系
以及与存储库外部的文件和程序的依赖关系
存储库的性质以及应如何划分存储库
提交和记录变更和项目里程碑的性质
我使用 R 和 LaTeX 做经济学研究,我总是把我的工作置于版本控制之下。这就像有无限的撤消。试试 Bazaar,它是最简单的学习和使用之一,如果你在 Windows 上它有一个图形用户界面 (TortoiseBZR)。
是的,在与他人合作时,版本控制还有其他好处,但即使在单独的项目中,它也很有意义。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(38条)