同じ日の複数の注文は一つの注文とした上で、何回目の注文なのか求める方法

今回はサンプルデータとして、注文データを使用します。

今回は、顧客ごとにその注文が何回目の注文なのかを求めていきたいです。

顧客ごとに注文回数を求める際のステップは下記となります。

  • 注文日を昇順(日付の古い順)で並べ替え
  • 顧客IDでグループ化
  • 行番号を追加

まず、注文日を昇順(日付の古い順)で並べ替えます。

その次に、Customer IDでグループ化します。

最後に、行番号を使って顧客ごとに注文回数を求めることができます。

しかし、行番号を使った方法では、同じ日に複数の注文があっても、それぞれ別の注文として求められてしまいます。

そのため、同じに日あった注文をまとめて1回にカウントしたいというのが今回の目的になります。

同じ日にあった注文をまとめて1回にカウントするために、ランク関数を使うことで解決できます。

例えば、下記のような注文データがあったとします。

Customer IDでグループ化します。

Customer IDごとにグループが分けられます。

注文日(Order_Date)に対してランク関数を使うことで、同じ日にある複数の注文を一つの注文として求めることができます。

例えば、Customer IDがAの顧客は2016-01-01に2つの注文がありますが、どちらも順位(Rank)が1になります。つまり、同じ日にある複数の注文を1つの注文とすることができます。

同じ日の複数の注文は一つの注文とした上で、何回目の注文なのか求めるためのステップは下記になります。

  • 注文日を昇順(日付の古い順)で並べ替え
  • 顧客IDでグループ化
  • ランク関数で注文回数を求める

それでは、データをラングリング(加工)していきましょう!

注文日を昇順(日付の古い順)で並び替える

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

並べ替えのダイアログが表示されるのでそのまま実行します。

注文日を昇順(日付の古い順)で並び替えることができました。

顧客IDでグループ化

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

Customer IDの列ヘッダメニューからグループ化を選択します。

Customer IDでグループ化することができました。

ランク関数で注文回数を求める

注文日(Order Date)の列ヘッダメニューから表計算を作成を選択します。

ランキングには2種類ありますが、どちらを使えばいいのでしょうか。

ランキングGapあり(min_rank) では、同率の順位があった時に、その数分の隙間を空けて順位をつけてくれます。

例えば、USとJapanとUKの3ヵ国で何かを競いあったとします。USとJapanが同じ得点のためどちらも1位になりました。UKは1位の数分の隙間を空けて3位になります。

注文回数を求めるデータでは、Customer IDがAという顧客が2016-01-01に2回注文しているのでそれらを1回目に、2017-02-09の注文は3回目にしてしまいます。

次に、ランキングGapなし(dense_rank) では、同率の順位があったとしても、次の順位は隙間を空けずに順位をつけてくれます。

先ほどのGapありではUKの順位は3位でしたが、このGapなしでは隙間を空けないため順位は2位になります。

注文回数を求めるデータでは、Customer IDがAという顧客が2016-01-01に2回注文しているのでそれらを1回目に、2017-02-09の注文は2回目にしてくれます。

今回の場合は、ランキングのGapなしが適しているので、表計算を作成からランキング(Gapなし) を選択します。

計算を作成のダイアログが表示され、計算エディタにはdense_rankという関数と引数である列名が入力されています。

任意の列名を入力して、実行ボタンをクリックします。

これにより、同じ日にある複数の注文は一つの注文として、何回目の注文なのか求めることができました。