【Python】ソーシャルグラフが簡単に作れるNeo4jを試してみた

person 73spicafolder_openPython, 技術系access_time 2017-01-26

social_graph

ソーシャルグラフの作成を簡単に行うことのできるNeo4jというツールを試してみたのでメモです.

ソーシャルグラフとは

この記事のトップの画像のようなものです.

あるデータ1とデータ2の関係性を表す際に使います.アニメやドラマのHPとかで良くある関係図みたいなものを想像すると分かりやすいかもしれません.もちろん人間の関係だけでなく,「サイトAはサイトBにリンクしている」などを可視化するのにも便利です.

Neo4jとは

Neo4jはソーシャルグラフを簡単に作る事のできるJAVAで作られたツールです.Neo4jをインストールし,起動することでNeo4jのサーバが立ち上がり,そこにアクセスすることでWebUI上で操作することが可能です.Cypher QLと呼ばれるSQLライクなクエリランゲージを操作することで,データベースにノードやその関係を示したデータを追加したり,グラフの表示したりグラフを削除することができます.

環境

環境は以下とします.

  • OS : Windows 8.1
  • Client : Python 2.7

Neo4jのグラフデータを操作するにはCypher QLをWebUIで入力する以外に,プログラムなどで外部からCypherのクエリを送って操作する方法もあります.今回はPythonのneo4j-rest-clientというライブラリを使ってみます.

インストール

こちらのサイトからインストーラをダウンロードします.ここでは個人利用版をダウンロードしていますが,商用版もあるようです.

インストーラをダウンロードしたら実行し,手順に沿っていけばインストールが完了します.

ちなみにMac等はbrewで入れられたリ,あるいはバイナリのtarがあるのでそれをダウンロードすればいいみたいです.

使い方

Neo4jの起動

下記のようなウィンドウがでるので,Startを押すとサーバが起動します.デフォは7474ポートが使用されます.Stopすればサーバが止まります.

neostart

neostart2

サーバ起動状態でブラウザでhttp://localhost:7474/にアクセスすればWebUIを使うことができます.

確か初回起動時にログインが必要で,デフォルトのID/PASSneo4j/neo4jだった気がします.それでログインするとパスワードの変更を求められて,任意のパスワードに変更できます.

クエリの例

Pythonで使うクエリの例です.ノードというのはグラフで言う丸っこいやつです.

これを実行してみると,内部で各処理が行われ見た目上は特に何もなく終わります.

WebUIの方に移って,クエリ入力欄に以下のように打ち込むことでグラフを表示することができます.

すると以下のような片思いのグラフが表示されます.

neo4j_test

悲しい.

簡単なプログラム

取りあえず自分に関連する色々を表示するプログラムを作りました.

  • neo4j.py -> 適当にファイル読み込んでクエリ投げる
  • node.csv -> ノードになり得るキーワードを読み込みnodeを作る
  • labels.csv -> 各ノードのラベルが1行にlabel,nodeで書いてある.よくよく考えたらnode.csvと一緒でもよかった.
  • rel.csv -> 各ノードの関係を1行につきfrom,rel,toで書いとくと読み込んで表示できる

追記) 上記プログラム,has_keyなどでキーのチェックした方が良いですね.エラーで止まります.

今回はただただ繋がりを示したかっただけなので関係を全てRelとしてますが,ソーシャルグラフであればLike,とかinterestとか分けた方が良いと思われます.

デモ

こんな感じ.

neo4j_demo

こんな感じで簡単にソーシャルグラフを作ることができます(クソ情報しかグラフ化してないけどなんかセンシティブな情報がグラフ化されてないか怖い).

しかもノードをつかんでブルンブルンして遊べます自由に位置を変更したりすることもできます.楽しい.

余談

「自分に関するキーワードをたくさん挙げてね,書式は問わないよ」みたいなことを某所で言われたときに使ってみようかと思い立って使いました.Neo4jを知ったきっかけは研究室の先輩がWebトラッキングの研究でデータを可視化する際に使ったとゼミで言っていたからです.

最近可視化にちょっとはまってたりします.

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">