時系列データの整理方法と散布図の作成
2 views (last 30 days)
Show older comments
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
Answers (2)
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関数が使えます。
欠損があるとのことですが、欠損部分のデータはどのようになっているのでしょうか。
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
See Also
Categories
Find more on データ分布プロット in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!