利用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的web框架中编写创建日志的程序的教程
Apr 30 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
python实现词法分析器
Jan 31 Python
python Django的web开发实例(入门)
Jul 31 Python
pytorch使用指定GPU训练的实例
Aug 19 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
提升python处理速度原理及方法实例
Dec 25 Python
Python-openCV读RGB通道图实例
Jan 17 Python
Python经纬度坐标转换为距离及角度的实现
Nov 01 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 Python
Python下opencv库的安装过程及问题汇总
Jun 11 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
js性能优化技巧
2015/11/29 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
党委书记岗位职责
2013/11/24 职场文书
高中军训感言400字
2014/02/24 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
教师党员承诺书
2014/03/25 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
反邪教观后感
2015/06/11 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android