CSVファイルからデータを読み取ります。データには3つの列があり、1つはトランザクションID、もう2つは製品と製品カテゴリです。 arulesでapriori
関数を使用するには、これをトランザクションに変換する必要があります。トランザクションに変換するとエラーが表示されます。
dat <- read.csv("spss.csv",head=TRUE,sep="," , as.is = T)
dat[,2] <- factor(dat[,2])
dat[,3] <- factor(dat[,3])
spssdat <- dat[,c(1,2,3)]
str(spssdat)
'data.frame': 108919 obs. of 3 variables:
$ Transaction_id: int 3000312 3000312 3001972 3003361 3003361 3003361 3003361 3003361 3003361 3004637 ...
$ product_catalog : Factor w/ 9 levels "AIM","BA","IM",..: 1 1 5 7 7 7 7 7 7 1 ...
$ product : Factor w/ 332 levels "ACM","ACTG/AIM",..: 7 7 159 61 61 61 61 61 61 7 ...
trans4 <- as(spssdat, "transactions")
Error in as(spssdat, "transactions") :
no method or default for coercing “data.frame” to “transactions”
データに2つの列しかない場合、次のように機能します
trans4 <- as(split(spssdat[,2], spssdat[,1]), "transactions")
しかし、3つの列があるときに変換する方法がわかりません。通常、カテゴリ属性、顧客属性などの追加の列があります。そのため、通常、列は2列より大きくなります。複数の列の間でルールを見つける必要があります。
このWebサイト で役立つ情報を見つけました。関連する段落をコピーさせてください:
データフレームは、正規化された(single)形式またはフラットファイル(basket)フォーム。
ファイルがbasket形式の場合、それは各レコードがトランザクションを表すことを意味しますここで、バスケット内のアイテムは列で表されます。
データセットがsingle形式の場合は、各レコードが1つのアイテムを表し、それぞれがアイテムにはトランザクションIDが含まれています。
ファイルからトランザクションをロードするには、read.transactions
を使用します。あなたと私の場合の両方のファイルは、single形式です。
次のコードを使用して、.csvファイルをtransactions
としてロードしました。
trans = read.transactions("some_data.csv", format = "single", sep = ",", cols = c("transactionID", "productID"))
上記のコマンドを完全に理解するには、Rコンソールでread.transactions
と入力した後に利用できる?read.transactions
マニュアルをご覧ください。
私は同じことをしようとしていましたが、作業中のdata.frameのすべての列をファクタリングした後、トランザクションのitemMatrixにそれを強制することはできませんでした。その後、作業中のセッションで「arules」パッケージを再ロードしたことがないことに気付きました。非常に愚かな間違いですが、同じ問題が発生した場合に備えて言及したかったのです。
library("arules")
最初に「Transaction_id」を因子変数に変換する必要があります。