igraph:让你玩转复杂网络的神器
我最近发现了个宝贝,叫igraph,是个用Python搞复杂网络分析的利器。这玩意儿简直太强了,能帮你轻松搞定网络构建、可视化和各种复杂的分析。不管你是搞社交网络、生物信息还是交通系统,igraph都能派上大用场。来,我们一起瞧瞧这个宝贝能干啥。
1
安装igraph:小菜一碟
安装igraph简直不要太简单,直接用pip就搞定了:
pip install python-igraph
温馨提示:如果你想要可视化功能,最好再装个Cairo库。不过别怕,大多数情况下,pip会自动帮你搞定依赖。
2
创建你的第一个图:so easy
igraph里最基本的概念就是 图(Graph) 。来,咱们创建一个简单的图试试水:
import igraph as ig# 创建一个无向图g = ig.Graph()# 添加一些顶点g.add_vertices(5)# 添加一些边g.add_edges([(0,1), (1,2), (2,3), (3,4), (4,0)])print(g)
看到没,就这么几行代码,一个环形图就出来了。igraph里的图默认是从0开始编号的,所以别搞错了哈。
3
给图加点料:属性设置
光有骨架不行,得给图加点肉。igraph允许你给顶点和边加上各种属性,比如名字、权重啥的:
# 给顶点加名字g.vs[“name”] = [“Alice”, “Bob”, “Charlie”, “David”, “Eve”]# 给边加权重g.es[“weight”] = [1.0, 2.0, 3.0, 4.0, 5.0]# 打印一下看看print(g.vs[“name”])print(g.es[“weight”])
这里vs是顶点的集合,es是边的集合。你可以像操作字典一样给它们加属性,贼方便。
4
来点高级的:图的分析
igraph真正牛x的地方在于它的分析功能。比如说,想知道谁是图中的“大佬”(度中心性最高的点)?
# 计算度中心性degrees = g.degree()max_degree = max(degrees)big_shots = [v.index for v in g.vs if v.degree() == max_degree]print(f“图中的大佬是: {[g.vs[i]['name'] for i in big_shots]}”)
这段代码计算了每个顶点的度(与之相连的边的数量),然后找出度最大的那些顶点。在社交网络里,这些可能就是最有影响力的人。
5
可视化:让你的图动起来
光看数字没意思,来画个图瞧瞧:
import matplotlib.pyplot as plt# 获取布局layout = g.layout(“kk”)# 绘图fig, ax = plt.subplots()ig.plot( g, layout=layout, target=ax, vertex_size=30, vertex_color=“lightblue”, vertex_label=g.vs[“name”], edge_width=[w/2 for w in g.es[“weight”]])plt.show()
6
社区发现:揪出小圈子
在大型网络中,经常会有一些小圈子。igraph提供了多种方法来发现这些社区:
这里用了Erdős–Rényi模型随机生成了一个图,然后用快速贪婪算法检测了社区。你还可以试试其他算法,比如Louvain方法啥的。
温馨提示:社区检测算法可能会因为随机性给出不同的结果,所以多跑几次看看结果是不是稳定的。
igraph真是个宝藏库,我这里只是浅尝辄止。它还有超多高级功能,比如最短路径、中心性分析、图的同构检测等等。慢慢探索,你会发现更多有意思的东西。
用igraph分析复杂网络,就像拿着X光机看透了整个系统的骨架。无论是研究社交网络的“网红效应”,还是分析交通网络找出最容易堵车的路段,igraph都能帮你搞定。好了,今天就聊到这,去试试吧,相信你会爱上这个强大的工具的!
领取专属 10元无门槛券
私享最新 技术干货