過去にアソシエーション分析を書いたときはOrange
を用いました。
このパッケージ内からアソシエーション分析が消えたため、代替を探してみました。
apyoriの基本
導入
!pip install apyori
基本的な使い方
from apyori import apriori import random # -------- # テスト用のデータをつくる # -------- # 五つのアイテム items = ['a','b','c','d','e'] # レコードに対して、アイテムがそれぞれ1/2で格納される # 例:[['a','c'],['b','c','d']...] records = [] for i in range(100): buf = [] for j in items: if random.random() >= 0.5: buf.append(j) if buf: records.append(buf) #---- # ルールを抽出する #---- #上記の形のリストをaprioriに渡すだけ。ジェネレータっぽいのでlist()でリストにしておいた a_rules = list(apriori(records))
ルールの中身は
RelationRecord( items=frozenset({'a'}), support=0.5151515151515151, ordered_statistics=[ OrderedStatistic( items_base=frozenset(), items_add=frozenset({'a'}), confidence=0.5151515151515151, lift=1.0 ) ] )
のような形
そのあとの分析処理に使う
実務だとデータフレームの形の方がいいので、変換するコードも書きました。
#ルールの中身を行列にする data = [] for row in a_rules: for i in row.ordered_statistics: buf = [ row.support, ','.join(i.items_base), ','.join(i.items_add), i.lift, i.confidence ] data.append(buf) # データフレームにする import pandas as pd df = pd.DataFrame(data) df.columns = ["support","from","to","lift","confidence"]
▼また、ソート可能なテーブルを使えば探索もしやすくなります。 esu-ko.hatenablog.com