2017-08-15 32 views
3

頻繁なシーケンスマイニングを行う場合、通常は次のタスクが必要です。
1.連続パターン(頻出シーケンス)を検索します。
2.トランザクションに適用されるシーケンシャルパターンを確認します。私は:トランザクションがあると、見つかった頻繁なシーケンスのすべてが存在しますか?R arulesSequences - 頻繁なシーケンスがトランザクション内に存在しますか?

私は後者をやっていません。 Rを使用して

、私は以下のおもちゃのデータセットにarulesSequencesパッケージからcspade-アルゴリズムを適用しています:

data <- data.frame(id = 1:10, 
        transaction = c("A B B A", 
            "A B C B D C B B B F A", 
            "A A B", 
            "B A B A", 
            "A B B B B", 
            "A A A B", 
            "A B B A B B", 
            "E F F A C B D A B C D E", 
            "A B B A B", 
            "A B")) 

それから私は、パッケージstringrからstr_split機能を使用してデータを分割:

data_for_fseq_mining <- str_split(string = data$transaction, pattern = " ") 

識別子を使用して、 'data_for_fseq_mining'のリスト要素の名前を一意に指定します。これは、以下のように 'as.transactions'関数を使用するための前提条件です。私はhttps://github.com/cran/clickstream/blob/master/R/Clickstream.rから次関数「as.transactions」を使用クラスの取引 "のデータセットにこの種のデータを変換するために

names(data_for_fseq_mining) <- data$id 

。データが正しい形式である

data_for_fseq_mining_trans <- as.transactions(clickstreamList = data_for_fseq_mining) 

は今、私はいくつかのパラメータを持つcspadeアルゴリズムを実行します

sequences_df <- cbind(sequence = labels(sequences), support = [email protected]) 

       sequence support 
1     <{A}>  1.0 
2     <{B}>  1.0 
3    <{A},{B}>  1.0 
4    <{B},{B}>  0.7 
5   <{A},{B},{B}>  0.6 
6   <{B},{B},{B}>  0.4 
7  <{A},{B},{B},{B}>  0.4 
8  <{B},{B},{B},{B}>  0.3 
9 <{A},{B},{B},{B},{B}>  0.3 
10   <{A},{A},{B}>  0.5 
11   <{B},{A},{B}>  0.4 
12  <{A},{B},{A},{B}>  0.3 
13    <{A},{A}>  0.8 
14    <{B},{A}>  0.6 
15   <{A},{B},{A}>  0.6 
16   <{B},{B},{A}>  0.5 
17  <{A},{B},{B},{A}>  0.4 

sequences <- cspade(data  = data_for_fseq_mining_trans, 
        parameter = list(support = 0.3, maxsize = 10, maxlen = 10, mingap = 1, maxgap = 10), 
        control = list(tidList = TRUE, verbose = TRUE)) 

結果(配列と相対サポート)要約しますそれは完璧ですが、今は各トランザクションについて、各シーケンスが存在するかどうか(TRUE/FALSE)を知りたいと思います。これを行うために、私はtidList使用しようとした。この結果から

sequences_score <- as.matrix([email protected]@data) 

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] 
[1,] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 
[2,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[3,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 
[4,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE 
[5,] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE 
[6,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[7,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE 
[8,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[9,] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE 
[10,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

を、私は、各行がトランザクションおよびシーケンスの各列に対応すると仮定する。しかし、第4列を見ると、パターン '
< {B}、{B}>'はトランザクション2,4,7には存在しないと言われています。出力に関する私の仮定は間違っていますか? R arulesSequences Find which patterns are supported by a sequence

次のコード行を適用して、エラーが発生した:

別のアプローチは、julieslsによって提供されるコードのこの部分を使用することです。

ids    <- unique([email protected]$sequenceID) 
sequences_score <- data.frame() 

for (seq_id in 1:length(sequences)){ 
    sequences_score[,labels(sequences[seq_id])] <- logical(0) 
} 

for (id in ids){ 
    transaction_subset <- data_for_fseq_mining_trans[[email protected]$sequenceID==id] 
    sequences_score[id, ] <- as.logical(support(x = sequences, transactions = 
    transaction_subset, type="absolute")) 
} 

手がかりはありますか?しかし、あなたのようにあなたのシーケンスオブジェクトの別のプロパティを使用してデータへの結果の行列をマッピングする必要が

sequences_score <- as.matrix([email protected]@data) 

:各配列が存在するかどうか、あなたが実際にあなたの提供されたコードを使用することができます参照し

答えて

2

次のとおりです。

# Get mapping ids, change to numeric values 
mapping_ids  <- as.numeric([email protected]@transactionInfo$sequenceID) 

# Then map your matrix sequence_score to correspond to the order of your data 
sequences_score <- sequences_score[order(mapping_ids), ] 
関連する問題