利用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实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Python 网页解析HTMLParse的实例详解
Aug 10 Python
将python代码和注释分离的方法
Apr 21 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
Python序列类型的打包和解包实例
Dec 21 Python
浅谈Python3中print函数的换行
Aug 05 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
python如何利用paramiko执行服务器命令
Nov 07 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
python二维键值数组生成转json的例子
2019/12/06 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
J2EE面试题
2016/03/14 面试题
车间班组长的职责
2013/12/13 职场文书
文艺晚会策划方案
2014/06/11 职场文书
励志演讲稿300字
2014/08/21 职场文书
药店采购员岗位职责
2014/09/30 职场文书
烈士陵园观后感
2015/06/08 职场文书
重温入党誓词主持词
2015/06/29 职场文书
工作一年自我鉴定
2019/06/20 职场文书
话题作文之成长
2019/12/09 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS