利用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解析并修改XML文档的方法
Oct 15 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
python ---lambda匿名函数介绍
Mar 13 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
python实现大文本文件分割
Jul 22 Python
python元组和字典的内建函数实例详解
Oct 22 Python
python默认参数调用方法解析
Feb 09 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
python 6种方法实现单例模式
Dec 15 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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三元运算的2种写法代码实例
2014/05/12 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
javascript 随机展示头像实现代码
2011/12/06 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
python async with和async for的使用
2019/06/20 Python
Form表单及django的form表单的补充
2019/07/25 Python
Python timer定时器两种常用方法解析
2020/01/20 Python
Python post请求实现代码实例
2020/02/28 Python
自学python用什么系统好
2020/06/23 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
前台文员岗位职责
2013/12/28 职场文书
活动总结模板
2014/05/09 职场文书
蜗居观后感
2015/06/11 职场文书
停车场管理制度范本
2015/08/05 职场文书
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
如何使用python包中的sched事件调度器
2022/04/30 Python