global macroとフォルダ分け<作業効率化>

プログラミング

このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.

Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.

さて、今回は研究を行う作業環境について、説明したいと思います.

以前も同じようなDo fileの整理の仕方に関する記事を書いていますが、もうちょっと補足した形です.

1.フォルダ分けについて

いくつかのプロジェクトを掛け持ちしていて、しばらく一つのタスクに集中して別のプロジェクトから遠のいていた場合、

「どこまで作業やったんだっけなー…」

「どれが最新のDo fileだっけなー…」

などというご経験はないでしょうか?

かく言う私もそんな人間の一人でした.しかし、それではイカン!と思い立ち、ある工夫をすることにしました.もともと整理整頓があまり得意なほうではありませんでしたが、必要に迫られた結果身に付いたスキルの1つです.

まずはその第1歩として、プロジェクト専用のフォルダを作成したところで、サブフォルダをいくつか作成しましょう.

基本は、

  1. オリジナルファイル → これは絶対に加工しない.加工するならコピー・別でバックアップなど
  2. 解析プログラム → ここに中間ファイルなどをいれてもよいが、個人的には別にしています
  3. 最終データ・ログ → 頼まれ解析であればこれを最後に結果とともに提出

からスタートで、必要に応じて追加していくとよいと思います.

例えば以下のように、

  1. オリジナルファイル
  2. 解析プログラム
  3. ログ
  4. 中間ファイル
  5. 最終データセット
  6. Figure
  7. Old

というような感じに分けておいて、それをそれぞれglobal macroで定義しておきます.

global org “C:\Users\…\1.Original files\”

global log “C:\Users\…\3.Logs\”

global data “C:\Users\…\4.Intermediate files\”

global final “C:\Users\…\5.Final datasets\”

global figure “C:\Users\…\6.Figures\”

というのをプログラムの冒頭にいれておきます.

もらってきたデータはオリジナルデータなので、そこは絶対に触らないこと.

それを基に作成した解析用のデータはintermediate filesにいれていきます.

最終的にこれで解析結果をだしました、みたいな最終ファイルはfinalとして結果とともに依頼元に提出しましょう.

figureはそこにStata形式で保管しておいてillustratorを使って仕上げるのが最近のスタイルです.Stataのファイルでctrl + Cでベクター画像が取れますので、それをそのままillustratorに貼ってしまいます.これならそちらで細かく編集できます.

古くなった中間ファイルなどはoldに最終編集日の日付を後ろにつけて次々に入れていくことで必要なものだけが必要な場所に残ります.ミニマリスト!

こんな感じで日々の業務効率化を図っておりますが、なかなかよいです.慣れるまではちょっと面倒ですが、時間が空いて作業を再開するときも何がどこにあってどんなステータスなのかを理解しやすくなりましたので、だいぶ楽です.

複数のタスクを走らせているとわけがわからなくなるのですが、いつでも同じルールにしておくと楽です.

ちなみにlogは極力毎日とるようにしています.途中段階のものも、その日の活動記録になります。最後に閉じるまえに、コメントを入れたりすると研究ノートにもなってしまいますので、大学院生への指導をする際にはそんな使い方をするように一応推奨しています.

2.実際の使い方

Do fileの構成としては、一番上にどんな目的で作成されたプログラムなのか、そしてどんな解析をどんなデータを使って行っているのか、ということについてテキストで入れておきます.

そのあとで、以下のようなセクションを設けます.

*** environment
	set more off
    global log "C:\Users\...\3.Logs\"
	global data "C:\Users\…\4.Intermediate files\"
	global figure "C:\Users\…\6.Figures\"
  
*** starting log
	log using "${log}datadescription_220306", replace
********************************************************************************
**#  1. Baseline characteristics 
********************************************************************************
use "${data}dataset", clear

こんな感じで始めていきます.

注意したいのは、global macroで作業ディレクトリを指定するときは、最後のバックスラッシュ(または\マーク)を忘れずに入れること、それと、$マークの後に入れるマクロに{}をつけるようにすることです.

ちなみに上の、**#というのはこれでインデックスを作れるので便利です.Do file内を迷子にならずに済みますので、ぜひ有効活用してみましょう.

3.応用編 

異なるコンピュータで作業を行うときに、作業ディレクトリが違ってしまって上記のマクロがうまく働かなくなってしまうことがあります.

そんなときはいずれのコンピュータでも対応できるように、二つの作業ディレクトリを指定することも可能です.このとき先頭にcaptureをいれておきます.エラーが出るようなら走らせないようにするためのコマンドです.

これを応用すると、複数の人とクラウド上でデータを共有して作業を行うようなこともできます.

capture cd "C:\Users\user_AA\Dropbox\project_XXX\"
capture cd "C:\Users\user_BB\Dropbox\project_XXX\"
capture use "YYY.dta",clear

こんな感じで作業を効率化してみてはいかがでしょうか?

また、他にもいい方法がありましたら教えてください.

コメント

タイトルとURLをコピーしました