利用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获取当前时间对应unix时间戳的方法
May 15 Python
python中的字典使用分享
Jul 31 Python
Python中turtle作图示例
Nov 15 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
初学者学习Python好还是Java好
May 26 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
通过代码实例了解Python sys模块
Sep 14 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
Django websocket原理及功能实现代码
Nov 14 Python
python 实现超级玛丽游戏
Nov 25 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 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数学运算
2011/12/30 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
jstree的简单实例
2016/12/01 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
js Array.slice的8种不同用法示例
2019/07/10 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
python套接字流重定向实例汇总
2016/03/03 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
电视购物广告词
2014/03/19 职场文书
公司活动总结范文
2014/07/01 职场文书
初三英语教学计划
2015/01/23 职场文书
售房协议书范本
2015/08/11 职场文书
Python开发五子棋小游戏
2022/05/02 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python