利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
作者:lovealways 时间:2022-02-26 07:16:32
前言
最近工作中遇到了一些需求,想通过图形化的方式显示社交网络特定用户的好友关系,上网找了一下这方面的图形库有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)
最终结果如图:
以上只演示了一个用户的社交关系图,有精力的话可以尝试递归地一层一层爬下去,想象一下最终绘出来的图也是挺炫酷的。
来源:http://www.cnblogs.com/lovealways/p/6653006.html
标签:python-igraph,安装,绘图


猜你喜欢
使用Vue.js和MJML创建响应式电子邮件
2023-07-02 17:08:59

mysql中group by与having合用注意事项分享
2024-01-15 02:24:55
MySQL表设计优化与索引 (十)
2010-10-25 19:51:00
一文带你了解Python中的字符串是什么
2021-10-16 06:05:27

MySQL中join语句怎么优化
2024-01-15 20:53:35

11个Python3字典内置方法大全与示例汇总
2021-11-26 22:33:51

CSS控制Table表格文字样式
2008-06-11 18:53:00

通过python-turtle库实现绘制图画
2023-11-23 17:39:35

Python实战之实现简易的学生选课系统
2023-10-07 02:49:37

MySQL无法输入中文字符问题的解决办法
2024-01-22 08:26:56

JS设计模式之单例模式(一)
2024-05-11 09:06:29
影响SQL Server性能的三个关键点
2009-03-09 13:11:00
PHP小白必须要知道的php基础知识(超实用)
2024-05-13 09:56:42

IE6绝对定位的bug及其解决办法
2011-03-30 12:31:00
Python实现的简单线性回归算法实例分析
2021-06-05 17:16:12
php以post形式发送xml的方法
2023-11-22 12:40:47
Python 虚拟环境迁移到其他电脑的实现
2023-04-16 19:08:13

Python pymongo模块用法示例
2022-05-23 20:00:21
pandas 如何将字符串映射为数字
2021-04-15 02:47:33
Python正则简单实例分析
2023-03-10 16:49:59