データ解析をするためにプロットを多数表示する。
2 views (last 30 days)
Show older comments
Shinsuke Okayasu
on 21 Feb 2020
Commented: Shinsuke Okayasu
on 24 Feb 2020
ライブスクリプト上でデータ解析を実施するのが目的です。
エクセル、CSV上のデータをMatlab上にインポートしました。
特定の列(データ名有)のデータが別の列データと相関やn次関数と近似できるかどうかを確認したいです。
関係性を可視化するためにプロット一覧を表示したいのですが、そのために有効手段はあるでしょうか?
3 Comments
Accepted Answer
Hiroki Okawa
on 21 Feb 2020
Edited: Hiroki Okawa
on 21 Feb 2020
配列なのかTableによって、細かいコードは変わってきます。
データが二次元配列で、各列がデータだと仮定してみます。
data_x = 1 : 100;
data_y = rand(100, 50);
という1サンプル100点、50サンプルに対して、例えば相関係数であれば
mat_cc = corrcoef(data_y);
でそれぞれの組み合わせの相関係数が得られます。mat_cc(i, j) はdata_y(:, i)と data_y(:, j)の相関係数です。
ある列cに対して相関係数が最も高い列を一緒にプロットしたい場合、
c = 1; % 仮にc = 1と置きます。
[~, index] = max(mat_cc(c, :) - eye(50) * Inf);
% index = mat_cc(:, c) > 0.7; % 相関係数が0.7以上のものを全てプロットする場合はこのように。
figure;
plot(data_x, data_y(:, c), '-', data_x, data_y(:, index), '--');
title([num2str(c), '列目に対して最も相関係数が高い列: ', num2str(index)])
となります。
どのようなデータに対して、具体的にどのような処理を行い、どのようなグラフを示したいのかを示し、今どこで躓いているのかを教えていただけますとより具体的なアドバイスができるかもしれません。
3 Comments
Hiroki Okawa
on 21 Feb 2020
Edited: Hiroki Okawa
on 21 Feb 2020
綺麗にまとまっているデータですね!
今回必要なセンサーデータを table2array関数などで取り出せば、上記のcorrcoef関数が利用可能です。
data_y = table2array(T(:, 5:end)); % Tがエクセルから取り出したテーブル変数と仮定しています。
ちなみに、得られたインデックスindexから列名を取得したい場合、テーブル変数Tに対して
T.Properties.VariableNames{index}
となります。コマンドウィンドウに文字列で表示する場合は
disp([T.Properties.VariableNames{c}, ' に対して最も相関係数が高いセンサー: ', T.Properties.VariableNames{index}])
となります。これらをfor文で実行すれば各列分の処理ができます。
高いものから順番にn個見つけたい場合はmaxk関数もありますので、ぜひコードを書いてみてください。
More Answers (0)
See Also
Categories
Find more on Bar Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!