使用networkx导出关系网络并用gephi进行简单分析

来源:互联网 发布:淘宝助理怎么下架 编辑:程序博客网 时间:2024/05/16 09:25

之前使用爬虫获取到了微博上粉丝数大于2000的用户,大概在10W左右,并获取了他们的关注用户列表。现在,需要利用这些节点和节点间的关系网来进行社区探测(community detection),以进行进一步分析。不过在此之前,需要攫取一些小样本进行简单的可视化。

使用networkx(python)导出gexf格式文件

这边使用gephi来进行分析。而使用gephi需要有gexf或者gephi格式的数据。其中,gephi格式类似于工程文件,不仅储藏了数据,也储藏了整个工程中的所有参数,包括颜色等。而gexf只包含数据。因此,需要将mysql中的数据转化为gexf格式。
这里需要借助networkx包。networkx是python下的复杂网络编程包,具体使用方法这里不具体展开,只表述如何将从mysql中导入的node和edge数据生成为network中的Graph对象,然后再生成gexf文件

目前,假设有两个列表数据,一个是node,里面储存了网络中节点的数据,每个节点可以用int来表示,也可以用字符串来表示。另一个是edge,表示网络中节点之间的关系数据,或者说是边的数据。每条边用一个长为2的数组表示,分别表示该条边两边的节点。

举例例子,node=[‘A’,’B’,’C’],
edge=[ [‘A’,’B’] , [‘B’,’C’] ]

现在需要利用node和edge生成Graph类,并生成gexf文件,其实挺简单的

import networkx as nxG=nx.Graph()G.add_nodes_from(node)G.add_edges_from(edge)nx.write_gexf(G,'your_file_name.gexf')

此时在根目录下会生成名为your_file_name.gexf的文件

使用gephi进行可视化和简单分析

首先打开gephi,然后选择打开图文件,选择之前生成的gexf文件。我这边选用的是前1万名的微博大V以及他们之间的关系网。

这里写图片描述

在图的类型处选择无向图或者是有向图,取决于网络自身的属性。

这里写图片描述

打开以后能看到揉在一起的网络,呈方块状,里面是密密麻麻的节点和边。

这里写图片描述

在左下角有布局选项,选择一个算法,点运行展开(lay out) 我这里选用的是ForceAtlas 2。展开后的结果如下所示

这里写图片描述

这时需要探测关系网中的子团体,需要运行community detection算法。在右边统计一栏中找到模块化,点击运行

这里写图片描述

得到的计算结果如下

这里写图片描述

横轴为社区的编号,纵轴为该社区具有的节点数。由于有大量节点未与其他节点互相关注,因此大部分的社区大小为1。
此时需要对主要社区进行找色,以便于观察。
在左上角的外观-》节点-》数值设定上,选择用modularity class作为渲染方式

这里写图片描述

最后得到的渲染结果如下

这里写图片描述

可以看到一种颜色代表了一个社区。是不是很漂亮呢?

0 0
原创粉丝点击