利用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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
python执行外部程序的常用方法小结
Mar 21 Python
Django自定义分页效果
Jun 27 Python
关于反爬虫的一些简单总结
Dec 13 Python
python创建文件备份的脚本
Sep 11 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
详解Python3定时器任务代码
Sep 23 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
django orm模块中的 is_delete用法
May 20 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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
实现“上一页”和“下一页按钮
2006/10/09 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
javascript 读取图片文件的大小
2009/06/25 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
硕士研究生自我鉴定范文
2013/12/27 职场文书
二手书店创业计划书
2014/01/16 职场文书
自我反省检讨书
2014/01/23 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
社会工作专业求职信
2014/07/15 职场文书
南极大冒险观后感
2015/06/05 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android
详解Vue router路由
2021/11/20 Vue.js
解决Oracle数据库用户密码过期
2022/05/11 Oracle
PHP RabbitMQ消息列队
2022/05/11 PHP