官方社群在线客服官方频道防骗查询货币工具

社交网络之图论实战

社交网络之图论实战诺亚
2025年01月16日📖 4 分钟
LIKE.TG 社交媒体链接LIKE.TG 社交媒体链接LIKE.TG 社交媒体链接LIKE.TG 社交媒体链接
Fansoso粉丝充值系统

LIKE.TG | 发现全球营销软件&服务汇聚顶尖互联网营销和AI营销产品,提供一站式出海营销解决方案。唯一官网:www.like.tg

社交网络之图论实战

0.前言1.准备工作2.学习方法3.社交网络实战4.问题处理5.作者的话

0.前言

又到了新的一周,今天来学点新的知识,这节学的知识还是非常重要,那就是属于社交网络方向以及知识图谱方向以及我们研究生的一门课---《图论》

本节将从我的学习方式英文文档如何学习以及如何处理问题,以及如何去研究社交网络及图论等角度来分析!

下面一起来学习新知识吧,记得打开你的python哦,哈哈,就是一篇python实战篇

1.准备工作

本节以python-igraph来学习社交网络与图论相关知识!

两个网站

那么我们一起来安装一下,这里引入两个网站。

第一:(whl)包安装网站:

https://www.lfd.uci.edu/~gohlke/pythonlibs/

第一:igraph API官网:

http://igraph.org/python/doc/tutorial/tutorial.html#structural-properties-of-graphs

安装包

在第一个网站搜索Python-igraph,然后找到相应的版本下载即可。

最后pip install xxx.whl即可完成安装!

2.学习方法

学习方法

之前有人在交流群或者私下问我学习的方式,那么我现在告诉各位我的学习方法之一就是阅读官网API,我看了一下这个官网API,很详细,虽然是英文的,但是对于英文我们总不能躲避,而是顺其意,码其码

在阅读中,我们可以学到一些API术语,以及相关操作的表达,这些在平时开发中学不到,但是却对于平时开发的异常处理十分重要!比如写了一个bug,报了个错,有些API中会把这些作为警告表示出来,你看到了,也就学会了,在出现这些问题的时候,直接查问题即可,而不是盲目的不知所措,虽然说搜索很重要,但比搜索更重要的是你的思路,也就是先导

正确阅读

这里贴出一张图,我们看到这个API,会发现上面是描述,下面是代码。

我的学习方式是对比法,就是将上述英文与代码对比来实战!先看一下代码如果能看懂,则直接简化上述的文字,略读即可!如果碰到十分重要的代码,则从文字中提取信息对比代码来看!实在不行,谷歌或者其他的翻译手段进行翻译!

什么值得读

有些API非常建议读,比如这个,但是并不是所有的API具有可读性,像那种排版很差,解释性不强的,直接略过即可!

API分类明确,详细阐述的,可读!

3.社交网络实战

导包

代码语言:javascript
复制
from igraph import *

版本

代码语言:javascript
复制
igraph.__version__

'0.7.1'

创建图

代码语言:javascript
复制
# 创建图 g=Graph() g

输出:

代码语言:javascript
复制
<igraph.Graph at 0x21d1237a138>

另一种打印

代码语言:javascript
复制
print(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 0 0 --

添加三个节点

代码语言:javascript
复制
# 添加三个节点 g.add_vertices(3)

打印

代码语言:javascript
复制
print(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 3 0 --

添加两条边

代码语言:javascript
复制
#添加两条边 g.add_edges([(1,2),(0,1)])

添加三个节点

代码语言:javascript
复制
# 生成3个节点,2条边 print(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 3 2 -- + edges: 1--2 0--1

再添加三个节点

代码语言:javascript
复制
# 再添加三个节点 g.add_vertices(3) print(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 6 2 -- + edges: 1--2 0--1

添加更多关系

代码语言:javascript
复制
# 添加更多关系 g.add_edges([(2,3),(3,4),(4,5),(5,3)])

6个节点,6条边的无向图

代码语言:javascript
复制
# 6个节点,6条边的无向图 print(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 6 6 -- + edges: 1--2 0--1 2--3 3--4 4--5 3--5

获取边id

代码语言:javascript
复制
g.get_eid(1,2)

输出:

代码语言:javascript
复制
0

同理获取边id

代码语言:javascript
复制
g.get_eid(0,1)

输出:

代码语言:javascript
复制
1

获取边列表

代码语言:javascript
复制
g.get_edgelist()

输出:

代码语言:javascript
复制
[(1, 2), (0, 1), (2, 3), (3, 4), (4, 5), (3, 5)]

获取图的顶点与边

代码语言:javascript
复制
summary(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 6 6 --

树生成边与顶点

代码语言:javascript
复制
# 生成127个顶点,126条边,2代表每个顶点两个孩子 g2=Graph.Tree(127,2) print(g2)

输出:

代码语言:javascript
复制
IGRAPH U--- 127 126 -- + edges: 0--1 0--2 1--3 1--4 2--5 2--6 3--7 3--8 4--9 4--10 5--11 5--12 6--13 6--14 7--15 7--16 8--17 8--18 9--19 9--20 10--21 10--22 11--23 11--24 12--25 12--26 ... ... ...

随机生成图

代码语言:javascript
复制
#随机生成图 g = Graph.GRG(100, 0.2) print(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 100 597 -- + attr: x (v), y (v) + edges: 0 -- 3 5 6 9 11 1 -- 3 8 10 16 2 -- 5 6 13 ... ...

检查两图是否同构

代码语言:javascript
复制
#检查两图是否同构 #g.isomorphic(g2)

生成一个完整无向图

代码语言:javascript
复制
g = Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)]) print(g)

输出:

代码语言:javascript
复制
IGRAPH U--- 7 9 -- + edges: 0 -- 1 2 5 2 -- 0 3 4 5 4 -- 2 3 6 -- 3 5 1 -- 0 3 -- 2 4 6 5 -- 0 2 6

查看顶点

代码语言:javascript
复制
g.vs

输出:

代码语言:javascript
复制
<igraph.VertexSeq at 0x21d123a08b8>

顶点属性定义

代码语言:javascript
复制
g.vs["name"] = ["Alice", "Bob", "Claire", "Dennis", "Esther", "Frank", "George"] print(g)

输出:

代码语言:javascript
复制
IGRAPH UN-- 7 9 -- + attr: name (v) + edges (vertex names): Alice -- Bob, Claire, Frank Esther -- Claire, Dennis Bob -- Alice Frank -- Alice, Claire, George Claire -- Alice, Dennis, Esther, Frank George -- Dennis, Frank Dennis -- Claire, Esther, George

另一属性定义:

代码语言:javascript
复制
g.vs["age"] = [25, 31, 18, 47, 22, 23, 50] print(g)

输出:

代码语言:javascript
复制
IGRAPH UN-- 7 9 -- + attr: age (v), name (v) + edges (vertex names): Alice -- Bob, Claire, Frank Esther -- Claire, Dennis Bob -- Alice Frank -- Alice, Claire, George Claire -- Alice, Dennis, Esther, Frank George -- Dennis, Frank Dennis -- Claire, Esther, George

另一属性定义

代码语言:javascript
复制
g.vs["gender"] = ["f", "m", "f", "m", "f", "m", "m"] print(g)

输出:

代码语言:javascript
复制
IGRAPH UN-- 7 9 -- + attr: age (v), gender (v), name (v) + edges (vertex names): Alice -- Bob, Claire, Frank Esther -- Claire, Dennis Bob -- Alice Frank -- Alice, Claire, George Claire -- Alice, Dennis, Esther, Frank George -- Dennis, Frank Dennis -- Claire, Esther, George

边属性定义

代码语言:javascript
复制
g.es["is_formal"] = [False, False, True, True, True, False, True, False, False] print(g)

输出:

代码语言:javascript
复制
IGRAPH UN-- 7 9 -- + attr: age (v), gender (v), name (v), is_formal (e) + edges (vertex names): Alice -- Bob, Claire, Frank Esther -- Claire, Dennis Bob -- Alice Frank -- Alice, Claire, George Claire -- Alice, Dennis, Esther, Frank George -- Dennis, Frank Dennis -- Claire, Esther, George

边属性获取

代码语言:javascript
复制
g.es[0]

输出:

代码语言:javascript
复制
igraph.Edge(<igraph.Graph object at 0x0000021D1237A408>, 0, {'is_formal': False})

属性获取

代码语言:javascript
复制
g.es[0].attributes()

输出:

代码语言:javascript
复制
{'is_formal': False}

属性深入获取

代码语言:javascript
复制
g.es[0]["is_formal"]

输出:

代码语言:javascript
复制
False

修改属性值

代码语言:javascript
复制
g.es[0]["is_formal"]=True g.es[0].attributes()

输出:

代码语言:javascript
复制
{'is_formal': True}

顶点属性获取

代码语言:javascript
复制
g.vs[0] 输出:igraph.Vertex(<igraph.Graph object at 0x0000021D1237A408>, 0, {'name': 'Alice', 'age': 25, 'gender': 'f'}) g.vs[0].attributes() 输出:{'age': 25, 'gender': 'f', 'name': 'Alice'} g.vs[0]['age']=0 g.vs[0].attributes() 输出:{'age': 0, 'gender': 'f', 'name': 'Alice'} g.vs[0]['age']=25 g.vs[0].attributes() 输出:{'age': 25, 'gender': 'f', 'name': 'Alice'}

添加新顶点属性

代码语言:javascript
复制
g.vs[3]["foo"]="bar" g.vs["foo"]

输出:

代码语言:javascript
复制
[None, None, None, 'bar', None, None, None]

删除顶点属性

代码语言:javascript
复制
del g.vs["foo"]

验证是否存在

代码语言:javascript
复制
g.vs["foo"]

输出:

代码语言:javascript
复制
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-151-a2e2f8e7cb08> in <module>() ----> 1 g.vs["foo"] KeyError: 'Attribute does not exist'

顶点度

代码语言:javascript
复制
g.degree()

输出:

代码语言:javascript
复制
[3, 1, 4, 3, 2, 3, 2]

入度与出度

代码语言:javascript
复制
# mode instead type g.degree(mode="in") 输出:[3, 1, 4, 3, 2, 3, 2] g.degree(mode="out") 输出:[3, 1, 4, 3, 2, 3, 2]

获取度

代码语言:javascript
复制
g.degree([2,3,4])

输出:

代码语言:javascript
复制
[4, 3, 2]

边缘中介

代码语言:javascript
复制
# 边缘中介 g.edge_betweenness()

输出:

代码语言:javascript
复制
[6.0, 6.0, 4.0, 2.0, 4.0, 3.0, 4.0, 3.0, 4.0]

获取最大边缘中介边

代码语言:javascript
复制
[g.es[idx].tuple for idx, eb in enumerate(ebs) if eb == max_eb]

输出:

代码语言:javascript
复制
[(0, 1), (0, 2)]

顶点度

代码语言:javascript
复制
g.vs.degree()

输出:

代码语言:javascript
复制
[3, 1, 4, 3, 2, 3, 2]

查询

代码语言:javascript
复制
#查询 g.vs.select(_degree = g.maxdegree())["name"] 输出:['Claire']

布局绘图

下面两个等价

代码语言:javascript
复制
layout = g.layout_kamada_kawai() layout = g.layout("kamada_kawai")

完整绘图

代码语言:javascript
复制
layout = g.layout("kk") plot(g, layout = layout)

输出:

绘图配置

代码语言:javascript
复制
g.vs["label"] = g.vs["name"] color_dict = {"m": "green", "f": "pink"} g.vs["color"] = [color_dict[gender] for gender in g.vs["gender"]] plot(g, layout = layout, bbox = (300, 300), margin = 30)

输出:

自定义绘图

代码语言:javascript
复制
visual_style = {} visual_style["vertex_size"] = 20 visual_style["vertex_color"] = [color_dict[gender] for gender in g.vs["gender"]] visual_style["vertex_label"] = g.vs["name"] visual_style["edge_width"] = [1 + 2 * int(is_formal) for is_formal in g.es["is_formal"]] visual_style["layout"] = layout visual_style["bbox"] = (300, 300) visual_style["margin"] = 20 plot(g, **visual_style)

输出:

绘图存储

代码语言:javascript
复制
plot(g, "social_network.png", **visual_style)

输出:

4.问题处理

在plot时报错!

解决办法:

首先安装cairo,在我上面写到的whl中查找这个包,然后安装,安装后按照下面图片找到包的位置,在官网给出的地址处下载下面第三点的相关dll文件,并放置包位置即可!(下面给出地址)

http://igraph.org/python/doc/tutorial/install.html#installing-igraph

官方客服

LIKE.TG汇集全球营销软件&服务,助力出海企业营销增长。提供最新的“私域营销获客”“跨境电商”“全球客服”“金融支持”“web3”等一手资讯新闻。

点击【联系客服】 🎁 免费领 1G 住宅代理IP/proxy, 即刻体验 WhatsApp、LINE、Telegram、Twitter、ZALO、Instagram、signal等获客系统,社媒账号购买 & 粉丝引流自助服务或关注【LIKE.TG出海指南频道】【LIKE.TG生态链-全球资源互联社区】连接全球出海营销资源。


Banner广告
Banner广告
Banner广告
Banner广告
全球峰会
Server deployment