2017-05-02 10 views
0

私は購入トランザクションのデータセットを持っています。以下は、説明のためのダミーデータセットです。私は、最も頻繁な購入シーケンスを得るために、どのようにリシェイプ/キャストを行うのかを考えようとしています。頻繁なシーケンスの統計

require(data.table) 

MainID=c('A1','A1','A2','C1','C1','C1','D2','D2','D2','A1','D2') 
Purchase=c('A','B','C','A','A','D','E','B','C','E','E') 
Date=c('1/1/2014','5/23/2015','6/12/2015','3/3/2013','5/5/2014','7/21/2014','1/3/2016','4/5/2016','7/7/2016','6/27/2016') 

df=data.table(MainID,Purchase,Date) 
head(df) 

    MainID Purchase  Date 
1:  A1  A 1/1/2014 
2:  A1  B 5/23/2015 
3:  A2  C 6/12/2015 
4:  C1  A 3/3/2013 
5:  C1  A 5/5/2014 
6:  C1  D 7/21/2014 

ここでは、2つのペアのシーケンスを複数の組み合わせで開始します。上のデータセットの場合と同様に、ユニークなシーケンスペアがセットされています。(AはBにつながり、BはCにつながり、AはDにつながり、EはBにつながり、最後のCはEにつながります。) ここではAをA - 私は同じ製品ではない異なる製品のシーケンスを見ています。したがって、出力では、それらの類似した製品シーケンスをすべて無視したいと考えています。必要な

出力:

Pair     Occurrence   No of customers  % confidence 
A leads to B    1     3     1/3 
B leads to C    2     3     2/3 
A leads to D    1     3     1/3 
E leads to B    1     3     1/3 
C leads to E    2     3     2/3 

私はシーケンシングアルゴリズムの承知していますが、私はここにいくつかの基本的な記述分析で探しています。

+0

データから必要な出力を得る方法がわかりません。同じ購入のシーケンスですか?購入を次の行と組み合わせたいですか? MainIDの最初の文字は重要ですか? – FlorianGD

+0

メインIDは一意の識別子であり、A、B、C、D、Eはダミープロダクトです。データの順序は混在していても、必ずしも次の行にあるとは限りません。だから全体的に私は、IDレベルで購入を集計し、日付ごとに注文してから、彼がどのような購入の順序を見ているかを見たいと思う。たとえば、上記のA1顧客は、私はこのように私は各顧客のためのすべての可能なシーケンスを計算し、いずれが最も発生しているのかを知りたいのですが、(私が最後に購入したように(AからB、BからC、そしてCからEへ)集約されたレベルで。 – Pb89

+0

3番目の要素のA2がメインIDとして入力されていますか?日付も欠落しています – FlorianGD

答えて

1

あなたが望むものがわかったら、これはうまくいくかもしれません。あなたのデータからA2をA1に変更し、Dateに長さ11のベクトルを持つように日付を追加したことに注意してください。私もdata.tableを使用するのではなく、直接チブルを作成しました。

MainID=c('A1','A1','A1','C1','C1','C1','D2','D2','D2','A1','D2') 
Purchase=c('A','B','C','A','A','D','E','B','C','E','E') 
Date=c('1/1/2014','5/23/2015','6/12/2015','3/3/2013','5/5/2014','7/21/2014','1/3/2016','4/5/2016','7/7/2016','6/27/2016', '8/8/2016') 
df=data_frame(MainID,Purchase,Date) 
df2 <- df %>% 
    group_by(MainID) %>% 
    arrange(MainID, Date) %>% 
    mutate(Next = lead(Purchase, 1), 
     Pair = paste(Purchase, "leads to", Next)) %>% 
    filter(!is.na(Next), Purchase != Next) %>% 
    ungroup() %>% 
    group_by(Pair) %>% 
    summarise(Occurence = n()) %>% 
    mutate(N_consumers = length(unique(MainID)), 
     Percent_confidence = paste0(Occurence, "/", N_consumers)) 

df2 
# A tibble: 5 <U+00D7> 4 
      Pair Occurence N_consumers Percent_confidence 
     <chr>  <int>  <int>    <chr> 
1 A leads to B   1   3    1/3 
2 A leads to D   1   3    1/3 
3 B leads to C   2   3    2/3 
4 C leads to E   2   3    2/3 
5 E leads to B   1   3    1/3 
関連する問題