Python好友网络可视化

2024-06-26 01:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想三维可视化这个人际网络的基础上,他们有共同的朋友数量。考虑到任何两个列表,它们拥有的字符串越多,它们在这个三维图形中的显示就越接近。我想把每个列表显示为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']

Tags: 字符串图形列表朋友davidalexannanna
1条回答
网友
1楼 · 发布于 2024-06-26 01:31:17

Gephi设置步骤:

  • 安装Gephi,然后启动它
  • 你可能想升级所有的插件,见右下角的按钮。在
  • 现在创建一个新项目。在
  • 确保当前工作区是Workspace1
  • 启用Graph Streaming插件
  • 在随后出现的Streaming选项卡中,配置服务器使用http和端口{}
  • 启动服务器(它下面会有一个绿点而不是一个红点)。在

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”节点)计算权重,并使用这些权重将他们彼此链接起来
  • 然后,你需要找到一个布局器和参数,根据新的权重按你想要的方式定位这些节点。在
  • 所以您不需要显示type=“f”节点,只需要“p”节点。在
  • 到“p”节点之间的权重应该基于朋友名称集的交集。在
  • 也有Gephi插件可以在3D中显示,但这实际上是一个完全独立的问题,你可能想让它先在2D中工作。在

这是在Windows10上运行的,使用的是Anaconda4.4.1和Python3.5.2和Gephi0.9.1。在

相关问题 更多 >