利用Python-iGraph如何绘制贴吧/微博的好友关系图详解

 更新时间:2017年11月02日 09:50:03   作者:lovealways  
这篇文章主要给大家介绍了关于利用Python-iGraph如何绘制贴吧/微博好友关系图的相关资料,文中显示介绍了在windows系统下安装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)

最终结果如图:

以上只演示了一个用户的社交关系图,有精力的话可以尝试递归地一层一层爬下去,想象一下最终绘出来的图也是挺炫酷的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 关于TensorFlow、Keras、Python版本匹配一览表

    关于TensorFlow、Keras、Python版本匹配一览表

    这篇文章主要介绍了关于TensorFlow、Keras、Python版本匹配一览表,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • python np.arange 步长0.1的问题需要特别注意

    python np.arange 步长0.1的问题需要特别注意

    这篇文章主要介绍了python np.arange 步长0.1的问题需要特别注意,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • python中Genarator函数用法分析

    python中Genarator函数用法分析

    这篇文章主要介绍了python中Genarator函数用法,实例分析了Genarator函数的使用原理与相关技巧,需要的朋友可以参考下
    2015-04-04
  • Python中os.path模块的8个神奇函数分享

    Python中os.path模块的8个神奇函数分享

    在Python编程中,os.path模块是一个非常重要的模块,它提供了用于处理文件路径和目录的函数,本文将介绍os.path模块中最常用的8个内置函数,需要的可以参考下
    2023-11-11
  • 浅谈Python数学建模之线性规划

    浅谈Python数学建模之线性规划

    线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。研究线性约束条件下线性目标函数的极值问题的数学理论和方法
    2021-06-06
  • pytorch中nn.Flatten()函数详解及示例

    pytorch中nn.Flatten()函数详解及示例

    nn.Flatten是一个类,而torch.flatten()则是一个函数,下面这篇文章主要给大家介绍了关于pytorch中nn.Flatten()函数详解及示例的相关资料,需要的朋友可以参考下
    2023-01-01
  • PyTorch与PyTorch Geometric的安装过程

    PyTorch与PyTorch Geometric的安装过程

    这篇文章主要介绍了PyTorch与PyTorch Geometric的安装,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • PyCharm连接远程服务器的超级详细教程

    PyCharm连接远程服务器的超级详细教程

    Pycharm可以与服务器建立连接,把相应的项目同步到服务器上,下面这篇文章主要给大家介绍了关于PyCharm连接远程服务器的超级详细教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 如何实现一个python函数装饰器(Decorator)

    如何实现一个python函数装饰器(Decorator)

    这篇文章主要介绍了如何实现一个python函数装饰器(Decorator),帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-10-10
  • Python中的序列化详细解析

    Python中的序列化详细解析

    这篇文章主要介绍了Python中的序列化详细解析,序列化是指把程序中的一个类转化成一个标准化的格式,标准化的意义是这个格式可以跨程序,跨平台的被使用,而且保持其原有的内容,规范,需要的朋友可以参考下
    2023-11-11

最新评论