[결과물]





[코드]


building.csv



install.packages(c("arules", "arulesViz", "visNetwork", "igraph" ))

library(arules) ## 연관관계 분석을 위한 aprior() 를 쓰기 위함

library(arulesViz) ## 시각화에 필요

library(visNetwork) ## 시각화 중 네트워크 표현에 필요

library(igraph) ## 시각화 결과물을 인터렉티브(움직이게) 해줌

 작업에 필요한 라이브러리를 설치하고 불러옵니다.


## 파일 로드

bui <- read.csv("building.csv", header = T)

head(bui, 3)


## NA 처리 

bui[is.na(bui)] <- 0

trans <- bui


#데이터 정제

roname <- bui[ , 1]

trans <- bui[, -1]

trans <- as.matrix(trans, "Transaction")

rownames(trans) <- roname


# 모델링

rules <- apriori(trans, parameter = list(supp = 0.001, conf = 0.6, target = "rules"))

rules


# 결과 출력

inspect(sort(rules))


 연관관계 모델링 및 결과 출력을 위한 코드입니다.


     lhs                                        rhs              support confidence lift    

[1]  {일반음식점}                            => {패밀리레스토랑} 0.40    1.0000000  2.222222

[2]  {패밀리레스토랑}                        => {일반음식점}     0.40    0.8888889  2.222222

[3]  {약국}                                  => {휴대폰매장}     0.25    1.0000000  3.333333

[4]  {휴대폰매장}                            => {약국}           0.25    0.8333333  3.333333

[5]  {약국}                                  => {병원}           0.25    1.0000000  3.333333

[6]  {병원}                                  => {약국}           0.25    0.8333333  3.333333

[7]  {휴대폰매장}                            => {병원}           0.25    0.8333333  2.777778

[8]  {병원}                                  => {휴대폰매장}     0.25    0.8333333  2.777778

[9]  {편의점}                                => {일반음식점}     0.25    1.0000000  2.500000

[10] {일반음식점}                            => {편의점}         0.25    0.6250000  2.500000

* 야매 개념 소개

  - Support : 지지도, 두 사건이 동시에 일어날 확률

  - Confidence : 신뢰도, 한 사건이 일어났을 때 다른 사건에 영향을 미치는 정도

  - Lift : 리프트, 상관관계와 유사한 개념.



## 시각화

subrules2 <- head(sort(rules, by="lift"), 20) ## lift 기준으로 상위 20개만을 시각화


ig <- plot( subrules2, method="graph", control=list(type="items") )


# saveAsGraph seems to render bad DOT for this case

tf <- tempfile( )

saveAsGraph( subrules2, file = tf, format = "dot" )

# clean up temp file if desired

#unlink(tf)







# 인터렉티브 코드

ig_df <- get.data.frame( ig, what = "both" )

visNetwork(

  nodes = data.frame(

    id = ig_df$vertices$name

    ,value = ig_df$vertices$support # could change to lift or confidence

    ,title = ifelse(ig_df$vertices$label == "",ig_df$vertices$name, ig_df$vertices$label)

    ,ig_df$vertices

  )

  , edges = ig_df$edges

) %>%

  visEdges(  ig_df$edges ) %>%

  visOptions( highlightNearest = T )





## 참고(Reference)

R visualization of arules with arulesViz + igraph + visNetwork


반응형
Posted by JoeSung
,