RStudio のプロジェクト管理

概要

講義: 20 分
演習: 10 分
質問
  • R のプロジェクトの管理はどうしたら良いですか?

目標
  • RStudio のプロジェクトを作成出来るようになりましょう

はじめに

科学的なプロセスは、徐々に進んでいくものです。プロジェクトの多くは、 計画性のないメモやいくつかのコードから始まります。そして、原案ができ、 最終的に、全てが少しづつ混ざり合ってまとまっていくのです。

大抵の人達は、次のようにプロジェクトを整理する傾向にあります:

このようなことを絶対避けるべき理由はいくつもあります:

  1. データのどのバージョンが原本か修正版かを判別することが、とても難しくなります
  2. どれが原本でどれが修正した版のデータか判別するのがとても難しくなる
  3. 幾つもの拡張子の異なるファイルを一緒に混ぜ合わせるため、 とてもごちゃごちゃしてくる
  4. 探しているものを見つけたり、正しい図とその図を出力する コードの対応が分かるようになるのに、時間がかかる

プロジェクトのレイアウトが良ければ、最終的に自分が楽になる

考えられる解決策

幸いなことに、効果的な作業管理を助けるツールやパッケージがあります

RStudioの最も有能て使えるもののひとつとして、プロジェクト管理機能が挙げられます。 今日では、必要なものが揃い、再現可能なプロジェクトを作成するために、これが使われているのでしょう。

チャレンジ:必要なものが揃ったプロジェクトを作成する

RStudioで新しいプロジェクトを作成しよう:

  1. “File” メニューボタンをクリックし、”New Project”をクリック
  2. “New Directory”をクリック
  3. “Empty Project”をクリック
  4. プロジェクトを保存するディレクトリの名前をタイプ(例 “my_project”)
  5. 可能なら、”Create a git repository”のチェックボックスを選択
  6. “Create Project” ボタンをクリック

このプロジェクトのディレクトリでRをスタートする、またはRStudioでこのプロジェクトを開けば、 このプロジェクトについての全てのファイルは、このディレクトリにこれで全て揃うことになります。

プロジェクト管理の最適なやり方

プロジェクトのレイアウトに「最適」な方法はありませんが、これを守れば、 プロジェクト管理が簡単になるだろうという一般的な原則がいくつかあります:

データは読み込み専用にしましょう

プロジェクトを始めるにあたって、これが多分一番重要なゴールかもしれません。 データ収集には、多くの時間と費用のいずれか、または両方が掛かることが多いものです。 データの修正も行える形で読込みも書込みもできる作業(例えば、エクセル)をすると、 データがどこからきたか、または収集されてからどう修正されてきたかが分からなくなります。 ですから、データは「読み込むだけ」のものと扱うのがよいというわけです。

データクリーニング

多くの場合、データは「汚れて」います: R(または、他のプログラミング言語)が使える形にするためには、かなりの前処理が必要となるでしょう。 この作業は、「データ・マンジング」と呼ばれることもあります。 前処理で書いたコードは、 違うフォルダに保存し、「きれいにした」データセットをこのフォルダに 置くと便利です。

生成されたアウトプットを捨てても良いようにしましょう

書いたものから生成されたものは、全て捨てても良いものにしましょう。 つまり、書いたものから生成できるようにしましょう。

アウトプットを管理する方法は様々です。便利なのは、アウトプットフォルダを作り、 そこへ分析ごとに作ったサブディレクトリを保存する方法です。 そうすると後々楽になります。多くの分析は探索的なもので、 最終的なプロジェクトでは使われませんが、なかにはプロジェクト間で共有される分析もあるからです。

ヒント:科学的演算の良いと言えるやり方

Good Enough Practices for Scientific Computing(科学的演算の良いと言えるやり方) プロジェクトの整理について薦めていることは以下のとおりです。

  1. それぞれのプロジェクトを独自のディレクトリに置き、プロジェクトから取った名前をつける
  2. プロジェクトに関連するテキスト文書を doc ディレクトリに置く
  3. 生のデータとメタデータをdataのディレクトリに置き、クリーンアップで生成されたファイルと分析に使ったファイルを results ディレクトリに置く
  4. プロジェクトで書いたスクリプトとプログラムのソースは、src ディレクトリに、違うところから持ってきた、またはローカルで変換されたものは bin ディレクトリに置く
  5. 全てのファイルを中身や機能を反映する形で名づけること

関数定義と適用は別々にしましょう

Rで作業するより効果的な方法のひとつは、まず走らせたいコードを直接.Rスクリプトに書き、それから選択した行をインタラクティブなRコンソールで(RStudioのショートカットキーを使うか、「Run」ボタンをクリックして)走らせることです。

プロジェクトの初期段階では、最初の.Rスクリプトファイルには直接実行されるコードの行が多数あるものです。 プロジェクトが進むにつれて、何度も使える部分は、独自の関数としてまとめられます。 これらの関数を、色々なプロジェクトや分析で使える関数を保存するフォルダと、この分析のスクリプトを保存するフォルダの2つの異なるフォルダに分けるとよいでしょう。

ヒント: 重複を防ぐ

複数のプロジェクトで、同じデータや分析のスクリプトを使っていることに気づくことがあるかもしれません 普通は、複数の場所でコードを更新しなければいけない状況を避ける、または省スペースのため、重複を避けようとするでしょう。

この場合、ファイルシステム上で別の場所にあるファイルへのショートカットとして「symbolic links」を使うとよいでしょう。 Linux 及び OS X では、ln -s コマンドで、Windowsでは、Windowsのターミナルからmklink コマンドで、 ショートカットを作ることができます。

データディレクトリにデータを保存しましょう

よいディレクトリ構造ができた後は、データファイルを data/ ディレクトリに置く、または保管しましょう。

チャレンジ1

ギャップマインダーのデータをここからダウンロードしましょう

  1. ファイルをダウンロードする(CTRL + S、右マウスクリック -> 「名前を付けて保存する」、またはファイル -> 「ページを名前を付けて保存する」)
  2. 確実に gapminder_data.csv という名前で保存しましょう
  3. プロジェクトの中にある data/ フォルダに保存しましょう

このデータは後で読み込んで色々調べます

チャレンジ2

Rに読み込む前に、コマンドラインから直接、データセットの概要を得ておくといいでしょう。 データセットをよりよく理解しておくと、データセットをどうRに読み込むか決める際に役に立ちます。 シェルのコマンドラインを使って、次の問題に答えて下さい:

  1. ファイルのサイズは何ですか?
  2. データは何列入っていますか?
  3. ファイルには、どのような値が保存されていますか?

チャレンジ2の解答

以下のコマンドをシェルで実行すれば答えられます:

ls -lh data/gapminder_data.csv
-rw-r--r--  1 naupaka  staff    80K Sep  2 15:54 data/gapminder_data.csv

ファイルサイズは、80K

wc -l data/gapminder_data.csv
    1705 data/gapminder_data.csv

1705行あり、データは次のような形をしています:

head data/gapminder_data.csv
country,year,pop,continent,lifeExp,gdpPercap
Afghanistan,1952,8425333,Asia,28.801,779.4453145
Afghanistan,1957,9240934,Asia,30.332,820.8530296
Afghanistan,1962,10267083,Asia,31.997,853.10071
Afghanistan,1967,11537966,Asia,34.02,836.1971382
Afghanistan,1972,13079460,Asia,36.088,739.9811058
Afghanistan,1977,14880372,Asia,38.438,786.11336
Afghanistan,1982,12881816,Asia,39.854,978.0114388
Afghanistan,1987,13867957,Asia,40.822,852.3959448
Afghanistan,1992,16317921,Asia,41.674,649.3413952

ヒント:R Studioのコマンドライン

RStudioでは、メニュー項目のTools -> Shell…を使って、シェルを素早く開くことができます。

バージョン・コントロール

プロジェクトでは、バージョン・コントロールを使うことが重要です。 RStudioでGitを使う良いレッスンを参照して下さい。

まとめ

  • RStudio でプロジェクトの生成と管理を行う。

  • 生データは読み込み専用とする。

  • 生成された出力は使い捨てとする。

  • 関数定義と適用は別々にする。