使用Neo4j/Cypher,我有一个相当小的数据集(290个节点),只包含一种类型的标签(:县)。基于属性计算的组节点
它们的性质是这样的:县({countyCode,countyName,人口})。 这里有一个索引:County.countyCode
每个:县与1 + N其他:县有关的:ADJACENT_TO。
我试图实现是要找到适合的群体性质的给定值范围内的各县的组合(比如最小100000,最大120000)。三个或三个以上的县
与查询下面,我就得到了如发现对,但不是组合。
MATCH x = (a:County)-[:ADJACENT_TO]->(b:County)
WHERE reduce(totalPopulation = 0, n IN nodes(x)| totalPopulation + n.population) >= 100000
AND reduce(totalPopulation = 0, n IN nodes(x)| totalPopulation + n.population) <= 120000
RETURN x, b.countyName, a.countyName,
reduce(totalPopulation = 0, n IN nodes(x)| totalPopulation + n.population) AS reduction
的最终目标是要找到的给定的标准范围内的降低,即,1个... N县独特组合:县(y)和:县(x)被联合县(Z),但不包括:县(w),因为它可能与县(v)有不同的组合。
没有县可以组合,其中“核心”县不直接存在:ADJACENT_TO定县。
我很感谢任何答案和指引,以帮助我的方式。
编辑: 经过大量搜索我认为什么我想要实现的是所谓的“聚类分析”,但我一直无法弄清楚如何创建群集(我所说的以上组) ,因此分析还有更远的距离。也许这个术语有助于澄清我所追求的。
结果什么是“核心”县?你能举一个例子说明你希望这个分组是如何工作的吗? – cybersam
我并不知道在Cypher中生成所有可能的组合的方法,尽管我已经将它作为对APOC过程的功能请求添加了。我认为您的要求中较难的部分是根据不同城市使用的组合限制某个城市的组合。这肯定需要重新检查,或者需要更好的定义限制应该如何工作。先到先得? – InverseFalcon
对不起,在自己的世界里很容易失明。一个“核心”县将是与所有其他县相邻的县。 假设我们有县A,B和C.A与B和C都相邻,但B和C不是(必然)彼此相邻。那么A就是“核心”县。 –