python绘制人际关系图_利用Python-iGraph如何绘制贴吧/微博的好友关系图详解

前言

最近工作中遇到了一些需求,想通过图形化的方式显示社交网络特定用户的好友关系,上网找了一下这方面的图形库有networkx、graphviz等,找了好久我选择了iGraph这个图形库。下面话不多说了,来一起看看详细的介绍吧。

安装igraph

igraph在Windows下的安装稍微有点麻烦,之前尝试在windows用pip和conda直接装igraph都装不上,后来发现了lfd的网站 Unofficial Windows Binaries for Python Extension Packages, 里面有很多python的资源和库与工具。

在上面的网址中找到python_igraph去下载具体的python对应版本和是32位还是64位的,比如我下载了 python_igraph‑0.7.1.post6‑cp35‑none‑win_amd64.whl

利用pip 安装whl文件:pip install 文件名.whl

为了避免出错,打开cmd以后,要cd进入你存放的该whl文件的解压后的目录下在用pip进行安装。

绘制好友关系图

fans.txt 和 follow.txt分别保存了爬取下来的粉丝昵称以及关注人昵称。

#coding=utf-8

from igraph import *

count_fans=0 #粉丝数

count_following=0 #关注人数

fans_name=[] #粉丝昵称

following=[] #关注人昵称

#打开爬取下的昵称文件

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() #创建

g.add_vertices(3+count_fans+count_following)

g.add_edges([(0,1),(1,2)])

g.vs[0]["name"]='Ta的粉丝'

g.vs[1]["name"]='目标用户'

g.vs[2]["name"]='Ta的关注'

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)

最终结果如图:

以上只演示了一个用户的社交关系图,有精力的话可以尝试递归地一层一层爬下去,想象一下最终绘出来的图也是挺炫酷的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值