networkx 中的边权重对 pagerank 没有影响?

问题描述 投票:0回答:1

我正在尝试计算买家/卖家网络的页面排名。买家也可以是卖家,这意味着 A 可以向 B 出售价值 100 美元的东西,B 可以向 A 出售价值 20 美元的(其他)东西。所以我在网络中使用 DiGraph,权重就是 $ 值。
我的问题是,下面的两个脚本,无论有没有 edge_attr,都会产生完全相同的 pagerank 值。
那么我在这里错过了什么吗? 非常感谢您的宝贵时间。


    import pandas as pd   
    import networkx as nx

    df =pd.DataFrame({'Seller':['A1','B1', 'A2','A2','B2', 'B2'],
                  'Buyer':['B1','A1','B1','B2','A2', 'B2'],
                  'Value':[10,20,30,40,50, 5]})    

    g1 = nx.from_pandas_edgelist(df, 'Seller', "Buyer", create_using=nx.DiGraph())   
    pagerank_g1 = nx.pagerank(g1)     
    pagerank_g1=sorted(pagerank_g1.items(),key=lambda v:(v[1],v[0]),reverse=True)   
    print('  no weight, pagerank_g1', pagerank_g1)   


    g2=nx.from_pandas_edgelist(df, 'Seller', "Buyer", create_using=nx.DiGraph(), edge_attr='Value')   
    pagerank_g2 = nx.pagerank(g2)   
    pagerank_g2=sorted(pagerank_g2.items(),key=lambda v:(v[1],v[0]),reverse=True)   
    print('with weight, pagerank_g2', pagerank_g2) }  
networkx pagerank
1个回答
0
投票

那是因为

weight
 中默认的 
pagerank
名称是
weight
,而你的则是
Value

pagerank
(G, alpha=0.85, 个性化=无, max_iter=100, tol=1e-06, nstart=无,weight='重量',悬挂=无

pagerank_g2 = nx.pagerank(g2, weight="Value")   
# instead of pagerank_g2 = nx.pagerank(g2)

输出:

#No weight                          #With weigth
[                                   [
    ('B1', 0.3956298463938973),         ('B1', 0.40247095482812456),  
    ('A1', 0.3737837827630368),         ('A1', 0.37960199890637514),
    ('B2', 0.13549920760890705),        ('A2', 0.11614768683390858),
    ('A2', 0.09508716323415882)         ('B2', 0.10177935943159168)
]                                   ]
© www.soinside.com 2019 - 2024. All rights reserved.