Dataikuで時系列データをリサンプリングする

# Dataikuで時系列データをリサンプリングする

## はじめに

Dataiku社から、データ分析の学習のためのコンテンツとして提供されている、[Dataiku Academy](https://academy.dataiku.com/latest/)で学習しています。
以前、「[Dataikuで時系列データのグラフを作成してみる](https://qiita.com/goya1021/items/ecdba2fe1da0ec5a2191)」で、時系列データをグラフで表示しました。今回は、[Time Series Preparation](https://academy.dataiku.com/time-series-preparation-1)を参考にして、Dataiku DSSを使って時系列データの前処理の１つであるリサンプリングする方法を試してみます。

## リサンプリングとは

時系列データが一定の間隔でサンプリングされていない場合や、複数のデータでデータのサンプリング間隔が異なっている場合は、そのままのデータで分析するのは難しいです。そのようなデータをもとに分析できるようにするために、時間間隔が一定となるようにデータを変換することをリサンプリングと言います。

## 時系列データ前処理用のプラグインのインストール

今回、リサンプリングするために、[Time series preparation](https://www.dataiku.com/product/plugins/timeseries-preparation/)のプラグインを使用します。事前にこのプラグインをDataiku DSSにインストールします。インストールは次のようにします。

1. 画面右上のキューブアイコンから、［Plugins］をクリックして、［Plugins］画面を表示します。
2. ［Plugins］画面で［Time Series Preparation］の［INSTALL］をクリックします。確認画面が表示されますので［CONFIRM INSTALL］をクリックします。インストール処理が開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/fcb9be85-90dd-c5f0-bdea-c038f863dac1.png)
3. 途中、［Creating code environment］でコード環境の作成を促す画面が表示されるので、［BUILD NEW ENVIRONMENT］をクリックします。しばらくするとコード環境ができたことを案内するメッセージが表示されるので［OK］をクリックします。その後、［NEXT］をクリックして、インストール完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/bab79b38-1c92-e030-4649-a509d44f6c3f.png)


## Haiku T-Shirtショップの売上データを用いてリサンプリングを体験

[Hands-On: Resampling Time Series Data](https://academy.dataiku.com/time-series-preparation-1/609999)を参考にして、Dataiku DSSを使ってリサンプリングをしてみます。

### プロジェクトを作成する

Dataiku DSSのホームページの右上にある［+ NEW PROJECT］をクリックして、［DSS Tutorials］>［ML Practitoner］>［Time Series Preparation(Tutorial)］をクリックします。プロジェクトが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/cdfce9be-6013-82fa-527d-8564f86a485c.png)

### 時間間隔が一定になるようにリサンプリングする

orders_by_dateでは、tshirt_categoryの種類によって、時間間隔がまちまちです。これでは分析が進めづらいので同じ時間間隔のタイムスタンプになるようにリサンプリングします。

1. プロジェクトを開いた後、フローを表示します。その後、データセット［orders_by_date］を選択して、画面右にある［Time Series Preparation］をクリックします。
2. ［Time Series Preparation］画面から、［Time series resampling］をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/a477f1e4-8ca4-b470-e53a-6ce5a6b2c82d.png)
3. レシピ設定画面から、Outputsの設定をして［CREATE DATASET］をクリックした後、［CREATE］をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/c63a7053-d77e-692e-eb7f-359fe9a6eb12.png)
4. ［Time series resampling］画面で次の設定をします。設定した後、画面右下の［RUN］をクリックします。
 - Timestamp column：order_date
 - Time step：1
 - Unit：Days
 - Interpolation method：Don't interpolation(no value)
 - Extrapolation method：Don't interpolation(no value)
 - Long Format：チェックする
 - Column with identifier：tshirt_category
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/dc958213-0813-c190-3157-4d405b3ca2c1.png)

この操作をすると、［order_date］で等間隔の日時のタイムスタンプが設定されます。もともと、タイムスタンプがなかったレコードのtshirt_quantity、やamount_spentには、内挿（Interpolation）や外挿（Extrapolation）をしない設定でしたので、欠損を示すグレー表示になります。内挿や外挿については、[こちら](https://www.atmarkit.co.jp/ait/articles/2008/26/news017.html)を参照してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/09a75c03-dc53-d988-11b9-0fdc0b852206.png)

### 内挿する

データの範囲内の欠損しているデータを補間します。
データを補間する場合、例えば、温度データや日次の売上高など、対象によって補間方法は異なるため、対象にあった補間方法を選択する必要があります。
今回のHaiku T-Shirtショップのデータでレコードがないことは、その日の売上がなかったことを示すので、0で補間します。

先ほどの［Time series resampling］画面で、次のように設定します。それ以外の設定は変更しません。
- Interpolation method：Constant
- Constant value：0

実行すると、最初に値があるレコード以降のデータが存在する範囲内にある値がなかったところに0が設定されます。内挿はすべてのデータ項目に適用されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/5a344eca-23a8-ba79-55ee-5fbbe82c1197.png)

今回は一定値で補間しましたが、他にも次の方法で補間することができます。

|補間方法|内容|
|---|---|
|Nearest|最も近い値で補間|
|Previous|直前の値で補間|
|Next|直後のデータで補間|
|Linear|線形補間|
|Mean|平均値で補間|
|Quadratic|二次スプライン補間|
|Cubic|三次スプライン補間|
|Constant|一定値で補間|
|Don't interpolate(no value)|補間しない|

### 外挿する

データの先頭から最初の値までの間を補間するには外挿をします。外挿は、最後の値から最後のタイムスタンプまでの補間も行います。

先ほどの［Time series resampling］画面で、次のように設定します。それ以外の設定は変更しません。
- Extrapolation method：Same as interpolation

実行すると、最初から値がなかったところに0が設定されます。外挿も内挿と同じくすべてのデータ項目に適用されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417992/b65fae7b-154c-1fa5-bd95-1a7f7996700f.png)

### 時系列データを編集する

例えば製造現場では、測定機器から適切な値を取得できるまでに数秒かかる場合があり、最初の方のデータを使いたくないなど、時系列データを編集したい場合が出てきます。
Haiku T-Shirtショップのデータで最初の１か月分のデータを使用しない場合は、次のように設定します。

先ほどの［Time series resampling］画面で、次のように設定します。それ以外の設定は変更しません。
- Clip start：31 

実行すると、最初の１か月分のデータが削除されます。

## さいごに

Dataiku DSSを使って、時系列データをリサンプリングしてグラフ表示してみました。DataikuのChart機能を用いることで手軽にグラフを作成することができました。
次回は、時系列データの区間抽出（Interval Extraction）を試してみようと思います。
よかったら、みなさんもDataikuを利用してみてください。

## 参考
[内挿／外挿（Interpolation／Extrapolation）とは？](https://www.atmarkit.co.jp/ait/articles/2008/26/news017.html)