1

私はRに非常に慣れていないので、この質問が比較的初心者である場合は申し訳ありません. 注文 ID とその注文 ID 内で注文された製品を示す約 33,000 行のリストがあります。次のように構成されています。

Order.ID    Product  
193505  Pineapple Cheddar Burger  
193505  Onion Rings  
193564  Pineapple Cheddar Burger  
193623  Hamburger  
193623  French Fries  
193623  Fountain Soda  
193623  Hot Dog  
193631  Hamburger  
193631  French Fries  
193631  Milkshake  
193644  Daily Special  
193726  Hamburger  
193726  French Fries  
193726  Fountain Soda  
193728  Hamburger  
193728  French Fries  
193728  Fountain Soda  
193738  Hamburger  
193738  French Fries  
193762  Hamburger  
193762  French Fries  
193762  Fountain Soda  
193762  Hamburger  
193762  French Fries  
193762  Fountain Soda

他の各アイテムと同じ注文 ID で注文されている各アイテムの相関関係を反映する相関行列を生成したいと考えています。table(ID, Product)私は、各注文内で注文された製品を提供する を使用することから始めました。製品 1 が注文された場合、他の製品 (製品 2-k) の注文数をカウントする方法に行き詰まっています。理想的には、すべての製品に対してその分析を実行し、それをマトリックスに変換したいと考えていますが、1 つを適切に評価することが論理的な最初のステップのように思えました。

この問題について私が得ることができるガイダンスをいただければ幸いです。前もって感謝します。

4

4 に答える 4

5

arules パッケージ ( http://cran.r-project.org/web/packages/arules/index.html ) を調べることをお勧めします。具体的には、頻繁に使用するアイテム セットを探しています。

sets = apriori(asc, parameter=list(target="freq"))

すべての組み合わせを把握できるようになります。データの形式を変更する必要がありますが、table() を開始することをお勧めします。

2 つの製品のディストリビューションだけでなく、すべての組み合わせを返すことができます。

セットのサポートを探しているので、次を使用します。

inspect(sets)
于 2013-02-18T23:07:11.023 に答える
1

reshape2パッケージのdcastを使用すると、次の値でペアワイズ相関関数を実行できる行列が得られます。

data <- read.table(h=T, text="Order.ID    Product  
+ 193505  'Pineapple Cheddar Burger'  
+ 193505  'Onion Rings'  
+ 193564  'Pineapple Cheddar Burger'  
+ 193623  'Hamburger'  
+ 193623  'French Fries'  
+ 193623  'Fountain Soda'  
+ 193623  'Hot Dog'  
+ 193631  'Hamburger'  
+ 193631  'French Fries'  
+ 193631  'Milkshake'  
+ 193644  'Daily Special'  
+ 193726  'Hamburger'  
+ 193726  'French Fries'  
+ 193726  'Fountain Soda'  
+ 193728  'Hamburger'  
+ 193728  'French Fries'  
+ 193728  'Fountain Soda'  
+ 193738  'Hamburger'  
+ 193738  'French Fries'  
+ 193762  'Hamburger'  
+ 193762  'French Fries'  
+ 193762  'Fountain Soda'  
+ 193762  'Hamburger'  
+ 193762  'French Fries'  
+ 193762  'Fountain Soda'")



library(reshape2)

df <- dcast(data, Order.ID ~ Product)
cor(df[,-1], use = "pairwise")

                         Daily Special Fountain Soda French Fries Hamburger Hot Dog
Daily Special                   1.0000       -0.2868      -0.4375   -0.4375 -0.1250
Fountain Soda                  -0.2868        1.0000       0.8030    0.8030  0.2294
French Fries                   -0.4375        0.8030       1.0000    1.0000  0.1250
Hamburger                      -0.4375        0.8030       1.0000    1.0000  0.1250
Hot Dog                        -0.1250        0.2294       0.1250    0.1250  1.0000
Milkshake                      -0.1250       -0.2868       0.1250    0.1250 -0.1250
Onion Rings                    -0.1250       -0.2868      -0.4375   -0.4375 -0.1250
Pineapple Cheddar Burger       -0.1890       -0.4336      -0.6614   -0.6614 -0.1890
                         Milkshake Onion Rings Pineapple Cheddar Burger
Daily Special              -0.1250     -0.1250                  -0.1890
Fountain Soda              -0.2868     -0.2868                  -0.4336
French Fries                0.1250     -0.4375                  -0.6614
Hamburger                   0.1250     -0.4375                  -0.6614
Hot Dog                    -0.1250     -0.1250                  -0.1890
Milkshake                   1.0000     -0.1250                  -0.1890
Onion Rings                -0.1250      1.0000                   0.6614
Pineapple Cheddar Burger   -0.1890      0.6614                   1.0000
于 2013-02-18T23:24:03.907 に答える
0

マーケット バスケット分析 (またはアフィニティ分析) を検討しており、特にサポート、信頼度、リフトを定義して見つけます。ここで見つけたそれを説明する最高の論文の1つ。

kmmatsで言及されている arules は使用するパッケージです。それを使用する良い例は、CrossValidated サイトhere にあります

于 2013-02-18T23:40:07.143 に答える
0

これがあなたの望むものだと思います。まず、データを読み込みます。

# Read in data
df<-read.table(
textConnection('
193505,Pineapple Cheddar Burger
193505,Onion Rings
193564,Pineapple Cheddar Burger
193623,Hamburger
193623,French Fries 
193623,Fountain Soda
193623,Hot Dog
193631,Hamburger
193631,French Fries
193631,Milkshake
193644,Daily Special
193726,Hamburger
193726,French Fries 
193726,Fountain Soda
193728,Hamburger
193728,French Fries
193728,Fountain Soda
193738,Hamburger
193738,French Fries
193762,Hamburger
193762,French Fries
193762,Fountain Soda
193762,Hamburger
193762,French Fries
193762,Fountain Soda
')
,sep=',')
names(df)<-c('id','food')

次に、マトリックスを作成します。

# Create a matrix of 1's and 0's with id on left and food and column.
id.by.food<-as.matrix(table(df$id,df$food))
# If someone ordered an item twice, you'll get a '2'. 
# Convert everything to 1's.
id.by.food<-pmin(id.by.food,1)
# Get a correlation matrix
round(cor(id.by.food),2)
                         Daily Special Fountain Soda French Fries Hamburger Hot Dog Milkshake Onion Rings
Daily Special                     1.00         -0.32        -0.50     -0.50   -0.12     -0.12       -0.12
Fountain Soda                    -0.32          1.00         0.63      0.63    0.40     -0.32       -0.32
French Fries                     -0.50          0.63         1.00      1.00    0.25      0.25       -0.50
Hamburger                        -0.50          0.63         1.00      1.00    0.25      0.25       -0.50
Hot Dog                          -0.12          0.40         0.25      0.25    1.00     -0.12       -0.12
Milkshake                        -0.12         -0.32         0.25      0.25   -0.12      1.00       -0.12
Onion Rings                      -0.12         -0.32        -0.50     -0.50   -0.12     -0.12        1.00
Pineapple Cheddar Burger         -0.19         -0.48        -0.76     -0.76   -0.19     -0.19        0.66
                         Pineapple Cheddar Burger
Daily Special                               -0.19
Fountain Soda                               -0.48
French Fries                                -0.76
Hamburger                                   -0.76
Hot Dog                                     -0.19
Milkshake                                   -0.19
Onion Rings                                  0.66
Pineapple Cheddar Burger                     1.00
于 2013-02-18T23:20:21.823 に答える