利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解
前言
最近工作中遇到了一些需求,想通過(guò)圖形化的方式顯示社交網(wǎng)絡(luò)特定用戶的好友關(guān)系,上網(wǎng)找了一下這方面的圖形庫(kù)有networkx、graphviz等,找了好久我選擇了iGraph這個(gè)圖形庫(kù)。下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
安裝igraph
igraph在Windows下的安裝稍微有點(diǎn)麻煩,之前嘗試在windows用pip和conda直接裝igraph都裝不上,后來(lái)發(fā)現(xiàn)了lfd的網(wǎng)站 Unofficial Windows Binaries for Python Extension Packages , 里面有很多python的資源和庫(kù)與工具。
在上面的網(wǎng)址中找到python_igraph去下載具體的python對(duì)應(yīng)版本和是32位還是64位的,比如我下載了 python_igraph‑0.7.1.post6‑cp35‑none‑win_amd64.whl
利用pip 安裝whl文件:pip install 文件名.whl
為了避免出錯(cuò),打開(kāi)cmd以后,要cd進(jìn)入你存放的該whl文件的解壓后的目錄下在用pip進(jìn)行安裝。
繪制好友關(guān)系圖
fans.txt 和 follow.txt分別保存了爬取下來(lái)的粉絲昵稱以及關(guān)注人昵稱。
#coding=utf-8
from igraph import *
count_fans=0 #粉絲數(shù)
count_following=0 #關(guān)注人數(shù)
fans_name=[] #粉絲昵稱
following=[] #關(guān)注人昵稱
#打開(kāi)爬取下的昵稱文件
with open('fans.txt','r') as f:
lines=f.readlines()
for line in lines:
if (line!=None)&(line!='\n'):
fans_name.append(line)
# print fans_name
count_fans+=1
with open('follow.txt','r') as c:
lines=c.readlines()
for line in lines:
if (line!=None)&(line!='\n'):
following.append(line)
count_following+=1
g = Graph() #創(chuàng)建
g.add_vertices(3+count_fans+count_following)
g.add_edges([(0,1),(1,2)])
g.vs[0]["name"]='Ta的粉絲'
g.vs[1]["name"]='目標(biāo)用戶'
g.vs[2]["name"]='Ta的關(guān)注'
g.es["trunk"] = [True, True]
g.vs["main_node"]=[1.5,3,1.5]
for i in range(3,count_fans+3):
g.add_edges((0,i))
g.es[i-1]["trunk"]=False
for j in range(count_fans+3,3+count_fans+count_following):
g.add_edges((2,j))
g.es[j-1]["trunk"]=False
index=3
for fans in fans_name:
g.vs[index]["name"]=fans
g.vs[index]["main_node"]=False
index+=1
for name in following:
g.vs[index]["name"]=name
g.vs[index]["main_node"]=False
index+=1
visual_style = {}
color_dic={1.5:"#cfe6ff",3:"#7299a7",False:"#cfe6ff"}
visual_style["vertex_label_size"]=11
visual_style["vertex_label_dist"]=1
visual_style["vertex_shape"]="circle"
visual_style["vertex_size"] = [7+ 10*int(main_node) for main_node in g.vs["main_node"]]
visual_style["edge_width"] = [1 + 2 * int(trunk) for trunk in g.es["trunk"]]
visual_style["vertex_color"] =[color_dic[main_node] for main_node in g.vs["main_node"]]
visual_style["vertex_label"] = g.vs["name"]
visual_style["bbox"] = (1000, 1000)
visual_style["margin"] = 150
layout = g.layout("grid_fr")
visual_style["layout"] = layout
plot(g, **visual_style)
最終結(jié)果如圖:

以上只演示了一個(gè)用戶的社交關(guān)系圖,有精力的話可以嘗試遞歸地一層一層爬下去,想象一下最終繪出來(lái)的圖也是挺炫酷的。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能
這篇文章主要介紹了Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能的相關(guān)資料,需要的朋友可以參考下2016-03-03
Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語(yǔ)法糖
這篇文章主要為大家介紹了Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語(yǔ)法糖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Python入門(mén)教程(三十二)Python的命令行輸入
這篇文章主要介紹了Python入門(mén)教程(三十二)Python的命令行輸入,Python是一門(mén)非常強(qiáng)大好用的語(yǔ)言,也有著易上手的特性,本文為入門(mén)教程,需要的朋友可以參考下2023-05-05
Python實(shí)現(xiàn)PS濾鏡的萬(wàn)花筒效果示例
這篇文章主要介紹了Python實(shí)現(xiàn)PS濾鏡的萬(wàn)花筒效果,結(jié)合實(shí)例形式分析了Python基于skimage模塊操作圖片實(shí)現(xiàn)PS濾鏡萬(wàn)花筒效果的原理與相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
在python3中pyqt5和mayavi不兼容問(wèn)題的解決方法
今天小編就為大家分享一篇在python3中pyqt5和mayavi不兼容問(wèn)題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
python 獲取sqlite3數(shù)據(jù)庫(kù)的表名和表字段名的實(shí)例
今天小編就為大家分享一篇python 獲取sqlite3數(shù)據(jù)庫(kù)的表名和表字段名的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python實(shí)現(xiàn)C#代碼生成器應(yīng)用服務(wù)于Unity示例解析
為了滿足項(xiàng)目需要,需要實(shí)現(xiàn)一個(gè)c#代碼生成器,為此設(shè)計(jì)了一個(gè)語(yǔ)法模板適用于Unity的代碼生成器。本次使用了Python的Template模板,使用python開(kāi)發(fā)2021-10-10
Python3.10動(dòng)態(tài)修改Windows系統(tǒng)本地IP地址
這篇文章主要介紹了Python3.10動(dòng)態(tài)修改Windows系統(tǒng)本地IP地址,需要的朋友可以參考下2023-05-05

