Python朋友网络可视化

时间:2017-05-25 05:44:43

标签: python gephi graph-visualization

我有数百个列表(每个列表对应1个人)。每个列表包含100个字符串,这是该人的100个朋友。

我想根据他们拥有的普通朋友的数量,对这个人网络进行3D可视化。考虑到任何2个列表,它们具有的字符串越多,它们在这个3D图形中应该越接近一起出现。我希望将每个列表显示为3D图形上的点,而点之间没有节点/连接。

为简洁起见,我这里只包括3个人。

person1 = ['mike', 'alex', 'arker','locke','dave','david','ross','rachel','anna','ann','darl','carl','karle']

person2 = ['mika', 'adlex', 'parker','ocke','ave','david','rosse','rachel','anna','ann','darla','carla','karle']

person3 = ['mika', 'alex', 'parker','ocke','ave','david','rosse','ross','anna','ann','darla','carla','karle', 'sasha', 'daria']

1 个答案:

答案 0 :(得分:6)

Gephi设置步骤:

  • 安装Gephi,然后启动它
  • 您可能想立即升级所有插件,请参阅右下角的按钮。
  • 现在创建一个新项目。
  • 确保当前工作区为Workspace1
  • 启用Graph Streaming插件
  • 然后在Streaming标签中显示配置服务器以使用http和端口8080
  • 启动服务器(它下面会有一个绿点而不是红点)。

Python步骤:

  • 安装gephistreamer包(pip install gephistreamer

将以下python cod复制到类似friends.py

的内容
from gephistreamer import graph
from gephistreamer import streamer
import random as rn

stream = streamer.Streamer(streamer.GephiWS(hostname="localhost",port=8080,workspace="workspace1"))

szfak = 100  # this scales up everything - somehow it is needed
cdfak = 3000

nodedict = {}
def addfnode(fname):
  # grab the node out of the dictionary if it is there, otherwise make a newone
  if (fname in nodedict):
    nnode = nodedict[fname]
  else:
    nnode = graph.Node(fname,size=szfak,x=cdfak*rn.random(),y=cdfak*rn.random(),color="#8080ff",type="f")
    nodedict[fname] = nnode # new node into the dictionary
  return nnode

def addnodes(pname,fnodenamelist):
  pnode = graph.Node(pname,size=szfak,x=cdfak*rn.random(),y=cdfak*rn.random(),color="#ff8080",type="p")
  stream.add_node(pnode)
  for fname in fnodenamelist:
    print(pname+"-"+fname)
    fnode = addfnode(fname)
    stream.add_node(fnode)
    pfedge = graph.Edge(pnode,fnode,weight=rn.random())
    stream.add_edge(pfedge)

person1friends = ['mike','alex','arker','locke','dave','david','ross','rachel','anna','ann','darl','carl','karle']
person2friends = ['mika','adlex','parker','ocke','ave','david','rosse','rachel','anna','ann','darla','carla','karle']
person3friends = ['mika','alex','parker','ocke','ave','david','rosse','ross','anna','ann','darla','carla','karle','sasha','daria']

addnodes("p1",person1friends)
addnodes("p2",person2friends)
addnodes("p3",person3friends)

使用命令python friends.py运行它 您应该看到所有节点都出现了。有很多方法可以让它看起来更好看,我在这里使用Force Atlas布局,你可以看到我在左边使用的参数。

enter image description here

有些说明:

  • 您可以点击底部状态/控制栏上的T来显示或消失标签。
  • 打开Window/Data Table
  • 查看节点和边缘中的数据
  • 这是一个非常丰富的计划,有更多的选择,而不是你可以动摇。
  • 您可以在python代码中的节点和边缘设置更多属性,然后它们将显示在数据表视图中,并可用于过滤等。
  • 你想关注Gephi右下角的更新按钮,还有很多需要修复的bug。

这会让你开始(正如你的要求),但对于你的特定问题:

  • 您还需要为您的人员计算权重(" p"节点),并使用这些权重将它们相互链接
  • 然后你需要找到一个布局和参数,根据新的权重按照你想要的方式定位这些节点。
  • 所以你真的不需要显示类型=" f"节点,你只需要" p"节点。
  • to" p"之间的重量。节点应该基于朋友名称集的交集。
  • 还有一些Gephi插件可以在3D中显示,但这实际上是一个完全独立的问题,你可能希望它首先在2D中工作。

使用 Anaconda 4.4.1 Python 3.5.2 以及 Gephi 0.9.1 Windows 10 上运行