我正在尝试计算买家/卖家网络的页面排名。买家也可以是卖家,这意味着 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) }
那是因为
weight
中默认的
pagerank
名称是 weight
,而你的则是 Value
。
(G, alpha=0.85, 个性化=无, max_iter=100, tol=1e-06, nstart=无,weight='重量',悬挂=无)pagerank
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)
] ]