2017-02-18 21 views
1

我有一個包含月份,客戶ID和商店ID的大型數據集。每個客戶每個地點每月有一個記錄,總結他們在該地點的活動。在大型數據集中查找值的同現

Month Customer ID Store 
    Jan  1  A 
    Jan  4  A 
    Jan  2  A 
    Jan  3  A  
    Feb  7  B 
    Feb  2  B 
    Feb  1  B 
    Feb  12  B 
    Mar  1  C 
    Mar  11  C 
    Mar  3  C 
    Mar  12  C 

我有興趣創建一個矩陣,顯示每個位置與另一個位置共享的客戶數量。就像這樣:

 A  B   C 
A  4  2   2  
B  2  4   2 
C  2  2   4 

例如,由於客戶在下個月訪問商店A,然後B商店,他們將被添加到理貨。我對共享客戶數量感興趣,而不是訪問次數。

我在這個線程(Creating co-occurrence matrix)中嘗試了稀疏矩陣方法,但由於某些原因我不能理解返回的數字。

任何想法將不勝感激!

回答

2

更新: 我發佈的原始解決方案適用於您的數據。但是你的數據有 這個不尋常的屬性,沒有客戶曾經在兩個不同的 月訪問過同一家商店。假定會發生,需要修改。

我們需要的是客戶的商店矩陣,如果客戶有 訪問該商店,則該商店的矩陣爲1,否則爲零。使用的原始解決方案
M = as.matrix(table(Dat$ID_Store, Dat$Customer))
它給出了每個客戶訪問店鋪多少個不同的月份。與 不同的數據,這些數字可能不止一個。我們可以修復使用
M = as.matrix(table(Dat$ID_Store, Dat$Customer) > 0)
如果你看看這個矩陣,它會說真假,但由於TRUE = 1,FALSE = 0 ,將工作就好了。因此,充分修正的解決方案是:

M = as.matrix(table(Dat$ID_Store, Dat$Customer) > 0) 
M %*% t(M) 

    A B C 
    A 4 2 2 
    B 2 4 2 
    C 2 2 4 
+0

感謝這個完美! – Steven

1

我們也試試這個:

library(reshape2) 
df <- dcast(df,CustomerID~Store, length, value.var='Store') 
# CustomerID A B C 
#1   1 1 1 1 
#2   2 1 1 0 # Customer 2 went to stores A,B but not to C 
#3   3 1 0 1 
#4   4 1 0 0 
#5   7 0 1 0 
#6   11 0 0 1 
#7   12 0 1 1 
crossprod(as.matrix(df[-1])) 
# A B C 
#A 4 2 2 
#B 2 4 2 
#C 2 2 4 

與庫arules

library(arules) 
write(' Jan  1  A 
      Jan  4  A 
      Jan  2  A 
      Jan  3  A  
      Feb  7  B 
      Feb  2  B 
      Feb  1  B 
      Feb  12  B 
      Mar  1  C 
      Mar  11  C 
      Mar  3  C 
      Mar  12  C', 'basket_single') 
tr <- read.transactions("basket_single", format = "single", cols = c(2,3)) 
inspect(tr) 
# items transactionID 
#[1] {A,B,C} 1    
#[2] {C}  11   
#[3] {B,C} 12   
#[4] {A,B} 2    
#[5] {A,C} 3    
#[6] {A}  4    
#[7] {B}  7  
image(tr) 

enter image description here

crossTable(tr, sort=TRUE) 
# A B C 
#A 4 2 2 
#B 2 4 2 
#C 2 2 4 
+0

這也工作!謝謝! – Steven

+0

嗨Sandipan。還可以使用arules庫來計算這些客戶在其他地點的活動。例如,如果我有一個「購買洗浴產品數量」的列和另一個「戶外產品數量」的列,我可以總結最初創建的矩陣中發生的活動嗎?即如果屬於商店A的顧客去了商店B,我們可以在那裏總結他們的活動嗎? – Steven