>RE::VISION CRM

R 데이터 분석

0714 복습 :: 연관성분석과 군집화

YONG_X 2015. 7. 20. 09:44

#========[연관성분석과 군집화]========

#

# Descriptive 분석들은 대부분 탐색적인 목적이 강하기 때


문에

# 그 자체로는 옳고 그름을 논할 수 없음

#================


# 장바구니분석 = 연관성분석 = Association Analysis = 


Market Basket Analysis

#  = Association Rule Mining (Discovery)   


k05 <- read.transactions("actorlist.txt", 


rm.duplicates=T, format="basket", sep="," );


# 텍스트 파일에서 확인 후 CSV로 저장. 엑셀에서 다시 CSV


로 재저장 실행 후 텍스트 파일에서 불필요한 문자 확인 필


요 (k05 !! )


# unnecessary space should be elimnated


inspect(head(k05, 5))


# Create an item frequency plot for the top 10 items

itemFrequencyPlot(k05, topN=10,type="absolute")


rules <- apriori(k05, parameter = list(supp = 0.1, conf 


= 0.3, minlen=2, maxlen=2))

inspect(rules)


summary(rules)



#=============


iris1 <- iris[, 1:4] 


iris2 <- scale(iris1) 

fit <- kmeans(iris2, 3) 

tmp01<-as.data.frame(fit$centers)


d <- dist(scale(jara03), method = "euclidean") # 


distance matrix

fit1 <- hclust(d, method="ward.D") 

plot(fit1, labels=jara$artist) # display dendogram


#-------------------


# 클러스터링 (군집화)에 사용할 항목만 뽑아서 df 생성

mtc1 <- mtcars[, c(1,4,6) ] 

# 스케일을 통일

mtc2 <- scale(mtc1) 

# 비계층적 군집화 방법인 k-means 를 적용. 4개 군집으로 


실행

fit <- kmeans(mtc2, 4) 


# 생성된 결과를 담고있는 fit (모델) 에서 각 군집의 중심


점 정보를

# 추출해서 DF로 저장 --- 왜? 마음대로 그래프 그려보고 


싶어서

tmp01<-as.data.frame(fit$centers)


#-------- 계층적 군집화도 가능

d <- dist(scale(mtc1), method = "euclidean") # distance 


matrix

fit1 <- hclust(d, method="ward.D") 

plot(fit1, labels=row.names(mtcars) ) # display 


dendogram


rect.hclust(fit1, 3)


#==========


# 아래 내용이 들어 있는 샘플 데이터

bs1 <- read.csv("basket_sample.txt")


ID,Product

A,Prod1

A,Prod2

B,Prod1

B,Prod2

B,Prod3

C,Prod1



> head(bs1)

  ID Product

1  A   Prod1

2  A   Prod2

3  B   Prod1

4  B   Prod2

5  B   Prod3

6  C   Prod1


# splitstackshape 패키지를 설치하기 위해

# 연관 패키지 함께 설치

install.packages("splitstackshape")

install.packages("stringi")

install.packages("data.table")

require(data.table)

library(splitstackshape)


mydf <- bs1


> reshape(getanID(mydf, "ID"), direction = "wide", idvar = "ID", timevar = ".id")

   ID Product.1 Product.2 Product.3

1:  A     Prod1     Prod2        NA

2:  B     Prod1     Prod2     Prod3

3:  C     Prod1        NA        NA


> dcast.data.table(getanID(mydf, "ID"), ID ~ .id, value.var = "Product", fill = "")

   ID     1     2     3

1:  A Prod1 Prod2      

2:  B Prod1 Prod2 Prod3

3:  C Prod1            


# data.table을 사용하고 있음에 주의. read.transaction으로 포맷변경