タイムスタンプ列の差を計算する
1.想定される利用目的
タイムスタンプの差をHH:MM:SSで詳細に把握したい
2.サンプルストリームのダウンロード
3.サンプルストリームの説明
時間の差の計算
②[フィールド作成]ノードを編集します。[datetime_in_seconds(フィールド)]でタイムスタンプをシリアル値に変換してから差をとり、[datetime_time()]でタイム型に変換します。
datetime_time(
datetime_in_seconds(E_TS) - datetime_in_seconds(S_TS)
)
プレビューを実行すると時間の差の計算結果[TIME_DIFF]が出来ています。
datetime_timeをつかうと日付部分は切り捨てられます。24時間以上の差が出ないことがわかっている場合は問題ありません。つまり、1行目と2行目のデータのように24時間以内の差であるようなデータ場合です。
しかし、3行目のように24時間を超える差があるデータがある場合、日付部分が無視されてしまいます。
タイムスタンプの差の計算
③[フィールド作成]ノードを編集します。[datetime_in_seconds(フィールド)]でタイムスタンプをシリアル値に変換してから差をとり、[datetime_timestamp()]でタイムスタンプ型に変換します。②との違いはdatetime_timeではなく、datetime_timestampを使うことです。
datetime_timestamp(
datetime_in_seconds(E_TS) - datetime_in_seconds(S_TS)
)
プレビューを実行するとタイムスタンプの差の計算結果[TS_DIFF]が出来ています。
datetime_timestampをつかうと1900-01-01を起点としたタイムスタンプデータになります。
3行目のように24時間を超える差があるデータがある場合でも3日分の差があることがわかります。
ただ、これは少し読み取りにくいかもしれません。
24時間を超える時間差の計算
③[フィールド作成]ノードを編集します。
([datetime_day(TS_DIFF)]-1)*24で24時間を超える日を時間に換算しています。そしてdatetime_hour(TS_DIFF)で時間を足しています。
分と秒はdatetime_minuteとdatetime_secondで取得しています。
時、分、秒はendstring(2,'0'><....)で囲むことで二桁に固定しています。桁をそろえておくと比較やソートが可能です。
時間が100時間を超える場合にはendstring(3,'00'><....)のような修正が必要です。
また、結果は文字列型になりますので、日時系の関数は使えなくなります。
endstring(2,'0'><to_string((datetime_day(TS_DIFF)-1)*24+datetime_hour(TS_DIFF))) >< ':' ><
endstring(2,'0'><to_string(datetime_minute(TS_DIFF)))>< ':' ><
endstring(2,'0'><to_string(datetime_second(TS_DIFF)))
プレビューを実行するとタイムスタンプの差の計算結果[TS_DIFF]が出来ています。
3日*24時間と07:41:17を足した79:41:17が出力されています。
4.参考情報
SPSS Modelerのタイムスタンプ関連clem関数をPythonで書き換える。 - Qiita
SPSS ModelerのCLEM式でよく使う「日付と時刻」関数 - Qiita
SPSS Modeler ノードリファレンス目次