LoginSignup
5
4

More than 5 years have passed since last update.

Neo4jとは何なのか、0から調べて相関図を作ってみた

Last updated at Posted at 2018-10-04

Neo4jとは?

  • 人と物、物と人など、様々なオブジェクトとの関係性を扱えるデータベースシステム

  • Wikipediaがいい例

    例: 新垣結衣が出演しているドラマを探す→逃げ恥が代表作→逃げ恥の出演者は→星野源→星野源の楽曲は→SUN→SUNが主題歌のドラマは→心がポキッとね→(以下ループ)

  • データ構造は従来のRDBとは違い、GraphDB(NoSQL)という形式。大量のデータを扱える上にメンテナンス不要

Neo4jことはじめ

Neo4jを使い倒してWebメディアを作った話

クエリはどうするか

データベースの一種なのでクエリ(問い合わせ言語)が存在する

クエリはCypherという言語を使う。SQLのようなもの。

neo4j入門 Cypherクエリと使い方の具体例

何者の相関図を作ってみる

関係性を可視化できる特性を生かすと、コードベースで相関図を簡単に作ることができます。

佐藤健主演の映画「何者」の人物相関図を作ってみました。

例えばこんなコードで。上から地道に実行すると同じものができます。足りないところあったらすみません。
コメントは//でできます

// ノード(登場人物)を追加
CREATE (:Character{name:"二宮拓人"}), (:Character{name:"田名部瑞月"}), (:Character{name:"神谷光太郎"}), (:Character{name:"サワ先輩"}), (:Character{name:"小早川理香"}), (:Character{name:"宮本隆良"});

// 関係性を追加
MATCH (a:Character{name:"二宮拓人"}),(b:Character{name:"田名部瑞月"}) CREATE UNIQUE (a) -[:片思い] -> (b);
MATCH (a:Character{name:"二宮拓人"}),(c:Character{name:"サワ先輩"}) MERGE (a) -[:慕っている]-> (c);
MATCH (a:Character{name:"二宮拓人"}),(d:Character{name:"小早川理香"}) MERGE (a) -[:冷ややかな目で見る]-> (d);
MATCH (a:Character{name:"二宮拓人"}),(e:Character{name:"宮本隆良"}) MERGE (a) -[:冷ややかな目で見る]-> (e);
MATCH (a:Character{name:"宮本隆良"}),(b:Character{name:"二宮拓人"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"宮本隆良"}),(b:Character{name:"田名部瑞月"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"宮本隆良"}),(b:Character{name:"神谷光太郎"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"二宮拓人"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"田名部瑞月"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"神谷光太郎"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"宮本隆良"}) MERGE (a) -[:同棲中]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"宮本隆良"}) MERGE (b) -[:同棲中]-> (a);
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"二宮拓人"}) MERGE (a) -[:ルームメイト]-> (b);
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"二宮拓人"}) MERGE (b) -[:ルームメイト]-> (a);
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"田名部瑞月"}) MERGE (a) -[:元カノ]-> (b);
// クエリ内で"?"は使えない
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"田名部瑞月"}) MERGE (b) -[:まだ好きかも]-> (a);

neo4j-何者相関図.jpg

ググるとCypherの文法について書かれたページがいくつも出てきます。ググってみてください。

まだ少ししか触ってないので、間違っているところがあれば編集リクエストください。

ちなみに、JavaScriptではD3.jsというものと組み合わせて使うといいことがあるみたいです。そのうち書きます。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4