web-dev-qa-db-ja.com

ソロデータアナリストのRおよびバージョン管理

私が尊重する多くのデータアナリストはバージョン管理を使用しています。例えば:

ただし、gitなどのバージョン管理システムを採用する価値があるかどうかを評価しています。

簡単な概要: 私はRを使用して研究出版物のデータを分析する社会科学者です。現在、Rパッケージは作成していません。通常、プロジェクトのRコードには、データの入力、クリーニング、操作、分析、および出力生成のための数千行のコードが含まれています。出版物は通常、LaTeXを使用して作成されます。

バージョン管理に関して、私が読んだ多くの利点がありますが、それらは単独のデータ分析者にはあまり関係がないようです。

  • バックアップ: バックアップシステムは既に設置されています。
  • フォークと巻き戻し: これを行う必要性を感じたことはありませんが、それがどのように役立つかはわかります(たとえば、同じデータセットに基づいて複数のジャーナル記事を準備している、毎月更新されるレポートを準備しているなど)
  • コラボレーション: ほとんどの場合、自分でデータを分析しているため、バージョン管理のコラボレーションの利点は得られません。

バージョン管理の採用には、いくつかの潜在的なコストも伴います。

  • バージョン管理システムの評価と学習の時間
  • 現在のファイル管理システムよりも複雑さが増す可能性がある

しかし、私はまだ何かが足りないと感じています。バージョン管理に関する一般的なガイドは、データアナリストよりもコンピューターサイエンティスト向けです。

したがって、具体的には データアナリストに関連して 上記のような状況では:

  1. バージョン管理は努力する価値がありますか?
  2. バージョン管理を採用する主な長所と短所は何ですか?
  3. Rを使用したデータ分析のバージョン管理を開始するための優れた戦略は何ですか(例、ワークフローのアイデア、ソフトウェア、ガイドへのリンクなど)?
148
Jeromy Anglim

あなたの質問に対する答えは圧倒的です。バージョン管理システムでファイルを管理するメリットは、そのようなシステムを実装するコストをはるかに上回ります。

私はあなたが提起したいくつかのポイントに詳細に応答しようとします:

  • Backup:バックアップシステムが既に設置されています。

はい、Iも同様です。ただし、作業に関連する重要でアクティブなファイルを適切に追跡するために、汎用バックアップシステムに依存することの妥当性について検討すべきいくつかの質問があります。パフォーマンスの面では:

  • バックアップシステムはどの間隔でスナップショットを取得しますか?
  • スナップショットの作成にはどれくらい時間がかかりますか?
  • スナップショットを撮るときにハードドライブ全体をイメージする必要がありますか、または重要な更新を受信したばかりの2つのファイルをバックアップするように簡単に指示できますか?
  • バックアップシステムは、テキストファイルの変化をバックアップごとに正確に正確に示すことができますか?

最も重要な:

  • バックアップはいくつの場所に保存されますか?それらはコンピューターと同じ物理的な場所にありますか?
  • バックアップシステムから特定のバージョンの単一ファイルを簡単に復元できますか?

たとえば、Macがあり、Time Machineを使用してコンピューターの別のハードドライブにバックアップします。 Time Machineは、異常なファイルを回復したり、混乱した場合にシステムを復元したりするのに最適です。しかし、それは単に私の重要な仕事で信頼されるために必要なものを持っていません:

  • バックアップするとき、Time Machineはハードドライブ全体をイメージングする必要があるため、かなりの時間がかかります。作業を続けた場合、バックアップを開始したときの状態でファイルがキャプチャされるという保証はありません。また、最初のバックアップが完了する前に保存したい別のポイントに到達する場合があります。

  • Time Machineバックアップの保存先のハードドライブはマシンにあります。これにより、データが盗難、火災、その他の災害に対して脆弱になります。

Gitのようなバージョン管理システムを使用すると、テキストエディターで保存を要求することなく、特定のファイルのバックアップを開始できます。ファイルはすぐにイメージ化されて保存されます。さらに、Gitは配布されているので、私が働いている各コンピューターにはリポジトリの完全なコピーがあります。

これは、私の作品を4台の異なるコンピューターにミラーリングすることに相当します。神の行為以外に私のファイルやデータを破壊することはできません。その時点では、おそらくあまり気にしません。

  • フォーキングと巻き戻し:これを行う必要性を感じたことはありませんが、それがどのように役立つかわかります(たとえば、複数のジャーナルを準備している場合)同じデータセットに基づく記事、毎月更新されるレポートなどを準備しています)

ソリストとして、私もそれほどフォークしません。ただし、巻き戻しオプションを使用することで節約できた時間は、バージョン管理システムの学習に対する投資を何度も何度も返済しました。あなたはこれを行う必要性を感じたことは一度もないと言いますが、現在のバックアップシステムの下でファイルを巻き戻すことは本当に痛みのない、実行可能なオプションでしたか?

レポートは45分、1時間、2日前によく見えることがありました。

  • 共同作業:ほとんどの場合、自分でデータを分析しているため、バージョン管理の共同作業の利点は得られません。

はい。ただし、プロジェクトで他の人と協力することになった場合に不可欠であることが証明されるツールを学習します。

  • バージョン管理システムの評価と学習の時間

これについてあまり心配しないでください。バージョン管理システムはプログラミング言語のようなものです。学習する必要のある重要な概念がいくつかあり、残りは単なる構文糖です。基本的に、最初に学ぶバージョン管理システムは、最も時間をかけて別のシステムに切り替える必要があり、新しいシステムが重要な概念をどのように表現するかを学ぶだけです。

人気のあるシステムを選んで、それを手に入れましょう!

  • 現在のファイル管理システムよりも複雑さが増す可能性がある

データ分析アクティビティに関連するすべてのフォルダーとファイルを含むProjectsなどのフォルダーが1つありますか?その場合、バージョン管理を平手打ちすると、ファイルシステムの複雑さが正確に0。プロジェクトがコンピューターにまき散らされている場合は、バージョン管理を適用する前にプロジェクトを集中化する必要があります。これにより、ファイル管理の複雑さが減少しますなぜDocumentsフォルダーがあるのか​​。

  1. バージョン管理は努力する価値がありますか?

はい!それはあなたに巨大な元に戻すボタンを与え、あなたのUSBドライブを失うなどのことを心配することなく、マシンからマシンへの作業を簡単に転送することができます。

2バージョン管理を採用する主な長所と短所は何ですか?

私が考えることができる唯一の欠点は、ファイルサイズがわずかに増加することですが、最新のバージョン管理システムは圧縮と選択的保存で驚くべきことを行うことができるため、これはかなり重要なポイントです。

3 Rを使用したデータ分析のバージョン管理を開始するための優れた戦略は何ですか(例、ワークフローのアイデア、ソフトウェア、ガイドへのリンクなど)?

バージョン管理下でデータまたはレポートを生成するファイルを選択してください。 Sweaveのようなものを使用している場合は、.Rnwファイルではなく、.texそれらから生成されるファイル。再取得が困難な場合は、生データを保存します。可能であれば、生データへの変更を保存するのではなく、データを取得するスクリプトと、データを削除または変更するスクリプトを作成して保存します。

バージョン管理システムの学習に関しては、Gitと このガイド を強くお勧めします。

これらのWebサイトには、Gitで特定のアクションを実行するためのいくつかの素晴らしいヒントとコツもあります。

82
Sharpie

分析ショップで9年間働き、分析プロジェクトのバージョン管理のアイデアをそのショップに紹介しました。私は明らかにバージョン管理を強く信じています。ただし、次の点を指摘します。

  1. 法廷で使用する可能性のある分析を行っている場合、バージョン管理が適切でない場合があります。これはあなたに当てはまるようには思えませんが、私たちがこれまでに作成したすべてのスクリプトのすべてのバージョンが潜在的に発見可能であることを知ると、クライアントは非常に緊張していました。複数のエンゲージメントで再利用されたコードモジュールにはバージョン管理を使用しましたが、そのためエンゲージメント固有のコードにはバージョン管理を使用しませんでした。
  2. バージョン管理の最大の利点は、複数のプロジェクトで再利用されるコードの固定モジュールを保存することであることがわかりました。たとえば、特定の国勢調査PUMS抽出を処理する特定のお気に入りの方法があるかもしれません。このコードをディレクトリに整理し、VCSに配置します。その後、必要に応じて、新しいプロジェクトごとにチェックアウトできます。特定のプロジェクトの特定の共通データセットの特別な処理を実行している場合、特定のプロジェクトの特定のコードの特定のブランチを作成することも役立ちます。次に、そのプロジェクトを完了したら、どのくらいの特別なコードをメインブランチにマージするかを決定します。
  3. 処理されたデータをバージョン管理に入れないでください。コードのみ。私たちの目標は、内部処理されたすべてのデータを削除し、ボタンを押して、レポートのすべての番号をゼロから再生成できるように、常に完全なスクリプトセットを用意することでした。それが、データに不思議なことに古いバグが残っていないことを確認する唯一の方法です。
  4. 結果が本当に完全に再現可能であることを確認するには、VCSにコードを保持するだけでは十分ではありません。特定の成果物を作成するために、どのモジュールのどのバージョンが使用されたかを注意深く追跡することが重要です。
  5. ソフトウェアに関しては、Subversionで幸運がありました。セットアップと管理は簡単です。 gitやMercurialのような最新の分散型VCSの魅力を認識していますが、自分で作業している場合に強力な利点があるかどうかはわかりません。一方で、それらを使用することのマイナス面も知りません。分析環境でそれらを使用したことがありません。
23
Dan Menes

RとLaTeXを使用して経済学の研究を行っており、常にバージョン管理下に置いています。これは、無制限に元に戻すことができるようなものです。 Bazaarを試してください。これは最も簡単に習得して使用できるものの1つです。Windowsを使用している場合は、グラフィカルユーザーインターフェイス(TortoiseBZR)があります。

はい、他のユーザーと作業する場合、バージョン管理には追加の利点がありますが、単独のプロジェクトであっても非常に理にかなっています。

17
Ana Nelson

完全を期すために、バージョン管理の採用に関する最新情報を提供すると思いました。

ソロデータ分析プロジェクトのバージョン管理が非常に役立つことがわかりました。

メインバージョン管理ツールとしてgitを採用しました。まず、EclipseでStatETを使用してEgitを使い始めました。現在、私は通常、コマンドラインインターフェイスを使用していますが、RStudioとの統合は非常に優れています。

私は自分の経験についてブログに書きました バージョン管理を設定する データ分析プロジェクトの観点から。

投稿で述べたように、バージョン管理を採用すると、明確化を含むデータ分析プロジェクトについての考え方に多くの副次的な利点があることがわかりました。

  • ソースファイルと派生ファイルの区別
  • 依存関係の性質:
    • コードの要素間の依存関係
    • プロジェクト内のファイル間の依存関係
    • およびリポジトリ外部のファイルおよびプログラムとの依存関係
  • リポジトリの性質とリポジトリの分割方法
  • 変更およびプロジェクトのマイルストーンをコミットおよび文書化する性質
17
Jeromy Anglim

今、あなたはおそらくあなたの仕事をあなたがやりたいことをするコードを開発していると考えています。リビジョン管理システムの使用を採用した後は、リポジトリ内のレガシーを書き留め、それに対して素晴らしいインクリメンタルな変更を加えることと作業を考えるでしょう。気分がいい。

9
Ken Williams

間違いをキャッチするためのセーフティネットを持つことは素晴らしいことです。

私はソロJava開発者として働いていますが、まだソース管理を使用しています。何かを継続的にチェックしている場合、何か問題が発生しても1時間以上の作業を失うことはありません。心配することなく実験とリファクタリングを行うことができます。問題が発生した場合は、常に最後の作業バージョンにロールバックできるためです。

その場合は、ソース管理を使用することをお勧めします。学ぶのは難しくありません。

7
duffymo

バージョン管理ソフトウェアを使用する必要があります。そうしないと、分析が完全に再現できなくなります。

結果をどこかに公開したい場合、スクリプトを作成した時点で、常にスクリプトのステータスを再構築できる必要があります。レビュアーの1人がスクリプトの1つでエラーを発見したとしましょう。どの結果が影響を受け、どの結果が影響を受けないかをどのように確認しますか?

この意味で、バックアップシステムはおそらく1日に1回しか実行されず、さまざまなバックアップにラベルを適用しないため、十分ではありません。したがって、どのバージョンがどの結果に対応するかわかりません。そして、ファイルを追加する方法と変更をコミットする方法を学ぶだけで十分であれば、vcsの学習は思っているよりも簡単です。

7
dalloliogm

少し先に進んで、Rパッケージを作成する利点を学びましょう!あなたは、数千行のコードを持つプロジェクトを持っていると言いますが、これらはパッケージコードのように構造化または文書化されていませんか?すべての機能のドキュメント、通常のキャッチしにくいエラーの多くのテスト、独自のテストスイートを作成する機能など、パッケージの理想に準拠することで大きな勝利を得ることができます。

パッケージを作成するための規律がない場合、適切なリビジョン管理を行うための規律があるかどうかはわかりません。

6
Spacedman

バージョン管理は努力する価値がありますか?

大きなはい。

バージョン管理を採用する主な長所と短所は何ですか?

長所:以前に行ったことを追跡できます。あなたが削除した古い段落が必要になるかもしれないので、特にラテックスに便利です!コンピューターがクラッシュしたり、新しいコンピューターで作業したりすると、その場でデータが復元されます。

短所:設定が必要です。

Rを使用したデータ分析のバージョン管理を開始するための優れた戦略は何ですか(例、ワークフローのアイデア、ソフトウェア、ガイドへのリンクなど)?

使い始めてください。私はWindowsでクライアントツールとして亀のSVNを使用し、私の部門にはsvnサーバーがあり、そこにすべてのコードとデータを入れます(そう、あなたもそこにデータを入れます!)。

6
Yin Zhu

上記の意見に同意し、「はい、バージョン管理は便利です」と言います。

利点;

  • 調査を記録し、バックアップをとる(タグ付け)
  • さまざまなアイデアを試して、うまくいかない場合は元に戻すことができます(分岐)
  • あなたは他の人とあなたの作品を共有することができ、彼らはあなたと彼らの変更を共有することができます(あなたはこれを指定しなかったことを知っていますが、それは素晴らしいです)
  • ほとんどのバージョン管理システムでは、特定の時点、たとえば、出版のために記事を送信した時点で、制御下にあるすべてのファイルの圧縮バンドルを簡単に作成できます。 (手動でこれを行うことができますが、バージョン管理が行うだけでこれらのプロセスを構成する理由)

ツールセットに関しては、 GitStatEt および Eclipse を使用しますが、Eclipseを使用する必要はありません。 EclipseのGitプラグイン がいくつかありますが、通常はコマンドラインオプションを使用します。

5
PaulHurleyuk

また、単独のスクリプト作成作業も行っていますが、それによって物事がより複雑になるのではなく、物事がよりシンプルになります。バックアップはコーディングワークフローに統合されており、ファイルシステムの手順を個別に設定する必要はありません。バージョン管理システムの基本を習得するのにかかる時間は、間違いなく十分な時間です。

4
MW Frost

Dropboxには「ppor man」のバージョン管理機能があり、少し手間をかけるだけで多くの追加の利点が得られます。

4
Zach

(あらゆる種類の)ソロ開発用のバージョン管理は、次の場合に非常に興味深いものです。

  • 履歴を調査し、現在の作業を過去のコミットと比較する
  • 分岐 および同じファイルセットに対して異なるバージョンを試す

これら2つの基本的なバージョン管理機能のいずれかを実行していない場合は、簡単なバックアップツールで十分です。
これらの機能が必要な場合は、(git bundleたとえば)

4
VonC