代码之家  ›  专栏  ›  技术社区  ›  Jeromy Anglim

solo数据分析员的r和版本控制

  •  145
  • Jeromy Anglim  · 技术社区  · 15 年前

    我尊敬的许多数据分析人员使用版本控制。 例如:

    不过,我正在评估采用git这样的版本控制系统是否值得。

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

    关于版本控制,我读过很多好处,但它们似乎与solo数据分析师无关。

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

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

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

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

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

    1. 版本控制值得这么做吗?
    2. 采用版本控制的主要利弊是什么?
    3. 什么是开始版本控制的好策略 使用R进行数据分析(例如,示例、工作流思想、软件、指南链接)?
    13 回复  |  直到 15 年前
        1
  •  82
  •   Jason Plank Maksim Kondratyuk    14 年前

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

    我将尽量详细回答你提出的一些问题:

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

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

    • 备份系统每隔多长时间拍摄快照?
    • 创建快照需要多长时间?
    • 拍摄快照时,它是否必须映像整个硬盘驱动器,或者可以很容易地告诉它只备份两个刚刚接收到关键更新的文件?
    • 你的备份系统能精确地显示你的文本文件从一个备份到下一个备份的变化吗?

    最重要的是:

    • 备份保存在多少个位置?它们和你的电脑在同一个物理位置吗?
    • 从备份系统还原单个文件的给定版本有多容易?

    例如,拥有一台Mac电脑,并使用时间机器备份到我电脑中的另一个硬盘驱动器。时间机器非常适合恢复奇数文件,或者在出现问题时恢复我的系统。然而,我的重要工作并不值得信任:

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

    • 我的时间机器备份保存到的硬盘驱动器位于我的机器中—这使我的数据易受盗窃、火灾和其他灾难的攻击。

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

    这相当于将我的工作镜像到四台不同的计算机上——除了上帝的旨意,没有什么能破坏我的文件和数据,在这一点上,我可能不会太在意。

    • 分叉和倒带: 我从来没有觉得有必要这样做,但我知道它是如何有用的(例如,您正在基于同一数据集准备多篇日记文章;您正在准备每月更新的报告,等等)

    作为一个独奏者,我也不太喜欢叉子。然而,我通过选择倒带节省的时间已经一次性地偿还了我在学习版本控制系统方面的投资很多很多次。你说你从来没有觉得有必要这样做,但在你当前的备份系统下,倒带任何文件真的是一个无痛,可行的选择吗?

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

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

    是的,但是你会学到一个工具,如果你最终在一个项目上与其他人合作的话,这个工具可能是必不可少的。

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

    不要太担心这个。版本控制系统就像编程语言一样——它们有几个关键概念需要学习,其余的只是语法上的甜点。基本上,你所学的第一个版本控制系统需要投入最多的时间-切换到另一个版本只需要学习新系统如何表达关键概念。

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

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

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

    1. 版本控制值得这么做吗?

    对!它给你一个巨大的撤销按钮,让你可以轻松地把工作从一台机器转移到另一台机器上,而不必担心丢失USB驱动器之类的事情。

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

    我能想到的唯一的缺点是文件大小略有增加——但是现代版本控制系统在压缩和选择性保存方面可以做得非常出色,所以这几乎是一个未知数。

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

    将生成数据或报告的文件置于版本控制之下,要有选择性。如果你用的是 Sweave 存储你的 .Rnw 文件而不是 .tex 从中生成的文件。存储原始数据,如果这将是一个痛苦的重新获得。如果可能的话,编写并存储一个获取数据的脚本和另一个清理或修改数据的脚本,而不是存储对原始数据的更改。

    至于学习版本控制系统,我强烈推荐git和 this guide 对它。

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

        2
  •  23
  •   Dan Menes    15 年前

    我在一家分析商店工作了九年,并向该商店介绍了我们的分析项目的版本控制思想。显然,我非常相信版本控制。不过,我想提出以下几点。

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

    我用R和乳胶做经济学研究,我总是把我的工作置于版本控制之下。就像是无限的撤销。试试bazaar吧,它是最简单的学习和使用工具之一,如果你在windows上,它有一个图形用户界面(tortoisebzr)。

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

        4
  •  17
  •   Jeromy Anglim    13 年前

    为了完整起见,我想我会提供一个关于我采用版本控制的更新。

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

    我已经采用git作为我的主要版本控制工具。我第一次在eclipse中使用egit启动statet。现在我通常只使用命令行界面,尽管与rstudio的集成非常好。

    我在博客上写了我的经历 getting set up with version control 从数据分析项目的角度。

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

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

    现在,您可能认为您的工作是开发代码来完成您希望它做的事情。采用修订控制系统后,您会认为您的工作是在存储库中写下您的遗留内容,并对其进行出色的增量更改。感觉好多了。

        6
  •  7
  •   duffymo    15 年前

    我还是会推荐像你这样的独奏版本控制,因为有一个安全网来捕捉错误是一件很好的事情。

    我曾做过SOLO Java开发人员,我仍然使用源代码管理。如果我不停地检查东西,如果出了问题,我损失的工作不会超过一个小时。我可以不用担心地进行实验和重构,因为如果出错,我总是可以回滚到我的上一个工作版本。

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

        7
  •  7
  •   dalloliogm    15 年前

    你必须使用一个版本控制软件,否则你的分析不会完全重现。

    如果你想在某个地方发布你的结果,你应该总是能够在你生成脚本的那一刻重建脚本的状态。假设某个评审员在你的一个脚本中发现了一个错误:你如何知道哪些结果是有效的,哪些不是?

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

        8
  •  6
  •   Yin Zhu    15 年前

    版本控制值得这么做吗?

    大是的。

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

    优点:你可以追踪你以前做过的事情。特别适用于乳胶,因为你可能需要一个旧的段落,被你删除!当你的电脑死机或者你在新的电脑上工作时,你的数据会随时返回。

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

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

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

        9
  •  6
  •   Spacedman    14 年前

    先退一步,学习编写r包的优势!你说你有几千行代码的项目,但是这些项目的结构和文档不像包代码那样?遵循软件包理念,包括每个功能的文档、许多常见的难以捕捉的错误的测试、编写自己的测试套件的工具等等,都能获得巨大的成功。

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

        10
  •  5
  •   PaulHurleyuk    15 年前

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

    优势;

    • 记录并备份您的研究成果(标记)
    • 它可以让你尝试不同的想法,如果它们不起作用(分支)
    • 你可以与其他人分享你的工作,他们也可以与你分享他们对工作的更改(我知道你没有具体说明,但这很好)
    • 大多数版本控制系统可以很容易地为在某一点上受控制的所有文件创建一个压缩包,例如,在您提交一篇文章以供发布时,这有助于其他人查看您的文章。(您可以手动执行此操作,但版本控制仅执行此操作时,为什么要组成这些进程)

    在工具集方面,我使用 Git 连同 StatEt Eclipse 虽然您当然不必使用eclipse,但它工作得很好。有几个 Git plugins for Eclipse ,但我通常使用命令行选项。

        11
  •  4
  •   Community CDub    8 年前

    solo开发(任何类型)的版本控制非常有趣:

    • 探索历史,把现在的工作与过去的工作进行比较
    • branching 对同一组文件尝试不同版本

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

        12
  •  4
  •   MW Frost    15 年前

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

        13
  •  4
  •   Zach    14 年前

    Dropbox有一个“ppor-man”版本控制,它可以让你在不费吹灰之力的情况下完成一部分工作,并带来很多额外的好处。