3

たぶん私は愚かですが、それでも参考になるコメントをいただければ幸いです。

ID、記事、および記事の属性 (つまり、グループ化) を含むデータセットがあります。を使用RODBCして、SQL Server データベースからテーブルをフェッチします ( を使用sqlFetch)。したがって、read.transactionsarules-package から使用する方法が見つかりませんでした。フォーマットは、各行が ID と記事 + グループの組み合わせになるように構成されています。テーブルには、約 1,100 万の一意の ID を持つ 2,200 万の行があります。記事ベースは約 500,000 記事です。説明のために、このようなサンプル データ フレームを作成しました

dat <- data.frame(id <- rep(paste0("id", 1:5),1, each=3),
                  article <- rep(paste0("A", sample(1051:1069,15,T))), 
                  groupA <- paste0(sample(LETTERS[1:3],15,TRUE), sample(1:3, 15,T))
)
colnames(dat) <- c("id", "article", "groupA")
dat$groupB[dat$groupA == "A1"|dat$groupA == "A2"|dat$groupA =="A3"] <- 1
dat$groupB[dat$groupA == "B1"|dat$groupA == "B2"|dat$groupA =="B3"] <- 2
dat$groupB[dat$groupA == "C1"|dat$groupA == "C2"|dat$groupA =="C3"] <- 3

これに似たdata.frameになります

    id article groupA groupB
1  id1   A1053     B3      2
2  id1   A1051     B1      2
3  id1   A1067     B2      2
4  id2   A1054     B1      2
5  id2   A1069     B1      2
6  id2   A1068     A3      1
7  id3   A1053     C3      3
8  id3   A1066     B3      2
9  id3   A1057     A2      1
10 id4   A1056     B1      2
11 id4   A1065     C1      3
12 id4   A1069     A3      1
13 id5   A1066     A3      1
14 id5   A1062     A3      1
15 id5   A1059     B2      2

マーケット バスケット分析にルール パッケージを使用したいと考えています。ただし、data.frame をトランザクション オブジェクトに転送すると、txn <- as(dat, "transactions")すべての行が 1 つのバスケットとして識別されます。id 変数を識別子としてルールに指定する可能性はありますか? 基本的に、私は-transformationの関数"single"からオプションを探しています。関連する 2 番目の質問は次のとおりです。ルール パッケージで属性を使用できますか? 記事レベルだけでなく、グルーピングレベルでもアルゴリズムを使って分析する必要があると思いました。たとえば、商品 A1053 を購入すると、グループ A B3 を推奨するルールが見つかります。これは可能ですか?read.transactionsasapriori

4

1 に答える 1

2

短い答え: split. 私はread.transactionsコードを調べました(これはRにあるため、Rに精通している人にとっては簡単にアクセスできます)。いくつかの優れたチェックを行いますが、重要なコード行は次のようです。

entries <- split(entries[[cols[2]]], entries[[cols[1]]])
as(entries, "transactions")

あなたの例では:

dat <- split(dat$article, dat$id)
ts <- as(dat, "transactions")

必要に応じて、フラット ファイルの代わりに RODBC 接続から読み取る read.transactions 関数のバリアントを作成できます。

于 2016-02-16T14:43:47.063 に答える