利用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中集合类型(set)学习小结
Jan 28 Python
python开发之基于thread线程搜索本地文件的方法
Nov 11 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
python操作kafka实践的示例代码
Jun 19 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
numpy求平均值的维度设定的例子
Aug 24 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
python为什么要安装到c盘
Jul 20 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
Python如何把不同类型数据的json序列化
Apr 30 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定义函数代码
2015/02/26 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
Vue异步组件使用详解
2017/04/08 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
浅析vue-router原理
2018/10/19 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python中的闭包详细介绍和实例
2014/11/21 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
知名企业招聘广告词大全
2014/03/18 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
培根随笔读书笔记
2015/07/01 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js