根据Wikipedia点击流数据创建转换矩阵

时间:2019-04-05 08:31:48

标签: r matrix transition markov-chains

我正在尝试从Wikipedia Clickstream数据集创建一个转换矩阵。借此,我想展示用户从一篇维基百科文章转移到另一篇维基百科文章的可能性。

我有一个数据框,由三列组成。 source.category是指源文章的标题,而target.category是指目标文章的标题。第三列是“总计”,指的是点击次数(即用户从该来源文章移至目标文章的次数)。

据此,我想计算在给定点击次数的情况下从源文章到目标文章的转换概率。

这是我的数据框的摘要:

source.category    target.category        total      
 Length:98          Length:98          Min.   :   21  
 Class :character   Class :character   1st Qu.:  684  
 Mode  :character   Mode  :character   Median : 2132  
                                       Mean   : 5395  
                                       3rd Qu.: 5296  
                                       Max.   :53378 

最好的方法是创建一个函数吗?

trans.matrix <-function(...)

此功能的外观如何?

然后将其放入:trans.matrix(as.matrix(df))吗?

1 个答案:

答案 0 :(得分:0)

我将使用key软件包进行此操作。我创建了一个最小的数据集来说明这一点:

reshape2

然后仅使用set.seed(42) dataset <- expand.grid(letters[1:4], LETTERS[1:4]) dataset$total <- rpois(16, 1) names(dataset) <- c("source.category", "target.category", "total") # set the last row to the first row to illustrate fill and aggregate dataset[16, ] <- dataset[1, ] 函数创建矩阵,最后将行总和标准化为1。

acast

编辑:在较大的数据集上,这将永远甚至失败。对于较大的数据集,请使用require(reshape2) # reshape to wide format res <- acast( dataset, # the dataset source.category ~ target.category, # the margins of the result value.var = "total", # which variable should be in the cells fill=0L, # fill empty cells with this value fun.aggregate = sum # aggregate double cells with this function ) # normalize rowSums to 1 res <- res / rowSums(res) # this is your result res 包中的稀疏矩阵,这样做速度更快,并且存储结果也更小。

Matrix

这在整个数据集上足够快,可以交互工作。