利用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合并字符串的3种方法
May 21 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
transform python环境快速配置方法
Sep 27 Python
python实现汽车管理系统
Nov 30 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
Python unittest框架操作实例解析
Apr 13 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Python将list元素转存为CSV文件的实现
Nov 16 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 Python
python字符串的多行输出的实例详解
Jun 08 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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
Redis构建分布式锁
2017/03/28 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
extjs中grid中嵌入动态combobox的应用
2011/01/01 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
Django中使用locals()函数的技巧
2015/07/16 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
python 编码规范整理
2018/05/05 Python
python根据文本生成词云图代码实例
2019/11/15 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
2014年司机工作总结
2014/11/21 职场文书
教师学期末个人总结
2015/02/13 职场文书
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
frg-100简单操作(设置)说明
2022/04/05 无线电
使用Python解决图表与画布的间距问题
2022/04/11 Python