時系列データの整理方法と散布図の作成
13 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (2)
Shunichi Kusano
el 30 de Oct. de 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
el 5 de Nov. de 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 comentarios
Ver también
Categorías
Más información sobre Annotations en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!