PythonでCSPADEを使えるpycspadeを使ってみる
前回の続き。
gccエラーを乗り越えインストールできたので、早速使ってみる。
data.txt
pycspade-sample.py
ターミナルから実行
例えば、以下のデータセットを食わせてみると…
結果は以下。どう読めばいいか分からない…
対策としては、各文字列を、対応する一意の数字に変換したデータセットを読ませればできる。
ドキュメントからリンクがはられているページにある
ちなみに、gccを8.x系にあげたことで、arules/arulesSequenceのライブラリが動かなくなるというトラップがあり、とても苦労した。
gccエラーを乗り越えインストールできたので、早速使ってみる。
そもそも系列データマイニングとは?
以下の記事を参考。環境
- macOS 10.13.6
- Python 3.7.1
- conda 4.5.12
- pip 19.0.3
- Homebrew 2.0.2
ドキュメントを見ながら進める
pycspade · PyPI入力データの用意
以下のような形式のデータを、スペース区切りで用意。data.txt
1 1 3 8 37 42 1 2 4 4 11 37 42 2 1 2 10 73 2 2 1 72 2 3 3 4 24 77 |
- 1列目 : SequenceID(ユーザーIDなどのデータ)
- 2列目 : EventID(時系列を表すデータ)
- 3列目 : 要素の個数(=4列目以降のデータ個数)
- 4列目以降 : 要素の中身
コードを書く
サンプルコードはファイル名が微妙に違っていたり、コードが動かなかったりするため、適宜省略や書き換えをしている。pycspade-sample.py
import sys from pycspade.helpers import spade, print_result def execSpade(filepath): result = spade(filename = filepath, support = 0.3 ,parse = True ) # print(result['mined']) # エラーを吐きます print ( "result['logger']" ) print (result[ 'logger' ]) print ( "result['summary']" ) print (result[ 'summary' ]) print ( 'print_result(result)' ) print_result(result) # SequenceIDが隣り合っているパターンのみ抽出 result = spade(filename = filepath,support = 0.3 ,parse = True ,maxgap = 1 ) print ( 'print_result(result)/maxgap=1' ) print_result(result) # 長さが最大2個の条件で抽出 result = spade(filename = filepath,support = 0.3 ,parse = True ,maxlen = 2 ) print ( 'print_result(result)/maxlen=2' ) print_result(result) if __name__ = = '__main__' : execSpade(sys.argv[ 1 ]) |
$ python -m pycspade-sample data.txt
結果出力
こんな感じで結果が出る。result['logger'] CONF 2 78 2.6 2.5 args.MINSUPPORT 1 2 MINMAX 1 2 4 SUPP 2 8 SUPP 1 10 SUPP 1 11 SUPP 1 24 SUPP 1 37 SUPP 1 42 SUPP 1 72 SUPP 1 73 SUPP 1 77 SUPP 1 numfreq 10 : SUMSUP SUMDIFF = 0 0 EXTRARYSZ 986316 OPENED /tmp/cspade-rExzb4sH0bgelUUL.idx OFF 78 26 Wrote Offt BOUNDS 1 3 WROTE INVERT Cleaned up successful: /tmp/cspade-rExzb4sH0bgelUUL.idx Cleaned up successful: /tmp/cspade-rExzb4sH0bgelUUL.conf Cleaned up successful: /tmp/cspade-rExzb4sH0bgelUUL.data Cleaned up successful: /tmp/cspade-rExzb4sH0bgelUUL.tpose result['summary'] CONF 2 78 2.5 2.6 5 1 2 1.0198 4 TPOSE SEQ NOF2 /tmp/cspade-rExzb4sH0bgelUUL.data 0.3 2 1 1 F1stats = [ 10 0 0 ]SPADE /tmp/cspade-rExzb4sH0bgelUUL.tpose 0.3 1 49 0 0 0 0 0 -1 1 100 100 10 23 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 print_result(result) Occurs Accum Support Confid Lift Sequence 1 1 0.5000000 N/A N/A (10) 1 1 0.5000000 1.0000000 2.0000000 (10)->(24) 1 1 0.5000000 1.0000000 1.0000000 (10)->(4) 1 1 0.5000000 1.0000000 2.0000000 (10)->(72) 1 1 0.5000000 1.0000000 2.0000000 (10)->(72)->(24) 1 1 0.5000000 1.0000000 1.0000000 (10)->(72)->(4) 1 1 0.5000000 1.0000000 2.0000000 (10)->(72)->(77) 1 1 0.5000000 1.0000000 2.0000000 (10)->(77) 1 4 0.5000000 N/A N/A (11) 1 6 0.5000000 N/A N/A (24) 1 4 0.5000000 N/A N/A (37) 1 1 0.5000000 1.0000000 2.0000000 (37)->(11) 1 1 0.5000000 1.0000000 2.0000000 (37)->(37) 1 1 0.5000000 1.0000000 1.0000000 (37)->(4) 1 1 0.5000000 1.0000000 2.0000000 (37)->(42) 2 10 1.0000000 N/A N/A (4) 1 4 0.5000000 N/A N/A (42) 1 1 0.5000000 1.0000000 2.0000000 (42)->(11) 1 1 0.5000000 1.0000000 2.0000000 (42)->(37) 1 1 0.5000000 1.0000000 1.0000000 (42)->(4) 1 1 0.5000000 1.0000000 2.0000000 (42)->(42) 1 3 0.5000000 N/A N/A (72) 1 3 0.5000000 1.0000000 2.0000000 (72)->(24) 1 3 0.5000000 1.0000000 1.0000000 (72)->(4) 1 3 0.5000000 1.0000000 2.0000000 (72)->(77) 1 1 0.5000000 N/A N/A (73) 1 1 0.5000000 1.0000000 2.0000000 (73)->(24) 1 1 0.5000000 1.0000000 1.0000000 (73)->(4) 1 1 0.5000000 1.0000000 2.0000000 (73)->(72) 1 1 0.5000000 1.0000000 2.0000000 (73)->(72)->(24) 1 1 0.5000000 1.0000000 1.0000000 (73)->(72)->(4) 1 1 0.5000000 1.0000000 2.0000000 (73)->(72)->(77) 1 1 0.5000000 1.0000000 2.0000000 (73)->(77) 1 6 0.5000000 N/A N/A (77) 1 1 0.5000000 N/A N/A (8) 1 1 0.5000000 1.0000000 2.0000000 (8)->(11) 1 1 0.5000000 1.0000000 2.0000000 (8)->(37) 1 1 0.5000000 1.0000000 1.0000000 (8)->(4) 1 1 0.5000000 1.0000000 2.0000000 (8)->(42) print_result(result)/maxgap=1 Occurs Accum Support Confid Lift Sequence 1 1 0.5000000 N/A N/A (10) 1 1 0.5000000 1.0000000 2.0000000 (10)->(72) 1 1 0.5000000 1.0000000 2.0000000 (10)->(72)->(24) 1 1 0.5000000 1.0000000 1.0000000 (10)->(72)->(4) 1 1 0.5000000 1.0000000 2.0000000 (10)->(72)->(77) 1 4 0.5000000 N/A N/A (11) 1 4 0.5000000 N/A N/A (24) 1 4 0.5000000 N/A N/A (37) 1 1 0.5000000 1.0000000 2.0000000 (37)->(11) 1 1 0.5000000 1.0000000 2.0000000 (37)->(37) 1 1 0.5000000 1.0000000 1.0000000 (37)->(4) 1 1 0.5000000 1.0000000 2.0000000 (37)->(42) 2 8 1.0000000 N/A N/A (4) 1 4 0.5000000 N/A N/A (42) 1 1 0.5000000 1.0000000 2.0000000 (42)->(11) 1 1 0.5000000 1.0000000 2.0000000 (42)->(37) 1 1 0.5000000 1.0000000 1.0000000 (42)->(4) 1 1 0.5000000 1.0000000 2.0000000 (42)->(42) 1 3 0.5000000 N/A N/A (72) 1 3 0.5000000 1.0000000 2.0000000 (72)->(24) 1 3 0.5000000 1.0000000 1.0000000 (72)->(4) 1 3 0.5000000 1.0000000 2.0000000 (72)->(77) 1 1 0.5000000 N/A N/A (73) 1 1 0.5000000 1.0000000 2.0000000 (73)->(72) 1 1 0.5000000 1.0000000 2.0000000 (73)->(72)->(24) 1 1 0.5000000 1.0000000 1.0000000 (73)->(72)->(4) 1 1 0.5000000 1.0000000 2.0000000 (73)->(72)->(77) 1 4 0.5000000 N/A N/A (77) 1 1 0.5000000 N/A N/A (8) 1 1 0.5000000 1.0000000 2.0000000 (8)->(11) 1 1 0.5000000 1.0000000 2.0000000 (8)->(37) 1 1 0.5000000 1.0000000 1.0000000 (8)->(4) 1 1 0.5000000 1.0000000 2.0000000 (8)->(42) print_result(result)/maxlen=2 Occurs Accum Support Confid Lift Sequence 1 1 0.5000000 N/A N/A (10) 1 1 0.5000000 1.0000000 2.0000000 (10)->(24) 1 1 0.5000000 1.0000000 1.0000000 (10)->(4) 1 1 0.5000000 1.0000000 2.0000000 (10)->(72) 1 1 0.5000000 1.0000000 2.0000000 (10)->(77) 1 4 0.5000000 N/A N/A (11) 1 4 0.5000000 N/A N/A (24) 1 4 0.5000000 N/A N/A (37) 1 1 0.5000000 1.0000000 2.0000000 (37)->(11) 1 1 0.5000000 1.0000000 2.0000000 (37)->(37) 1 1 0.5000000 1.0000000 1.0000000 (37)->(4) 1 1 0.5000000 1.0000000 2.0000000 (37)->(42) 2 8 1.0000000 N/A N/A (4) 1 4 0.5000000 N/A N/A (42) 1 1 0.5000000 1.0000000 2.0000000 (42)->(11) 1 1 0.5000000 1.0000000 2.0000000 (42)->(37) 1 1 0.5000000 1.0000000 1.0000000 (42)->(4) 1 1 0.5000000 1.0000000 2.0000000 (42)->(42) 1 3 0.5000000 N/A N/A (72) 1 1 0.5000000 1.0000000 2.0000000 (72)->(24) 1 1 0.5000000 1.0000000 1.0000000 (72)->(4) 1 1 0.5000000 1.0000000 2.0000000 (72)->(77) 1 1 0.5000000 N/A N/A (73) 1 1 0.5000000 1.0000000 2.0000000 (73)->(24) 1 1 0.5000000 1.0000000 1.0000000 (73)->(4) 1 1 0.5000000 1.0000000 2.0000000 (73)->(72) 1 1 0.5000000 1.0000000 2.0000000 (73)->(77) 1 4 0.5000000 N/A N/A (77) 1 1 0.5000000 N/A N/A (8) 1 1 0.5000000 1.0000000 2.0000000 (8)->(11) 1 1 0.5000000 1.0000000 2.0000000 (8)->(37) 1 1 0.5000000 1.0000000 1.0000000 (8)->(4) 1 1 0.5000000 1.0000000 2.0000000 (8)->(42) |
難点
データセットが文字列だと、結果がなぜか数字で出力される。例えば、以下のデータセットを食わせてみると…
1 10 2 C D 1 15 3 A B C 1 20 3 A B F 1 25 4 A C D F 2 15 3 A B F 2 20 1 E 3 10 3 A B F 4 10 3 D G H 4 20 2 B F 4 25 3 A G H |
Occurs Accum Support Confid Lift Sequence 2 2 1.0000000 N/A N/A (1) 1 1 0.5000000 N/A N/A (10) 2 2 1.0000000 N/A N/A (15) 1 1 0.5000000 N/A N/A (2) 1 1 0.5000000 N/A N/A (20) 1 1 0.5000000 N/A N/A (25) 1 1 0.5000000 N/A N/A (3) 1 1 0.5000000 N/A N/A (4) |
ドキュメントからリンクがはられているページにある
You also need to download utilities like getconf, exttpose from github:tposedb.
という一文が気になるが、ダウンロードしたあとの手順が見えないため、手をつけられていない。
雑感
Rが使えるなら、こちらの記事などを参考にarules/arulesSequencesのライブラリを使う方が良さそう。ちなみに、gccを8.x系にあげたことで、arules/arulesSequenceのライブラリが動かなくなるというトラップがあり、とても苦労した。
ディスカッション
コメント一覧
まだ、コメントがありません