现在许多如Twitter、Facebook、Google+都为个人提供了可以导出社交网络数据的APP,比如Facebook的Netvizz和myFnetwork,都提供了可用于社交网络分析的原始数据。关于如何获取这些网络数据,不是本章讨论重点,我们的重点在于拿到数据之后,如何挖掘出其中的有用信息,产生价值。本案例使用的数据是Twitter@wiredUK所关注的人之间的好友网络。使用的工具是Gephi 0.9.1的Mac版本。

1 数据探索

拿到数据之后,我们首先需要看一下数据里面主要有哪一些特征。对于图与网络分析来说,最关键的两个特征就是节点和边。实际上,图分析的文件往往分成两个,一个是节点文件,用于储存节点的信息;另外一个是边文件,用于描述边的信息,以及一条边的起始节点和终止节点(有向图或者无向图都是如此)。

在本案例中,我们把原始数据文件 twitter_friends.xlxs 中的节点信息和边信息分开,然后存为两个文件: Nodes1.csvEdges1.csv 。数据如下所示:

png

可以看到,在节点信息中,包括了节点的名字(name VARCHAR,类似于ID)、节点的标签(label VARCHAR)、节点的朋友数(totFriends INT,与多少其他节点互相关注)、节点的粉丝数(totFollowers INT)、节点的位置(location VARCHAR)和节点的描述信息(description VARCHAR)。在边的信息中,包括一条边的起始节点和终止节点。数据集一共254个节点,3834条边,后面我们将会看到边文件中有部分节点并不存在于节点文件中,这种情况可能是数据采集过程当中产生的一些错误。

为了便于识别,我们将节点的名字(name VARCHAR,类似于ID)和节点的标签(label VARCHAR)列名更改为了IDLabel,以及将起始节点和终止节点列名更改为了SourceTarget

2 导入数据

打开Gephi,新建项目。通过文件 $\rightarrow$ Import Spreadsheet进行数据导入,首先我们导入节点数据:

指定每一特征的类型, totFriends INT 和 totFollowers INT 都指定为 integer(整数):

导入节点之后,我们会看到节点随机排布在图窗口中:

类似地,我们再导入边的数据,指定表格为边表格

点击下一步之后,我们发现有一个创建丢失的jiedian选项(“jiedian”是“节点”的意思,这是Gephi本身汉化的问题),这个即是我们之前所说的“节点文件与边文件的节点数不一致”的情况下的处理手段,比如我们先是导入了节点文件,但是由于数据采集过程的出错或者是由于我们人为的选择了某些节点作为我们的关注对象放在了节点文件中,在边文件可能存在某些边的某个节点在节点文件中不存在的情况,这个时候我们就需要选择是否添加边文件中存在但是在节点文件中不存在的节点。在本案例中,我们不勾选该选项,因为如果创建丢失的节点,我们在整个网络中会发现许多游离在大网络之外的簇(只包含不超过10个节点),社区发现分析时,算法会将这些游离簇看做一个社区,这些簇绝大多数情况下并不是真正的社区。

在导入完边的数据之后,我们就得到了完整的网络:

可以看到,刚导入的完整的网络结构是非常凌乱的,我们在之后会通过分布布局模块进行调整。我们可以在上下文窗口中看到关于此网络的基本信息:

3 节点以及边的统计信息

对于网络数据,我们在拥有其完整的网络结构之后,就可以在统计窗口对节点及边进行统计分析,在统计分析的每一个模块,点击运行便可以得到各类统计指标的分布信息。比如度分布情况:

可以看到,整个度分布是符合幂律分布的,符合无标度网络特性。或者入度及出度分布信息:

所有节点的平均度为:

4 节点与边的渲染

我们可以在外观窗口对节点或者边的大小或者颜色进行调节,并且可以有多种渲染方式,比如按照统一的大小显示节点,点击运用执行渲染操作:

也可以按照节点度的信息进行渲染,度中心度大的节点大,度中心度小的节点小,在我们的数据中特征 totFollowers 表征了节点的粉丝数,我们使用这一种渲染方式,通过节点大小,表示其知名程度:

按照度中心度渲染节点大小之后的结果如下:

同样的,我们也可以通过使用统计指标的渲染对颜色进行调节,这里我们使用度进行调节,颜色越深的节点度越大,颜色越浅的节点度越小:

我们还可以在图窗口中对单个节点和单个边进行操作:

节点的不同渲染的方式的意义在于:我们可以根据节点大小或者节点颜色深浅等渲染手段,便于在整个网络中一眼能够看出各个节点的重要程度以及谁是整个网络中的关键意见领袖(Key Opinion Leader,KOL),也就是在整个网络中有话语权的那些人。对于微博营销而言,营销的目标通常就是这些KOL,他们的话通常能够让他们的粉丝信服,他们的影响力在微博营销中是不可或缺的,我们常说的“粉丝经济”,某种程度上即是如此,对这些KOL进行营销,那么产品在整个网络传遍开来为大家所熟知也就是早晚的事情。除此之外,另外一个目的可以是发现疾病传播的关键节点,这些节点通常也是度较大的节点(不管是介数中心度还是其他中心度)。这里,我们通过wiki上的某网络不同中心度渲染的图来直观地看一下不同中心度对关键节点渲染的差别。

我们这里没有对边进行特殊的渲染,在实际网络分析过程中,边的渲染也是非常有意义的。比如在社交网络中,对于某事件的传播,我们可以通过边的度的大小渲染边的粗细,越粗的表示边的度越大,越细的表示边的度越小。由此我们可以找到在该事件的传播中存在重要作用的一个社会关系,举一个比较简单的例子(可能不是非常的恰当),A小区的王大妈与B小区的李大妈存在好友关系,假设A小区与B小区在不同城市,且A小区与B小区中的人除了王大妈与李大妈之外不存在好友关系,同时,我们暂且不考虑某事件在网络上的传播被两个小区的人看到。在A小区发生的某件突发事情,可能会非常迅速的传播到了B小区,因为王大妈告诉李大妈之后,李大妈作为B小区的KOL使得B小区的所有人得知了该消息。在这个例子中,王大妈与李大妈之间的边在整个网络(A小区+B小区)中的边介数最大,我们通过对整个网络进行可视化,容易看到王大妈与李大妈在突发事件传播中的重要作用。如果我们希望小区发生的事情不在两个小区之间进行扩散,那么我们可以切断王大妈与李大妈的社交关系,当然这在实际生活中只能通过不让两者进行任何通讯的限制两者人身自由的方式进行。以上的简单例子对于抑制疾病的传播同样适用。

5 节点空间布局调整

在布局窗口我们可以按照Gephi提供的各种算法对节点布局进行操作,在多种布局中,Force Atlas更容易看清楚社区结构,我们试试 Force atlas 布局,点击运行即可开始执行布局渲染:

我们会发现在网络的外围,存在一些并没有边连接的节点,这些节点在社区发现时会干扰社区发现结果,所以我们通过圈选右键,将这些节点删除

然后我们通过 Noverlap 布局,使得节点之间不会相互覆盖:

当然我们还可以试试其他的分布布局方式,并且设定不同的布局参数以达到我们觉得更利于分析并且好看的布局,这里就不一一截图了。

6 社区发现

上面的分析中,在节点颜色调节过程中,我们选择的是利用其度进行颜色渲染,Gephi比较优秀的一点在于他提供社区发现的算法(常用Fast Unfolding,当然也可以使用其他算法的插件,我们会在第9小节详细介绍Gephi 插件),可以直接对网络进行社区发现分析。在统计窗口中,点击模块度的运行按钮,:

Gephi提供的默认算法是Fast Unfolding,它每一次划分的社区个数不同,是随机的。且Resolution越小,划分得到的社区数越多,社区内成员数越少:

运行后,我们将得到模块化报告,包括分为了多少个社区,以及每个社区成员数的一个分布情况,根据Fast Unfolding算法将每个节点划分在不同的社区中:

在跑完模块化算法后,我们可以将节点按照不同的社区归属进行渲染:

渲染结果如下:

整个网络分为了5个社区,以不同的颜色区别显示。在得到5个社区之后,我们需要根据社区中每个节点具体描述信息进行分析,比如这5个社区可能其中一个社区代表了时尚界,一个社区代表了科技界等等,这些都需要我们在绘制好网络图后,挑选几个节点进行研究,Gephi 可以给予我们很好的可视化效果以及社区发现结果,但是具体的结果还是需要我们根据不同的目的并且结合社交网络的相关知识进行分析。

7 添加节点标签

我们可以在图窗口的下方对节点标签进行添加和调节,这里我们选择标签大小与节点大小成比例的方式显示标签:

8 导出网络图

到目前为止,实际上我们的图已经渲染完毕,我们在导出网络的预览窗口中还可以对最后输出的图进行调节,使得输出的图更加的好看,便于分析以及展示:

我们在左下角的导出部分,导出为png格式的图片文件:

9 Gephi 插件

除了常规的可视化操作之外,Gephi还提供了各式各样的插件,当默认的操作已经满足不了需求的时候,比如需要选用不同的社区发现算法,我们可以在Gephi官网的插件目录下搜索看是否有满足我们目的的插件。以下介绍几个实用的插件。

9.1 Map-Based Layout

Gephi提供了部分基于地图布局的插件,可以将节点布局在地图上。绘制此类布局网络图,必须提供关于节点的地理位置信息:纬度(Latitude)和经度(Longitude)。在Gephi中,有两个主要用于在地图中进行网络可视化的插件:GeoLayout 和 Map of countries。

另外基于Google Maps API,Gephi还提供了两个可以用来将网络图导出到Google地图上的插件:Google Maps Exporters 和 ExportToEarth。

GeoLayout
当使用GeoLayout插件时,必须指定纬度和经度所在数据列的列名,并且选择一个投影方式,比较常用的是Mercator(他是16世纪地图制作家)。节点将根据经纬度排布在网络中,与各节点的真实地理位置对应。但是毕竟这个插件只是网络中节点的一种布局方式,还需要结合真实地图作为背景,以达到更好的可视化效果。如下图所示:

该图是节点经过GeoLayout布局后再加上背景地图图片制成,也就是说该图由两个部分组成,一个是网络结构,一个是背景图(svg格式)。该图的绘制过程可以参考案例欧洲信件网络分析

各个国家一级各大洲的SVG图可以通过SVG MAPS网站下载。

Map of countries
这个插件会在网络的背景上呈现一个比较粗略的国家和大陆轮廓图。如下图所示:

以上两个插件可以配合使用,可以先使用 Map of countries 将网络放在地图上,再通过 GeoLayout 进行精细调整。

Google Maps Exporters
可以参考例子,以下图为 steam network 游戏社区网络图。

ExportToEarth

类似Google Maps Exporters,可以去Gephi插件搜索相关信息。

9.2 交互式布局Sigmajs Exporter

该插件提供了交互式的网络布局,可以对网络中的节点进行交互操作并分析,可参考oxford 可视化demos,其中Twitter Network of @OIIOxford 如下图所示。

点击其中的节点,将会交互地给出详细信息及其所连接的节点。

10 总结

本案例提供了图与社交网络的导入、度分析及社区发现等分析过程,Gephi软件的操作是相对比较简单的,但是可视化之后对网络的全局及局部分析因目的不同而有不同的分析手段和重点,这对于任何社交网络的分析亦是如此。当网络的规模非常大时(节点数以及边数都是十万量级以上),Gephi软件在打开这个网络图时会非常的卡,我们需要使用一些更高级技巧来分析该网络,暂不在本案例讨论内容之内。