データに存在しない日付の値をチャートの機能で埋める方法

例えば、たまに割引率を変更している小売店があってとして、その変更履歴データが以下のようだったとします。

Product(製品)という列には、製品Aなのか製品Bなのかという情報が入っています。それぞれの製品は異なる日付に異なる割引率が設定されているのがわかります。

このデータをExploratoryのラインチャートで単純に可視化すると、デフォルトでは次のようになります。

しかし、これはちょっとおかしいです。例えば、10月1日から15日あたりの線を見ると、割引率は徐々に変わっているように見えますが、それは実際のデータを反映しているとは言えません。ここでの割引率とは異なる割引に設定されるまでは同じ値であるべきです。

つまり、本来であれば以下のチャートのように製品A、製品Bともに割引率は10月15日まで0.1であるべきです。

では、どうやってこのチャートを作ることができるのでしょうか。

ここでの問題は、このデータには割引率が変更された日のデータしかなく、期限内のそれ以外のデータはないということです。そのため、下記のようにデータの期間である10月1日から12月10日までの全ての日付を用意してあげる必要があります。

しかし、このデータを単純に可視化することが目的であれば、データラングリングは必要ありません。

チャートの設定を少し変えるだけで、簡単に解決できます。

それではやってみましょう!

チャートの「値がない場合の処理」で値を埋める

ラインチャート作成し、X軸にDateを選びスケールは「日に切り捨て」、Y軸にDiscount Rateを選び集計関数は「合計値(Sum)」、色(グループ化)にProductを選択します。

Y軸のメニューから「値がない場合の処理」を選びます。

値がない場合の処理を「前の値で埋める」にし、データの範囲を「全データ範囲を通して埋める」を選択します。

そうすることで、同様のチャートを作成することができました。

AとBの割引率が変更された日のみ増減が表示されています。

まとめ

チャート内の「値がない場合の処理」の設定を使うことで、簡単に欠損値の処理することができるのは大変便利なショートカットとなります。

ところで、たまにデータに存在しない日付のデータをデータラングリングをして生成する必要がある場合があります。例えば、生成したデータをもとに時系列予測や機械学習のモデルを作る必要があったり、別のデータと結合する必要があったりなど、いろいろあります。

そのような時は、実は2つのRの関数を組み合わせることで、比較的シンプルにこの問題を解決することができます。

次回はRコマンドのComplete関数とSeq.Date関数を使ってデータに存在しない日付データを作っていきたいと思います。