解析のためのフォルダ構成

# はじめに

卒論・修論のために解析する方、日頃から解析する方等いるんじゃないかと思います。そういう方向けの記事です。
3年越しに最適化してきたフォルダ構成を示しますので、参考にしてもらったり、いやこうした方が良いよとかフィードバックをいただけると幸いです。

2年前のものはこちら:
[解析において僕の考える最強のフォルダ構成 - Qiita](http://qiita.com/sshojiro/items/67ee0b91a64aeefa46fa)

# 環境
一応環境は、Windows10, 64bit, git bash, matlab 2015bを使っていますが、記事内容的には全然関係ないです。

# フォルダ構成

`tree.rb` したものをある程度編集したのが下記のとおりです。役割ごとにフォルダを切り分ける、という当たり前のことをしてファイルが散らかるのを防ぎます。

pythonも、matlabもこんな感じでできる(僕は普段matlabです)と思いますが、R言語はどうなんでしょう。分かったら記事にします。

なお、拡張子があればファイルを、`/`があればフォルダを示します。

```bash:tree.rb
$ tree.rb
project-root
|-- README.md
|-- .gitignore
|-- data/
|   |-- data1/ # data保存フォルダ 1
|   `-- data2/ # data保存フォルダ 2
|-- experiments/
|   |-- category1/
|   `-- category2/
|       |-- experiment1.m
|       `-- experiment2.m
|-- libs/
|   |-- +common/
|   |   |-- FigureGenerator.m
|   |   `-- Utility.m
|   |-- +la/
|   |   |-- hessian.m
|   |   `-- jacobian.m
|   |-- tests/
|   |   `-- runtests.m # tests/unittest/*Test.m を実行してテスト結果を返す関数を置く。test-driven-developmentが可能になる。
|   `-- yaml/
|       `-- YAMLMatlab_0.4.3/ # 非常に有用な外部ライブラリ. res/以下にあるyamlファイルを読む
|-- output/
|   |-- docs/
|   |   |-- others/
|   |   |-- paper/
|   |   |   |-- yyyy-mm-dd-first-paper/
|   |   |   `-- yyyy-mm-dd-second-paper/
|   |   `-- thesis/
|   |       |-- bachelor/
|   |       `-- master/
|   |-- refs/
|   `-- slides/
|       |-- conference/
|       |   |-- yyyy-mm-dd-conference1/
|       |   |-- yyyy-mm-dd-conference2/
|       |   `-- yyyy-mm-dd-conference3/
|       |-- defense/
|       |   |-- bachelar-midterm/
|       |   |-- bachelar-final/
|       |   |-- master-midterm/
|       |   `-- master-final/
|       |-- discussion/
|       |   |-- yyyy-mm-dd-discussion.pptx
|       |   `-- yyyy-mm-dd-discussion.pptx
|       `-- others/
|-- res/ # yamlはlibs/yaml/*以下のYamlMatlabでmatlab変数にコンバートされる。その他プログラミングに関係するファイルを置く
|   |-- const.yaml
|   `-- litrconst.yaml
|-- results/ # experiments以下のフォルダ・ファイル名と対応するようにresults/以下にフォルダ等を作る
|   |-- category1/
|   `-- category2/
|       |-- experiment1/
|       `-- experiment2/
|           |-- data1/
|           `-- data2/
|-- scripts/ # 全スクリプトファイルから呼ぶような共通処理を置くフォルダ。
`-- tests/
    |-- implementation/ # 実装用のplaygroundフォルダ
    `-- unittest/ # unittestのtest suiteを置いておくフォルダ。
        |-- HelperTest.m # helper class' test class
        `-- LATest.m # linear algebra functions' test class
```

# フォルダの説明

experiments, scripts, results, libs, data, res, testsがプログラミングに関係するフォルダです。役割は次の表のとおりです。

| folder | description |
|:---:|:----|
| experiments | 検証用スクリプトをたくさん置く |
| scripts | 共通スクリプト|
| libs | 関数ファイルをたくさん置く |
| data | 解析に使う元データを置いておく |
| results | 解析結果を保存するフォルダ。<br> experimentsと対応したフォルダ構成にすると良い |
| res | プログラミングに使うけどソースコードでないもの、たとえばyamlファイルや、その他設定ファイルを置きましょう |
| tests | test classをたくさん置いておきます |

プログラムは置かないけど、研究上大事なフォルダはoutputとして切り分けます。

| folder | description |
|:---:|:----|
| output | 研究のアウトプット。slideと、docsと、refsとかに大別されるかなと。<br>発表スライドなどはslideに、論文や卒論・修論はdocsに置きましょう。 |

なお、フォルダ名に日本語を使うのは**絶対に**やめましょう。プログラミング出来ない人だと思われます。

# 結言

上記のファイル構成が全部なので、細かい解説は書かないです。読み取ってください。
質問があればコメントでお願いします。

# 2017/11/19追記
最近少し再読されているようなので追記します。
下記のPythonテンプレートジェネレータも有効だと思います。ご利用ください。
[CookieCutter for DataScience in Python](https://drivendata.github.io/cookiecutter-data-science/)

私は未だ試したことないのでなんともコメントできませんが、data scienceにおけるrails, djangoの様になるかもしれません。