【R语言 社交网络】R语言关系网络图+ PageRank算法实现

例子1:
library(plyr)

set.seed(10)
rm(list=ls())
library(igraph)
g<-random.graph.game(n=10,p.or.m=1/3,directed=TRUE)
com = walktrap.community(g, steps = 6)
V(g)$sg = com$membership + 1
V(g)$color = rainbow(max(V(g)$sg))[V(g)$sg]
plot(g, layout=layout.fruchterman.reingold,edge.color = grey(0.4),edge.arrow.mode = ">",vertex.size =20,
vertex.color = V(g)$color)
pr<-page.rank(g)$vector
df<-data.frame(Object=1:10,PageRank=pr)
arrange(df,desc(PageRank))


> arrange(df,desc(PageRank))
Object PageRank
1 3 0.18639194
2 6 0.13309889
3 1 0.12880261
4 9 0.12245781
5 4 0.11631227
6 2 0.08930467
7 10 0.08382175
8 8 0.05271135
9 5 0.04969638
10 7 0.03740232

这里写图片描述

例子2:

rm(list=ls())
library(igraph)
library(plyr)
#1.用igraph创建图表
g<- graph(c(1,2,1,3,1,4,2,3,2,4,3,4,4,2), directed=T)


com = walktrap.community(g, steps = 6)
V(g)$sg = com$membership + 1
V(g)$color = rainbow(max(V(g)$sg))[V(g)$sg]
plot(g, layout=layout.fruchterman.reingold,edge.color = grey(0.4),edge.arrow.mode = ">",vertex.size =20,
vertex.color = V(g)$color)


pr<-page.rank(g)$vector
df<-data.frame(Object=1:4,PageRank=pr)
arrange(df,desc(PageRank))


Object PageRank
1 4 0.3824972
2 2 0.3732476
3 3 0.2067552
4 1 0.0375000

例子2方法2:

rm(list=ls())
library(plyr)
pages<-read.table("F:\\page.txt",sep=",")
names(pages)<-c("src","dist")


#直接计算矩阵特征值
calcEigenMatrix<-function(G){
x <- Re(eigen(G)$vectors[,1])
x/sum(x)
}


#构建邻接矩阵
adjacencyMatrix<-function(pages){
n<-max(apply(pages,2,max))
A <- matrix(0,n,n)
for(i in 1:nrow(pages)) A[pages[i,]$dist,pages[i,]$src]<-1
A
}
#变换概率矩阵,考虑d的情况
dProbabilityMatrix<-function(G,d=0.85){
cs <- colSums(G)
cs[cs==0] <- 1
n <- nrow(G)
delta <- (1-d)/n
A <- matrix(delta,nrow(G),ncol(G))
for (i in 1:n) A[i,] <- A[i,] + d*G[i,]/cs
A
}


A<-adjacencyMatrix(pages)
G<-dProbabilityMatrix(A)
q<-calcEigenMatrix(G)
df<-data.frame(Object=1:length(q),PageRank=q)
arrange(df,desc(PageRank))

> arrange(df,desc(PageRank))
Object PageRank
1 4 0.3824972
2 2 0.3732476
3 3 0.2067552
4 1 0.0375000
>
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东华果汁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值