Python Neo4j インストール

Python学習【365日チャレンジ!】153日目のマスターU(@Udemy11)です。

この時期になるとうなぎが食べたくなりますが、いい値がするのでなかなか食べることができません。

なので、自分で釣って食べたい!と思っていますが、夏の夜にのんびり釣りをする時間もないんですよね。
仕掛けを投げて、待っている時間がもったいなく感じてしまいます。

無性にうなぎを食べたくなったときには、ミミズを探してうなぎ釣りに行こうと思います。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、neo4jのインストール方法を紹介しました。

Neo4jのインストールについてはこちらの記事をごらんください。

今日は、Neo4jブラウザーからグラフデータベースを操作していきます。

Neo4jブラウザーからの操作

まずはNeo4jブラウザーからコードを実行してデータベースを作っていきましょう

CREATE (master:Person {name:"MasterU"})
RETURN master

CREATEでPersonクラスからnameがMasterUというmasterオブジェクトを生成して、masterを表示するコードです。

表示結果は次の図になります。

Neo4j ブラウザー

ぽつんと真ん中に1つMasterUの文字が入った円が表示されています。

次にMasterUに繋がりを作ってみます。

MATCH (master:Person {name:"MasterU"})
CREATE (master)-[like:LIKE]->(fishing:Sports {name:"Fishing"})
RETURN master,like,fishing

1行目のMATCHで、nameがMasterUのmasterオブジェクトを取り出しています。

次の行のCREATEmasterが好き(like)だという関係を持っているfishingオブジェクトを、SportsクラスからFishingというnameを持たせて作成しています。

3行目で3つの関係を表示させています。

Neo4j ブラウザーから操作

次にMasterUの友達を登録してみます。

MATCH (master:Person {name:"MasterU"})
FOREACH (name in ["Mike", "Tom", "Casy", "Anna"] |
  CREATE (master)-[:FRIEND]->(:Person {name:name}))

1つ前のコードと同様に、1行目のMATCHで、nameがMasterUのmasterオブジェクトを取り出します。

次にFOREACHループを使って、MasterUのmasterオブジェクトにFRIEND関係を持った4人の名前を追加します。

出力結果には、図は表示されずにコードの実行内容が表示されます。

Neo4j ブラウザーから操作

次に今登録した関係を表示させます。

MATCH (master {name:"MasterU"})-[:FRIEND]->(yourfriends)
RETURN master,yourfriends

MATCHでMasterUとFRIENDの関係を持った人をyourfriendsとして、MasterUとyourfriendsとの関係を表示させています。

Neo4j ブラウザーから操作

ちなみに、今回書いた【関係を表示するコード】と1つ前の【データを登録するコード】を一緒に実行したらエラーになりました。

相変わらず、わけがわからないまま試しているので、知らない間にデータを重複して登録してしまっていて、12人ものfriendsが表示されたりもしました。

なので、一旦データを削除して最初からやり直すなど、ここまで実践するのにかなり時間を要してしまいました。

参考までに、すべてのデータを削除するコードはMATCH (n) DETACH DELETE nです。
コード入力欄に入力して実行すれば、データがすべて削除されました。

それでは、先にすすみましょう。

これまで作成した関係に加えてFishingのProfessionalであるLeonさんという新しい関係を作ってみます。

MATCH (fishing:Sports {name:"Fishing"})
MATCH (tom:Person {name:"Tom"})
CREATE (tom)-[:FRIEND]->(:Person:Professional {name:"Leon"})-[:GO_WITH]->(fishing)

1行目でSportsクラスのFishingというnamefishingオブジェクトを取り出しています。

2行目は、PersonクラスのTomというnametomオブジェクトを取り出しています。

3行目は、tomには、LeonというnameのProfessionalな友達がいて、Leonさんは常にfishingに行ってるということをCREATEしています。

このコードを実行しても出力はどのような処理をしたかが表示されるだけです。

Neo4j ブラウザーから操作

次に作成してきたつながりを表示してみましょう。

MATCH (master {name:"MasterU"})-[:FRIEND]->(yourfriends)
MATCH (Professional)-[:GO_WITH]->(fishing:Sports {name:"Fishing"})
MATCH path = shortestPath((master)-[:FRIEND*..5]-(Professional))
RETURN fishing,Professional,path,yourfriends

最初にmasterの友達を取り出してyourfriendsに入れています。

次に、2行目でFishingに行ってるProfessionalな人(Leon)を取り出して、3行目でmasterとProfessionalな人(Leon)をつなげるFRIENDの関係を最大5人未満にしてpathに入れています。

最後にMATCHで抽出した繋がり(fishing,Professional,path,yourfriends)を表示しています。

Neo4j ブラウザーから操作

MasterUの周りには4人の友だちがいて、MasterUはFishingが好きというつながりを持っています。

そして、直接の友達ではありませんが、Tomの友達にFishingによくいっているLeonがいるので、MasterUがFishingについてLeonに教えてもらうなら、Tomを介してつながるのが最短距離だということです。

Neo4jはおもしろい

まだ、ほんのちょっとだけしかさわっていませんが、つながりが可視化できるので、コードを理解しつつデータベースを構築できれば、めっちゃ楽楽しいかもしれません。

表示される図もドラッグして形を変えることができるので、マインドマップのように脳が理解しやすいデータベースとして使えると思います。

間違いなくハマってしまうデータベースなのですが、今はPythonをしっかりとマスターすることが目標なので、そこまでハマることができません。

Python学習365日チャレンジを達成したら、次はNeo4jを扱えるようになりたいと思えるくらい楽しそうなデータベースです。

明日は、PythonファイルからNeo4jを操作していきたいと思います。

それでは明日もGood Python!