NEO4J 如何用关系制作图表
NEO4J How to make graph with relationships
我对 NEO4j 完全陌生,这是我第一次在我的硕士课程中使用它。我阅读了文档并在线观看了教程,但似乎无法弄清楚如何以我想要的方式表示我的节点。
我有一个包含 3 列的数据框,第一列代表页面名称,第二列也代表页面名称,第三列代表这两个页面之间的相似度得分。我如何在 NEO4J 中创建一个图表,其中节点是我的唯一页面名称,如果它们之间存在相似性分数,则绘制节点之间的关系(因此,如果 sim-score 为 0,则它们不绘制关系) ?我想将相似度分数显示为关系的文本。
此外,我想知道是否有一种简单的方法可以找出哪个节点与其他节点的关系最多?
为了清楚起见,我添加了我的 DF header 的屏幕截图 https://imgur.com/a/pg0knh6。我希望任何人都可以帮助我,在此先感谢!
编辑:我尝试过的
LOAD CSV WITH HEADERS FROM 'file:///wiki-small.csv' AS line
MERGE (p:Page {name: line.First})
MERGE (p2:Page {name: line.Second})
MERGE (p)-[r:SIMILAR]->(p2)
ON CREATE SET r.similarity = toFloat(line.Sim)
下一个块删除相似关系为 0
MATCH ()-[r:SIMILAR]->() WHERE r.Sim=0
DELETE r
部分有效。因为它给了我正确的节点结构,但没有给我作为关系标签的相似性分数。我还需要弄清楚如何找到连接最多的节点。
第一个问题:
How can I create a graph in NEO4J where the nodes are my unique page names and the relationships between nodes are drawn if there is a similarity score between them (so if the sim-score is 0 they don’t draw a relationship)?
我认为更好的方法是在将 similarity = 0.0 的行提取到 Neo4j 之前提前删除它们。这可能是可行的吗?如果你的数据集不是那么大,我觉得在Python里面做起来还是很快的。否则,您提供的插入数据后删除的解决方案是一个选项。
对于大数据集,使用 apoc.periodic.iterate 或 USING PERIODIC COMMIT
.
加载数据可能会更好
第二个问题
I want to know if there is an easy way to figure out which node had the most relationships to other nodes?
这是一个简单的查询。同样,您可以通过玩 Cypher 或使用 APOC 库来完成:
# Plain Cypher
MATCH (n:Page)-[r:SIMILAR]->()
RETURN n.name, count(*) as cat
ORDER BY cnt DESC
# APOC
MATCH (n:Page)
RETURN apoc.node.degree(n, "SIMILAR>") AS output;
编辑
要在 Neo4j Desktop 或其他 Web 界面中显示相似度分数,您可以简单地:单击相似度箭头 --> 在显示标签的 运行 单元格顶部,单击相似度标签标记--> 在 运行 单元格的底部,Caption 的右侧,select 您要显示的 属性 (相似度 在你的情况下)
然后所有的箭头都以相似度分数显示
对于第二个问题:我认为您应该明确区分存储数据的方式和可视化数据的方式。将相似性分数(SIMILARITY 边的 属性)作为“标签”最好使用适当的可视化库或平台来处理。我们的 (Graphileon) 可能是这样一个平台,尽管还有其他平台。
我们提供了使用所谓的选择器来“设计”边缘的可能性,例如
"label":"(%).property.simScore"
将使用 simScore 作为标签。最重要的是你可以做这样的事情
"width":"evaluate((%).properties.simScore < 0.500 ? 3 : 10)"
或
"fillColor":"evaluate((%).properties.simScore < 0.500 ? grey : red)"
从视觉上区分高模拟分数。
完全披露:我为 Graphileon 工作。
我对 NEO4j 完全陌生,这是我第一次在我的硕士课程中使用它。我阅读了文档并在线观看了教程,但似乎无法弄清楚如何以我想要的方式表示我的节点。
我有一个包含 3 列的数据框,第一列代表页面名称,第二列也代表页面名称,第三列代表这两个页面之间的相似度得分。我如何在 NEO4J 中创建一个图表,其中节点是我的唯一页面名称,如果它们之间存在相似性分数,则绘制节点之间的关系(因此,如果 sim-score 为 0,则它们不绘制关系) ?我想将相似度分数显示为关系的文本。
此外,我想知道是否有一种简单的方法可以找出哪个节点与其他节点的关系最多?
为了清楚起见,我添加了我的 DF header 的屏幕截图 https://imgur.com/a/pg0knh6。我希望任何人都可以帮助我,在此先感谢!
编辑:我尝试过的
LOAD CSV WITH HEADERS FROM 'file:///wiki-small.csv' AS line
MERGE (p:Page {name: line.First})
MERGE (p2:Page {name: line.Second})
MERGE (p)-[r:SIMILAR]->(p2)
ON CREATE SET r.similarity = toFloat(line.Sim)
下一个块删除相似关系为 0
MATCH ()-[r:SIMILAR]->() WHERE r.Sim=0
DELETE r
部分有效。因为它给了我正确的节点结构,但没有给我作为关系标签的相似性分数。我还需要弄清楚如何找到连接最多的节点。
第一个问题:
How can I create a graph in NEO4J where the nodes are my unique page names and the relationships between nodes are drawn if there is a similarity score between them (so if the sim-score is 0 they don’t draw a relationship)?
我认为更好的方法是在将 similarity = 0.0 的行提取到 Neo4j 之前提前删除它们。这可能是可行的吗?如果你的数据集不是那么大,我觉得在Python里面做起来还是很快的。否则,您提供的插入数据后删除的解决方案是一个选项。
对于大数据集,使用 apoc.periodic.iterate 或 USING PERIODIC COMMIT
.
第二个问题
I want to know if there is an easy way to figure out which node had the most relationships to other nodes?
这是一个简单的查询。同样,您可以通过玩 Cypher 或使用 APOC 库来完成:
# Plain Cypher
MATCH (n:Page)-[r:SIMILAR]->()
RETURN n.name, count(*) as cat
ORDER BY cnt DESC
# APOC
MATCH (n:Page)
RETURN apoc.node.degree(n, "SIMILAR>") AS output;
编辑 要在 Neo4j Desktop 或其他 Web 界面中显示相似度分数,您可以简单地:单击相似度箭头 --> 在显示标签的 运行 单元格顶部,单击相似度标签标记--> 在 运行 单元格的底部,Caption 的右侧,select 您要显示的 属性 (相似度 在你的情况下)
然后所有的箭头都以相似度分数显示
对于第二个问题:我认为您应该明确区分存储数据的方式和可视化数据的方式。将相似性分数(SIMILARITY 边的 属性)作为“标签”最好使用适当的可视化库或平台来处理。我们的 (Graphileon) 可能是这样一个平台,尽管还有其他平台。
我们提供了使用所谓的选择器来“设计”边缘的可能性,例如
"label":"(%).property.simScore"
将使用 simScore 作为标签。最重要的是你可以做这样的事情
"width":"evaluate((%).properties.simScore < 0.500 ? 3 : 10)"
或
"fillColor":"evaluate((%).properties.simScore < 0.500 ? grey : red)"
从视觉上区分高模拟分数。
完全披露:我为 Graphileon 工作。