Neo4i Как собрать результаты процедуры потоковой передачи PageRank на основе свойства узла
У меня есть узлы в neo4j, которые представляют опубликованные научные статьи, и я хочу проанализировать ссылки между статьями с помощью потокового алгоритма PageRank.
Узлы имеют отношения CITES
между ними и собственностью year
, Я хочу нормализовать оценки PageRank, используя year
Свойство для каждого узла, выполнив:
(PageRankScore - averagePageRankScore(for papers published in this year))/ standardDeviation (for papers published in this year)
,
Теперь я знаю, что neo4j имеет функции агрегирования avg
а также stDev
, С учетом вышесказанного, как я могу запустить их для каждого бина узлов / оценок страниц?
Я хочу сделать это для большого количества узлов, поэтому я думаю, что было бы лучше использовать algo.pageRank.stream()
функция. Другим вариантом может быть использование Spark и Mazerunner, но я бы хотел избежать этого, если в этом нет полной необходимости.
Мой текущий запрос, который просто передает результаты 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
*
ORDER BY score DESC
RETURN
node.title,
node.year,
score;
Как я мог изменить это на:
(1) узлы бина и их оценки PageRank по свойству node.year
(2) запустить avg
а также stDev
на каждой корзине
(3) нормализовать с помощью avg
а также stDev
перед возвратом нормализованных значений?
Любая помощь будет принята с благодарностью!