fc2ブログ

スポンサーサイト

-- --, --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

言語Rを用いて相関ルールを抽出

01 12, 2012
統計ソフト言語Rを用いて,相関ルールを抽出するために必要なことです.

たとえば,今日のごはんについてアンケートをして,data.frame形式でこんなデータが得られたとする.
> test
項目:性別,年齢,地域,主食,おかず,野菜,その他
1 男性,28,関東,餅,NA,NA,醤油
2 男性,27,関東,米,豚肉,タマネギ,NA
3 女性,28,関東,餅,豚肉,ピーマン,味噌
4 男性,30,関西,パン,ハム,タマネギ,醤油
5 女性,31,関西,餅,魚,タマネギ,NA
6 男性,27,関西,パン,ハム,レタス,NA
※NA:欠損値(未回答,未入力を表す)


項目同士にどんな関連性があるのかを知りたい場合,相関ルールを調べるのが有効です.

たとえば,今回の場合,パンを食べる人はよくハムを食べそうです.

それを表すルールは,{主食=パン} => {おかず=ハム}です.

言語Rで相関ルールを抽出するには,パッケージarulesを使います.

> install.packages("arules", dependencies=T)
> library(arules)


次に,data.frameをtransactions形式に変換します.
が,エラーが発生します.

> data.tran<-as(data, "transactions")
以下にエラー asMethod(object) : column(s) 2 not a factor


transactionsに変換するためには,data.frameのすべてのカラムがfactor型でないといけません.

カラム2の"年齢"は,数値型(integer)なので,factor型に変換します.

すると,transactionsへの変換が可能になります.

> class(test[,2])
[1] "integer"
> test[,2]<-factor(test[,2])
> class(test[,2])
[1] "factor"
> test.tran<-as(test, "transactions")

matrixやdata.frame型にすると,transactionsの中身がみられます.
> as(test.tran, "data.frame")
transactionID items
1 1 {性別=男性,年齢=28,地域=関東,主食=餅,その他=醤油}
2 2 {性別=男性,年齢=27,地域=関東,主食=米,おかず=豚肉,野菜=タマネギ}
3 3 {性別=女性,年齢=28,地域=関東,主食=餅,おかず=豚肉,野菜=ピーマン,その他=味噌}
4 4 {性別=男性,年齢=30,地域=関西,主食=パン,おかず=ハム,野菜=タマネギ,その他=醤油}
5 5 {性別=女性,年齢=31,地域=関西,主食=餅,おかず=魚,野菜=タマネギ}
6 6 {性別=男性,年齢=27,地域=関西,主食=パン,おかず=ハム,野菜=レタス}

グラフを表示してデータの概観を知ることもできます.
> itemFrequencyPlot(test.tran, type="relative")
type="relative" : 相対度数
type="ablsolute" : 絶対度数
itemFrequencyPlotSample


では,相関ルールを抽出します.抽出には,アプリオリアルゴリズムを実行する関数,
priori(data, parameter=??, appearance=??, control=??)
を使います.
引数が何を意味するかは,このDocumentationをみればわかります.
> test.ap<-apriori(test.tran)
> inspect(head(sort(test.ap, by="support"),n=10))
lhs rhs support confidence lift
1 {年齢=28} => {主食=餅} 0.3333333 1 2.0
2 {年齢=28} => {地域=関東} 0.3333333 1 2.0
3 {その他=醤油} => {性別=男性} 0.3333333 1 1.5
4 {年齢=27} => {性別=男性} 0.3333333 1 1.5
5 {おかず=ハム} => {主食=パン} 0.3333333 1 3.0
6 {主食=パン} => {おかず=ハム} 0.3333333 1 3.0
7 {おかず=ハム} => {地域=関西} 0.3333333 1 2.0
8 {おかず=ハム} => {性別=男性} 0.3333333 1 1.5
9 {主食=パン} => {地域=関西} 0.3333333 1 2.0
10 {主食=パン} => {性別=男性} 0.3333333 1 1.5

相関ルールが抽出できました.
おかずについてのルールが知りたい場合は,subset関数を使ってフィルタリングをします.
> test.ap.sub <- subset(test.ap, subset=rhs %pin% "おかず") //式の右辺に"おかず"を含む
> inspect(head(sort(test.ap.sub, by="support"),n=10))
lhs rhs support confidence lift
1 {主食=パン} => {おかず=ハム} 0.3333333 1 3
2 {地域=関西,
主食=パン} => {おかず=ハム} 0.3333333 1 3
3 {性別=男性,
主食=パン} => {おかず=ハム} 0.3333333 1 3
4 {性別=男性,
地域=関西} => {おかず=ハム} 0.3333333 1 3
5 {性別=男性,
地域=関西,
主食=パン} => {おかず=ハム} 0.3333333 1 3
6 {野菜=レタス} => {おかず=ハム} 0.1666667 1 3
7 {年齢=31} => {おかず=魚} 0.1666667 1 6
8 {主食=米} => {おかず=豚肉} 0.1666667 1 3
9 {年齢=30} => {おかず=ハム} 0.1666667 1 3
10 {野菜=ピーマン} => {おかず=豚肉} 0.1666667 1 3

おかずに関する相関ルールがわかりました.
1 CommentsPosted in R
-1 Comments
By 06 08, 2015 - [ edit ]

このコメントは管理者の承認待ちです

Leave a comment
管理者にだけ表示を許可する
Top
-0 Trackbacks
Top
Commojun's WEB
プロフィール

CommoJun

Author:CommoJun
junpoooow

最新記事
最新コメント
読書メーター
commojunさんの読書メーター
commojunの最近読んだ本
カテゴリ
最新トラックバック
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。