ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Pythonでのアソシエーション分析

2018-01-27 19:41:20 | AI・BigData
前に、
Rでのアソシエーション分析
http://blog.goo.ne.jp/xmldtp/e/25c3a84112cc266cd399dd96bf41f21a

を書いたけど、Pythonの3でやると、どうなるのかについてのメモ。

基本的にOrangeをつかうんだけど、Python3用のOrangeであるOrange3には、
アソシエーション分析が入っていない。そこで、それを作っている人
から、githubでとってくるんだけど、Orange3を入れるのにVisual C++が
必要だったり。。。と、いろいろ大事なので、メモメモ




■前提
・Pythonの3が入っている





■インストール

(1)Visual C++ 2015 Build Tools
http://landinghub.visualstudio.com/visual-cpp-build-tools
が入っていなかったら、上記URLにいき、
ダウンロード&インストール(Orange3のインストールで使う)

(2)必要なものをpipでインストール 

pip install numpy
pip install pandas
pip install orange3

を実行する
(pip install orangeとすると、エラーになってインストールできない)

(3)さらに(Orange3には、Association分析が入っていないようなので)

Python でアソシエーション分析 - Orange3-Associate
http://fits.hatenablog.com/entry/2018/01/09/211900


にある手順で,Orange3-Associateを入れる。具体的には、以下のコマンド実行

git clone https://github.com/biolab/orange3-associate.git
cd orange3-associate
python setup.py install


そうしたら、そこにorangecontribというフォルダができるから、
そのフォルダをPythonのLibの中に入れる(自分の場合
C:\Users\USER\AppData\Local\Programs\Python\Python36-32\Lib
に入れた)




■プログラムファイルを作成する。

日本語が入っていたら、UTF-8で保存する。
プログラムは、以下の通り
import Orange
from orangecontrib.associate.fpgrowth import *

tbl = Orange.data.Table("C:\\Users\\USER\\Desktop\\flask\\source.basket")
X, mapping = OneHot.encode(tbl)
itemsets = dict(frequent_itemsets(X, 5))
rules = association_rules(itemsets, 0.7)
stats = rules_stats(rules, itemsets, len(X))

def decode_onehot(d):
    items = OneHot.decode(d, tbl, mapping)
    return list(map(lambda v: v[1].name, items))

for s in sorted(stats, key = lambda x: x[6], reverse = True):

    lhs = decode_onehot(s[0])
    rhs = decode_onehot(s[1])

    support = s[2]
    confidence = s[3]
    lift = s[6]

    print(f"lhs = {lhs}, rhs = {rhs}, support = {support}, confidence = {confidence}, lift = {lift}")



上記ソースは、基本的に上述の「Python でアソシエーション分析 - Orange3-Associate」
を踏襲して書いている。
これをhello.pyという名前で保存する。




■データファイルを用意する

1レコード1トランザクション(=1レシート、1バスケット)として、
トランザクション内(レシート内、バスケット内)にある各商品をカンマで区切って
ファイル出力したものを、拡張子.basketとして保存する。

今回は、「Rでのアソシエーション分析」で読み込んだデータGroceriesを、
write(Groceries,file="source.basket",sep=",")
として書き出したものを、利用する。

それが、上記プログラムの
tbl = Orange.data.Table("C:\\Users\\USER\\Desktop\\flask\\source.basket")
のところ




■実行する
python hello.py





こんなかんじ

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする