Python学習【365日チャレンジ!】153日目のマスターU(@Udemy11)です。
この時期になるとうなぎが食べたくなりますが、いい値がするのでなかなか食べることができません。
なので、自分で釣って食べたい!と思っていますが、夏の夜にのんびり釣りをする時間もないんですよね。
仕掛けを投げて、待っている時間がもったいなく感じてしまいます。
無性にうなぎを食べたくなったときには、ミミズを探してうなぎ釣りに行こうと思います。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、neo4jのインストール方法を紹介しました。
Neo4jのインストールについてはこちらの記事をごらんください。
今日は、Neo4jブラウザーからグラフデータベースを操作していきます。
Neo4jブラウザーからの操作
まずはNeo4jブラウザーからコードを実行してデータベースを作っていきましょう
CREATE (master:Person {name:"MasterU"})
RETURN master
CREATE
でPersonクラスからname
がMasterUというmaster
オブジェクトを生成して、master
を表示するコードです。
表示結果は次の図になります。
ぽつんと真ん中に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
オブジェクトを取り出しています。
次の行のCREATE
でmaster
が好き(like
)だという関係を持っているfishing
オブジェクトを、SportsクラスからFishingというname
を持たせて作成しています。
3行目で3つの関係を表示させています。
次に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人の名前を追加します。
出力結果には、図は表示されずにコードの実行内容が表示されます。
次に今登録した関係を表示させます。
MATCH (master {name:"MasterU"})-[:FRIEND]->(yourfriends)
RETURN master,yourfriends
MATCH
でMasterUとFRIEND
の関係を持った人をyourfriendsとして、MasterUとyourfriendsとの関係を表示させています。
ちなみに、今回書いた【関係を表示するコード】と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というname
のfishing
オブジェクトを取り出しています。
2行目は、PersonクラスのTomというname
のtom
オブジェクトを取り出しています。
3行目は、tom
には、Leonというname
のProfessionalな友達がいて、Leonさんは常にfishing
に行ってるということをCREATE
しています。
このコードを実行しても出力はどのような処理をしたかが表示されるだけです。
次に作成してきたつながりを表示してみましょう。
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)を表示しています。
MasterUの周りには4人の友だちがいて、MasterUはFishingが好きというつながりを持っています。
そして、直接の友達ではありませんが、Tomの友達にFishingによくいっているLeonがいるので、MasterUがFishingについてLeonに教えてもらうなら、Tomを介してつながるのが最短距離だということです。
Neo4jはおもしろい
まだ、ほんのちょっとだけしかさわっていませんが、つながりが可視化できるので、コードを理解しつつデータベースを構築できれば、めっちゃ楽楽しいかもしれません。
表示される図もドラッグして形を変えることができるので、マインドマップのように脳が理解しやすいデータベースとして使えると思います。
間違いなくハマってしまうデータベースなのですが、今はPythonをしっかりとマスターすることが目標なので、そこまでハマることができません。
Python学習365日チャレンジを達成したら、次はNeo4jを扱えるようになりたいと思えるくらい楽しそうなデータベースです。
明日は、PythonファイルからNeo4jを操作していきたいと思います。
それでは明日もGood Python!