Python-iGraph绘制社交网络好友关系图实战指南
本文详细介绍如何在Windows环境下安装Python-iGraph库,并通过读取粉丝与关注数据文件,利用igraph库绘制特定用户的社交好友关系图。文章涵盖从环境配置到代码实现的全过程,展示如何生成可视化的社交网络结构,为社交数据分析提供直观参考。
前言
近期在工作中,我有需求通过图形化界面展示社交网络中特定用户的好友关联。经过对networkx、graphviz等图形库的调研与对比,最终选定iGraph作为解决方案。接下来将直接切入主题,详细介绍具体实现步骤。
安装igraph
在Windows系统中安装igraph相对复杂。此前尝试通过pip或conda直接安装均告失败,后来发现lfd网站提供的“Python扩展包非官方Windows二进制文件”资源库,其中包含丰富的Python资源、库及工具,是解决该问题的关键。
访问上述网址,搜索python_igraph,并根据Python版本及系统位数(32位或64位)下载对应的whl文件。例如,我下载的文件名为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)
最终生成的图形结果如下图所示:

上述示例仅演示了单个用户的社交关系图。若时间允许,可尝试递归地逐层爬取数据,想象最终生成的复杂网络图将极具视觉冲击力。
总结
以上是本文的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对本站的支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













