Как нормализовать баллы PageRank - PullRequest
0 голосов
/ 31 октября 2018

Я запускаю 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,<br> node.year AS year, score AS page_rank ORDER BY page_rank DESC LIMIT 10000 RETURN title, year, page_rank;

Как я могу изменить этот код, чтобы получить масштабированный результат?

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 31 октября 2018

Этот запрос должен возвращать 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).

...