GraphGists

简介

在观看西雅图周围的戏剧后,我开始对剧团、戏剧、演员、导演和剧组之间的关系感到好奇。这个GraphGist开始探索其中的一些数据,使用西雅图莎士比亚公司的制作历史。

模型

Model

  • **人物**:代表一个人!在这个简化的模型中,人物通过姓名来区分,可能会有“撰写”、“导演”等关系。

  • **戏剧**:代表一部戏剧作品 - 人物撰写了戏剧,戏剧可能在制作中被上演。属性可能包括写作年份、出版年份和类型。

  • **制作**:代表一部特定戏剧的演出或一系列演出。制作通常由人物导演,可能包含指示开始和结束年份以及月份的属性,以及是否作为巡回演出或在公园中进行的属性。

图可视化

查询

猜猜哪部戏剧演出次数最多?

MATCH (prod:Production)-->(play:Play)<-[WROTE]-(w:Person)
WHERE w.name = "William Shakespeare"
RETURN play.name, count(prod.title) as n_productions
order by n_productions desc

《罗密欧与朱丽叶》有11部制作!这部戏剧位居榜首可能并不令人意外 - 让我们来看看这些制作。

看起来《罗密欧与朱丽叶》是一部可靠的巡回演出戏剧。如果我去掉巡回演出和公园表演,最受欢迎的戏剧列表会发生什么变化?

MATCH (prod:Production)-->(play:Play)<-[WROTE]-(w:Person)
WHERE w.name = "William Shakespeare"
and (prod.onTour = False and prod.inParks = False)
RETURN play.name, count(prod.title) as n_productions
order by n_productions desc

对于莎士比亚的戏剧,我还对类型感到好奇 - 喜剧和历史剧的演出频率如何?

MATCH (prod:Production)-->(play:Play)<-[WROTE]-(w:Person)
WHERE w.name = "William Shakespeare"
RETURN play.genre, count(prod.title) as n_productions
order by n_productions desc

哪些莎士比亚戏剧还没有被西雅图莎士比亚公司演出?

MATCH (writer:Person)-[WROTE]->(play:Play)
WHERE writer.name = "William Shakespeare"
WITH play
MATCH (play)
WHERE NOT (play)<-[:STAGED]-()
RETURN play.name, play.genre

只有八部!

利用Neo4j的灵活数据模型

在一些情况下,制作是“改编”、“构思”或“编排”的,而不是写作的 - 《亨利四世》第一部分和第二部分被组合成单场演出,几部莎士比亚戏剧的场景被组合成单场演出等等 - Neo4j的灵活模式允许使用独特的关联标签来保留这些特殊情况。

MATCH p=(person:Person)-[r]-(play:Play)
WHERE ANY(x in relationships(p) WHERE type(x) <> "WROTE")
AND ANY (x in relationships(p) WHERE type(x) <> "DIRECTED")
RETURN person.name, type(r), play.name;