基本帳票編:顧客別平均来店間隔日数

本章では、初級コマンドで用いた2002年のデータを用いて、下図に示すような「顧客別平均来店間隔日数」の帳票を作成する。


出力結果

顧客別平均来店間隔日数

チュートリアル

顧客 平均来店間隔日数
A00001 117
A00002 86.75
A00003 36.5
A00004 48.8
A00005 5
A00006 104
A00007 64.8
A00008 113
A00009 57.2
A00010 65.25
A00012 33.888889
A00014 39.2
A00015 30
A00016 85.5
A00017 21.583333
A00018 46.25
A00019 119
A00020 44.6
         :
         :

処理の流れ

 来店間隔とは、ある顧客がある日に来店したとき、次回の来店までの間の日数のことである。そして、顧客ごとに求まる複数の来店間隔の平均を計算した値が、平均来店間隔日数である。
 上図の帳票を作成するにあたり、これまでに学習したコマンド以外に必要となるコマンドは、「ある項目の値を一行上にずらす」コマンドである。
まずは、次に示す回答見ずに、各自で、入力データから、上図の帳票を作成するために、コマンドをどのように組み合わせて実行すればよいか(処理の流れ)を考えてもらいたい。

回答:処理の流れ

  1. 顧客がNULLである行を削除する
  2. 必要な項目「顧客」「日付」を選ぶ
  3. 顧客と日付で行を単一化する
  4. 顧客別に日付を一行上にずらして新しい項目「次回来店日」を作る
  5. 「日付」と「次回来店日」の間の日数を計算し「来店間隔日数」とする
  6. 顧客別に「来店間隔日数」の平均を計算し「平均来店間隔日数」とする
  7. 出力する項目「顧客」、「平均来店間隔日数」項目を抜き出す

次に、上記の「処理の流れ」における4の処理について解説する。

項目の一行ずらし(xtslide)

xtslide は、-kで指定した項目を単位に、-fで指定した項目の値を一行上にずらし、新しい項目を生成する。例えば、下図の左に示すような顧客と日付項目からなるデータがあったとする。このデータに対して「xtslide -k 顧客 -f 日付 -a 次回来店日」を実行すると、新しい項目「次回来店日」が図の中央のように生成される。顧客Aの二行目、顧客Bの三行目がNULL値になっているのは、ずらす行がないためである。そしてxtslideでは、NULL値となるこれらの行は削除され、図の右に示すような結果が得られる。NULL値行を削除したくなければ"-n"パラメータを付ければよい。

スクリプト

以上の説明で、顧客別来店回数を求めるスクリプトを書く準備が整った。以下にその回答を示すが、回答を見る前に各自でチャレンジしてもらいたい。

#!/bin/bash
xtdelnul -f 顧客 -i /mnt/h00/tutorial/dat.xt |
xtcut    -f 顧客,日付 |
xtuniq   -k 顧客,日付 |
xtsort   -k 顧客,日付 |
xtslide  -k 顧客 -f日付:次回来店日 |
xtcal    -c'day($次回来店日,$日付)' -a来店間隔日数 |
xtagg    -k 顧客 -f 来店間隔日数:平均来店間隔日数 -c avg |
xtcut    -f 顧客,平均来店間隔日数 |
xtheader -l "顧客別平均来店間隔日数" -c "チュートリアル" -o inter.xt

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

練習課題

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

帳票名 スクリプト名 結果ファイル(xt) 結果ファイル(html)
顧客の最大来店間隔日数 inter1.sh inter1.xt inter1.html
顧客の最小来店間隔日数 inter2.sh inter2.xt inter2.html