顧客ごとに前回の購買日から次の購買日までの期間を求める方法

今回は売上データを使用していきます。

このデータは1行が1注文となっていて、列には顧客IDや注文日、売上といった列があります。

例えば、Tomという顧客に着目してみます。

Tomはこれまで商品を3回購買していているため、3行あります。

今回は、この購買日を元に顧客の購買期間を求めたいです。

対象の購買日から前回の購買日を引くことで購買期間を求めることができます。

そして、前の値を取得したい時には、lag関数を使います。

lag(購買日)

このlag関数を使って購買期間を求めるには、下記のようになります。

購買期間 = 購買日 - lag(購買日)

購買期間を求める際の注意点

  • 購買日で並び替えされていない
  • 顧客ごとに購買期間を求められていない

購買日で並び替えされていない

当たり前ですが、購買日の列を昇順で並び替えされていないと購買期間はおかしなことになってしまいます。

そのため、購買期間を求める際には購買日を昇順で並べ替えします。

顧客ごとに購買期間を求められていない

顧客はTomだけでなく、Johnなど多くの顧客がいます。

しかし、このままではTomとJohnの購買期間を求めてしまいます。

本来、顧客の最初の購買日の行では購買期間を求めることはできません。

そのため、顧客ごとに分けて購買期間を計算したいです。

そういった時はグループ化をします。

グループ化することで、それぞれのグループごとにlag関数が適用されます。そのため、lag関数を適用した列のグループごとの最初の列は欠損値になります。

顧客名でグループ化した後にlag関数を使って購買期間を求めることで、顧客ごとに購買期間を求めることができます。

顧客ごとに購買期間を求める

顧客ごとに購買期間を求めるためには、下記の3つを実行する必要があります。

  1. 購買日を昇順で並び替える
  2. 顧客名(ID)でグループ化する
  3. lag関数を使って顧客ごとに購買期間を求める

それでは、Exploratoryで顧客ごとに購買期間を求めていきましょう。

まず、列ヘッダメニューから並び替え(ソート)昇順を選択します。

実行すると、注文日の列が昇順で並び替えされていることがわかります。

次に、顧客IDでグループ化していきます。

実行すると、テーブルの上部にグループ済みと緑で表示されます。

最後に、列ヘッダメニューから****計算を作成 (Mutate) データタイプを変換****を選択します。

計算エディタに下記を入力します。

`Order Date` - lag(`Order Date`)

実行すると、顧客ごとに購買期間を求めることができました。

購買期間の列のデータイプをよく見ると、difftimeとなっています。

このdifftimeは日付や時間の期間を求めた際に使われる特殊なデータタイプです。

しかし、チャートなどで可視化する際には使いづらいため数値型に変換します。

列ヘッダメニューから計算を作成 (Mutate) データタイプを変換Numeric (数値) タイプに変換を選び、を選択します。

データタイプが数値型に変換されました。

ヒストグラムを使って分布を可視化してみます。

X軸に先ほどの購買期間の列を選択します。

購買期間の間隔が長くなるにつれて、数が少なくなっていることがわかります。

次の値を取得したい時は?

これまでは前の値を取得するlag関数について紹介してきましたが、次の値を取得したい時にはlead関数を使います。

lead(購買日