利用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让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
python实现批量改文件名称的方法
May 25 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
详解使用python的logging模块在stdout输出的两种方法
May 17 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
Python Django 前后端分离 API的方法
Aug 28 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 Python
Python list去重且保持原顺序不变的方法
Apr 03 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
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
Python制作简易注册登录系统
2016/12/15 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
django 多数据库配置教程
2018/05/30 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
某公司部分笔试题
2013/11/05 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
竞聘上岗演讲稿范文
2014/01/10 职场文书
会议活动邀请函
2014/01/27 职场文书
四群教育工作实施方案
2014/03/26 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
优秀班主任申报材料
2014/12/16 职场文书
给老师的感谢信
2015/01/20 职场文书
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫