本文資料是來自datacastle網站上的一道競賽題,是基于關聯規則進行商品推薦之類的題目
資料集中還包含了對商品的評分和購買時間兩個額外變量,下面這篇文章并沒有使用到這一個變量,
特别是對商品的評分這個變量,包含了很多有用的資訊。
是以說,這篇文章還是一個半成品,有空會補上。
#讀入資料
data = read.csv("資料.csv",stringsAsFactors=F)
data = data[1:57528,] #取訓練集
write.table(data,'shopping.txt') #導出成txt,為導入成transactions做準備
#導出後,在txt檔案中,進行替換查找,格式如下:<pre name="code" class="plain">分别是行名,id,商品,評分,購買時間
1 1 1 5 874965758
2 1 3 4 878542960
3 1 4 3 876893119
4 1 5 3 889751712
5 1 7 4 875071561
6 1 9 5 878543541
7 1 13 5 875071805
8 1 15 5 875071608
9 1 16 5 878543541
10 1 18 4 887432020
11 1 19 5 875071515
library(arules)
#讀入成transactions資料格式
shopping = read.transactions('shopping.txt',format='single',cols=c(2,3))
#可以通過dim(shopping) summary(shopping)來檢視資料集的基本情況
#size()檢視每個交易的商品數
basketSize = size(shopping)
#檢視每個item支援度
itemFreq = sort(itemFrequency(shopping),decreasing=T) #将支援度排序
itemFreq[1:5] #檢視前五個item的支援度
sum(itemFreq)#本質上代表"平均一個transaction購買的item個數"
#根據需要,篩選購買兩件以上的交易
shopping[size(shopping) > 1]
#運用apriori函數生成規則
myrules = apriori(shopping,parameter=list(support=0.1,confidence=0.25,minlen=2))
#使用summary函數檢視規則的彙總資訊
summary(myrules)
inspect(myrules[1:10])#檢視具體的規則
具體的規則如下:
> inspect(myrules[1:10])#檢視具體的規則
lhs rhs support confidence lift
1 {118} => {121} 0.1102863 0.6797386 2.693250
2 {121} => {118} 0.1102863 0.4369748 2.693250
3 {118} => {181} 0.1039236 0.6405229 1.755852
4 {181} => {118} 0.1039236 0.2848837 1.755852
5 {275} => {50} 0.1113468 0.5833333 1.432509
6 {50} => {275} 0.1113468 0.2734375 1.432509
#按名額對規則進行排序
sort(myrules,by='lift')
#搜尋規則
subset(myrules,items %in% "12")
subset(myrules,lhs %in% "12")#前項含“12”的規則
subset(myrules,rhs %in% "12")#後項含“12”的規則
# %in%是精确比對
# %pin%是部分比對,也就是說隻要item like '%A%' or item like '%B%'
# %ain%是完全比對,也就是說itemset has ’A' and itemset has ‘B'
#儲存挖掘結果
#write是arules包函數
write(myrules,'myrules.csv',sep=",", quote=TRUE, row.names=FALSE)
write(myrules,'myrules.txt',sep=",", quote=TRUE, row.names=FALSE)#還是csv檔案清晰好看
#或者轉換成data.frame,再做進一步處理
myrules_df = as(myrules,'data.frame')
規則如下:
> head(myrules_df)
rules support confidence lift
1 {118} => {121} 0.1102863 0.6797386 2.693250
2 {121} => {118} 0.1102863 0.4369748 2.693250
3 {118} => {181} 0.1039236 0.6405229 1.755852
4 {181} => {118} 0.1039236 0.2848837 1.755852
5 {275} => {50} 0.1113468 0.5833333 1.432509
6 {50} => {275} 0.1113468 0.2734375 1.432509
更詳盡的知識可以參考http://blog.csdn.net/gjwang1983/article/details/45015203