人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記のような受注履歴があります。
最も多い組み合わせを算出するにはどうすればよいでしょうか?

2/8 ハンバーガー ポテト
2/8 チーズバーガー ナゲット
2/9 ナゲット ハンバーガー
2/9 ポテト ハンバーガー

なお、商品の順序はばらばらです(ハンバーガーが左端にも右端にも出る)

●質問者: にらたま
●カテゴリ:コンピュータ インターネット
✍キーワード:い組 チーズバーガー ナゲット ハンバーガー ポテト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● SALINGER
●27ポイント

65535件を超える場合Excel2007での方法になりますが

http://q.hatena.ne.jp/1202290104

での回答はユーザー定義関数を使う方法でした。


=myCount(商品1の列のセル、商品2の列のセル)

Function myCount(r1 As Range, r2 As Range) As Long
 Dim i As Long
 Dim c As Long
 Application.Volatile
 c = 0
 For i = ActiveSheet.UsedRange.Row To ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
 If Cells(i, r1.Column).Value = r1.Value And Cells(i, r2.Column).Value = r2.Value Then
 c = c + 1
 End If
 Next i
 myCount = c
End Function

この場合、Excelに外部データで取り込んで、最初の商品と後の商品の列がそれぞれB列とC列として

D1の数式を =myCount("B1","C1") といれて

D1セルの右下にカーソルを合わせてダブルクリックすることで最終行まで数式を入れます。

そして、D列でソートすれば一番上に一番多い組み合わせがきます。

http://q.hatena.ne.jp/

◎質問者からの返答

ありがとうございます。

コメント欄の内容も踏まえ、試してみますね。


2 ● fuentebella
●27ポイント

gawkというツールで作ってみました。

{comb[$2,$3]++}
END{
for (item in comb)
 {
 split(item, o, SUBSEP)
 if(comb[o[1],o[2]])
 print comb[o[1],o[2]]+comb[o[2],o[1]],o[1],o[2]
 delete comb[o[2],o[1]]
 } 
}

これを check.txtとかに保存します。

データの入っているファイルがdata.txtなら

gwak -f check.txt < data.txt | sort /r > out.txt

とすれば

out.txtに結果が入ります

このご質問の例は区切りが「全角スペース」になっていますので、このままでは上のものは動きません。「半角スペース」で項目を区切ってください。

gawkのダウンロード

http://www.kt.rim.or.jp/~kbk/gawk-3.1/

gawkの使い方

http://oshiete1.goo.ne.jp/qa3735378.html

(上のawkのプログラムは少し見苦しい処理をしているので、もっと詳しい人に直してもらってください。)

◎質問者からの返答

ありがとうございます。

念のため確認です。

これは、商品が2つずつ購入された場合のプログラムですよね。


3 ● Baku7770
●26ポイント

コメントとあわせて回答しますが、私なら最初からDBソフトでやっつけてしまいます。特に量販店の多品種ということですから。

まずレコードの構造ですが

伝票? 行? 日付 商品コード(商品分析コード)

といった構造に変えてしまいます。

商品分析コードは例えば子供向け、若い女性向けといった顧客層で分類してみたり、価格帯で分類してみたり、複数持たせることの方が多いです。

で、DWH(データウェアハウス)を構築して分析ツール用いて分析をしていくという手順を踏みます。

ただし、私なら最初から質問文に書かれているような分析をしません。

よく引き合いに出される事例で金曜日の夜に紙オムツと缶ビールがセットで売れるというのがありますが、最初からどういう組み合わせあるかではなく、時間帯とか客とかとの関係など他にやるべきことはたくさんあるでしょう。量販店であれば商品の品種は多いでしょうし、2品種以上買っていく客は多く、客の思考がぼやけてしまうでしょうから。

実際私も会社で同様のことをやろうとしていますが、これは商品が5種類しかないからやろうとしているだけです。

参考までに

その数学が戦略を決める

◎質問者からの返答

バスケット分析の出来る分析ツールでオープンソースのものはありますか?

クレメンタインとか高いので。。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ