注意
前往末尾 下载完整示例代码。
网格上的个性化 PageRank
本示例演示了如何在网格上计算和可视化个性化 PageRank。我们使用 igraph.Graph.personalized_pagerank()
方法,并演示其在网格图上的效果。
注意
顶点的 PageRank 分数反映了随机游走者长期处于该顶点的概率。在每一步中,游走者有 1 - 阻尼系数的概率重新开始游走,并根据重置向量中定义的概率选择一个起始顶点。
import igraph as ig
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import numpy as np
我们定义了一个函数,用于在 Matplotlib 坐标轴上绘制图,并显示其个性化 PageRank 值。该函数还在侧面生成一个颜色条,以查看值的变化。我们使用 Matplotlib 的 Normalize 类 来设置颜色并确保颜色条范围正确。
def plot_pagerank(graph: ig.Graph, p_pagerank: list[float]):
"""Plots personalized PageRank values on a grid graph with a colorbar.
Parameters
----------
graph : ig.Graph
graph to plot
p_pagerank : list[float]
calculated personalized PageRank values
"""
# Create the axis for matplotlib
_, ax = plt.subplots(figsize=(8, 8))
# Create a matplotlib colormap
# coolwarm goes from blue (lowest value) to red (highest value)
cmap = cm.coolwarm
# Normalize the PageRank values for colormap
normalized_pagerank = ig.rescale(p_pagerank)
graph.vs["color"] = [cmap(pr) for pr in normalized_pagerank]
graph.vs["size"] = ig.rescale(p_pagerank, (20, 40))
graph.es["color"] = "gray"
graph.es["width"] = 1.5
# Plot the graph
ig.plot(graph, target=ax, layout=graph.layout_grid())
# Add a colorbar
sm = cm.ScalarMappable(norm=plt.Normalize(min(p_pagerank), max(p_pagerank)), cmap=cmap)
plt.colorbar(sm, ax=ax, label="Personalized PageRank")
plt.title("Graph with Personalized PageRank")
plt.axis("equal")
plt.show()
首先,我们生成一个图,例如格点图(Lattice Graph),它本质上是一个 dim x dim
的网格。
然后我们初始化 reset_vector
(其长度应等于图中顶点的数量)。
reset_vector = np.zeros(g.vcount())
然后我们设置要优先考虑的节点,例如索引为 0
和 18
的节点。
reset_vector[0] = 1
reset_vector[18] = 0.65
接着我们计算个性化 PageRank。
personalized_page_rank = g.personalized_pagerank(damping=0.85, reset=reset_vector)
最后,我们绘制带有个性化 PageRank 值的图。
plot_pagerank(g, personalized_page_rank)

或者,我们可以调整 damping
参数。
personalized_page_rank = g.personalized_pagerank(damping=0.45, reset=reset_vector)
在这里我们可以看到使用新阻尼参数的相同图表。
plot_pagerank(g, personalized_page_rank)

脚本总运行时间: (0 分钟 0.443 秒)