zoukankan      html  css  js  c++  java
  • 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基本建图、添加节点、边

  • 相关阅读:
    修改MySQL表varchar字段的小实验
    MySQL5.6同步指定数据库
    Redis安装
    MongoDB安装
    RMAN备份注意事项
    Oracle Data Guard Protection Modes
    Linux Shell 文本处理工具
    ORACLE 收缩表空间的数据文件
    crfclust.bdb导致磁盘满
    undo管理
  • 原文地址:https://www.cnblogs.com/fstang/p/3113352.html
Copyright © 2011-2022 走看看