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

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

Однако я оцениваю, стоит ли использовать систему управления версиями, такую ​​как git.

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

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

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

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Время для оценки и изучения системы контроля версий.

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

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

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

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

  • Возможно ли, что контроль версий стоит усилий?

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

Поддерживается ли контроль версий?

большое ДА.

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

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

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

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

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

Ответ 10

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

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

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

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

Ответ 11

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

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

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

Ответ 12

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

Ответ 13

Dropbox имеет контроль над версиями "ppor man", который позволяет вам участвовать в этом процессе без особых усилий с большим количеством дополнительных преимуществ.