首页 文章

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

提问于
浏览
143

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

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

A brief overview: I 'm a social scientist who uses R to analyse data for research publications. I don' t目前 生产环境 R包 . 我的项目R代码通常包括几千行代码,用于数据输入,清理,操作,分析和输出生成 . 出版物通常使用LaTeX编写 .

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

  • Backup: 我已经有一个备用系统了 .

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

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

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

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

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

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

因此,特别是在类似于上面列出的情况下 in relation to data analysts

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

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

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

13 回答

  • 4

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

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

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

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

    • 备份系统以什么时间间隔拍摄快照?

    • 构建快照需要多长时间?

    • 拍摄快照时是否必须对整个硬盘进行映像,或者是否可以轻松告知只备份刚接收到关键更新的两个文件?

    • 您的备份系统能否准确地向您显示文本文件中从一个备份到下一个备份的更改?

    最重要的是:

    • 保存的备份位置是多少?它们与您的计算机位于同一物理位置吗?

    • 从备份系统恢复单个文件的给定版本有多容易?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    您是否有一个文件夹,例如 Projects ,其中包含与您的数据分析活动相关的所有文件夹和文件?如果是这样的话,那么对其进行版本控制就会使文件系统的复杂性完全增加 0 . 如果你的项目遍布你的计算机 - 那么你应该在应用版本控制之前将它们集中在一起,这将最终管理你的文件的复杂性 - 这就是我们毕竟有一个 Documents 文件夹的原因 .

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

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

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

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

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

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

    至于学习版本控制系统,我强烈推荐Git和this guide .

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

  • 9

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

    • 如果您正在进行分析以便在法庭上使用,则版本控制可能不合适 . 这听起来并不适用于你,但它会让我们的客户非常紧张地知道我们曾经制作过的每个剧本的每个版本都是可以被发现的 . 我们对在多次约定中重复使用的代码模块使用了版本控制,但由于这个原因,我们没有对特定于订阅的代码使用版本控制 .

    • 我们发现版本控制的最大好处来自于存储在多个项目中重复使用的代码模块 . 例如,您可能有一种特别喜欢的方式来处理某些Census PUMS提取 . 将此代码组织到一个目录中并将其放入VCS中 . 然后,您可以在每次需要时将其检入每个新项目 . 如果要对该项目的特定公共数据集进行特殊处理,则为某个项目创建特定代码的特定分支甚至可能很有用 . 然后,当您完成该项目时,请确定要将多少特殊代码合并回主分支 .

    • Don 't put processed data into version control. Only code. Our goal was always to have a complete set of scripts so that we could delete all of our internally processed data, push a button, and have every number for the report regenerated from scratch. That'是唯一可以确保您的数据中没有旧的错误生存的方法 .

    • 为确保结果真正完全可重现,仅将代码保存在VCS中是不够的 . 仔细跟踪使用哪个模块版本来创建任何特定的可交付成果至关重要 .

    • 至于软件,我对Subversion好运 . 它易于设置和管理 . 我认识到新奇的分布式VCS的吸引力,比如git和mercurial,但我知道使用它们有任何负面影响 - 我只是没有在分析环境中使用过它们 .

  • 17

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

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

  • 6

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

    我已经找到单独数据分析项目的版本控制非常有用 .

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

    我从数据分析项目的角度写了关于我的经验getting set up with version control的博客 .

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

    • 源文件和派生文件之间的区别

    • 依赖性的本质:

    • 代码元素之间的依赖关系

    • 项目中文件之间的依赖关系

    • 以及与存储库外部的文件和程序的依赖关系

    • 存储库的性质以及如何划分存储库

    • 提交和记录变更和项目里程碑的性质

  • 4

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

  • 6

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

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

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

  • 23

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

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

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

  • 17

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

    一个很大的问题 .

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

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

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

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

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

  • 4

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

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

  • 7

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

    好处;

    • 保持您的研究记录和备份,(标记)

    • 它可以让你尝试不同的想法,如果它们不起作用又回去(分支)

    • 您可以与其他人分享您的工作,他们可以与您分享他们的更改(我知道您没有't specify this, but it'太棒了)

    • 大多数版本控制系统可以轻松地为某个受控制的文件创建压缩包,例如在您提交文章以供发布时,这可以在其他人审阅您的文章时提供帮助 . (你可以手动执行此操作,但为什么在版本控制时才编写这些进程)

    在工具集方面,我使用Git,以及StatEtEclipse这很好用,虽然你当然不必使用Eclipse . 有几个Git plugins for Eclipse,但我一般使用命令行选项 .

  • 80

    用于个人开发(任何类型)的版本控制非常有趣:

    • 探索历史并将当前工作与过去的提交进行比较

    • branching并为同一组尝试不同的版本档

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

  • 5

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

  • 7

    Dropbox有一个“ppor man”版本控件,可以让你轻松获得很多额外的好处 .

相关问题