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


Posted in Python onNovember 02, 2017

前言

最近工作中遇到了一些需求,想通过图形化的方式显示社交网络特定用户的好友关系,上网找了一下这方面的图形库有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)

最终结果如图:

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

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

总结

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

Python 相关文章推荐
Python3中的2to3转换工具使用示例
Jun 12 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
Python对多属性的重复数据去重实例
Apr 18 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
python定时关机小脚本
Jun 20 Python
python使用tornado实现简单爬虫
Jul 28 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
详解Python 函数参数的拆解
Sep 02 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Python Numpy之linspace用法说明
Apr 17 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 #Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 #Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 #Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 #Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 #Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 #Python
Python栈算法的实现与简单应用示例
Nov 01 #Python
You might like
PHP新手上路(十三)
2006/10/09 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python函数形参用法实例分析
2015/08/04 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
Python实现的矩阵类实例
2017/08/22 Python
python实现雨滴下落到地面效果
2018/06/21 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
Python实现手势识别
2020/10/21 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
小组名称和口号
2014/06/09 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android