簡體   English   中英

Python朋友網絡可視化

[英]Python friends network 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']

Gephi設置步驟:

  • 安裝Gephi然后啟動它
  • 您可能想立即升級所有插件,請參閱右下角的按鈕。
  • 現在創建一個新項目。
  • 確保當前工作空間是Workspace1
  • 啟用Graph Streaming插件
  • 然后在Streaming選項卡中顯示configure server以使用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 layouter,你可以看到我在左邊使用的參數。

在此輸入圖像描述

一些說明:

  • 您可以通過單擊底部狀態/控制欄上的T來顯示或消失標簽。
  • 通過打開“ Window/Data Table查看節點和邊緣中的Window/Data Table
  • 這是一個非常豐富的計划,有比你可以動搖的選擇更多的選擇。
  • 您可以在python代碼中的節點和邊緣上設置更多屬性,然后它們將顯示在數據表視圖中,並可用於過濾等。
  • 你想要關注Gephi右下角的更新按鈕,還有很多bug需要修復。

這將使您開始(如您所知),但針對您的特定問題:

  • 您還需要為您的人員(“p”節點)計算權重,並使用這些權重將它們相互鏈接
  • 然后你需要找到一個layouter和paramters,根據新的權重,按照你想要的方式定位這些節點。
  • 所以你真的不需要顯示type =“f”節點,你只需要“p”節點。
  • “p”節點之間的權重應該基於朋友姓名集的交集。
  • 還有一些Gephi插件可以在3D中顯示,但這實際上是一個完全獨立的問題,你可能希望首先使用2D工作。

這是在Windows 10上使用Anaconda 4.4.1Python 3.5.2以及Gephi 0.9.1運行的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM