通过R让你的复杂网络图更具艺术感

感谢eBDA工作室的投稿!

eBDA工作室是植根于运营商的一支数据分析团队,是由一群喜欢数据分析和创新的小伙伴组成的,成立两年以来,我们在底层数据存储HDFS/ORCFile,计算框架和资源管理MapReduce/Storm/Spark/Yarn,到数据分析工具Hive/Pig/R/Spss,数据集成Flume/Kafka,再到可视化工具Tableau/Echarts都有所涉猎,我们非常希望通过大数据文摘这个平台认识更多的朋友,充分交流,共同进步!

欢迎个人转发至朋友圈,自媒体或机构转载务必后台留言申请授权。感谢eBDA工作室的投稿。

欢迎各位读者投稿,请发邮件至wangdc@bigdatadigest.cn。谢绝广告、软文。

一、引子:

前段时间有幸听到了张溪梦老师的公开演讲,他归纳了一名数据科学家应该具备的能力:创新能力、勇气、科学、技术、商业、人文、艺术。从经常听到的数据科学家的三种基本能力即分析能力、专业能力、IT能力外延到了人文、艺术,呵呵,大家顿时产生了一种高尚大的自豪感。

回来后团队的美女分析师就找到了我,对话如下:“leader,我有些想法!”“汗,难不成要跳槽…”我内心有些不安,“说吧~”我故作镇定。“我觉得可以把报告中的这个图(见图一)美化下”她指了指电脑上的报告。“去吧,去吧,我支持你,弄好了咱们再讨论”我心安了……

图一 两种应用使用人数的示意图

两天后,她自信满满的回来找我了,带来了下面这张图:

图二 改进后的两种应用使用人数的示意图

“我觉得可以尝试使用社交关系图来表示应用人数和之间的交叠关系,这样更加美观,特别是当应用较多的时候。”她一语中的道。“嗯嗯”,我一边应付她,一边在脑子里飞快的回忆社交关系图的特点,“在反映大量人群或事物之间的关系时,社交网络图可以清晰的展示’群体’的内含和外延。例如,群体的规模、核心、与其他群体的交叠情况。“我同意了她的想法,开始试验!

二、数据的准备:

1、首先,编造一份原始数据,文件名是app_sub.txt,数据格式如下:

编号,应用名称

11111,滴滴打车

99999,美图秀秀

99999,微信

99999,优酷

22222,淘宝

22222,滴滴打车

22222,大众点评

……

代表有2980名用户使用APP的情况,各位在自行练习时可以采用随机函数来生成号码清单。

运行环境说明:R 3.1.1

2.利用R读入数据。

read.table("app_sub.txt",header= FALSE,sep = ",",colClasses =c("character","character"))->g

3.去除NA值

g1<-na.omit(g)

三、开始绘制简单的社交关系图:

1.简单的社交网络

library(igraph) #加载igraph包 x<-par(bg="black") #设置背景颜色为黑色 g2 = graph.data.frame(d = g1,directed = F); #数据格式转换 V(g2) #查看顶点 E(g2) #查看边

2.不对顶点和边的格式做调整,使用layout.fruchterman.reingold方式呈现图形。

plot(g2,layout=layout.fruchterman.reingold,vertex.label=NA) #显示网络图

图二 初步的网络图

上面的社交网络图中大部分顶点重叠在一起,根本不能看出社交网络中顶点之间的连接关系。下面需要对顶点和边的格式做调整。

3.对顶点和边的格式做调整

设置vertex.size来调整顶点大小, 设置vertex.color来改变显示颜色。

plot(g2,layout=layout.fruchterman.reingold,vertex.size=2, vertex.color="red",edge.arrow.size=0.05,vertex.label=NA) #设置vertex大小和颜色后显示网络图

图二 改进后的网络图

上图中顶点明显归属于某个或某几个社区。但所有的点都是同一个颜色,不能直观呈现出社区的概念。

四、划分网络图中的社区:

1.利用igraph自带的社区发现函数实现社区划分Igraph包中社区分类函数有以下几种:

fastgreedy.community

spinglass.community

edge.betweenness.community

leading.eigenvector.community

walktrap.community

label.propagation.community

clique.community

multilevel.community

不同的分类算法,速度和适用社区网络大小都有所侧重。对于同一网络,采用什么样的分类算法需要实践后去人工判断是否符合预期。

下面利用只有两个社区网络的数据来验证walktrap.community和edge.betweenness.community分类结果的不同之处。

下图是walktrap算法,step=10的情况下得出的结果。原本的2个社区网络被分为66类。把两个大社区分成了一类,把两大社区重叠的部分分成了很多类。显然这不是我们所希望看到的分类结果。可见walktrap算法不太适合网络数量较小的情况。

图三 walktrap算法的呈现

下图是edge.betweenness算法的出的结果。社区网络被分成两类

图四 edge.betweenness算法算法的呈现

2.美化图形(以顶点分类)

利用walktrap.community进行社区划分,对不同的社区赋值不同的颜色。为了呈现更多的点和线的关系,我们采用了透明化的处理方式。

com = walktrap.community(g2, steps = 10)V(g2)$sg=com$membershipV(g2)$color = rainbow(max(V(g2)$sg),alpha=0.8)[V(g2)$sg]plot(g2,layout=layout.fruchterman.reingold, vertex.size=1,vertex.color=V(g2)$color, edge.width=0.4,edge.arrow.size=0.08,edge.color = rgb(1,1,1,0.4),vertex.frame.color=NA,margin= rep(0, 4),vertex.label=NA)

图五 透明化处理后的网络图

五、完成最终的效果图:

1.美化图形(以边线分类)

另一种呈现方式,是点的颜色不变,将不同社区的连线颜色分类。

E(g1)$color=V(g1)[name=ends(g1,E(g1))[,2]]$color #为edge的颜色赋值V(g1)[grep("1", V(g1)$name)]$color=rgb(1,1,1,0.8) #为vertex的颜色赋值plot(g1,layout=layout.fruchterman.reingold, vertex.size=V(g1)$size, vertex.color= V(g1)$color, edge.width=0.3,edge.color = E(g1)$color,vertex.frame.color=NA,margin= rep(0, 4),vertex.label=NA)

图六 最终效果图

通过上图可以看出本次实验数据中用户体量最大的APP分别是:微信、微博、淘宝、京东。社区交汇的点表示每两个APP之间的共有用户。例如,微信和微博的共有用户位于上图右上角橘黄色线条和黄色线条的交汇处。

社交网络图是近年来展示复杂网络的一种直观的方式。利用社区发现算法对复杂网络进行聚类,可以挖掘出复杂网络包含的深层意义。例如,发现公司组织架构的相关性,利用群体相似性进行“猜你喜欢”的推荐活动。

好了,我和美女分析师的故事讲完了,各位慢慢消化上面的内容,有问题欢迎随时提问,我去补中国美术史和基础绘画技巧。

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

原文发表时间:2015-10-07

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

【资源】想进行数据科学项目却没有数据集?25个数据集网站汇总

原作者 Kunal Jain 编译  Mika 本文为 CDA 数据分析师原创作品,转载需授权 前言 如果用一个句子总结学习数据科学的本质,那就是: 学习数据科...

5038
来自专栏媒矿工厂

PCS2018:360度全景视频流媒体传输系统【附PPT全文】

作为图像/视频编码领域的顶级会议之一,第33届图像编码研讨会(PCS,Picture Coding Symposium)于2018年6月24号至6月27号在加州...

1813
来自专栏数据魔术师

从小白到年薪10万+,优秀的数据分析能力如何速成?

3717
来自专栏悦思悦读

大数据基本概念浅析及技术简介

大数据是当前很热的一个词。这几年来,云计算、继而大数据,成了整个社会的热点,不管什么,都要带上“大数据”三个字才显得时髦。大数据究竟是什么东西?有哪些相关技术?...

3567
来自专栏新智元

【开源】北大团队大规模稀疏数据机器学习库xLearn,c++ trending 已超TensorFlow

编辑:弗格森 【新智元导读】 机器学习博士马超近日在微博上介绍他和导师肖臻教授一起开发的一款专门针对大规模稀疏数据的机器学习库xLearn并开源。并称, vi...

4538
来自专栏钱塘大数据

数据视觉盛宴—数据可视化实践之美

随着DT时代的到来,传统的统计图表很难对复杂数据进行直观地展示。这几年数据可视化作为一个新研究领域也变得越来越火。成功的可视化,如果做得漂亮,虽表面简单却富含深...

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

这套烧脑的数学模型,教你如何预测一个互联网产品的未来

这套模型是我在运营路况电台 2000 万用户过程中积累出来的,也是我们团队做产品迭代,运营和产品目标设定最基本的方法。这个产品模型从几个相对不同的维度定义一个产...

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

数据可视化实践之美

开篇主要是介绍了一些常用的数据可视化工具和图表,让各位看官对数据可视化有一个较为全面的认识。后续篇章会深入介绍如何运用工具绘制精美图表的技术细节。 随着DT时代...

4586
来自专栏MyBlog

J.Woodcock&J.Davies_UsingZ_1996_C1 阅读

随着软件的日益发展, 软件的功能等需求越来越多, 文档也随之增加, 组件之间的交互和冲突最后导致系统出现问题, 逐渐偏离了我们的预期. 为解决该问题, 其中一个...

851
来自专栏机器之心

前沿 | 减少30%流量,增加清晰度:MIT提出人工智能视频缓存新算法

4049

扫码关注云+社区

领取腾讯云代金券