Neo4j 如何计算属性和百分比之间的差异?
我有一个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) 这基本上是
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 │
└──────────┴───────┴───────┘