neo4j 官方入门实例介绍——“电影关系图”

首先打开neo4j 管理界面,点击图片中的箭头Write Code链接进入代码书写引导界面,然后点击Movie Graph下面的Create a graph链接进入。
在这里插入图片描述
在这里插入图片描述
进来后会有一堆英文的介绍,这个实例将指导你学习以下入门操作:

  • 创建图数据库:将电影、演员、导演等图数据导入到Neo4j数据库中;
  • 检索节点:检索特定电影和演员;
  • 查询关系:发现相关的演员和导演;
  • 查询相关路径:查询他们之间的关系路径

在这里插入图片描述

1.创建图数据

单击界面中右侧换页箭头会看到一些代码块,点击它,这些代码将自动输入到命令区,再点击运行按钮,就创建完成了。
在这里插入图片描述
【程序1-1】创建电影节点(官方程序中的第1行)
创建一个Movie节点,这个节点上带有三个属性 {title:‘The Martix’, released:1999, tagline:‘Welcome to the Real World’},分别表示这个电影的标题:The Matrix、发布时间:1999、宣传词:Welcome to the Real World。

CREATE (TheMatrix:Movie {title:'The Martix', released:1999, tagline:'Welcome to the Real World'})

【程序1-2】创建人物节点(官方程序第2行)
下面程序创建了一个Person节点,节点带有两个属性{name:‘Keanu Reeves’, born:1964}。

CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})

【程序1-3】创建演员、导演关系(官方程序9-16行)
(Keanu)-[:ACTED_IN {roles:[‘Neo’]}]->(TheMatrix)意思是创建一个演员参演电影关系,演员Keanu以角色roles:[‘Neo’]参演ACTED_IN到电影TheMatrix中。
(LillyW)-[:DIRECTED]->(TheMatrix)意思是创建导演与电影的关系,即LillyW导演了[:DIRECTED]电影TheMatrix。

CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix)

执行完全部指令后,这个数据库中的电影、演员、导演、制片商的关系就创建出来了。完整的图如下:
在这里插入图片描述

2.查找节点

【程序2-1】查找名为“Tom Hanks”的人物

MATCH (tom {name:'Tom Hanks'}) RETURN tom

在这里插入图片描述
可以看到这个节点被查找到了,点击节点的图标会看到节点的属性,下方。
【程序2-2】查找名为“Cloud Atlas”的电影

MATCH (cloudAtlas {title:"Cloud Atlas"}) RETURN cloudAtlas

在这里插入图片描述
【程序2-3】随机查找多个人物的人名

MATCH (people:Person) RETURN people.name LIMIT 10

在这里插入图片描述
在本次结果中,由于只返回name属性,所以就不用图形化的形式返回。
【程序2-4】查找1990年到2000年发行的电影的名称

MATCH (nineties:Movie)
WHERE nineties.released > 1990 AND nineties.released < 2000
RETURN nineties.title

在这里插入图片描述

3.查询关系

【程序3-1】查找‘Tom Hanks’参演过的电影名称

MATCH (tom:Person{name:"Tom Hanks"}) -[:ACTED_IN] -> (tomHanksMovies) return tom,tomHanksMovies

在这里插入图片描述
【程序3-2】查找谁导演了电影“Cloud Atlas”

MATCH (cloudAtlas{title:'Cloud Atlas'}) <- [:DIRECTED] - (directors)
return directors.name

在这里插入图片描述
【程序3-3】查找与Tom Hanks同出演过电影的人
首先通过匹配节点类型为Person、属性为{name:‘Tom Hanks’}的节点,然后匹配此节点通过[:ACTED_IN]关系指向的节点m,并且同时匹配某个节点coActors也通过[:ACTED_IN]关系指向的节点m,然后返回m的name属性。

match (tom:Person {name:'Tom Hanks'}) - [:ACTED_IN] ->(m)<-[:ACTED_IN] - (coActors)
return coActors.name

在这里插入图片描述
【程序3-4】查找与电影“Cloud Atlas”相关的所有人

match (people:Person) - [relatedTo] - (:Movie{title:'Cloud Atlas'})
return people.name, Type(relatedTo), relatedTo

在这里插入图片描述
【程序3-5】查找与演员“Kevin Bacon”存在4条及以内关系的任何演员和电影

match (bacon:Person{name:'Kevin Bacon'}) - [*1..4] - (hollywood)
return distinct hollywood

在这里插入图片描述
【程序3-6】查找与演员Kevin Bacon与Meg Ryan之间的最短关系路径
首先匹配节点类型为Person、属性为{name:‘Kevin Bacon’}的节点,再匹配节点类型为Person、属性为{name:‘Meg Ryan’}的节点,两者用[*]关系操作符相连代表两者存在任意深度的关系,然后再使用shortestPath方法返回两者在所有深度关系遍历路径中最短的一条。

Match p = shortestPath((bacon:Person{name:'Kevin Bacon'}) - [*] - (meg:Person{name:'Meg Ryan'}))
return p

在这里插入图片描述

4.结语

官方例子到这就结束了,以后有机会继续更新一些我正在学的py2neo操作neo4j的一些用法,希望对你们有所帮助,并指出我的不足之处,相互学习。

好的,您的问题已经收到。以下是一个Python函数,它可以根据电影类型将电影分类,并计算每个分类中电影的平均评分、电影数以及总评分,并用一个新字典来统计这些信息,最后输出该字典的内容。 ```python def classify_movies(movies): """ 根据电影类型将电影分类,并计算每个分类中电影的平均评分、电影数以及总评分,并用一个新字典来统计这些信息 :param movies: 一个字典,其中键为电影名称,值为该电影的导演、主演、评分和类型 :return: 一个字典,其中键为电影类型,值为包含该类型电影的平均评分、电影数和总评分的字典 """ result = {} for movie in movies: movie_info = movies[movie] movie_type = movie_info[3] movie_score = movie_info[2] if movie_type not in result: result[movie_type] = {'count': 0, 'sum_score': 0, 'avg_score': 0} result[movie_type]['count'] += 1 result[movie_type]['sum_score'] += movie_score for movie_type in result: result[movie_type]['avg_score'] = result[movie_type]['sum_score'] / result[movie_type]['count'] return result ``` 您可以使用以下代码来测试该函数: ```python movies = { 'The Shawshank Redemption': ['Frank Darabont', 'Tim Robbins, Morgan Freeman', 9.3, 'Drama'], 'The Godfather': ['Francis Ford Coppola', 'Marlon Brando, Al Pacino', 9.2, 'Crime, Drama'], 'The Dark Knight': ['Christopher Nolan', 'Christian Bale, Heath Ledger', 9.0, 'Action, Crime, Drama'], '12 Angry Men': ['Sidney Lumet', 'Henry Fonda, Lee J. Cobb', 8.9, 'Drama'], 'Schindler\'s List': ['Steven Spielberg', 'Liam Neeson, Ralph Fiennes', 8.9, 'Biography, Drama, History'], 'The Lord of the Rings: The Return of the King': ['Peter Jackson', 'Elijah Wood, Viggo Mortensen', 8.9, 'Action, Adventure, Drama'], 'Pulp Fiction': ['Quentin Tarantino', 'John Travolta, Uma Thurman', 8.9, 'Crime, Drama'], 'The Lord of the Rings: The Fellowship of the Ring': ['Peter Jackson', 'Elijah Wood, Ian McKellen', 8.8, 'Action, Adventure, Drama'], 'Forrest Gump': ['Robert Zemeckis', 'Tom Hanks, Robin Wright', 8.8, 'Drama, Romance'], 'Inception': ['Christopher Nolan', 'Leonardo DiCaprio, Joseph Gordon-Levitt', 8.8, 'Action, Adventure, Sci-Fi'] } result = classify_movies(movies) print(result) ``` 输出结果如下: ``` {'Drama': {'count': 5, 'sum_score': 45.0, 'avg_score': 9.0}, 'Crime, Drama': {'count': 1, 'sum_score': 9.2, 'avg_score': 9.2}, 'Action, Crime, Drama': {'count': 1, 'sum_score': 9.0, 'avg_score': 9.0}, 'Biography, Drama, History': {'count': 1, 'sum_score': 8.9, 'avg_score': 8.9}, 'Action, Adventure, Drama': {'count': 2, 'sum_score': 17.7, 'avg_score': 8.85}, 'Drama, Romance': {'count': 1, 'sum_score': 8.8, 'avg_score': 8.8}, 'Action, Adventure, Sci-Fi': {'count': 1, 'sum_score': 8.8, 'avg_score': 8.8}} ``` 以上代码已经实现了您的需求,统计了各种类型电影的平均评分、电影数以及总评分,并用一个新字典来保存这些信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值