LoginSignup
2
0

More than 1 year has passed since last update.

SPSS Modelerで欠損した日付のレコードを補間する。売上がない日のデータ補間

Last updated at Posted at 2022-04-27

欠損した日付のレコードを補間

日ごとに記録された時系列データで、ある日付のレコードが抜けていることがあります。
例えば日ごとの売上データで、ある日の売上がなかったのでレコード自体が存在しないような場合で、以下の左のデータでは2021-12-31の売上がなかったのでレコード自体が存在していません。これを右のデータのように2021-12-31で売上0のレコードを補間したいと思います。

image.png

この記事ではこのようにレコード自体が存在しない時系列データのレコードをSPSS ModelerのR拡張ノードを使って、補間していきます。

■サンプルストリーム

■テスト環境
Modeler 18.3
R 4.0.5
Windows 10 64bit

Rの連携のセットアップが必要です。
SPSS Modelerの拡張ノードでRを利用する
https://qiita.com/kawada2017/items/0bb68e0b577e02bb8c6a

まず補間の範囲を決めます。ここでは「レコード集計ノード」をつかって、データの最小日付と最大日付を求めています。

image.png

以下のようなデータが返ります。
image.png

次に「拡張の変換ノード」を接続し、以下のRスクリプトを入力します。
image.png

日付レコード補間.r
startDate=modelerData[,1]
endDate=modelerData[,2]
modelerData<-cbind(data.frame(seq(startDate,endDate,by="days")))

#メタデータ設定
modelerDataModel<-data.frame(X1=c(fieldName='日付',fieldLabel="",fieldStorage="date",fieldMeasure="",fieldFormat="",fieldRole=""))

少し解説をします。
以下で、Modelerの1列目と2列目のデータを開始日付、終了日付として取得しています。

startDate=modelerData[,1]
endDate=modelerData[,2]

以下のseq(startDate,endDate,by="days")でstartDateからendDateまでの日付データを生成しています。

modelerData<-cbind(data.frame(seq(startDate,endDate,by="days")))

最後にModelerに戻すデータの列名やデータ型を指定しています。

#メタデータ設定
modelerDataModel<-data.frame(X1=c(fieldName='日付',fieldLabel="",fieldStorage="date",fieldMeasure="",fieldFormat="",fieldRole=""))

プレビューすると開始日付と終了日付の間の日付データが生成されていて、元データでは欠損していた2021-12-31のデータも生成されていることがわかります。

image.png

これを元データと外部結合します。
image.png

以下のように欠損していた2021-12-31のデータが売上がNULLで補間できました。
image.png

後は「置換ノード」でNULLを0に変換するなどの補間を行えば完成です。

image.png

売上のなかった2021-12-31のレコードが補間できました。
image.png

参考情報

  • Rで連続する秒などのタイムスタンプのベクトルを作る - Qiita
    • Rのseq関数は日付以外にも年月日時分秒または週毎の補間も可能です。

  • SPSS Modelerで欠損したタイムスタンプのレコードを補間する。取得できなかったセンサーデータの補間 - Qiita
    • 欠損した「秒」の補間についての記事です。

  • Modelerデータ加工Tips#03-欠損値に直前の値を代入または線形補間する | IBM ソリューション ブログ
    • 今回は単純に0で補間しましたが、平均など様々な補間方法を紹介しています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0