我对neo4j相当陌生,我有一个元组字典作为键,一些权重作为值。我需要用这个d构造一个加权图

2024-10-04 01:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

字典如下所示。虽然这是一个小例子,但它是原始数据中所有密钥对的组合。为了方便起见,我没有在这里展示。你知道吗

{(319489, 385026): 25.444444444444446, (319489, 98313): 44.0, (319489, 188429): 35.44444444444444, (319489, 188432): 32.44444444444445, (319489, 352277): 0.0, (319489, 188439): 35.22222222222222, (319489, 352281): 0.0, (319489, 196634): 23.11111111111111, (319489, 352282): 0.0, (319489, 163869): 5.666666666666667, (319489, 196638): 35.0, (319489, 421717): 0, (319489, 188456): 24.88888888888889, (319489, 90154): 13.5, (319489, 196651): 34.333333333333336, (319489, 196652): 24.11111111111111, (319489, 65585): 11.666666666666666, (319489, 417843): 0.0, (319489, 188468): 37.22222222222222, (319489, 188475): 17.0, (319489, 196678): 14.0, (319489, 16458): 20.88888888888889, (319489, 196682): 17.555555555555557, (319489, 196684): 27.555555555555557, (319489, 417867): 23.666666666666668, (319489, 417868): 24.11111111111111, (319489, 196689): 32.66666666666667, (319489, 286805): 22.666666666666668, (319489, 32854): 22.777777777777775, (319489, 352347): 21.444444444444443, (319489, 352348): 20.88888888888889, (319489, 352349): 23.11111111111111, (319489, 352350): 24.666666666666668, (319489, 163935): 10.0, (319489, 352351): 24.11111111111111, (319489, 352352): 23.333333333333332, (319489, 352353): 24.777777777777775, (319489, 352354): 23.88888888888889, (319489, 352355): 23.0, (319489, 73831): 22.5, (319489, 196714): 27.222222222222225, (319489, 90224): 0.0, (319489, 196722): 37.55555555555556, (319489, 163955): 19.333333333333332, (319489, 196723): 28.444444444444446, (319489, 196726): 36.0, (319489, 24698): 0.0, (319489, 24699): 0.0, (319489, 114812): 9.666666666666666}

如果有10个介于1-10之间的值,则数据具有如下所示的值组合:

{[(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (6, 7), (6, 8), (6, 9), (6, 10), (7, 8), (7, 9), (7, 10), (8, 9), (8, 10), (9, 10)]}

这样可以确保在没有方向的all-to-all图中,每个节点都有一个关联的值。你知道吗

现在我的问题是在neo4j或任何图结构上表示,这样我就可以对具有相同权重的节点进行分组。你知道吗

在neoo4j上用图形表示这些数据的任何帮助都是有用的。你知道吗

另外,我正在使用python编写代码,如果我能直接找到一个带有neo4j restclient之类的连接器的解决方案,这样我就可以在循环数据的同时构建图形,这会很方便。你知道吗


Tags: to数据代码图形原始数据字典节点密钥
1条回答
网友
1楼 · 发布于 2024-10-04 01:29:28

这里有一种方法。你知道吗

如果每个权重都有一个唯一的Weight节点,并且每个Weight节点都连接到每个具有相同权重的Tuple节点,则很容易找到具有相同权重的Tuple节点。而且,为了避免反复存储相同的元组值,还可以为每个不同的值设置唯一的Key节点。你知道吗

例如,对于数据的子集:

CREATE
  (k1:Key {value: 319489}), (k2:Key {value: 385026}),
  (k3:Key {value: 98313}),  (k4:Key {value: 188432}),
  (k5:Key {value: 188429}), (k6:Key {value: 352277}),
  (k7:Key {value: 188439}), (k8:Key {value: 352281}),
  (k9:Key {value: 196634}), (k10:Key {value: 352282}),
  (k11:Key {value: 163869}),

  (w1:Weight {value: 25.444444444444446}), 
  (w2:Weight {value: 44.0}), 
  (w3:Weight {value: 35.44444444444444}),
  (w4:Weight {value: 32.44444444444445}),
  (w5:Weight {value: 0.0}),
  (w6:Weight {value: 35.22222222222222}), 
  (w7:Weight {value: 23.11111111111111}), 
  (w8:Weight {value: 5.666666666666667}),

  (t1:Tuple {id: 1})-[:WEIGHT]->(w1),
  (t2:Tuple {id: 2})-[:WEIGHT]->(w2),
  (t3:Tuple {id: 3})-[:WEIGHT]->(w3),
  (t4:Tuple {id: 4})-[:WEIGHT]->(w4),
  (t5:Tuple {id: 5})-[:WEIGHT]->(w5),
  (t6:Tuple {id: 6})-[:WEIGHT]->(w6),
  (t7:Tuple {id: 7})-[:WEIGHT]->(w5),
  (t8:Tuple {id: 8})-[:WEIGHT]->(w7),
  (t9:Tuple {id: 9})-[:WEIGHT]->(w5),
  (t10:Tuple {id: 10})-[:WEIGHT]->(w8),

  (k1)<-[:LOW]-(t1)-[:HIGH]->(k2),
  (k1)<-[:LOW]-(t2)-[:HIGH]->(k3),
  (k1)<-[:LOW]-(t3)-[:HIGH]->(k4),
  (k1)<-[:LOW]-(t4)-[:HIGH]->(k5),
  (k1)<-[:LOW]-(t5)-[:HIGH]->(k6),
  (k1)<-[:LOW]-(t6)-[:HIGH]->(k7),
  (k1)<-[:LOW]-(t7)-[:HIGH]->(k8),
  (k1)<-[:LOW]-(t8)-[:HIGH]->(k9),
  (k1)<-[:LOW]-(t9)-[:HIGH]->(k10),
  (k1)<-[:LOW]-(t10)-[:HIGH]->(k11)

要查找权重值为Tuple的所有0.0节点,请执行以下操作:

MATCH (w:Weight)<-[:WEIGHT]-(t)
WHERE w.value = 0.0
RETURN t;

还要获取元组值:

MATCH (w:Weight)<-[:WEIGHT]-(t), (low)<-[:LOW]-(t)-[:HIGH]->(high)
WHERE w.value = 0.0
RETURN t, low, high;

为了提高上述查询的效率,您应该在:Weight(value)上创建索引:

CREATE INDEX ON :Weight(value);

使用MERGE重用现有的Key或创建新的:Key(value)时,还需要在:Key(value)上建立索引。你知道吗

相关问题 更多 >