Content

Board ID 674
Writer heojk
Write Date 2017-05-31 12:05:21
Subject 연관분석을 위한 데이터(구매정보.csv, 추천상품.csv)와 소스코드
Content 연관분석을 위한 데이터(구매정보.csv, 추천상품.csv) 구매정보.csv : 고객의 구매정보를 저장한 데이터, 105402행 추천상품.csv : 고객의 과거 구매내역을 통해 1차 추천한 상품 다운로드 구매정보.csv 추천상품.csv 연관분석 소스코드
#연관분석
rm(list=ls())
install.packages("arules")
library(arules)
#소스코드 및 데이터 다운로드 http://javaspecialist.co.kr/board/674
purchase_D_p <- read.csv("Data/연관분석/구매정보.csv", header=TRUE)

single_D <- subset(purchase_D_p, select=c("영수증번호", "소분류명"))
single_D <- single_D[order(-single_D$영수증번호, single_D$소분류명),] #영수증 번호로 오름차순, 소분류명으로 내림차순 정렬
#temp$영수증번호 <- as.factor(single_D$영수증번호)
#transaction <- as(single_D, "transactions") #이렇게 하면 영수증 번호도 ...
write.table(single_D, file="Working/purchase_D_p_single.csv", 
            sep=",", row.names=FALSE, col.names=FALSE) #행 이름과 열 이름을 제외하고 저장
rm(single_D)

transaction <- read.transactions("Working/purchase_D_p_single.csv", sep=",", format="single", cols=c(1,2))

rules <- apriori(transaction, parameter=list(support=0.0001, confidence=0.01))
rules #set of 10551 rules 

#rules.frame <- as(rules, "data.frame");
#head(rules.frame)

#inspect(rules[1:10])
#inspect(sort(rules, by="lift")[1:10]) #향상도가 가장 큰 것부터 상위 10개 연관 규칙 조회

#lhs에서 찾은 아이템으로 lift가 가장 큰 rhs를 출력
sorted_rule_by_lift <- sort(rules, by="lift")

#inspect(subset(sorted_rule_by_lift, subset = lhs %in% "핸드워시/손세정제")[1])
#temp <- inspect(subset(sorted_rule_by_lift, subset = lhs %in% "핸드워시/손세정제")[1])
#temp$rhs
#as.character(temp$rhs)
#gsub("[{}]", "", as.character(temp$rhs))

D_recommended_product <- read.csv("Data/연관분석/추천상품.csv", header=TRUE )
D_recommended_product$추천상품2 <- ""

#408번째 행의 상품과 연관된 상품은 없음. 예외처리 해야 함
#as.character(D_recommended_product$추천상품[408])
#temp_rule <- subset(sorted_rule_by_lift, subset = lhs %in% as.character(D_recommended_product$추천상품1[408]))
#temp <- inspect(subset(sorted_rule_by_lift, subset = lhs %in% as.character(D_recommended_product$추천상품1[407]))[1])

for(i in 1:nrow(D_recommended_product)) {
  tryCatch({
    capture.output(
      temp <- inspect(subset(sorted_rule_by_lift, subset = lhs %in% as.character(D_recommended_product$추천상품1[i]))[1])
    ) -> .null
    D_recommended_product$추천상품2[i] <- gsub("[{}]", "", as.character(temp$rhs))
  }, error=function(e) {})
}

write.csv(D_recommended_product, "연관추천상품.csv", row.names = FALSE)


############################
#연관규칙 시각화
install.packages("arulesViz")
install.packages("DEoptimR")
library(arulesViz)

plot(rules)

subrules <- subset(rules, subset=lift>20)
plot(subrules, method="graph", control=list(type="items"))
plot(subrules, method="paracoord", control=list(reorder=TRUE))
plot(subrules, method="matrix3D", measure="lift")
plot(subrules, method="matrix", measure=c("lift", "confidence"))
plot(subrules, method="grouped")