利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解
前言
最近工作中遇到了一些需求,想通過圖形化的方式顯示社交網(wǎng)絡(luò)特定用戶的好友關(guān)系,上網(wǎng)找了一下這方面的圖形庫有networkx、graphviz等,找了好久我選擇了iGraph這個(gè)圖形庫。下面話不多說了,來一起看看詳細(xì)的介紹吧。
安裝igraph
igraph在Windows下的安裝稍微有點(diǎn)麻煩,之前嘗試在windows用pip和conda直接裝igraph都裝不上,后來發(fā)現(xiàn)了lfd的網(wǎng)站 Unofficial Windows Binaries for Python Extension Packages , 里面有很多python的資源和庫與工具。
在上面的網(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ò),打開cmd以后,要cd進(jìn)入你存放的該whl文件的解壓后的目錄下在用pip進(jìn)行安裝。
繪制好友關(guān)系圖
fans.txt 和 follow.txt分別保存了爬取下來的粉絲昵稱以及關(guān)注人昵稱。
#coding=utf-8 from igraph import * count_fans=0 #粉絲數(shù) count_following=0 #關(guān)注人數(shù) fans_name=[] #粉絲昵稱 following=[] #關(guān)注人昵稱 #打開爬取下的昵稱文件 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)系圖,有精力的話可以嘗試遞歸地一層一層爬下去,想象一下最終繪出來的圖也是挺炫酷的。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能
這篇文章主要介紹了Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能的相關(guān)資料,需要的朋友可以參考下2016-03-03Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖
這篇文章主要為大家介紹了Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Python實(shí)現(xiàn)PS濾鏡的萬花筒效果示例
這篇文章主要介紹了Python實(shí)現(xiàn)PS濾鏡的萬花筒效果,結(jié)合實(shí)例形式分析了Python基于skimage模塊操作圖片實(shí)現(xiàn)PS濾鏡萬花筒效果的原理與相關(guān)操作技巧,需要的朋友可以參考下2018-01-01在python3中pyqt5和mayavi不兼容問題的解決方法
今天小編就為大家分享一篇在python3中pyqt5和mayavi不兼容問題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01python 獲取sqlite3數(shù)據(jù)庫的表名和表字段名的實(shí)例
今天小編就為大家分享一篇python 獲取sqlite3數(shù)據(jù)庫的表名和表字段名的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python實(shí)現(xiàn)C#代碼生成器應(yīng)用服務(wù)于Unity示例解析
為了滿足項(xiàng)目需要,需要實(shí)現(xiàn)一個(gè)c#代碼生成器,為此設(shè)計(jì)了一個(gè)語法模板適用于Unity的代碼生成器。本次使用了Python的Template模板,使用python開發(fā)2021-10-10Python3.10動(dòng)態(tài)修改Windows系統(tǒng)本地IP地址
這篇文章主要介紹了Python3.10動(dòng)態(tài)修改Windows系統(tǒng)本地IP地址,需要的朋友可以參考下2023-05-05