MATLAB Answers

Kog
0

時系列データの整理方法と散布図の作成

Asked by Kog
on 30 Oct 2019
Latest activity Answered by Shunichi Kusano on 5 Nov 2019
2019 08 11 23 44 4.30e+01 10000.21
のようなフォーマットの時系列データAを持っていて、これを
2019 08 11 23 44 4.30e+01 10
のような別の時系列データBと結合させたいと考えています。
結合の際にはAは記録がとれていないところもあり、
とれているデータのみで結合したファイルを作成したいです。
最後にA、Bそれぞれを散布図にしたいと思います。
時系列データはとりあつかったことがなく、この場合どのように処理したらよいでしょうか。
それぞれ
year, month, hour, min, sec, センサー値
になっています。
よろしくお願いします。

  0 Comments

Sign in to comment.

2 Answers

Answer by Shunichi Kusano on 30 Oct 2019

データのフォーマットが違ったら教えてください。
とりあえず、[year month day hour min sec data]の順で数値の入った数値配列がお手元にあると仮定して進めます。
時系列データがわかりやすく順番通りに並んでいるので、そのままdatetime関数に突っ込むとdatetime型になります。
A = [2019 08 11 23 44 4.30e+01 10000.21];
% 時間に関わるデータだけdatetime型に変換する
timeA = datetime(A(:,1:end-1)) % N行 x 7列の数値配列データでもこのままで大丈夫です。
散布図は横軸時間、縦軸センサー値として
scatter(timeA, A(:,end));
で描画できます。
AとBの結合ですが、同じようにBの方もdatetime型に変換したうえで、
timeAll = [timeA; timeB];
で結合できます。その際、センサー値も同じように結合してください。
散布図として表示するのであればこのままで問題ありませんが、気持ち悪いので時間で並べ替えたいという場合は、通常の数値配列と同様にsort関数が使えます。
欠損があるとのことですが、欠損部分のデータはどのようになっているのでしょうか。

  1 Comment

Kog
on 31 Oct 2019
無事に散布図まで書くことができました、ありがとうございます!
データフォーマットあってました。
欠損データに関してですが、Aの方が秒のデータを持っているのに対して、Bの方はフンまでのデータなのです。
年 月 時間 分 データ
2019 08 11 23 44 10
なので、Aの方は秒のデータを平均して、フン当たりのデータに変換した後にBとくっつけられれば理想です。可能でしょうか。少し別の質問になってしまい、すみません。
また最終的に合わせたデータに対してsortを使い並び変えること可能でしょうか?timeAだけのデータでsortしようとしてもエラーが出てしまいました。

Sign in to comment.


Answer by Shunichi Kusano on 5 Nov 2019

返事が遅くなり申し訳ありません。
>Aの方は秒のデータを平均して、フン当たりのデータに変換した後にBとくっつけられれば理想です。可能でしょうか。
可能です。下記の関数を見てみてください。
今回は同じ分ごとにグループ分けする必要がありますので、いったん時系列データを文字列にしてしまって(例えば'201908112344')、テーブル型としてデータを再作成するのがいいかもしれません。これで上記関数を適用して、分ごとの平均値を求めることができます。
なので流れとしては、
1 上記timeAから文字列の時系列データを作成
timeA.Format = 'yyyyMMddHHmm';
char(timeA)
2 これとA(:,end)を使って、テーブル型データを作る(1列目に時間、2列目にセンサ値のテーブル)
3 splitapply関数で分ごとの平均値を算出(G(分の文字列データ)とY(平均値データ)を得る)
4 Gを再び時系列データdatetime型に変換してYと合わせて、Bと結合
>timeAだけのデータでsortしようとしてもエラーが出てしまいました。
プログラムとエラー文を添付いただけますでしょうか。私の環境ではsort出来たので、詳しい状況を知りたく思います。

  0 Comments

Sign in to comment.