利用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 相关文章推荐
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
python3编码问题汇总
Sep 06 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
儿童编程python入门
May 08 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
opencv转换颜色空间更改图片背景
Aug 20 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
Python实现序列化及csv文件读取
Jan 19 Python
Pytorch使用shuffle打乱数据的操作
May 20 Python
教你使用TensorFlow2识别验证码
Jun 11 Python
关于python类SortedList详解
Sep 04 Python
Python装饰器的练习题
Nov 23 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初学者最感迷茫的问题小结
2010/03/27 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
js实现移动端轮播图
2020/12/21 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
python英语单词测试小程序代码实例
2019/09/09 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
瑜伽国际:Yoga International
2018/04/18 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
物业保安主管岗位职责
2013/12/25 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
抗震救灾标语
2014/06/26 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python