基本帳票編:ある商品と同時購入された商品売上ベスト

本章では、初級コマンドで用いた2002年のデータを用いて、下図に示すような「調味料と同時購入された小分類商品売上ベスト20」の帳票を作成する。


出力結果

ある小分類商品(1101:調味料)と同時購入された小分類商品売上数量ベスト20

チュートリアル

順位 小分類 小分類名 数量
1 1403 清涼飲料 2490
2 1301 菓子 2133
3 1406 アルコール飲料 1957
4 1401 嗜好飲料 1247
5 1105 調理品 1223
6 1107 冷凍食品 1183
7 1110 粉類 1147
8 1104 乳製品 1138
9 1116 練り製品 1062
10 1121 加工水産 1048
11 1108 缶詰 1044
12 1112 麺類 996
13 1111 ホームメーキング材料 869
14 1102 食用油 817
15 1106 スープ 722
16 1117 漬物・佃煮 696
17 1118 水物 686
18 1304 アイスクリーム類 624
19 1407 酒類を含むセット商品 615
20 1115 加工肉類 595

帳票に関するコメント

この帳票は、前章の「細分類商品売上数量ベスト20」に非常に似ており、スクリプトも多くの部分が同じになる。大きく異なる点は、商品の同時購入を考慮に入れている点である。
 商品の同時購入について考える場合、以下の4つの点を決める必要がある。

  1. 「同時」の定義
  2. 対象商品の決定
  3. 同時購入対象商品の決定
  4. 同時購入件数の単位の決定

 まず「同時」の定義であるが、通常、「一枚のレシートの中で購入された商品」は同時購入されたと定義される。しかしながら、目的によっては、同一顧客が同じ週の中で購入した商品は全て同時購入したと定義するケースもある。また「同時」という言葉はふさわしくなくなるが、月や年を単位とするケースもあるであろう。本章ではレシートを単位とする。
 次に、どの商品についての同時購入を調べたいかを決定する。もし対象商品が決まっておらず、同時購入率の高い商品の組合せを求めたければ、その時は「マーケットバスケット分析」をおこなう必要がある。対象商品の決定で重要となることは、何をもって商品とするかについてである。最小単位としての商品を用いると、例えば同じ商品であっても色が異なると違う商品と識別されてしまうかもしれない。これは目的によって決定することであるが、通常、商品以外に、商品分類やブランド、メーカーなどが用いられる。本章では小分類での「調味料」(1101)を対象商品とする。
 同時購入対象商品の決定とは、対象商品と同時購入された商品をどの単位(商品、分類、ブランド、メーカ)で見るかということである。対象商品と単位が異なるケースも十分考えられる。例えば、「あるブランドが同時購入される商品分類にはどのようなものが多いか」を知ることは、そのブランドのイメージを知るために役立つかもしれない。本章では対象商品と同様に小分類を用いることにする。
 最後に、同時購入件数の単位についてであるが、通常は「件数」もしくは「数量」が用いられる。件数では、レシートの中で同じ商品を複数個購入していたとしても、同時購入としては一件と見なす。一方、数量では、レシートの中で例えばある商品を5個購入していれば、同時購入数量を5とカウントする。これらは目的によって使い分ければよい。本章では「件数」で同時購入数をカウントすることにする。

処理の流れ

上図の帳票を作成するにあたり、初級コマンド編で学習したコマンド以外に必要となるコマンドは、特にないが、xtselstrの特殊な機能を使い「対象商品を含むレシートを全て選択する」処理を行う。xtselstrの章で少し触れたが、キー項目(ここではレシート番号)を指定することによって、キー項目単位での選択が可能となる。
以下に、入力データから、上図の帳票を作成するために、コマンドをどのように組み合わせて実行すればよいか(処理の流れ)を示すが、回答を見る前に各自で考えてもらいたい。

回答:処理の流れ

  1. 調味料(小分類=1101)が含まれるレシートを全て選択する
  2. 調味料の行を削除する
  3. 同じレシート内の複数購入商品(小分類)を単一化(重複行をなくす)する
  4. 必要な項目「小分類」を選ぶ
  5. 小分類の件数をカウントし、「購入件数」とする
  6. 小分類名の結合、ベスト20の選択、順位づけ

スクリプト

以上の説明で、「調味料と同時購入された小分類商品売上数量ベスト20」を求めるスクリプトを書く準備が整った。以下にその回答を示すが、回答を見る前に各自でチャレンジしてもらいたい。

#!/bin/bash
xtselstr -k 日付,レシート -f 小分類 -v 1101 -i /mnt/h00/tutorial/dat.xt |
xtselstr -f 小分類 -v 1101 -r |
xtuniq   -k 日付,レシート,小分類 |
xtcut    -f 小分類 |
xtjoin   -k 小分類 -m /mnt/h00/tutorial/jicfs4.xt -f 小分類名 |
xtbest   -s 数量%nr -R 1_20 |
xtnumber -a 順位 |
xtcut    -f 順位,小分類,小分類名,数量 |
xtheader -l "ある小分類商品(1101:調味料)と同時購入された小分類商品売上数量ベスト
20" -c "チュートリアル" -o basket.xt

xt2html -i basket.xt -o basket.html

実行結果については、各自で確認してもらいたい。

練習課題

次のようなデータを作成しよう。スクリプト名及び結果ファイル名は表に示されたものを使おう。

帳票名 スクリプト名 結果ファイル(xt) 結果ファイル(html)
本章の例で、同時購入対象商品を細分類に変更した帳票 basket1.sh basket1.xt basket1.html
本章の例で、同時購入対象商品を加工食品(中分類が11)に限定した帳票 basket2.sh basket2.xt basket2.html
スポーツドリンク(細分類が140323))と同時購入された細分類商品購入件数ベスト20(各種定義は本章の例に従う) basket3.sh basket3.xt basket3.html