No.22288 R 状態遷移を表形式で整理  【明石】 2017/03/04(Sat) 18:46

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

Rプログラムについて,ご教示いただきたいことが出てきました。

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

ーーー

Webページのコンテンツの遷移を,表形式で整理する,Rプログラムを作成したいと思います。

簡単な例でお示しをします。
n05 > n07 > n01 > n05
n07 > n07 > n07 > n07
n02 > n05
n07 > n02 > n05 > n02 > n05
n05
n07 > n07 > n02
n07 > n05 > n01 > n01
n02 > n07 > n01 > n01 > n01
・・・・・・・
各行は,1つのセッションです。

n01 n02 n03,,,n07 の文字列は,コンテンツの名前です。

例えば,1行目は,n05 → n07 → n01 → n05 の4つのコンテンツを閲覧したという意味です。

2行目のように,同じコンテンツだけという場合もありえます。

この状態遷移を,画像でお示しします表の形で整理したいと思います。

縦方向は,セッション
横方向は,コンテンツの種類

セルには,各セッションで閲覧したコンテンツ種類ごとの回数を記入します。

実際のデータでは,データファイルごとに,コンテンツの名称も個数も変わります。

固定ではないところが,プログラム作成の難しさの要因ともなっています。

ご教示いただけましたら,大変に助かります。
何卒どうぞ,よろしくお願いいたします。


No.22289 Re: R 状態遷移を表形式で整理  【青木繁伸】 2017/03/04(Sat) 19:48

コンテンツ名に特定の規則がない場合にも対応できるように
臆せず for を使う
func <- function(s) {
tbl <- NULL
s <- strsplit(s, " > ")
nameOfContents <-(table(unlist(s)))
tbl <- matrix(0, length(s), length(nameOfContents))
colnames(tbl) <- nameOfContents
for (i in seq_along(s)) {
for (j in seq_along(s[[i]])) {
tbl[i, s[[i]][j]] <- tbl[i, s[[i]][j]]+1
}
}
tbl
}

func(c("n05 > n07 > n01 > n05",
"n07 > n07 > n07 > n07",
"n02 > n05",
"n07 > n02 > n05 > n02 > n05",
"n05",
"n07 > n07 > n02",
"n07 > n05 > n01 > n01",
"n02 > n07 > n01 > n01 > n01"))
実行結果
     n01 n02 n05 n07
[1,] 1 0 2 1
[2,] 0 0 0 4
[3,] 0 1 1 0
[4,] 0 2 2 1
[5,] 0 0 1 0
[6,] 0 1 0 2
[7,] 2 0 1 1
[8,] 3 1 0 1

No.22290 Re: R 状態遷移を表形式で整理  【明石】 2017/03/05(Sun) 08:55

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

ご教示をいただきまして,誠にありがとうございます。

追試しながら,勉強をさせていただいております。
内容については,理解しつつあります。

しかしながら,掲示板のプログラムをコピペさせていただき,実行すると,
以下のようなエラー表示があります。

誠にお手数ですが,ご確認をいただけると大変に助かります。

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

ご教示をいただきまして,誠にありがとうございます。
> func <- function(s) {
+ tbl <- NULL
+ s <- strsplit(s, " > ")
+ nameOfContents <-(table(unlist(s)))
+ tbl <- matrix(0, length(s), length(nameOfContents))
+ colnames(tbl) <- nameOfContents
+ for (i in seq_along(s)) {
+ for (j in seq_along(s[[i]])) {
+ tbl[i, s[[i]][j]] <- tbl[i, s[[i]][j]]+1
+ }
+ }
+ tbl
+ }
>
> func(c("n05 > n07 > n01 > n05",
+ "n07 > n07 > n07 > n07",
+ "n02 > n05",
+ "n07 > n02 > n05 > n02 > n05",
+ "n05",
+ "n07 > n07 > n02",
+ "n07 > n05 > n01 > n01",
+ "n02 > n07 > n01 > n01 > n01"))

tbl[i, s[[i]][j]] でエラー: 添え字が許される範囲外です

No.22291 Re: R 状態遷移を表形式で整理  【青木繁伸】 2017/03/05(Sun) 09:39

4 行目がおかしかったようです(関数名 names が落ちてしまった)
nameOfContents <- names(table(unlist(s)))

No.22292 Re: R 状態遷移を表形式で整理  【明石】 2017/03/05(Sun) 10:13

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

ご教示をいただきまして,誠にありがとうございます。

何度もお手を煩わせてしまい,申し訳ございませんでした。

無事に確認できました。
プログラムの内容も,理解できました。
ここで使われているノウハウはとても貴重であり,色々と役立ちます!

お示しくださいましたプログラムは,
状態遷移を記載した外部ファイル"Transition.txt"を,
scan()関数で読み込むように,汎用化させていただきました。

ご教示をいただきまして,誠にありがとうございます。
心から御礼を申し上げます。

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