利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
时间:2019-04-07
本文章向大家介绍利用Python-iGraph如何绘制贴吧/微博的好友关系图详解,主要包括利用Python-iGraph如何绘制贴吧/微博的好友关系图详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
最近工作中遇到了一些需求,想通过图形化的方式显示社交网络特定用户的好友关系,上网找了一下这方面的图形库有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)
最终结果如图:
以上只演示了一个用户的社交关系图,有精力的话可以尝试递归地一层一层爬下去,想象一下最终绘出来的图也是挺炫酷的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
- FrameLayout(框架布局)
- WordPress 中变量$allowedposttags 添加自定义HTML属性
- 移动端UC /QQ 浏览器的部分私有Meta 属性
- RelativeLayout(相对布局)
- TableLayout(表格布局)
- 【MindiaX实例】 PHP 在foreach 中获取JSON 单个数据
- 史上十大最严重黑客袭击事件盘点
- LinearLayout(线性布局)
- 服务化了,没想到耦合更加严重?
- 利用好注册的域名
- Android中TextView
- 腾讯 DCI 上线基于集中控制的 SR-TE 方案
- 如何从VS2003升级到VS2008
- js中多个Date对象变量间赋值互相影响
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 七日Python之路--第三天(之初试Django 2-1)
- 超性感的React Hooks(十一)useCallback、useMemo
- 七日Python之路--第二天
- 八、通过断点调试观察JS执行过程
- 传智播客OA项目学习--阶段三(Struts中Action书写)
- 九、函数与函数式编程
- 关于Hibernate懒加载----Spring filter
- 十、详解函数柯里化
- Unable to load file:*struts.xml-[unknown location]
- 使用hooks重新定义antd pro想象力(一)
- 传智播客OA项目学习--阶段三(级联操作)
- 七日Python之路--第十一天
- 使用hooks重构antd pro的想象力(三)我是如何利用hooks干掉redux的
- 七日Python之路--第十天
- 初学Vue.js,用 vue ui 创建项目会不会被鄙视