HadoopとMahoutをインストールする
Hadoopのバージョンに注意
前回はマーケットバスケット分析の理論編として、
そのための準備として、
Hadoopのバージョン0.
Mahoutのインストール方法は、
実際の開発ではIDEなどを用いて、
Eclipseを利用する場合の環境構築方法は、
サンプルデータをダウンロードする
今回は、
サンプルデータはCSV形式となっています。各行がマーケットバスケット分析における各トランザクションデータに該当します。カンマで区切られた数値は、
今回のサンプルデータは商品数1,000件、
Mahoutを実行する2つの方法
Mahoutは、
- コマンドラインから実行する
- プログラム内部からライブラリとして実行する
「とりあえずデータを分析してみたい」
本連載では、
Mahoutをコマンドラインから実行するには
Mahoutをコマンドラインで利用する場合、
bin/mahout
何もオプションを指定せずに実行すると、
bin/mahout fpg
コマンドラインからFP-Growth以外のアルゴリズムを実行する場合も、
FP-Growthをコマンドラインから実行する
入力ファイルと出力先を指定する
では、
コマンドラインからMahoutのインストールディレクトリに移動して、
bin/mahout fpg -i gihyo-mahout-fpg-sample.csv -o output/gihyo-mahout-fpg-sample
ここでは
- -i
(--input) ⇒ 入力ファイル - -o
(--output) ⇒ 出力先
無事、
省略 13/03/01 13:30:33 INFO pfpgrowth.FPGrowthDriver: Dumping Patterns for Feature: 392 ([392],78), ([123, 392],5), ([392, 843],5), ([234, 392],4), ([392, 931],4), ([392, 866],4), ([163, 392],4), ([247, 392],4), ([392, 778],4), ([223, 392],4), ([392, 984],4), ([392, 449],4), ([167, 392],4), ([179, 392],4), ([392, 411, 735],3), ([331, 392],3), ([196, 392],3), ([392, 933],3), ([392, 898],3), ([392, 434],3), ([122, 392],3), ([392, 567],3), ([392, 534],3), ([392, 92],3), ([160, 392],3), ([381, 392],3), ([392, 851],3), ([392, 729],3), ([392, 83],3), ([392, 930],3), ([392, 409],3), ([392, 791],3), ([392, 651],3), ([392, 899],3), ([392, 897],3), ([135, 392],3), ([392, 7],3), ([392, 67],3), ([392, 598],3), ([392, 563],3), ([392, 871],3), ([392, 973],3), ([392, 564],3), ([392, 472],3), ([379, 392],3), ([240, 392],3), ([392, 423],3), ([197, 392],3), ([121, 392],3), ([387, 392],3) 13/03/01 13:30:33 INFO pfpgrowth.FPGrowthDriver: Dumping Patterns for Feature: 38 ([38],79), ([38, 952],5), ([38, 56],5), ([38, 511],5), ([38, 77],4), ([301, 38],4), ([38, 469],4), ([38, 645],4), ([204, 38],4), ([38, 39],4), ([38, 45],4), ([38, 951],4), ([38, 44],4), ([315, 38],3), ([38, 808],3), ([38, 562],3), ([38, 964],3), ([38, 999],3), ([38, 712],3), ([38, 857],3), ([38, 382],3), ([38, 436],3), ([38, 854],3), ([38, 595],3), ([148, 38],3), ([38, 472],3), ([320, 38],3), ([267, 38],3), ([38, 881],3), ([38, 954],3), ([38, 741],3), ([107, 38],3), ([38, 600],3), ([38, 745],3), ([341, 38],3), ([38, 654],3), ([297, 38],3), ([38, 578],3), ([243, 38],3), ([38, 991],3), ([38, 769],3), ([287, 38],3), ([129, 38],3), ([38, 647],3), ([38, 59],3), ([38, 694],3), ([38, 767],3), ([38, 663],3), ([38, 799],3), ([38, 725],3) 省略 13/04/01 13:30:33 INFO pfpgrowth.FPGrowthDriver: Dumping Patterns for Feature: 865 ([865],85) 13/04/01 13:30:33 INFO pfpgrowth.FPGrowthDriver: Dumping Patterns for Feature: 66 ([66],86)
この結果は次のように解釈します。
([組み合わせ],出現頻度)
よって、
- 商品ID392の出現頻度
(支持度) が78 - 商品ID392と392の組み合わせの出現頻度
(支持度) が5 - 商品ID38の出現頻度
(支持度) が79
このようにMahoutを利用すると、
なお、
bin/mahout seqdumper -i output/gihyo-mahout-fpg-sample
最低支持度を指定する
先の出力では、
この値は、
bin/mahout fpg -s 5 -i gihyo-mahout-fpg-sample.csv -o output/gihyo-mahout-fpg-sample
この値を大きくすればするほど、
maxHeapSizeで処理対象のアイテムを調整する
続いて、
これは処理対象のアイテム数としてデフォルト値の50が採用されたためです。最大何個のアイテムを処理対象とするかは、
bin/mahout fpg -k 1000 -i gihyo-mahout-fpg-sample.csv -o output/gihyo-mahout-fpg-sample
試しにmaxHeapSizeの値を100や1000などのより大きな値に設定してみてください。商品ID865やそのほかの商品でも、
MapReduceで実行する
Mahoutのメリットの1つとして、
bin/mahout fpg -method mapreduce -i input/gihyo-mahout-fpg-sample.csv -o output/gihyo-mahout-fpg-sample
なお、
bin/mahout fpg -method mapreduce -i file:///opt/gihyo-mahout-fpg-sample.csv -o output/gihyo-mahout-fpg-sample
これら以外にも、
bin/manout fpg -h
FP-Growthをライブラリ呼び出しで実行する
コマンドラインから実行する場合も同じメソッドが呼び出されている
ライブラリを利用してMahoutのFP-Growthを利用する場合は、
public final void org.apache.mahout.fpm.pfpgrowth.fpgrowth.FPGrowth.generateTopKFrequentPatterns(
Iterator<Pair<List<A>,Long>> transactionStream,
Collection<Pair<A, Long>> frequencyList,
long minSupport,
int k,
Collection<A> returnableFeatures,
OutputCollector<A,List<Pair<List<A>,Long>>> output,
StatusUpdater updater) throws IOException
前述したコマンドラインからの実行は次のFPGrowthDriverクラスで実装されていますが、
org.apache.mahout.fpm.pfpgrowth.FPGrowthDriver
そのため、
あるアイテムに注目した出力を得るには
MahoutのFP-Growthのコマンドライン実装には1つ問題があります。それは、
そのため、
出力するアイテムを限定する方法が提供されていないのは、
ただし、
次回は、