LoginSignup
8

More than 5 years have passed since last update.

PythonからRのCSPADEを使ってみる

Last updated at Posted at 2017-12-07

Pythonで系列パターンマイニング」を行うのにRのCSPADEを使った手順をまとめる。 そもそもPythonのライブラリでパターンマイニングを行える物があればそれを使えばいいのだが、見つけることができなかったため、Rのライブラリを利用したというのが本音。

環境

  • MacBook Pro13
  • macOS Sierra(10.12.6)
  • メモリ 8GB

Pythonのインストール

https://qiita.com/shizuma/items/027167c6257f1c9d2a6f
を参考にインストール

Rのインストール

https://qiita.com/azzeten/items/1031c788ed093d3b3946
を参考にインストール

PypeRのインストール

今回はPythonとRの連携を考えるため、PythonからRを利用するPypeRをインストールする。
インストールに関してはhttps://qiita.com/ynakayama/items/f84dc659f1337d71dd9e
などを参考にした。

系列パターンマイニングとは

系列パターンマイニングは、ある時系列に沿った系列データの中から共通のパターンを見つけ出す手法です。例えば、[A, B, C, D, E, F, G, H, I, J]という10個のアイテムがあるとする。この10個のアイテムが4人の人に時系列に沿って次のように購入されたケースを考える。

  1. A → B → D → H → I → D
  2. B → H → A
  3. C → B → H
  4. D → B → B → H

矢印(→)が時間の経過を示す。この4人の購買履歴から共通のパターンを見出すのが系列パターンマイニングになります。この例だと、4人全員の購買履歴に「B → H」というパターンが含まれていることがすぐに分かる。つまり「Bを購入した人はその後(直後とは限らない)にHを購入するらしい」と言える事になります。

この記事では、アルゴリズムの詳細については触れないが、代表的な系列パターンマイニングのアルゴリズムとして「SPADE」がある。SPADEをRで実装したものが今回利用する「CSPADE」です。CSPADEはRのライブラリである「arulesSequences」に含まれている。

Rのライブラリの準備

Rのライブラリ「arules」, 「arulesSequences」のインストール
> install.packages("arules")
> install.packages("arulesSequences")
インプットファイルの作成

CSPADEを動かすためには当然インプットファイルが必要となる。インプットファイルは次のような形をしている必要があり、/usr/local/lib/R/site-library/arulesSequences/misc/にtextファイルでおいておけば良い。(ここである必要はないと思うが、正確に理解できていない)

# input.txt

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

まずいちばん左のカラムの番号はシーケンスIDと呼ばれるもので、上の例で言うところの各人に当たる。左から二番目のカラムは実施した時刻(時系列を区別するラベル)であり、値に意味はない。三番めのカラムは同時に購入したアイテムの数である。つまり一番上の行は、『「1」という人が、「10」という時系列に「CとD」を二つ同時に購入した』ということを意味する。

参考 : https://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Sequence_Mining/SPADE

RとPythonコード

  • PythonからRを呼び出すプログラム

import pandas as pd
import pypeR

def runningR(fileName):

    #Rのインスタンスを作る
    r = pyper.R(use_pandas='True')

    r.assign("fileName", fileName) #fileNameとし引数のfileNameを渡す
    r("source(file='Pattern.R')") #実際のRファイルを実行する

    df = pd.DataFrame(r.get("results")) #結果をDataFrameに格納
    print(df)

if __name__ == '__main__':

    runningR("input.txt")

  • CSPADEの実行プログラム(R)
#Pattern.R

#ライブラリの宣言
library(Matrix)
library(arules)
library(arulesSequences)


x <- read_baskets(con = system.file("misc", fileName, package = "arulesSequences"), info = c("sequenceID","eventID","SIZE"))
as(x, "data.frame")
s1 <- cspade(x, parameter = list(support = 0.5), control = list(verbose = TRUE))
summary(s1)
results = as(s1, "data.frame")

参考文献

SPADE : https://link.springer.com/content/pdf/10.1023/A:1007652502315.pdf

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8