MATLAB でデータ解析!と、その前に。


はじめに

データ解析に役立つ MATLAB ですが、ここではまずデータにアクセスするための下準備について見ていきましょう。例えば、複数人で同じ PC の MATLAB を使う場合、前の人が使った環境が残ってるとやっかいですよね?自分には関係ないフォルダにアクセスしちゃう、同じ名前の知らない関数呼ばれちゃう、なんてことありますよね。そこで、使う人ごとに環境を用意してしまおう、というのがメインです。

バージョン

MATLAB (R2019b) のみ!

結論から

  • 必要なフォルダに前もってパスを通し、終了時にキレイさっぱりが理想!
  • パス関連のコマンドについて、使い方を覚えておくと便利!
  • addpath で通したパスは、MATLAB セッションが切れると削除される!

想定している環境

フォルダ構成はこんな感じです。F1F3 が自由にアクセスしたいフォルダです。F3 にはサブフォルダ F3_sub があります。また、.m の関数はパスを設定するプログラムになります。

フォルダが既知で、数が少ない場合

今回みたいに、フォルダが事前に分かっていて、数が少ない場合はこんな感じ。

addTESTpath.m
function addTESTpath
% addTESTpath.m が置かれているフォルダ
rootDir = fileparts(mfilename('fullpath'));

% パスに追加するフォルダのリスト
path_temp = {};
path_temp{end+1} = rootDir;
path_temp{end+1} = fullfile(rootDir,'F1');
path_temp{end+1} = fullfile(rootDir,'F2');
path_temp{end+1} = fullfile(rootDir,'F3');
path_temp{end+1} = fullfile(rootDir,'F3', 'F3_sub');

% パスへ追加
addpath(path_temp{:},'-end');

1行目は、addTESTpath.m が置かれているフォルダのパスが出てきます。

rootDir = fileparts(mfilename('fullpath')); 

そこがルートフォルダになるので、その下にあるフォルダを追加していくイメージです。最後に addpath を使用して終わり。パスの優先順位を下げたい場合に、-end オプションを使用します。

addpath(path_temp{:},'-end');

ポイントは、この addpath で通したパス。今のセッションだけ有効です。 MATLABを再起動すれば、この情報は消えています。つまり、次使う人にとって余分な情報は残りません!

フォルダが未知、もしくは既知でも数が多い場合

上記みたいに、1つずつ指定するのは...サブフォルダまで知らないし...と感じたら自動化してみましょう。

addTESTpath_autoh.m
function addTESTpath_auto
% addTESTpath_auto.m が置かれているフォルダ
rootDir = fileparts(mfilename('fullpath'));

% パスに追加するフォルダのリスト(フォルダだけ抽出)
flist = dir(rootDir);
flist = flist(~ismember({flist.name}, { '..'}));
flist = flist([flist.isdir]);

% パスに追加するフォルダのリスト
flist_full = arrayfun(@(x) genpath(x.name),flist,'UniformOutput',false);

% パスへ追加
addpath(flist_full{:},'-end');

フォルダ情報や構成は、dirgenpath を組み合わせてみました。

結果

こんな感じになりました

参考情報