已导入自定义电影CSV,如何在Neo4J中可视化共享电影的演员关系?
Neo4J中可视化共享电影的演员关系
背景信息
我有一个自定义电影数据CSV,结构如下:
id,title,media_type,original_language,actor 1002185.0,A Million Miles Away,movie,en,Emma Fassler 447332.0,A Quiet Place,movie,en,Noah Jupe
我希望在Neo4J中可视化共享一部或多部电影的演员之间的关系,目前已完成以下操作:
1. 导入数据
导入Movie节点:
LOAD CSV WITH HEADERS FROM "file:///movies_neo_graph/part-00000-c5c5507e-5501-4adb-87fc-38be1d908076-c000.csv" AS row CREATE (m:Movie) SET m = row, m.id = toInteger(row.id), m.title = toString(row.title), m.language = toString(row.original_language);
导入Actor节点:
LOAD CSV WITH HEADERS FROM "file:///movies_neo_graph/part-00000-c5c5507e-5501-4adb-87fc-38be1d908076-c000.csv" AS row CREATE (a:Actor) SET a = row, a.name = toString(row.actor), a.movie_id = toInteger(row.id);
2. 建立Movie与Actor的关系
MATCH (a:Actor),(m:Movie) WHERE a.movie_id = m.id CREATE (a)-[:ACTED_IN]->(m);
当前问题
作为Neo4J新手,我尝试了以下查询,但返回的是表格而非图可视化结果:
MATCH (a:Actor)-[:ACTED_IN]->(m:Movie) RETURN a.name AS actor, COLLECT(DISTINCT m.title) AS movies_acted, COUNT(m.title) AS movies_cnt ORDER BY movies_cnt DESC LIMIT 50;

解决思路
一、先修正数据模型(关键)
当前导入方式会导致同一个演员演多部电影时生成多个Actor节点,这会影响后续的关系分析。建议重新导入数据,用MERGE代替CREATE来确保同一姓名的演员只有一个节点:
LOAD CSV WITH HEADERS FROM "file:///movies_neo_graph/part-00000-c5c5507e-5501-4adb-87fc-38be1d908076-c000.csv" AS row // 合并相同姓名的Actor节点 MERGE (a:Actor {name: toString(row.actor)}) // 合并相同ID的Movie节点 MERGE (m:Movie {id: toInteger(row.id)}) // 设置Movie属性 SET m.title = toString(row.title), m.language = toString(row.original_language) // 建立演员参演电影的关系 CREATE (a)-[:ACTED_IN]->(m);
二、编写可视化查询
要得到图可视化,需要直接返回节点和关系,而非聚合后的表格数据:
1. 通过电影节点展示演员合作关系
这个查询会找出所有共同参演同一部电影的演员对,通过中间的电影节点连接:
MATCH (a1:Actor)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(a2:Actor) WHERE a1 <> a2 RETURN a1, m, a2 LIMIT 100;
2. 直接展示演员之间的合作关系(跳过电影节点)
如果希望看到演员之间直接连线,可以先创建CO_STARRED_WITH关系,再查询:
// 批量创建演员合作关系 MATCH (a1:Actor)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(a2:Actor) WHERE a1 <> a2 MERGE (a1)-[:CO_STARRED_WITH {shared_movies: collect(DISTINCT m.title)}]->(a2); // 查询并可视化合作关系 MATCH (a1:Actor)-[:CO_STARRED_WITH]-(a2:Actor) RETURN a1, a2 LIMIT 100;
三、切换到可视化视图
执行上述查询后,在Neo4J浏览器顶部点击Graph标签(默认显示的是Table标签),就能看到图形式的可视化结果了。
内容的提问来源于stack exchange,提问作者Tadeo
相关产品推荐
相关产品推荐

