Как нормализовать баллы PageRank
Я запускаю PageRank для группы узлов, где у каждого узла есть свойство year
, Как я могу рассчитать средние значения всех баллов PageRank в зависимости от year
имущество? То есть, если есть 100 узлов с общим количеством 20 различных year
значения, я хотел бы рассчитать 20 средних значений PageRank.
Затем для каждого узла я хотел бы рассчитать масштабную оценку на основе разницы между оценкой PageRank и средней оценкой PageRank за тот год (где среднее значение за этот год основано на оценках PageRank для всех узлов с это же значение для year
имущество.
Код для запуска PageRank: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
RETURN
title,
year,
page_rank;
Как я могу изменить этот код, чтобы получить масштабированный результат?
Любая помощь очень ценится!
1 ответ
Этот запрос должен вернуть scaled_score
(как абсолютное значение) для каждого year
/title
комбинация (чем ниже оценочный балл, тем ближе заголовок 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;
Вы также можете заказать результаты (скажем, по year
или же scaled_score
).