Edited at

初心者でもPythonを使って簡単にグラフ分析がしたい!!


はじめに

Pythonでデータ分析を行う際に,Netowrkx などのモジュールを使ってグラフを分析する機会が増えてきました.しかし,リレーショナルデータベース(以下,RDB)からデータを抽出する作業が面倒くさくてなかなか使い勝手が悪いと感じています.そこで,RDB を使って効率的にグラフ分析を行えるフレームワーク GraphGen があったので,私の理解も深めるために紹介したいと思います.


利点

今まで,グラフ分析を行うためにまずRDBからデータを抽出してデータをうまく整形した後に,モジュールを使ってグラフ分析を行う必要がありました.

しかし,GraphGen を使えばなんと数行でグラフ分析を行うことができます.


examples/python-dblp.py

from graphgenpy import GraphGenerator

import networkx as nx

datalogQuery= """
Nodes(ID, Name) :- Author(ID, Name)
Edges(ID1, ID2) :- AuthorPublication_new(ID1, PubID), AuthorPublication(ID2, PubID)
"""

gg = GraphGenerator("database_name", "localhost", "5432", "user_name", "password")
fname = gg.generateGraph(datalogQuery, "extracted_graph", GraphGenerator.GML)
G = nx.read_gml(fname, 'id')
print(nx.pagerank(G))


これだけで,Networkx が使えるようになるのはすごく便利ですね!


動作環境

GraphGen では,RDB は Postgresql を推奨していましたのでそれに習って Postgresql を使います.

GraphGen では

- Postgresql ver 9.6

- Python2

- Networkx1

を推奨していました.しかし,以下の環境でも使用できましたのでこれを前提に紹介します.


  • Postgresql ver 9.6

  • Python3.6

  • Networkx2.3


環境設定

RDB を Python 設定につなげるための説明を行います.

とはっても,Postgresql のデータベース名,ユーザ名,パスワードを入れるだけです.

gg = GraphGenerator("database_name", "localhost", "5432", "user_name", "password")


グラフ生成法

グラフの生成の仕方について解説します.

例えば,DBLPという論文データベースのデータに対してグラフ生成を行いたいと思います.

共著関係を分析したいと考えた時には,AuthorPulication の aid と pid を見ることで可能になります.

そうすると,Prolog という SQL に似た言語を使用することで以下のように書くことができます.


examples/python-dblp.py

datalogQuery = """

Node(ID, Name) :- Author(ID, name)
Edges(ID1, ID2) :- AuthorPublication(ID, PubID), AuthorPuilcation(ID2, PubID)
"""


このように書くことでグラフを簡単に生成することが可能になります.

もっと複雑なことがしたければ GraphGen を参考にしてください.


まとめ

Python を使ってグラフ分析を効率的に行うためのモジュールを紹介しました.今後,分析を便利にするフレームワークをもっと紹介できればと思います.


参考文献

Xirogiannopoulos, K.Srinivas and A.Deshpande(2017). GraphGen: Adaptive Graph Processing Using Relational Databases, in Proceedings of the Fifth International Workshop on Graph Data management Experiences & Systems, 1-7.