python networkx PageRank


最近用Java寫了個pagerank,發現最終算出來的PageRank值的和不是1,但是這個和應該是1的,所以就用python的networkx包中的PageRank算法做了一個測試:

import os
import networkx as nx
os.chdir('C:\\Users\\XXX\\Desktop\\')
filename = 'Wiki-Vote.txt'
G=nx.DiGraph()
with open(filename) as file:
    for line in file:
        head, tail = [int(x) for x in line.split()]
        G.add_edge(head,tail)

pr=nx.pagerank(G,alpha=0.85)
x = 0;
for node, value in pr.items():
    x = x + value
print(x)

打印結果是:1.0000000000000004,說明所有節點PageRank值的和確實是1

Wikit-Vote.txt 在這里:http://snap.stanford.edu/data/wiki-Vote.html,用的時候把文件前面的一小段注釋刪掉了

要注意的一點:G=nx.Graph()構造的是無向圖, G=nx.DiGraph()構造的是有向圖,要注意區別

 

還可以將圖畫出來,下面是一個示例:

import matplotlib.pyplot as plt
import networkx as nx

G=nx.binomial_graph(10, 0.3, directed=True)
layout = nx.spring_layout(G)
plt.figure(1)
nx.draw(G, pos=layout, node_color='y')

pr=nx.pagerank(G,alpha=0.85)
print(pr)
for node, pageRankValue in pr.items():
    print("%d,%.4f" %(node,pageRankValue))

plt.figure(2)
nx.draw(G, pos=layout, node_size=[x * 6000 for x in pr.values()],node_color='m',with_labels=True)
plt.show()

右邊的圖中節點大小是與其pagerank值成比例的,具體每個節點的pagerank值為:

0,0.1164
1,0.1006
2,0.1251
3,0.1541
4,0.0835
5,0.0835
6,0.0913
7,0.1171
8,0.0746
9,0.0538

 

http://networkx.github.io/documentation/latest/tutorial/tutorial.html  networkx基本建圖、添加節點、邊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM