##はじめに
グラフネットワーク分析用ツールNeo4jをJupyterから実行し、
結果をJupyter notebook上に可視化させる。
実行には、Neo4jboltドライバーを利用する。
本内容のNotebookはこちら。
##実行環境
CentOS
openJDK 8
python 3.6.6
Jupyter notebook 4.3.0
Neo4j CommunityEdition 3.5.5
Neo4jboltドライバー
##準備
インストール
-
Neo4j
Neo4j をインストール
DLとインストール方法はこちら -
Python ライブラリ
Neo4jboltドライバー をインストール
$ pip install neo4j
Neo4j パラメータ変更
- ホストOSからアクセス可能にするため、以下のパラメータをコメントアウト
$ vi $NEO4J_HOME/conf/neo4j.conf
# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.connectors.default_listen_address=0.0.0.0
- bolt ドライバーを利用可能にするために、以下のパラメータをコメントアウト
$ vi $NEO4J_HOME/conf/neo4j.conf
# Bolt connector
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:7687
Neo4jを起動
$ $NEO4J_HOME/bin/neo4j start
*初回起動後、以下にアクセスし必要に応じてパスワードを変更
http://localhost:7474
##データ
データはmovieのデータを利用
##実行
Jupyter notebookから以下の内容を実行
ライブラリのインポート、ドライバーに接続
import pandas as pd
from neo4j import GraphDatabase, basic_auth
import matplotlib.pyplot as plt
%matplotlib inline
driver = GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("neo4j", "Welcome1"))
グラフデータの分析、取得
Query = '''CALL algo.betweenness.stream('','',{direction:'both'})
YIELD nodeId, centrality
MATCH (person:Person) WHERE id(person) = nodeId
RETURN person.name, centrality
ORDER BY centrality DESC LIMIT 10'''
session = driver.session()
res = session.run(Query)
col = ['name', 'centrality']
df = pd.DataFrame([r.values() for r in res], columns=col)
session.close()
del session
棒グラフの作成
plt.figure(figsize=(15, 6))
plt.bar(list(range(len(df))), df['centrality'])
plt.xticks(list(range(len(df))), df['name'])