R и контроль версий для аналитика данных соло

155

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

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

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

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

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

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

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

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

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

  1. Стоит ли контролировать версию?
  2. Каковы основные плюсы и минусы принятия контроля версий?
  3. Какова хорошая стратегия для начала работы с контролем версий для анализа данных с помощью R (например, примеры, идеи рабочего процесса, программное обеспечение, ссылки на руководства)?
Джером англим
источник
2
Читали ли вы это: stackoverflow.com/questions/360887/…
Марек
@Marek Этот пост полезен. Большое спасибо. Я все еще хотел бы знать, какие конкретные вопросы, если таковые имеются, относятся к анализу данных, R и написанию исследований.
Jeromy Anglim
Ответ на ваш первый вопрос - «да», конечно. Но какой тип / размер данных вы обычно обрабатываете. Большинству систем CVS сложно хранить двоичные данные.
Эдуардо Леони
3
Вы также можете посмотреть на это: stackoverflow.com/questions/2286831/…
Шейн,
@Eduardo Я работаю со смесью простого текста (например, с разделителями табуляции, фиксированной ширины) и двоичных файлов (базы данных, SPSS, Excel и т. Д.). Данные варьируются: Типичные примеры: 100 строк x 500 столбцов до 10 000 x 20 - 2 000 000 x 20.
Jeromy Anglim

Ответы:

89

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

остроносая плоскодонная шлюпка
источник
1
+1 за ответ «Возможное увеличение сложности по сравнению с моей нынешней системой управления файлами». Контроль версий потенциально снизит уровень сложности, если элементы, помещенные в элемент управления версиями, наряду с предоставлением детального уровня контроля над точками моментальных снимков в процессе резервного копирования (Вы также даете некоторое описание, которое очень полезно при восстановлении не по дате, а по функции или изменению ).
Кристофер Хакетт
23

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

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

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

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

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

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

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

  • различие между исходными и производными файлами
  • Характер зависимостей:
    • зависимости между элементами кода
    • зависимости между файлами в проекте
    • и зависимости от файлов и программ, внешних по отношению к хранилищу
  • характер хранилища и как следует разделять хранилища
  • характер совершения и документирования изменений и этапов проекта
Джером англим
источник
2
Я также начал с интерфейса командной строки (и это хорошо знать), но я также переключился на использование RStudio в основном для своих нужд R / Git. Он обеспечивает большинство вещей, которые я хочу, но иногда мне нужно открыть терминал, чтобы сделать несколько вещей, которые не встроены непосредственно в интерфейс.
Дейсон
17

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

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

Ана Нельсон
источник
9

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

Кен Уильямс
источник
7

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

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

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

duffymo
источник
7

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

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

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

dalloliogm
источник
1
Вы делаете сильный аргумент. Тем не менее, я думаю, что воспроизводимые исследования возможны без формальной системы контроля версий. Это просто менее изящно и менее гибко. Я пытаюсь написать код R, используя принципы грамотного программирования, чтобы вывод R автоматически интегрировался в окончательный документ. Файлы, связанные с этим конечным продуктом, могут быть сохранены.
Jeromy Anglim
это помогает вам повторно применить весь анализ к вашим данным, но не говорит вам, на какие из ваших прежних результатов повлияла ошибка.
dalloliogm
6

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

большое ДА.

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

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

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

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

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

Инь Чжу
источник
6

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

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

Spacedman
источник
3
Это все путешествие, особенно если вы не из ИТ-среды. Я сейчас использую git, и это здорово. Я также начинаю баловаться инфраструктурой пакета R. Что касается тысяч строк кода, это часто является результатом большого количества уникальной обработки данных и гипотезы, основанной на графике и создании таблиц. Хотя опыт помогает увидеть абстракции, я обнаружил, что определенное количество уникального кода является лишь частью того, что означает анализ психологических наборов данных. Я думаю, что это помогает объяснить популярность пакета ProjectTemplate и Sweave.
Джером Англим
5

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

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

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

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

PaulHurleyuk
источник
Я использую StatET и Eclipse для R; так что, возможно, я сначала попробую git.
Jeromy Anglim
4

Контроль версий для сольной разработки (любого рода) действительно интересен для:

  • изучение истории и сравнение текущей работы с прошлыми коммитами
  • ветвление и пробование разных версий для одного и того же набора файлов

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

VonC
источник
4

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

М.В. Мороз
источник
4

Dropbox имеет систему контроля версий «ppor man's», которая поможет вам без особых усилий и множества дополнительных преимуществ.

Zach
источник