상세 컨텐츠

본문 제목

R - 연관 분석 예제

데이터 분석·개발/데이터 분석

by 에스프리터 2018.05.21 16:10

본문






오늘 예제는 연관 분석에 관한 예제입니다.
예제로 어떤 사람이 어떤 과자 상품을 구매하였는지를 놓고 분석합니다.


코드

#연관분석 : 연관된 규칙을 찾는 무방향성 데이터 마이닝 기법
#연관 규칙은 특정 사건이 발생했을 때 함께 (빈번히)발생하는 또 다른 사건의 규칙이다.
#컬럼명은 영어로 써야 알이 이해 한다.

install.packages("arules")
library(arules)

cust <- read.csv("testdata/priori_data2.csv", stringsAsFactors = F)
cust
cust$sangpum[cust$irum=="홍길동"]

cust.list <-split(cust$sangpum, cust$irum) #이름을 기준으로 구매한 상품들을 짤라서 나눔
cust.list

#trainsaction type 으로 변환이 됨
cust.tran <- as(cust.list, "transactions") #as합수는 타입을 바꿔줌
cust.tran
class(cust.tran)
cust.rules <-apriori(cust.tran) # apriori 에서 transaction 함수를 달라고 함. 그래서 as라는 함수로 transaction 객체를 만듬
cust.rules #4개의 룰이 만들어 졌음
summary(cust.rules)

inspect(cust.rules) # {자갈치 를 구매하고 맛동산을 구매한사람}  support지지도 0.2    1          confidence(1)보다 크면 양의 상관관계  1
                    #
# (support confidence lift)지지도 신뢰도 향상도

# -------------------------------------------------------------
#customer <- read.csv("testdata/priori_data.csv", stringsAsFactors = F)
customer <- read.csv("testdata/priori_data.csv", stringsAsFactors = F) #stringsAsFactors == as.is=T
customer <- read.csv("testdata/priori_data.csv", as.is=T) #as.is=T 는 chr로 옴
str(customer)
customer

customer$sangpum[customer$irum=='홍길동'] #특정사람이 구매한 모든 상품 확인
#스플릿으로 사람들이 구매한 상품 나누기
customer.list<-split(customer$sangpum, customer$irum) #거래별 항목정리
customer.list

#거래별 항목정리 후 transaction 객체 생성
customer.tran<-as(customer.list,"transactions") #에러 (중복)
customer.list<-sapply(customer.list, unique) #customer.list 중복제거
customer.tran<-as(customer.list,"transactions")
customer.tran #트랜잭션 6개와 9개의 아이탬으로 만들어 졌음
summary(customer.tran) #자세한 정보 보기

#빈도수 따로보기
itemFrequency(customer.tran)

itemFrequency(customer.tran[,1:5]) #1열에서 5열까지

itemFrequencyPlot(customer.tran,main="지지도 1%이상 항목들") #비도에 대한 차트 그리기

itemFrequencyPlot(customer.tran,topN=5,main="지지도 상위 5% 항목들")

#연관 규칙 생성
customer.rules <- apriori(customer.tran) #신뢰도 0.8

#요약정보
summary(customer.rules) #80개의 룰이 만들어짐

#연관 규칙 확인하는 함수
inspect(customer.rules)

#부분적으로 보기
#높은순으로 보기
inspect(sort(customer.rules,by ="lift")[1:5])
#낮은순으로 보기
inspect(sort(customer.rules,by ="lift",decreasing = FALSE)[1:5])
inspect(sort(customer.rules,by ="support")[1:5]) #지지도 별로, 신뢰도별 향상도별로 볼수 있다.

rule_subset<-subset(customer.rules, items %in% c("맛동산","짱구"))
inspect(rule_subset[1:5])
#시각화
install.packages("arulesViz")
library(arulesViz)

plot(customer.rules, method = "grouped")
plot(customer.rules, method = "graph")




샘플 데이터





본 포스팅은 KIC 캠퍼스에서 박영권 강사의 지도하에 공부하며 작성한 리포트입니다.
혹시 잘못된 내용이 있거나 문제 소지시 댓글 남겨주시면 조치하겠습니다.






태그

관련글 더보기

댓글 영역

  • 프로필 사진
    2018.05.22 02:56
    비밀댓글입니다
    • 프로필 사진
      2018.05.24 11:29 신고
      안녕하세요. 에스프리터입니다.
      강의 시간이 촉박하기 때문에 학교처럼 깊이 있게 다루진 못합니다. 비중은 이론(원리)/실습이 2:8 정도 되는 것 같고, 대신 반복 실습해서 개념 익힐 수 있게 노력하고 있습니다.