MATLAB Answers

時系列データの統合について

3 views (last 30 days)
竜樹 佐藤
竜樹 佐藤 on 6 Oct 2021
Commented: 竜樹 佐藤 on 7 Oct 2021
時系列データの統合について質問です。
例えば前後方向の重心動揺データのような時系列データをサンプリング周波数100Hzで10秒間×3回取得(10000個の列データ×3つ)したとします。この3つのデータを統合(平均?)して1つの平均的な時系列データを作成したい場合,単純に各時系列ごとの平均(3つをそれぞれ1~10000目までのデータを順に平均して,1000個のデータを作成)をすれば正しいデータとして解釈可能でしょうか?もし違いましたら正しい方法や関数などあれば教えていただきたいです。また3つのデータの長さ(計測時間がそれぞれ違う)が違う場合のデータの統合方法を教えていただきたいです。

Answers (1)

Hernia Baby
Hernia Baby on 6 Oct 2021
Edited: Hernia Baby on 7 Oct 2021
計測開始時間と刻み幅が同じであれば隣の列と平均すればいいと思います
mean を参照ください
■編集:
データの最後がそれぞれ違うことを気にされてるようなので少し深く書きます
実際にAにNaNを入れて議論してみましょう
A = xlsread('例.xlsx');
今回、1列目の長さが850行まで、3列目の長さが950行までとします
A(850:end,1) = NaN;
A(950:end,3) = NaN;
左3列が845~855行目、右3列が945~955行目として見てみましょう
disp([A(845:855,:) A(945:955,:)])
15.7000 -20.0000 -10.7000 NaN -14.4000 -5.9000 15.6000 -20.0000 -10.6000 NaN -14.4000 -5.7000 15.5000 -19.8000 -10.7000 NaN -14.1000 -5.5000 15.5000 -19.8000 -10.7000 NaN -14.1000 -5.5000 15.5000 -19.7000 -10.5000 NaN -14.0000 -5.8000 NaN -19.7000 -10.5000 NaN -14.0000 NaN NaN -19.5000 -10.3000 NaN -14.1000 NaN NaN -19.3000 -10.5000 NaN -13.8000 NaN NaN -19.2000 -10.5000 NaN -13.8000 NaN NaN -19.2000 -10.5000 NaN -13.7000 NaN NaN -18.8000 -10.4000 NaN -13.3000 NaN
上記のように途中からNaNになっていることがわかります
これはデータの長さが違うけど、NaNという非数値で埋めてる感じです
----------
図示しつつ平均を取ってみましょう
mean は NaN がある部分は NaNで返す、つまり空欄にする機能がデフォルトになってます
for i = 1:3
plot(A(:,i),':')
hold on
end
A_mean = mean(A,2);
plot(A_mean)
上記のように850行前まで平均を取っています
ですがそれ以降はNaNとなっていて、これを消したい場合があります
size(A_mean)
ans = 1×2
1000 1
そもそもAの時点でNaNがある行を消したいよって思うかもしれません
そこでデータ長を合わせる話になります
参考:Aで850行目以降を消す方法
849行でAを切ってみましょう
B = A(1:849,:);
size(B)
ans = 1×2
849 3
もしくは850行目以降を消します
B = A;
B(850:end,:)=[];
size(B)
ans = 1×2
849 3
ただこれをいちいちやってたら面倒ですよね?
NaNを探してその行以降を消して…一発ですっきりしたいと思います
そんなときは rmmissing を使いましょう
B = rmmissing(A);
size(B)
ans = 1×2
849 3
  3 Comments
竜樹 佐藤
竜樹 佐藤 on 7 Oct 2021
丁寧な説明ありがとうございました!
しっかり理解することができました

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!