2017-03-09 17 views
1

Neo4j/Cypherを使用すると、1つのタイプのラベル(:郡)のみで構成されるかなり小さなデータセット(290ノード)が得られます。プロパティの計算に基づくグループノード

プロパティは次のようになります。County({countyCode、countyName、population})。 には次のようなインデックスがあります:County.countyCode

それぞれ:郡は1 + Nその他の国に関連しています:郡:関係:ADJACENT_TO。

私が達成しようとしているのは、母集団プロパティの所与の値に合った郡の組み合わせを見つけることです(最小100000、最大120000)。

以下のクエリでは、私はペアを見つけるまでは得ましたが、3つ以上の郡の組み合わせは見つかりませんでした。

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)郡(v)とは異なる組み合わせで接続されている可能性があります。

「コア」郡が直接指定されていない組み合わせでは、どの郡も存在できません:ADJACENT_TO指定された郡。

私は途中で私を助けるための任意の答えとポインタをありがとうと思います。

EDIT: 検索の多くの後、私は私が達成したいことは、「クラスター分析」と呼ばれていることを考えるが、私は(私は上記の基と呼んだもの)クラスタを作成する方法を見つけ出すことができませんでしたしたがって、分析はまださらに一歩進んでいます。たぶん用語は、私が何をしているのかを明確にするのに役立ちます。

+0

をwanted-結果を見つけるために、CYPHERでのNeo4jを照会するための方法を見つけることができませんでした「コア」郡とは何ですか?このグループ化をどのように機能させるかの例を挙げることができますか? – cybersam

+0

私は、Cypherだけで、入力リストのすべての可能な組み合わせを生成する方法を認識していませんが、APOCプロシージャへの機能要求として追加しました。あなたの要求の難しい部分は、別の都市で使用されている組み合わせに基づいて、ある都市の組み合わせを制限することだと思います。それは間違いなく再審査、またはその制限がどのように機能すべきかを定義するより良い要件を必要とします。最初に最初に来る? – InverseFalcon

+0

申し訳ありませんが、あなた自身の世界で盲目になるのはとても簡単です。 「コア」郡は、その組み合わせの他のすべての郡に隣接する郡です。 A、B、C郡があるとします。AはBとCの両方に隣接していますが、BとCは必ずしも隣接していません。その後、Aは「コア」郡になります。 –

答えて

0

私が行った解決策は、サイファークエリとPHPコードの組み合わせでした。

まず、:Countyノード間の関係をすべて取得し、PHPで配列置換を実行して、バリエーションを得ることから始めました。

これらのバリエーションから、それぞれ:Countiesとの関係が:Contains:Cluster - ノードを作成しました。

次に、それぞれに、クラスタの組み合わせの母集団に基づいて順位を付けました。

は、それから私は:County高位の:Clusterに関連してS「の他のすべての:Clusterを削除、マークされ、最高ではない-previoulsly位の-と-を選択S」の:Clusterを反復処理しました。

だから、結論する - 私は

関連する問題