Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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 を見ることで可能になります.
image.png

そうすると,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.

hiratekatayama
データベース,機械学習に興味が出てきました.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした