实例一:PageRank在R中的应用
1、加载R包:
> library(igraph)
> library(dplyr)
2、随机生成具有10个对象的有向图:
> g <-random.graph.game(n=10, p.or.m=1/4, directed=T)
igraph包中的random.graph.game()函数或者erdos.renyi.game(n, p.or.m,directed)函数:根据Erdos-Renyi模型生成随机图形。n为图中的顶点数;p.or.m为以任意两点为边的概率或者图中的边数;directed图是否将被引导,默认为F。
> class(g)
[1]"igraph"
> g
IGRAPH D--- 10 26 --Erdos renyi (gnp) graph
+ attr: name (g/c),type (g/c), loops (g/l), p (g/n)
+ edges:
[1] 4-> 1 8-> 1 10-> 1 4-> 2 6-> 2 3->10 6-> 3 8-> 3 9-> 3
[10] 2-> 4 2-> 5 4-> 5 5->10 2-> 6 3-> 6 5-> 6 2-> 7 4-> 7
[19] 6-> 7 7->10 1-> 8 4-> 8 5-> 8 2-> 9 7-> 9 10-> 9
3、画有向图:
> plot(g)
4、计算PageRank:
> pr <-page.rank(g)
igraph包中的page.rank(graph)函数:PageRank算法。graph对象。
> pr
$vector
[1] 0.13658175 0.05204791 0.199281490.02384814 0.02790233
[6] 0.11644844 0.06089605 0.143054330.10645844 0.13348112
$value
[1] 1
$options
NULL
> str(pr)
List of 3
$ vector : num [1:10] 0.1366 0.052 0.19930.0238 0.0279 ...
$ value : num 1
$ options: NULL
> summary(pr)
Length Class Mode
vector 10 -none- numeric
value 1 -none- numeric
options 0 -none- NULL
5、显示每个对象的PageRank:
> df <-data.frame(Object=1:10, PageRank=pr$vector)
> df
Object PageRank
1 1 0.13658175
2 2 0.05204791
3 3 0.19928149
4 4 0.02384814
5 5 0.02790233
6 6 0.11644844
7 7 0.06089605
8 8 0.14305433
9 9 0.10645844
10 10 0.13348112
> arrange(df, desc(PageRank)) 按PageRank降序排列
Object PageRank
1 3 0.19928149
2 8 0.14305433
3 1 0.13658175
4 10 0.13348112
5 6 0.11644844
6 9 0.10645844
7 7 0.06089605
8 2 0.05204791
9 5 0.02790233
10 4 0.02384814
dplyr包中的arrange(.data,…)函数:按变量排列成行,可以使用desc来降序排列变量。