[git] 솔로 데이터 분석가를위한 R 및 버전 관리

내가 존중하는 많은 데이터 분석가는 버전 관리를 사용합니다. 예를 들면 다음과 같습니다.

그러나 git과 같은 버전 제어 시스템을 채택하는 것이 가치가 있는지 평가하고 있습니다.

간단한 개요 :
저는 연구 출판물의 데이터를 분석하기 위해 R을 사용하는 사회 과학자입니다. 나는 현재 R 패키지를 생산하지 않습니다. 프로젝트의 내 R 코드에는 일반적으로 데이터 입력, 정리, 조작, 분석 및 출력 생성을위한 수천 줄의 코드가 포함됩니다. 출판물은 일반적으로 LaTeX를 사용하여 작성됩니다.

버전 관리와 관련하여 내가 읽은 많은 이점이 있지만 솔로 데이터 분석가와 관련이없는 것으로 보입니다.

  • 백업 : 백업 시스템이 이미 설치되어 있습니다.
  • 분기 및 되감기 : 이 작업을 수행해야 할 필요성을 느끼지 못했지만 어떻게 유용한 지 알 수 있습니다 (예 : 동일한 데이터 세트를 기반으로 여러 저널 기사를 준비하는 경우, 매월 업데이트되는 보고서를 준비하는 경우 등). )
  • 공동 작업 : 대부분 데이터를 직접 분석하므로 버전 관리의 공동 작업 이점을 얻지 못합니다.

버전 제어 채택과 관련하여 몇 가지 잠재적 비용이 있습니다.

  • 버전 관리 시스템을 평가하고 배우는 시간
  • 현재 파일 관리 시스템에 비해 복잡성이 증가 할 수 있습니다

그러나 나는 여전히 무언가를 놓치고 있다고 생각합니다. 버전 제어에 대한 일반적인 지침은 데이터 분석가보다 컴퓨터 과학자를 대상으로하는 것으로 보입니다.

따라서 위에 나열된 것과 유사한 상황 에서 특히 데이터 분석가와 관련하여 :

  1. 버전 관리가 그만한 가치가 있습니까?
  2. 버전 관리 채택의 주요 장단점은 무엇입니까?
  3. R로 데이터 분석을위한 버전 제어를 시작하기위한 좋은 전략은 무엇입니까 (예 : 워크 플로우 아이디어, 소프트웨어, 가이드 링크)?


답변

나는 당신의 질문에 대한 대답이 놀랍게 들린다 고 생각합니다. 버전 제어 시스템으로 파일을 관리하는 이점은 그러한 시스템을 구현하는 비용보다 훨씬 큽니다.

제기 한 몇 가지 요점에 대해 자세히 답변하려고 노력하겠습니다.

  • 백업 : 백업 시스템이 이미 설치되어 있습니다.

그렇습니다. 나도 마찬가지입니다. 그러나 작업과 관련된 중요하고 활동적인 파일을 적절하게 추적하기 위해 범용 백업 시스템에 의존하는 적합성에 대해 고려해야 할 몇 가지 질문이 있습니다. 성능 측면에서 :

  • 백업 시스템은 어떤 간격으로 스냅 샷을 찍습니까?
  • 스냅 샷을 작성하는 데 얼마나 걸립니까?
  • 스냅 샷을 만들 때 전체 하드 드라이브를 이미지해야합니까, 아니면 중요한 업데이트를받은 두 파일 만 백업하라는 메시지가 쉽게 들립니까?
  • 백업 시스템이 텍스트 파일에서 한 백업에서 다음 백업으로 변경된 내용을 정확하게 정확하게 보여줄 수 있습니까?

그리고 가장 중요한 것은 :

  • 백업은 몇 개의 위치에 저장됩니까? 컴퓨터와 동일한 물리적 위치에 있습니까?
  • 백업 시스템에서 특정 버전의 단일 파일을 쉽게 복원 할 수 있습니까?

예를 들어, Mac이 있고 Time Machine을 사용하여 컴퓨터의 다른 하드 드라이브에 백업합니다. Time Machine은 이상한 파일을 복구하거나 문제가 발생하면 시스템을 복원하는 데 좋습니다. 그러나 중요한 작업으로 신뢰받는 데 필요한 것은 없습니다.

  • 백업 할 때 Time Machine은 전체 하드 드라이브를 이미지화해야하므로 상당한 시간이 걸립니다. 작업을 계속하면 백업을 시작했을 때의 상태로 파일이 캡처된다는 보장이 없습니다. 또한 첫 번째 백업이 완료되기 전에 저장하려는 다른 지점에 도달 할 수도 있습니다.

  • Time Machine 백업이 저장된 하드 드라이브는 내 컴퓨터에 있습니다. 이로 인해 데이터가 도난, 화재 및 기타 재난에 취약 해집니다.

Git과 같은 버전 제어 시스템을 사용하면 텍스트 편집기에서 저장을 요청하지 않아도 더 이상 특정 파일의 백업을 시작할 수 있으며 파일이 즉시 이미지화되고 저장됩니다. 또한 Git은 분산되어 있으므로 내가 작업하는 각 컴퓨터에는 전체 저장소 사본이 있습니다.

이것은 내 작업을 네 개의 다른 컴퓨터에 반영시키는 것과 관련이 있습니다. 신의 행위만으로도 파일과 데이터가 손상 될 수 있습니다.

  • 분기 및 되감기 : 이 작업을 수행해야 할 필요성을 느끼지 못했지만 어떻게 유용한 지 알 수 있습니다 (예 : 동일한 데이터 세트를 기반으로 여러 저널 기사를 준비하는 경우, 매월 업데이트되는 보고서를 준비하는 경우 등). )

솔로이스트로서 나는 그다지 포크하지 않습니다. 그러나 되감기 옵션을 사용하여 절약 한 시간은 버전 제어 시스템을 배우는 데 많은 시간을 투자했습니다. 당신은 당신이 이것을 할 필요성을 느낀 적이 없다고 말하지만 현재 백업 시스템에서 파일을 되 감는 것이 실제로 고통스럽지 않고 실현 가능한 옵션입니까?

때때로 보고서는 45 분, 1 시간 또는 2 일 전에 더 좋아 보였습니다.

  • 공동 작업 : 대부분 데이터를 직접 분석하므로 버전 관리의 공동 작업 이점을 얻지 못합니다.

그렇습니다. 그러나 프로젝트에서 다른 사람들과 협력하게되면 필수 불가결 한 도구를 배우게됩니다.

  • 버전 관리 시스템을 평가하고 배우는 시간

이것에 대해 너무 걱정하지 마십시오. 버전 제어 시스템은 프로그래밍 언어와 유사합니다. 몇 가지 핵심 개념을 익혀야하며 나머지는 단지 구문상의 설탕입니다. 기본적으로, 처음 배우는 버전 제어 시스템은 다른 시스템으로 전환하는 데 가장 많은 시간을 투자해야하며 새로운 시스템이 핵심 개념을 표현하는 방법을 배우기 만하면됩니다.

인기있는 시스템을 골라보세요!

  • 현재 파일 관리 시스템에 비해 복잡성이 증가 할 수 있습니다

Projects데이터 분석 활동과 관련된 모든 폴더와 파일을 포함하는 하나의 폴더가 있습니까? 그렇다면 버전 제어를 두드리면 파일 시스템의 복잡성이 정확하게 증가합니다 0. 프로젝트에 컴퓨터에 대한 문제가있는 경우 버전 관리를 적용하기 전에 프로젝트를 중앙 집중화해야하므로 파일 관리의 복잡성이 줄어 듭니다 . 이것이 바로 Documents폴더 가있는 이유 입니다.

  1. 버전 관리가 그만한 가치가 있습니까?

예! 그것은 당신에게 큰 실행 취소 버튼을 제공하고 USB 드라이브 손실과 같은 것에 대해 걱정하지 않고 쉽게 기계에서 기계로 작업을 전송할 수 있습니다.

2 버전 관리 채택의 주요 장단점은 무엇입니까?

내가 생각할 수있는 유일한 단점은 파일 크기가 약간 증가한 것입니다. 그러나 최신 버전 제어 시스템은 압축 및 선택적 저장을 통해 놀라운 일을 할 수 있으므로 거의 문제가되지 않습니다.

3 R을 사용한 데이터 분석을위한 버전 관리를 시작하기위한 좋은 전략은 무엇입니까 (예 : 워크 플로우 아이디어, 소프트웨어, 가이드 링크)?

데이터 또는 보고서를 생성하는 파일을 버전 관리하에 유지하십시오. 과 같은 것을 사용하는 경우 파일에서 생성 된 파일이 아닌 파일을 Sweave저장하십시오 . 다시 수집해야 할 경우 원시 데이터를 저장하십시오. 가능하면 데이터를 수집하는 스크립트와 원시 데이터에 대한 변경 사항을 저장하지 않고 데이터를 정리하거나 수정하는 스크립트를 작성하고 저장하십시오..Rnw.tex

버전 관리 시스템을 배우 려면 Git 과이 가이드 를 강력히 추천 합니다.

이 웹 사이트에는 Git을 사용하여 특정 작업을 수행하는 것과 관련된 유용한 팁과 요령도 있습니다.


답변

저는 분석 상점에서 9 년 동안 근무했으며 분석 프로젝트의 버전 관리 아이디어를 해당 상점에 소개했습니다. 분명히 버전 관리를 믿는 사람입니다. 그러나 나는 다음과 같은 점을 지적 할 것이다.

  1. 법정에서 사용하기 위해 분석을 수행하는 경우 버전 관리가 적절하지 않을 수 있습니다. 이것이 당신에게 적용되는 것 같지는 않지만, 우리가 만든 모든 스크립트의 모든 버전이 잠재적으로 발견 가능하다는 것을 알기 위해 고객을 매우 긴장하게 만들 것입니다. 여러 참여에서 재사용 된 코드 모듈에는 버전 제어를 사용했지만 그런 이유로 참여 특정 코드에는 버전 제어를 사용하지 않았습니다.
  2. 버전 제어의 가장 큰 이점은 여러 프로젝트에서 재사용 된 미리 준비된 코드 모듈을 저장하는 것입니다. 예를 들어, 특정 인구 조사 PUMS 추출을 처리하는 가장 좋아하는 방법이있을 수 있습니다. 이 코드를 디렉토리로 구성하고 VCS에 넣으십시오. 그런 다음 필요할 때마다 새 프로젝트마다 체크인 할 수 있습니다. 해당 프로젝트에 대해 특정 공통 데이터 세트를 특수 처리하는 경우 특정 프로젝트에 대해 특정 코드의 특정 분기를 작성하는 것이 유용 할 수도 있습니다. 그런 다음 해당 프로젝트를 완료하면 주 코드로 다시 병합 할 특수 코드의 양을 결정하십시오.
  3. 처리 된 데이터를 버전 관리에 넣지 마십시오. 코드 만. 우리의 목표는 항상 내부적으로 처리 된 모든 데이터를 삭제하고, 버튼을 누르고, 보고서의 모든 숫자를 처음부터 다시 생성 할 수 있도록 완전한 스크립트 세트를 유지하는 것이 었습니다. 그것이 데이터에 신비하게 살아있는 오래된 버그가 없는지 확인하는 유일한 방법입니다.
  4. 결과를 실제로 완벽하게 재현 할 수있게하려면 코드를 VCS에 보관하는 것만으로는 충분하지 않습니다. 특정 결과물을 만드는 데 사용 된 모듈 버전을주의 깊게 추적하는 것이 중요합니다.
  5. 소프트웨어에 관해서는 Subversion과 함께 행운을 빕니다. 설정 및 관리가 쉽습니다. git 및 mercurial과 같은 새로운 분산 형 VCS의 매력을 잘 알고 있지만 직접 작업하는 경우 강력한 이점이 있는지 확실하지 않습니다. 반면에, 나는 그것들을 사용하는 것에 대한 부정적인 점도 모른다. 나는 단지 분석 환경에서 그것들과 함께 일하지 않았다.

답변

완벽을 기하기 위해 버전 관리 채택에 대한 업데이트를 제공 할 것이라고 생각했습니다.

솔로 데이터 분석 프로젝트의 버전 관리가 매우 유용하다는 것을 알았습니다.

git을 기본 버전 제어 도구로 채택했습니다. 먼저 Eclipse에서 StatET과 함께 Egit을 사용하기 시작했습니다. RStudio와의 통합이 상당히 좋지만 일반적으로 명령 행 인터페이스를 사용합니다.

데이터 분석 프로젝트의 관점에서 버전 제어로 설정 한 경험에 대해 블로그를 작성 했습니다.

게시물에서 언급했듯이 버전 제어를 채택하면 다음과 같은 데이터 분석 프로젝트에 대해 생각하는 데 많은 보조 이점이 있습니다.

  • 소스 파일과 파생 파일의 구별
  • 의존성의 본질 :
    • 코드 요소 간의 종속성
    • 프로젝트 내 파일 간의 종속성
    • 및 저장소 외부의 파일 및 프로그램과의 종속성
  • 리포지토리의 특성 및 리포지토리를 나누는 방법
  • 변경 사항 및 프로젝트 이정표를 커밋하고 문서화하는 특성

답변

저는 R과 LaTeX를 사용하여 경제학 연구를하고 항상 작업을 버전 관리하에 두었습니다. 무제한 실행 취소를하는 것과 같습니다. Bazaar는 배우고 사용하는 가장 간단한 방법 중 하나이며 Windows 사용자는 그래픽 사용자 인터페이스 (TortoiseBZR)가 있습니다.

그렇습니다. 다른 사람들과 작업 할 때 버전 관리에 추가적인 이점이 있지만 솔로 프로젝트에서도 많은 의미가 있습니다.


답변

지금 당장은 여러분이하는 일을 원하는 코드를 개발하는 것으로 생각할 것입니다. 개정 제어 시스템 사용을 채택한 후에는 저장소에서 레거시를 기록하고 점진적으로 점진적으로 변경하는 것으로 생각합니다. 기분이 좋아집니다.


답변

실수를 잡기 위해 안전망을 갖는 것이 큰 일이 될 수 있기 때문에 나는 여전히 당신과 같은 솔로 행위에 대한 버전 제어를 권장합니다.

솔로 Java 개발자로 일했지만 여전히 소스 제어를 사용합니다. 내가 지속적으로 물건을 확인하면 문제가 발생해도 한 시간 이상 잃을 수 없습니다. 걱정없이 실험하고 리팩토링 할 수 있습니다. 문제가 발생하면 항상 마지막 작업 버전으로 롤백 할 수 있기 때문입니다.

그럴 경우 소스 제어를 사용하는 것이 좋습니다. 배우기가 어렵지 않습니다.


답변

버전 제어 소프트웨어를 사용해야합니다. 그렇지 않으면 분석을 완벽하게 재현 할 수 없습니다.

결과를 어딘가에 게시하려면 항상 스크립트를 생성 한 시점에 스크립트 상태를 재구성 할 수 있어야합니다. 검토 자 중 한 명이 스크립트 중 하나에서 오류를 발견했다고 가정 해 봅시다. 어떤 결과가 적용되고 어떤 결과가 적용되지 않는지 어떻게 알 수 있습니까?

이런 의미에서 백업 시스템은 하루에 한 번만 수행되므로 다른 백업에 레이블을 적용하지 않기 때문에 충분하지 않으므로 어떤 버전이 어떤 결과에 해당하는지 알 수 없습니다. 그리고 파일을 추가하는 방법과 변경 사항을 커밋하는 방법을 배우면 이미 vc를 배우는 것이 생각보다 간단합니다.