如何标准化 PageRank 分数

How to Normalize PageRank Scores

我在一组节点上 运行ning PageRank,其中每个节点都有一个 属性 year。如何根据 year 属性 计算所有 PageRank 分数的平均值?也就是说,如果有 100 个节点总共有 20 个不同的 year 值,我想计算 20 个平均 PageRank 值。

然后,对于每个节点,我想根据 PageRank 得分与当年论文的平均 PageRank 得分之间的差异计算一个比例得分(当年的平均值基于 PageRank year 属性.

具有相同值的所有节点的分数

运行 PageRank 的代码是: 呼叫algo.pageRank.stream( 'MATCH (p:Paper) WHERE p.year < 2015 RETURN id(p) as id', 'MATCH (p1:Paper)-[:CITES]->(p2:Paper) RETURN id(p1) as source, id(p2) as target', {图:'cypher', iterations:20, write:false, concurrency:20}) YIELD节点,得分 和 *, node.title AS 标题,<br> node.year 作为年份, 评分为 page_rank 按 page_rank 描述排序 限制 10000 RETURN 标题, 年, page_rank;

如何将此代码更改为 return 比例分数?

非常感谢任何帮助!

此查询应该 return 每个 year/title 组合的 scaled_score(作为绝对值)(比例分数越低,标题越接近page_rank 是当年的平均值):

CALL algo.pageRank.stream(
  'MATCH (p:Paper) WHERE p.year < 2015 RETURN id(p) as id',
  'MATCH (p1:Paper)-[:CITES]->(p2:Paper) RETURN id(p1) as source, id(p2) as target',
  {graph:'cypher', iterations:20, write:false, concurrency:20})
YIELD node, score
WITH 
  node.title AS title,
  node.year AS year, 
  score AS page_rank
ORDER BY page_rank DESC
LIMIT 10000
WITH year, COLLECT({title: title, page_rank: page_rank}) AS data, AVG(page_rank) AS avg_page_rank
UNWIND data AS d
RETURN year, d.title AS title, ABS(d.page_rank-avg_page_rank)/avg_page_rank AS scaled_score;

您可能还想对结果进行排序(例如,按 yearscaled_score)。