2017-03-09 140 views
1

使用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定縣。

我很感謝任何答案和指引,以幫助我的方式。

編輯: 經過大量搜索我認爲什麼我想要實現的是所謂的「聚類分析」,但我一直無法弄清楚如何創建羣集(我所說的以上組) ,因此分析還有更遠的距離。也許這個術語有助於澄清我所追求的。

+0

結果什麼是「核心」縣?你能舉一個例子說明你希望這個分組是如何工作的嗎? – cybersam

+0

我並不知道在Cypher中生成所有可能的組合的方法,儘管我已經將它作爲對APOC過程的功能請求添加了。我認爲您的要求中較難的部分是根據不同城市使用的組合限制某個城市的組合。這肯定需要重新檢查,或者需要更好的定義限制應該如何工作。先到先得? – InverseFalcon

+0

對不起,在自己的世界裏很容易失明。一個「核心」縣將是與所有其他縣相鄰的縣。 假設我們有縣A,B和C.A與B和C都相鄰,但B和C不是(必然)彼此相鄰。那麼A就是「核心」縣。 –

回答

0

我去的解決方案是密碼查詢和PHP代碼的組合。

我開始得到:County -nodes之間的所有關係,並運行一個陣列排列在PHP獲取可能的變化。

從這些變化中,我創建了:Cluster - 與:Contains關係到相應:Counties的節點。

然後我給每個:Cluster排名基於機羣組合人口。

然後我遍歷了:Cluster的選擇排名最高的,和未標示previoulsly,刪除所有其他:Cluster的與相關的高級:Cluster一個:County

所以,最後 - 我沒有找到一種方法來查詢的Neo4j與CYPHER找我wanted-

相關問題