利用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的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
Python实现简单的四则运算计算器
Nov 02 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
python opencv判断图像是否为空的实例
Jan 26 Python
详解pandas的外部数据导入与常用方法
May 01 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
python tkinter组件使用详解
Sep 16 Python
python线程join方法原理解析
Feb 11 Python
python如何提升爬虫效率
Sep 27 Python
基于Django集成CAS实现流程详解
Nov 28 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
Python爬虫框架Scrapy实例代码
2018/03/04 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
高中竞选班长演讲稿
2014/04/24 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
售后服务承诺函格式
2015/01/21 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang