У меня есть узлы в 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
перед возвратом нормализованных значений?
Любая помощь будет принята с благодарностью!