No.21751 【R】データフレーム形式による出力  【赤羽】 2015/08/29(Sat) 08:59

青木先生,
赤羽と申します,いつもご教示を頂戴し,誠にありがとうございます。
改めて御礼を申し上げます。

本来ならば,自分で作成したRコードをお示ししながら,ご教示を頂戴すべきですが,
恥ずかしながら,今回は,何もできない状況です。

今回は,データフレーム形式による出力についてご教示を頂ければ大変に助かります。
どうぞよろしくお願いいたします。

−−−

連関ルール抽出のaruleパッケージの,Rコードと結果をお示しをします。

dat <- read.table("タイタニック.csv", header=TRUE, sep="," )

rules <- apriori( dat , parameter=list(maxlen=3, minlen=2, support=0.0005, confidence=0.2), appearance=list(rhs="Alive=生還", default="lhs") )

rules.sorted <- sort(rules, by="lift")

inspect(rules.sorted)

lhs rhs support confidence lift
1 {Class=2等,
Age=子ども} => {Alive=生還} 0.01090 1.000 3.096
2 {Class=1等,
Age=子ども} => {Alive=生還} 0.00273 1.000 3.096
3 {Class=1等,
Sex=女性} => {Alive=生還} 0.06406 0.972 3.010
4 {Class=2等,
Sex=女性} => {Alive=生還} 0.04225 0.877 2.716
5 {Class=乗務員,
Sex=女性} => {Alive=生還} 0.00909 0.870 2.692
6 {Age=大人,
Sex=女性} => {Alive=生還} 0.14357 0.744 2.302
(略)

この結果を,
lhs, rhs, support, confidence, lift の属性からなるデータフレーム形式で出力し
(csv,または,タブ区切りテキスト)
EXCELに取り込み活用したいと考えています。

str(rules)のコマンド実行によるオブジェクトの構造は以下のように複雑ですので,
自力ではできませんでした。

Formal class 'rules' [package "arules"] with 4 slots
..@ lhs :Formal class 'itemMatrix' [package "arules"] with 3 slots
.. .. ..@ data :Formal class 'ngCMatrix' [package "Matrix"] with 5 slots
.. .. .. .. ..@ i : int [1:26] 6 2 3 7 1 4 1 6 1 7 ...
.. .. .. .. ..@ p : int [1:16] 0 1 2 3 4 6 8 10 12 14 ...
.. .. .. .. ..@ Dim : int [1:2] 10 15
.. .. .. .. ..@ Dimnames:List of 2
.. .. .. .. .. ..$ : NULL
.. .. .. .. .. ..$ : NULL
.. .. .. .. ..@ factors : list()
.. .. ..@ itemInfo :'data.frame': 10 obs. of 3 variables:
.. .. .. ..$ labels :Class 'AsIs' chr [1:10] "Class=1等" "Class=2等" "Class=3等" "Class=乗務員" ...
.. .. .. ..$ variables: Factor w/ 4 levels "Age","Alive",..: 3 3 3 3 1 1 4 4 2 2
.. .. .. ..$ levels : Factor w/ 10 levels "1等","2等","3等",..: 1 2 3 7 4 9 6 10 5 8
.. .. ..@ itemsetInfo:'data.frame': 0 obs. of 0 variables
..@ rhs :Formal class 'itemMatrix' [package "arules"] with 3 slots
.. .. ..@ data :Formal class 'ngCMatrix' [package "Matrix"] with 5 slots
.. .. .. .. ..@ i : int [1:15] 9 8 8 8 9 9 8 9 9 9 ...
.. .. .. .. ..@ p : int [1:16] 0 1 2 3 4 5 6 7 8 9 ...
.. .. .. .. ..@ Dim : int [1:2] 10 15
.. .. .. .. ..@ Dimnames:List of 2
.. .. .. .. .. ..$ : NULL
.. .. .. .. .. ..$ : NULL
.. .. .. .. ..@ factors : list()
.. .. ..@ itemInfo :'data.frame': 10 obs. of 3 variables:
.. .. .. ..$ labels :Class 'AsIs' chr [1:10] "Class=1等" "Class=2等" "Class=3等" "Class=乗務員" ...
.. .. .. ..$ variables: Factor w/ 4 levels "Age","Alive",..: 3 3 3 3 1 1 4 4 2 2
.. .. .. ..$ levels : Factor w/ 10 levels "1等","2等","3等",..: 1 2 3 7 4 9 6 10 5 8
.. .. ..@ itemsetInfo:'data.frame': 0 obs. of 0 variables
..@ quality:'data.frame': 15 obs. of 4 variables:
.. ..$ support : num [1:15] 0.1563 0.2399 0.3058 0.6197 0.0109 ...
.. ..$ confidence : num [1:15] 0.732 0.748 0.76 0.788 1 ...
.. ..$ lhs.support: num [1:15] 0.2135 0.3208 0.4021 0.7865 0.0109 ...
.. ..$ lift : num [1:15] 2.27 1.1 1.12 1.16 3.1 ...
..@ info :List of 4
.. ..$ data : symbol dat
.. ..$ ntransactions: int 2201
.. ..$ support : num 0.005
.. ..$ confidence : num 0.7

どうぞ,よろしくお願いいたします。

No.21752 Re: 【R】データフレーム形式による出力  【青木繁伸】 2015/08/29(Sat) 14:45

S4 クラスの @ は,S3 クラスの $ と同じように使います。
例えば,rules@lhs@itemInfo
によって,以下のようなデータフレームが返されます。
labels variables levels
1 Class=1等 Class 1等
2 Class=2等 Class 2等
3 Class=3等 Class 3等
:
8 Age=大人 Age 大人
9 Alive=死亡 Alive 死亡
10 Alive=生還 Alive 生還

後は,暗号解読です。
以下のような,データフレームを返す関数を作りましたので,データ構造の解読とプログラム実行を試してみてください。
func <- function(obj) {
n <- obj@lhs@data@Dim[2]
df <- NULL
for (i in 1:n) {
lhs <- paste(obj@lhs@itemInfo[, 1][obj@lhs@data[, i]], collapse = ", ")
rhs <- obj@rhs@itemInfo[, 1][obj@rhs@data[, i]]
quality <- obj@quality[i, ]
df0 <- data.frame(lhs, rhs, quality)
df <- rbind(df, df0)
}
df
}

func(rules.sorted)

No.21753 【御礼】 Re: 【R】データフレーム形式による出力  【赤羽】 2015/08/29(Sat) 16:38

青木先生,
赤羽と申します,いつもご教示を頂戴し,誠にありがとうございます。

暗号を解凍する関数を作成してくださいましたので,
実行しながら,やっていることを理解できるようにします。

R言語の勉強を独学で進めていて不安になることが多いのですが,
毎回,良いお手本をお示ししてくださいますので,
勉強の方向性が分かり,安心できます。

今回も青木先生に助けていただきました。
改めて御礼を申し上げます。

● 「統計学関連なんでもあり」の過去ログ--- 047 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る