Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何计算属性和百分比之间的差异?_Neo4j_Cypher - Fatal编程技术网

Neo4j 如何计算属性和百分比之间的差异?

Neo4j 如何计算属性和百分比之间的差异?,neo4j,cypher,Neo4j,Cypher,我有一个neo4j图,我将其建模为: MERGE (c1:ChangeTime {at:1800}) MERGE (c2:ChangeTime {at:1900}) MERGE (c3:ChangeTime {at:2200}) MERGE (p:Profile {name:"ME"}) MERGE (p)-[:UPDATED_ON]->(c1) MERGE (p)-[:UPDATED_ON]->(c2) MERGE (p)-[:UPDATED_ON]->(c3) 这基本上是

我有一个neo4j图,我将其建模为:

MERGE (c1:ChangeTime {at:1800})
MERGE (c2:ChangeTime {at:1900})
MERGE (c3:ChangeTime {at:2200})
MERGE (p:Profile {name:"ME"})
MERGE (p)-[:UPDATED_ON]->(c1)
MERGE (p)-[:UPDATED_ON]->(c2)
MERGE (p)-[:UPDATED_ON]->(c3)
这基本上是个人档案的简化视图,在不同的更改时间更新

什么是cypher查询来获取每个ChangeTime的“at”属性之间的差异,以便我知道更改的频率

以及如何计算特定“差异”值的百分位数

试图找到在大型图形中应用此功能的最快方法


提前谢谢

我想你会发现APOC程序很有帮助,尤其是。尤其是apoc.coll.pairsMin(),它接受一个集合参数并返回对的集合(因此[1,2,3,4,5]的输入将返回[[1,2]、[2,3]、[3,4]、[4,5]])

因此,一种使用这种方法来获取特定用户的更改间隔的方法如下:

MATCH (:Profile {name:"ME"})-[:UPDATED_ON]->(c:ChangeTime)
WITH c
ORDER BY c.at DESC
WITH COLLECT(c) as updates
CALL apoc.coll.pairsMin(updates) YIELD value
UNWIND value as updatePairs
WITH updatePairs[0] as update1, updatePairs[1] as update2
SET update1.interval = update1.at - update2.at
现在已经有了时间间隔,您可以匹配用户的:ChangeTime节点,并在需要时使用avg()获得平均时间间隔

至于百分位数,有离散百分位数和连续百分位数的聚合函数,请参阅的聚合部分

什么是Cypher查询来获取每个ChangeTime的“at”属性之间的差异,以便我知道更改的频率

如果您必须坚持使用普通密码,您可以使用:

这将返回:

╒══════════╤══════════╕
│p         │diffs     │
╞══════════╪══════════╡
│{name: ME}│[100, 300]│
└──────────┴──────────┘
要确定差异值的最小值和最大值,必须
展开收集并使用
min
max
聚合函数:

MATCH (p:Profile)-[:UPDATED_ON]->(ct:ChangeTime)
WITH p, ct
ORDER BY ct.at
WITH p, collect(ct.at) AS ct_ats
WITH p, [i IN range(0, length(ct_ats)-2) | ct_ats[i+1] - ct_ats[i]] AS diffs
UNWIND diffs AS diff
RETURN p, min(diff) AS minDiff, max(diff) AS maxDiff
这使得:

╒══════════╤═══════╤═══════╕
│p         │minDiff│maxDiff│
╞══════════╪═══════╪═══════╡
│{name: ME}│100    │300    │
└──────────┴───────┴───────┘

你所说的“变化频率”是指“变化率”吗?谢谢你的回答。我复制并粘贴了查询,但它只返回/直观地显示了p的节点,而不是包含p和diff列的表。如果我只想要所有th profiles/p的差异最小和最大,该怎么办?@user716222要获得该表,只需选择“文本”输出(从图形、行、文本和代码选项中,留给结果)。@user716222我用一个查询更新了答案,以给出最小和最大的差异。该查询返回一个错误:无效输入'[':需要标识符字符、节点标签、属性映射、空格、关系模式“(“,”,“=”或“+=”(第7行,第16列(偏移量:200))“设置updatePairs[0]。间隔=updatePairs[0]。at-updatePairs[1]。at”^Cypher在设置集合元素的值时可能会很挑剔。我已将查询更新为别名对的每个部分,看看这是否能解决问题。
╒══════════╤═══════╤═══════╕
│p         │minDiff│maxDiff│
╞══════════╪═══════╪═══════╡
│{name: ME}│100    │300    │
└──────────┴───────┴───────┘