Neo4j数据库中的共生分析



假设我有一个数据库,其中包含Candyjars和Candies两种类型的节点。每个糖果罐(Candyjar1,Candyjar2…(都有不同类型的不同数量的糖果:CandyRed,CandyGreen等。

现在让我们假设这里的最终游戏是找出各种类型的糖果一起出现的概率有多大,以及它们之间的协方差。然后我想得到每个CandyType之间的关系,以及相关的共现概率和协方差。让我们将这种关系称为OCCURS_WITH,以便Candtype1-[COCURS_WITH]->Candytype2和Candytype1-[COVARIES]->Candytype2

我会制作一个以CandiTypes和CandyJars为节点的数据库,建立一个关系(cj:CandyJar(-[r:CONTAINS]->(ct:Candytype(,其中r可以具有要设置的属性";多少";一种类型的糖果都被包在罐子里。

我的问题是,我不明白如何在Cypher中进行查询,以最佳方式分配OCCURS_WITH关系。我是否必须对每一对Candies进行迭代,计算candyjars中共出现的对的数量超过Candyjar的数量?有没有办法把所有可能的配对都放在一起?当我尝试做:

MATCH  (ct1:Candytype)<-[r1:CONTAINS]-(cj:Candyjar)-[r2:CONTAINS]->(ct2:Candytype)
WHERE ct1<>ct2 AND ct1.name="CandyRed" AND ct2.name="CandyBlue"
RETURN  ct1,r1,count(r1),cj1,ct2,r2,count(r2)
LIMIT 5

我无法计算出我需要表达共现概率的共现糖果的关系。

我是否必须使用类似python的东西来进行计算,而不是尝试在Cypher中发表声明?

要计算CandyRed和CandyBlue同时出现的次数,可以使用以下Cypher语句:

MATCH  (ct1:Candytype)<-[:CONTAINS]-(:Candyjar)-[:CONTAINS]->(ct2:Candytype)
WHERE ct1.name="CandyRed" AND ct2.name="CandyBlue"
RETURN  ct1,ct2, count(*) AS coOccur
LIMIT 5

如果你想要一个比较所有糖果类型的查询,你可以使用:

MATCH  (ct1:Candytype)<-[:CONTAINS]-(:Candyjar)-[:CONTAINS]->(ct2:Candytype)
WHERE id(ct1) < id(ct2)
RETURN  ct1,ct2, count(*) AS coOccur
LIMIT 5

最新更新