売上や注文データには通常、顧客が何回目(何日目)の注文、あるいは支払いをしたのかという情報が含まれていないため、新規顧客(初回購入者)と既存顧客(複数回購入者)を区別して集計することが難しい場合があります。
特に、同じ日に複数の商品を購入した場合、注文明細が複数行に分かれるようなデータでは、単純な集計では適切な結果を得られない場合があります。
Exploratoryでは、表計算機能を使用して、各顧客の注文に対して時系列順にランク(注文回数)を付け、そのランク情報をもとに新規顧客(注文回数=1)と既存顧客(注文回数>=2)を区別して集計することで新規顧客の数や、既存顧客の数を集計できます。
ここからは実際に、新規顧客の数や既存顧客の数を集計する方法を紹介します。
今回は1行が1つの注文明細を表し、列には顧客ID、注文日などの情報を持つデータを利用します。同じ日に複数の商品を購入した場合は、複数行にわたってデータが記録されています。
まず、各顧客の注文回数を計算するために表計算機能を使用します。
顧客ごとにデータをグループに分けて、注文回数の列を追加したいので、「顧客ID」の列ヘッダーメニューから「表計算を作成」を選択します。
表計算のためのダイアログが表示されたら、グループに「顧客ID」が自動的に選択されていることを確認し、値に「注文日」を選択します。
表計算の設定ダイアログが開いたら、計算のタイプには「ランク」を選択し、ランクの種類は「Denseランク」を選択し、並び順が「昇順」になっていることを確認し、OKボタンをクリックします。
なお、ランクの種類にDenseランクを選択することで、同じ日の注文には同じランキングが付与されるようになります。
元のデータを「注文日」の古い順から新しい順にソートをしたい場合、「計算前にデータを並び替える」にチェックを入れ、並び替える列として「注文日」を選択して昇順に設定します。
最後に列名を変更するために値の編集ボタンをクリックし、「列名を指定する」にチェックを入れて、「注文回数」と入力し、実行ボタンをクリックします。
これで顧客ごとに注文回数の列が追加されました。
次に、月ごとの顧客数を集計します。
「注文日」の列ヘッダーメニューから「集計」ボタンをクリックします。
集計のダイアログが開いたら、グループには「注文日」を選択し、単位を「月」に設定します。
次に月ごとの新規顧客数を集計するために、値に「顧客ID」を選択し、集計関数には「条件に合った一意の値の数(COUNT_UNIQUE_IF)」を選択します。
条件設定ダイアログが表示されたら、列に「注文回数」、演算子に「等しい」、値に「1」を入力します。
これにより注文回数が1回の顧客の一意な値の数、すなはち、新規顧客の数が集計されるようになります。
新しい列名に「新規顧客数」と入力します。
これで月ごとの新規顧客数を集計することができます。
次に既存顧客の数を集計します。
値に「顧客ID」を選択し、集計関数には再び「条件に合った一意の値の数(COUNT_UNIQUE_IF)」を選択します。
条件設定ダイアログが表示されたら、列に「注文回数」、演算子に「以上」、値に「2」を入力します。これにより注文回数が2回以上の顧客のみ、すなはち、既存顧客の数が集計されるようになります。
新しい列名に「既存顧客数」と入力して実行します。
これで月ごとの顧客数、新規顧客数、既存顧客数がすべて集計できました。
今回の注文データをつかて、カスタムRコマンドで新規顧客数を集計したい場合、以下のRコードのサンプルをご参考ください。
# Step 1: 顧客IDごとに注文回数を計算
mutate_group(
# 顧客IDでグループ化
group_cols = c(`顧客ID` = "顧客ID"),
group_funs = c("none"),
# 注文日でソート
sort_cols = c("注文日"),
sort_funs = c("none"),
# 各顧客の注文回数を注文日の順序(ランキング)をもとに計算(1回目、2回目...)
`注文回数` = dplyr::dense_rank(注文日)
) %>%
# Step 2: 月ごとに新規顧客数を集計
summarize_group(
# 注文日でグループ化
group_cols = c(`注文日` = "注文日"),
group_funs = c("rtomon"),
# その日に初めて購入した顧客数を計算
`新規顧客数` = count_unique_if(顧客ID, 注文回数 == 1)
)
今回の注文データをつかて、カスタムRコマンドで既存顧客の数を集計したい場合、以下のRコードのサンプルをご参考ください。
# Step 1: 顧客IDごとに注文回数を計算
mutate_group(
# 顧客IDでグループ化
group_cols = c(`顧客ID` = "顧客ID"),
group_funs = c("none"),
# 注文日でソート
sort_cols = c("注文日"),
sort_funs = c("none"),
# 各顧客の注文回数を注文日の順序(ランキング)をもとに計算(1回目、2回目...)
`注文回数` = dplyr::dense_rank(注文日)
) %>%
# Step 2: 月ごとに既存顧客の数を集計
summarize_group(
# 注文日でグループ化
group_cols = c(`注文日` = "注文日"),
group_funs = c("rtomon"),
`既存顧客数` = count_unique_if(顧客ID, 注文回数 >= 2)
)