R语言的igraph画社交关系图示例

作者|顾运筠

编辑按语

顾运筠是大数据文摘的热心读者,这是她看了大数据文摘的《用R语言进行数据可视化的综合指南(一)》《用R语言进行数据可视化的综合指南(二)》后,结合正在coursera上的Data Visualization课程(https://www.coursera.org/course/datavisualization),写了这篇文章。在此,我们先表示感谢,同时也希望有更多热心的读者来稿,交流一下学习心得。

R语言中的igraph可以很方便地画出社交关系图。下面是几个示例。

1.最简单的社交关系图

library(igraph)

dolphin <- read.csv('dolphins.csv',head=T,fileEncoding='UTF-8',stringsAsFactors=F)

g <- graph.data.frame(dolphin)

jpeg(filename='dolphins.jpg',width=800,height=800,units='px')

plot(g,

vertex.size=5,

layout=layout.fruchterman.reingold,

vertex.shape='circle',

vertex.label.cex=1.0,

vertex.label.color='black',

edge.arrow.size=0) #连线的箭头的大小为0,即无箭头

dev.off()

画出的图,如下:

2.关系图中某人或某几个人的关系图

某个人(这里是海豚)的关系图(节点4):

jpeg(filename='dolphins_sub.jpg',width=800,height=800,units='px')

gn<-graph.neighborhood(g, order=1)

plot(gn[[1]],

layout=layout.fruchterman.reingold)

dev.off()

某个人的两层关系图(节点6):

gn<-graph.neighborhood(g, order=2)

plot(gn[[2]], layout=layout.fruchterman.reingold)

dev.off()

某两个人的关系图:

jpeg(filename='dolphins_sub3.jpg',width=800,height=800,units='px')

gn<-graph.neighborhood(g, order=1)

plot(gn[[1]]+gn[[2]], layout=layout.fruchterman.reingold)

dev.off()

3.根据联系人的多少决定节点的大小和色彩,连线设成弧线

source("http://michael.hahsler.net/SMU/ScientificCompR/code/map.R")

E(g)$curved <- 0.2 #将连线设成弧线,数值越大弧线越弯

jpeg(filename='dolphins_curve1.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

plot(g, layout=layout, vertex.size=map(degree(g),c(1,20)), vertex.color=map(degree(g),c(1,20)))

dev.off()

4.给社交关系图划分社区,不同的社区用不同的颜色表示

cl <- optimal.community(g)

E(g)$curved <- 0

jpeg(filename='dolphins_commu2.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[cl$membership+1L],)

dev.off()

5.设定社区的数目

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0) #spins是社区的数目

jpeg(filename='dolphins_commu9.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[sg1$membership],)

dev.off()

6.画出某一社区

画出示例5的社区中,membership为1的社区。

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0)

jpeg(filename='dolphins_subcommu.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

subg <- induced.subgraph(g, which(membership(sg1)==1))

plot(subg, layout=layout, vertex.size=5, vertex.color= 1,)

dev.off()

7.不同布局方式下社区的显示

以上的布局为layout=layout.fruchterman.reingold

如果是其他布局,社区的显示会有变化。

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0)

jpeg(filename='dolphins_commu10.jpg',width=800,height=800,units='px')

layout=layout.circle

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[sg1$membership],)

dev.off()

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0)

jpeg(filename='dolphins_commu11.jpg',width=800,height=800,units='px')

layout=layout.sphere

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[sg1$membership],)

dev.off()

以上的示例仅为抛砖引玉。

有关igraph的demo可以看demo(package="igraph")。

在R中键入demo(package="igraph"),它会给出子项目:

centrality Classic and other vertex centrality indices

cohesive Cohesive blocking, the Moody & White method

community Community structure detection

crashR A crash-course into R

hrg Hierarchical random graphs

smallworld Small-world networks

然后键入子项目看demo。如demo(package="igraph", community),它会给出community的示例。

作者简介:顾运筠,职业院校的统计老师,对机器学习和数据可视化感兴趣。

Python学习群报名已截止。成员筛选中,周末前邮件通知到个人,请注意查收,谢谢!

原文发布于微信公众号 - 大数据文摘(BigDataDigest)

原文发表时间:2015-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

盘点丨2018 年热门 Python 库丨TOP20

在解决数据科学任务和挑战方面,Python继续处于领先地位。去年,我对当时热门的Python库进行了总结。今年,我在当中加入新的库,重新对2018年热门Pyth...

1932
来自专栏AI研习社

Java工程师转型AI的秘密法宝:深度学习框架Deeplearning4j | 回顾

深度学习是人工智能发展最为迅速的领域之一,Google、Facebook、Microsoft等巨头都围绕深度学习重点投资了一系列新兴项目,他们也一直在支持一些开...

5027
来自专栏PPV课数据科学社区

【学习】SPSS预测分析模型商用:应用关联规则模型提高超市销量--关联分析(购物篮)

前言 在数据挖掘项目中,数据理解常常不被重视。但其实数据理解在整个数据挖掘项目中扮演着非常重要的角色,可以说是整个项目的基石。在计算机领域有一句话,“Garba...

4554
来自专栏技术翻译

用Python从头开始构建一个简单的聊天机器人(使用NLTK)

我相信你一定听说过Duolingo:一款流行的语言学习应用。它以其创新的外语教学风格而广受欢迎,其概念很简单:一天五到十分钟的互动训练就足以学习一门语言。

1.1K1
来自专栏量子位

摄像头训练的吃豆人,我还是没活几集 | TensorFlow.js

上个周末,面向JavaScript开发者的TensorFlow.js在TF开发者峰会上发布。

1172
来自专栏数据小魔方

R语言可视化——多边形与数据地图填充

ggplot函数中有一类特殊的图表类型叫做多边形,很难用传统的视角来定义它属于哪一类图表,因为它能够呈现信息多种多样。 特别是在做某些比较高阶的图表——地图时,...

3404
来自专栏AI研习社

资深算法工程师万宫玺:Java 工程师转型 AI 的秘密法宝——深度学习框架 Deeplearning4j | 分享总结

深度学习是人工智能发展最为迅速的领域之一,Google、Facebook、Microsoft 等巨头都围绕深度学习重点投资了一系列新兴项目,他们也一直在支持一些...

38710
来自专栏PPV课数据科学社区

文本挖掘小探索:避孕药内容主题分析

作者:冯大福 舆情监测一直是众多品牌关注的地方,尤其品牌想知道在品牌推广,品牌策略,品牌广告中出现的问题,从而能进行策略上的改进,但是现在很多人都是读帖子,笔者...

3696
来自专栏量子位

Tile:一个崭新出炉的机器学习语言

千平 编译整理 量子位 出品 | 公众号 QbitAI Vertex.AI之前发布了一套机器学习框架PlaidML。据他们自己说,PlaidML在英伟达GPU上...

4076
来自专栏机器人网

最流行的机器学习R语言软件包大PK

The Data Incubator 中,有着最新的数据科学(data science)课程。其中大部分的课程都是基于企业和政府合作伙伴的需求而设立的。现在他们...

4476

扫码关注云+社区

领取腾讯云代金券