R и контроль версий для аналитика данных соло - PullRequest
147 голосов
/ 26 апреля 2010

Многие аналитики данных, которых я уважаю, используют контроль версий. Например:

Однако я оцениваю целесообразность внедрения системы контроля версий, такой как git.

Краткий обзор: Я социолог, который использует R для анализа данных для научных публикаций. В настоящее время я не делаю R пакетов. Мой R-код для проекта обычно включает несколько тысяч строк кода для ввода данных, очистки, манипуляции, анализа и генерации вывода. Публикации обычно пишутся с использованием LaTeX.

Что касается контроля версий, я прочитал о многих преимуществах, но, похоже, они менее актуальны для соло-аналитика данных.

  • Резервное копирование: У меня уже есть резервная система.
  • Форкировка и перемотка: Я никогда не чувствовал необходимости делать это, но я вижу, как это может быть полезно (например, вы готовите несколько журнальные статьи, основанные на том же наборе данных; вы готовите отчет обновляется ежемесячно и т. д.)
  • Сотрудничество: Большую часть времени я нахожусь анализируя данные сам, таким образом, я не получит сотрудничество Преимущества контроля версий.

Существует также несколько потенциальных затрат, связанных с внедрением контроля версий:

  • Время для оценки и изучения системы контроля версий
  • Возможное увеличение сложности по сравнению с моей нынешней системой управления файлами

Однако у меня все еще есть чувство, что я что-то упустил. Общие руководства по управлению версиями, похоже, больше адресованы ученым, чем аналитикам данных.

Таким образом, конкретно в отношении данных аналитиков при обстоятельствах, аналогичных перечисленным выше:

  1. Стоит ли контролировать версию?
  2. Каковы основные плюсы и минусы внедрения контроля версий?
  3. Какая хорошая стратегия для начала работы с контролем версий для анализа данных с помощью R (например, примеры, идеи рабочего процесса, программное обеспечение, ссылки на руководства)?

Ответы [ 13 ]

82 голосов
/ 26 апреля 2010

Я чувствую, что ответ на ваш вопрос - ошеломляющее да - преимущества управления вашими файлами с помощью системы контроля версий намного превышают затраты на внедрение такой системы.

Я постараюсь подробно ответить на некоторые вопросы, которые вы подняли:

  • Резервное копирование: У меня уже есть резервная система.

Да, и я тоже. Однако есть некоторые вопросы, которые следует рассмотреть относительно целесообразности использования системы резервного копирования общего назначения для адекватного отслеживания важных и активных файлов, относящихся к вашей работе. На стороне производительности:

  • Через какой интервал ваша система резервного копирования делает снимки?
  • Сколько времени занимает создание снимка?
  • Нужно ли создавать образ всего жесткого диска при создании снимка, или можно легко попросить сделать резервную копию двух файлов, которые только что получили критические обновления?
  • Может ли ваша система резервного копирования показать вам с высокой точностью, что изменилось в ваших текстовых файлах с одной резервной копии на другую?

И самое главное:

  • В скольких местах хранятся резервные копии? Они находятся в том же физическом месте, что и ваш компьютер?
  • Насколько просто восстановить данную версию отдельного файла из вашей резервной системы?

Например, иметь Mac и использовать Time Machine для резервного копирования на другой жесткий диск в моем компьютере. Time Machine отлично подходит для восстановления нечетного файла или восстановления моей системы, если что-то испортилось. Однако у него просто нет того, что нужно, чтобы доверить мою важную работу:

  • При резервном копировании Time Machine должна создавать образ всего жесткого диска, что занимает значительное время. Если я продолжу работать, нет никаких гарантий, что мой файл будет записан в том состоянии, в котором он находился при запуске резервного копирования. Я также могу достичь другой точки, которую я хотел бы сохранить до завершения первого резервного копирования.

  • Жесткий диск, на котором сохранены мои резервные копии Time Machine, находится на моей машине - это делает мои данные уязвимыми для кражи, пожара и других бедствий.

С системой контроля версий, такой как Git, я могу инициировать резервное копирование определенных файлов, не затрачивая больше усилий, чем запрос сохранения в текстовом редакторе, и файл отображается и сохраняется мгновенно. Кроме того, Git распространяется так, что на каждом компьютере, на котором я работаю, имеется полная копия хранилища.

Это равносильно тому, что моя работа была отражена на четырех разных компьютерах - ничто иное, как стихийное бедствие, не могло уничтожить мои файлы и данные, и в этот момент мне, вероятно, было бы все равно.

  • Форкировка и перемотка: Я никогда не чувствовал необходимости делать это, но я понимаю, как это может быть полезно (например, вы готовите несколько журнальных статей на основе одного и того же набора данных; вы подготовка отчета, который обновляется ежемесячно и т. д.)

Как солист, я тоже не так уж и много. Тем не менее, время, которое я сэкономил, имея возможность перемотки назад, в одиночку окупило мои вложения в изучение системы контроля версий много-много раз. Вы говорите, что никогда не чувствовали необходимости делать это, но перематывать какой-либо файл в вашей текущей системе резервного копирования действительно было безболезненным, выполнимым вариантом?

Иногда отчет выглядел лучше 45 минут, час или два дня назад.

  • Сотрудничество: Большую часть времени я нахожусь анализируя данные сам, таким образом, я не получит сотрудничество Преимущества контроля версий.

Да, но вы бы изучили инструмент, который может оказаться незаменимым, если вы в конечном итоге будете сотрудничать с другими в проекте.

  • Время оценивать и изучать систему контроля версий

Не беспокойтесь об этом.Системы контроля версий похожи на языки программирования - у них есть несколько ключевых понятий, которые необходимо изучить, а остальное - просто синтаксический сахар.По сути, первая система управления версиями, которую вы изучите, потребует больших затрат времени, а переключение на другую - это просто изучение того, как новая система выражает ключевые понятия.

Выберите популярную систему и сделайте это!

  • Возможное увеличение сложности по сравнению с моей текущей системой управления файлами

У вас есть одна папка, скажем Projects, которая содержит все папки и файлы, связанные сваша деятельность по анализу данных?Если это так, то включение контроля версий увеличит сложность вашей файловой системы ровно на 0.Если ваши проекты разбросаны по вашему компьютеру, то вам следует централизовать их, прежде чем применять контроль версий, и это в итоге уменьшит сложность управления вашими файлами - вот почему у нас есть папка Documents.1092 *

  1. Стоит ли контролировать версию?

Да!Он дает вам огромную кнопку отмены и позволяет легко переносить работу с машины на машину, не беспокоясь о таких вещах, как потеря USB-накопителя.

2 Каковы основные плюсы и минусы внедрения контроля версий?

Единственное, о чем я могу подумать, - это небольшое увеличение размера файла, но современные системы контроля версий могут делать абсолютно удивительные вещи со сжатием и выборочным сохранением, так что это довольно спорный вопрос.

3 Какова хорошая стратегия для начала работы с управлением версиями для анализа данных с помощью R (например, примеры, идеи рабочего процесса, программное обеспечение, ссылки на руководства)?

Хранить файлыкоторые генерируют данные или отчеты под контролем версий, будьте избирательны.Если вы используете что-то вроде Sweave, храните файлы .Rnw, а не файлы .tex, полученные из них.Сохраняйте необработанные данные, если будет сложно повторно их получить.Если возможно, напишите и сохраните сценарий, который получает ваши данные, и другой сценарий, который очищает или изменяет его, а не сохраняет изменения в необработанных данных.

Что касается изучения системы управления версиями, я настоятельно рекомендую Git и thisруководство к нему.

На этих веб-сайтах также есть несколько полезных советов и рекомендаций по выполнению определенных действий с помощью Git:

23 голосов
/ 11 мая 2010

Я девять лет проработал в магазине аналитики и представил идею управления версиями для наших аналитических проектов в этом магазине. Очевидно, я большой сторонник контроля версий. Однако я хотел бы сделать следующие замечания.

  1. Контроль версий может не подходить, если вы проводите анализ для возможного использования в суде. Это не похоже на то, что это относится к вам, но это заставило бы наших клиентов очень нервничать, зная, что каждая версия каждого сценария, который мы когда-либо создавали, была потенциально обнаружима. Мы использовали контроль версий для модулей кода, которые повторно использовались в нескольких проектах, но по этой причине не использовали контроль версий для кода, связанного с проектом.
  2. Мы обнаружили, что наибольшим преимуществом для контроля версий является хранение стандартных модулей кода, которые повторно использовались в нескольких проектах. Например, у вас может быть какой-то излюбленный способ обработки определенных экстрактов PUMS переписи. Организуйте этот код в каталог и поместите его в свою VCS. Затем вы можете проверить это в каждом новом проекте каждый раз, когда вам это нужно. Это может быть даже полезно для создания определенных веток определенного кода для определенного проекта, если вы выполняете специальную обработку определенного общего набора данных для этого проекта. Затем, когда вы закончите с этим проектом, решите, сколько вашего специального кода будет объединено с основной веткой.
  3. Не помещайте обработанные данные в систему контроля версий. Только код. Наша цель всегда заключалась в том, чтобы иметь полный набор сценариев, чтобы мы могли удалить все наши внутренне обработанные данные, нажать кнопку и создать каждый номер для отчета с нуля. Это единственный способ убедиться, что в ваших данных не осталось загадочных старых ошибок.
  4. Чтобы убедиться, что ваши результаты действительно полностью воспроизводимы, недостаточно просто хранить ваш код в VCS. Очень важно внимательно следить за тем, какая версия каких модулей использовалась для создания какого-либо конкретного результата.
  5. Что касается программного обеспечения, мне повезло с Subversion. Это легко настроить и администрировать. Я признаю привлекательность новых распределенных VCS, таких как git и mercurial, но я не уверен, что есть какие-то сильные преимущества, если вы работаете самостоятельно. С другой стороны, я также не знаю никаких недостатков в их использовании - я просто не работал с ними в среде анализа.
17 голосов
/ 29 декабря 2010

Ради полноты я подумал, что предоставлю обновленную информацию о моем принятии управления версиями.

Я считаю, что управление версиями для индивидуальных проектов анализа данных очень полезно.

Я использовал git в качестве основного инструмента контроля версий. Сначала я использовал Egit в Eclipse со StatET. Теперь я обычно использую интерфейс командной строки, хотя интеграция с RStudio довольно хорошая.

Я писал в блоге о своем опыте Настройка с контролем версий с точки зрения проектов анализа данных.

Как отмечалось в сообщении, я обнаружил, что внедрение контроля версий имеет много вторичных преимуществ в том, как я думаю о проектах анализа данных, включая уточнение:

  • различие между исходными и производными файлами
  • характер зависимости:
    • зависимости между элементами кода
    • зависимости между файлами в проекте
    • и зависимости от файлов и программ, внешних по отношению к хранилищу
  • характер хранилища и как должны быть разделены хранилища
  • характер совершения и документирования изменений и этапов проекта
17 голосов
/ 26 апреля 2010

Я занимаюсь экономическими исследованиями, используя R и LaTeX, и я всегда ставлю свою работу под контроль версий. Это как неограниченная отмена. Попробуйте Bazaar, он один из самых простых в освоении и использовании, и если вы работаете в Windows, он имеет графический интерфейс пользователя (TortoiseBZR).

Да, при управлении версиями есть дополнительные преимущества при работе с другими, но даже в индивидуальных проектах это имеет большой смысл.

9 голосов
/ 26 апреля 2010

Прямо сейчас вы, вероятно, думаете о своей работе как о разработке кода, который будет делать то, что вы от него хотите. После того, как вы перейдете к использованию системы контроля версий, вы будете думать о своей работе как о том, что записываете свое наследие в хранилище и вносите в него значительные изменения. Это намного лучше.

7 голосов
/ 26 апреля 2010

Вы должны использовать программное обеспечение для контроля версий, иначе ваш анализ не будет полностью воспроизводимым.

Если вы хотите опубликовать свои результаты где-нибудь, вы всегда сможете восстановить состояние ваших сценариев в тот момент, когда вы их создали. Допустим, один из рецензентов обнаружил ошибку в одном из ваших сценариев: как бы вы узнали, какие результаты достигнуты, а какие нет?

В этом смысле системы резервного копирования недостаточно, поскольку она, вероятно, выполняется только один раз в день, и она не применяет метки к различным резервным копиям, поэтому вы не знаете, какие версии соответствуют каким результатам. А изучение vcs проще, чем вы думаете, если вы уже знаете, как добавить файл и как зафиксировать изменения.

7 голосов
/ 26 апреля 2010

Я бы по-прежнему рекомендовал управление версиями для такого сольного актера, как вы, потому что иметь страховочную сетку, чтобы ловить ошибки, было бы здорово.

Я работал сольным Java-разработчиком и до сих пор использую контроль версий. Если я проверяю вещи постоянно, я не могу потерять больше часа работы, если что-то пойдет не так. Я могу экспериментировать и рефакторинг, не беспокоясь, потому что если все пойдет не так, я всегда могу вернуться к своей последней рабочей версии.

Если это так, я бы порекомендовал использовать контроль источников. Это не трудно учиться.

6 голосов
/ 16 марта 2011

Сначала сделайте шаг назад и узнайте преимущества написания пакетов R! Вы говорите, что у вас есть проекты с несколькими тысячами строк кода, но они не структурированы и не документированы, как код пакета? Вы добиваетесь больших успехов, следуя идеалам пакета, включая документацию для каждой функции, тесты для многих обычных трудно обнаруживаемых ошибок, возможность создавать собственные тестовые наборы и т. Д. И т. Д.

Если у вас нет дисциплины для создания пакета, то я не уверен, что у вас есть дисциплина для правильного контроля версий.

6 голосов
/ 26 апреля 2010

Стоит ли контролировать версию?

большой ДА.

Каковы основные плюсы и минусы внедрения контроля версий?

плюсы: вы можете отслеживать, что вы делали раньше. Особенно полезно для латекса, так как вам может понадобиться старый абзац, который вы удалили! Когда ваш компьютер выходит из строя или вы работаете над новым, ваши данные возвращаются на лету.

минусы: вам нужно сделать некоторые настройки.

Какова хорошая стратегия для начала работы с контролем версий для анализа данных с помощью R (например, примеры, идеи рабочих процессов, программное обеспечение, ссылки на руководства)?

Просто начни его использовать. Я использую черепаху SVN на окнах в качестве инструмента клиента, и в моем отделе есть сервер svn, я помещаю весь свой код и данные (да, вы также помещаете туда свои данные!)

5 голосов
/ 27 апреля 2010

Я бы согласился с вышеизложенным мнением и сказал бы, что да, контроль версий полезен.

Преимущества;

  • сохраняйте результаты своих исследований, а также сохраняйте их в архиве (пометка)
  • это позволяет вам попробовать разные идеи и вернуться, если они не работают (ветвление)
  • Вы можете поделиться своей работой с другими людьми, и они могут поделиться своими изменениями с вами (я знаю, вы не указали это, но это здорово)
  • Большинство систем контроля версий облегчают создание сжатого пакета для всех файлов, находящихся под контролем, в определенный момент, например, в момент, когда вы отправляете статью для публикации, это может помочь, когда другие люди просматривают ваши статьи. (вы можете сделать это вручную, но зачем создавать эти процессы, когда контроль версий просто делает это)

Что касается наборов инструментов, я использую Git вместе с StatEt и Eclipse , который работает хорошо, хотя вам, конечно, не обязательно использовать Eclipse. Для Eclipse есть несколько Git-плагинов, но я обычно использую параметры командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...