web-dev-qa-db-ja.com

data.frameをarulesのトランザクションに変換する方法

CSVファイルからデータを読み取ります。データには3つの列があり、1つはトランザクションID、もう2つは製品と製品カテゴリです。 arulesapriori関数を使用するには、これをトランザクションに変換する必要があります。トランザクションに変換するとエラーが表示されます。

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列より大きくなります。複数の列の間でルールを見つける必要があります。

27
dennis ding

この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マニュアルをご覧ください。

21
Michał Rybak

私は同じことをしようとしていましたが、作業中のdata.frameのすべての列をファクタリングした後、トランザクションのitemMatrixにそれを強制することはできませんでした。その後、作業中のセッションで「arules」パッケージを再ロードしたことがないことに気付きました。非常に愚かな間違いですが、同じ問題が発生した場合に備えて言及したかったのです。

library("arules")
4
Charlie

最初に「Transaction_id」を因子変数に変換する必要があります。

0
Farmer Bob