并集与交集
这个 Gist 旨在回答 Neoj4 邮件列表上的这个问题
我有一些网络,其中有很多“中心(egos)”出现在这些网络中。这些中心反过来又出现在许多不同的网络中——基本的多对多关系,在图数据库的背景下,这是一个二分网络。实际上,我的数据看起来像这样(请原谅我接下来可能写的任何愚蠢格式)
Network 1: [Ego 1, Ego 2, Ego, 3, Ego 4] Network 2: [Ego 2, Ego 4, Ego, 5, Ego 6] Network 3: [Ego 4, Ego 5, Ego, 7, Ego 8, Ego 9, Ego 10]
我希望从这些数据中获得的是以下内容:
我想知道网络1与网络2和3的关系。具体来说,我想以一种特定的方式来衡量重叠——两个网络交集中心的计数除以并集中心的计数。换句话说,比较网络1和网络2将产生以下步骤:
交集 = [中心 2, 中心 4],共 2 个并集 = [中心 1, 中心 2, 中心 3, 中心 4, 中心 5, 中心 6],共 6 个交集/并集 = 1/3
然后我会说这两个网络有 33% 的相似度(对于我想要实现的目标,我愿意接受其他计算相似度的方法)。
CREATE (n1:Network{name:'Network1'})
CREATE (n2:Network{name:'Network2'})
CREATE (n3:Network{name:'Network3'})
CREATE (e1:Ego{name:'Ego1'})
CREATE (e2:Ego{name:'Ego2'})
CREATE (e3:Ego{name:'Ego3'})
CREATE (e4:Ego{name:'Ego4'})
CREATE (e5:Ego{name:'Ego5'})
CREATE (e6:Ego{name:'Ego6'})
CREATE (e7:Ego{name:'Ego7'})
CREATE (e8:Ego{name:'Ego8'})
CREATE (e9:Ego{name:'Ego9'})
CREATE (e10:Ego{name:'Ego10'})
CREATE (n1)<-[:APPEARANCE]-(e1)
CREATE (n1)<-[:APPEARANCE]-(e2)
CREATE (n1)<-[:APPEARANCE]-(e3)
CREATE (n1)<-[:APPEARANCE]-(e4)
CREATE (n2)<-[:APPEARANCE]-(e2)
CREATE (n2)<-[:APPEARANCE]-(e4)
CREATE (n2)<-[:APPEARANCE]-(e5)
CREATE (n2)<-[:APPEARANCE]-(e6)
CREATE (n3)<-[:APPEARANCE]-(e4)
CREATE (n3)<-[:APPEARANCE]-(e5)
CREATE (n3)<-[:APPEARANCE]-(e7)
CREATE (n3)<-[:APPEARANCE]-(e8)
CREATE (n3)<-[:APPEARANCE]-(e9)
CREATE (n3)<-[:APPEARANCE]-(e10)
网络1与其他网络的交集
MATCH (network:Network {name: 'Network1'})<-[:APPEARANCE]-(ego:Ego)-[:APPEARANCE]->(alter_network:Network) return distinct(alter_network.name), count(ego), collect(ego.name)
网络1与网络2的并集
MATCH (n1:Network {name: 'Network1'}),(ego:Ego),(n2:Network{name:'Network2'})
WHERE (n1)<-[:APPEARANCE]-(ego) OR (n2)<-[:APPEARANCE]-(ego)
return count(ego), collect(ego.name)
此页面有帮助吗?