LoginSignup
2
0

More than 5 years have passed since last update.

GPGからPGX / Neo4j形式へのファイル形式変換

Last updated at Posted at 2018-02-01

こんにちは。
ノートパソコン早く変えたいです、、

現在研究でグラフデータの分析に用いているORACLE PGXですが、これにデータをロードさせる際、

データの量や種類が増えてきているので、今までのやり方だとうまくデータを格納してPGXにロードできない!!

ということが起こってきました、、
そこで!もっと便利な方法としてデータの形式(書式)をGPG形式にする案がでたため、変更することにしました。

GPG とは

GPGは現在開発が進められているG2GMLという言語のファイル形式です。G2GMLについてはこちら

GPG形式は、ある1つのIDと、それに付随する各プロパティというデータの形をとります(key-value方式)。

GPG形式に変更することで、

  • プロパティの数に制限がない
  • つまり数を合わせる必要がない
  • 記述する形式だけ注意すればノード、エッジを正しく認識してくれる、すなわちデータの順番に注意する必要もない

などといいことが色々とあります!

GPGのデータは、RDF(Resource Description Framework)データから変換されるそうで、データの表現自体はRDFデータでもそうなのですが、SVOの関係をとります!!

めちゃくちゃ分かりやすく、しかも生物のネタで例示してもらえていて(笑)、RDFについてブログ形式でまとめてくれている方がいたのでRDFをまず知りたい方は

直感RDF!! その1-RDFとは。

これを是非閲覧してください!!!!5分前後で読めるので絶対読みましょう。絶対。

RDFでは要素ごとのグラフデータ化を行っていますが、GPGのようなプロパティ・データと呼ばれるものは、それらを組み合わせてある程度の要素を1つのノード、エッジにまとめようとしているのかなという印象を覚えました(理解不足でしたら後日訂正します...)

これにより、より効率的なデータの格納を行えるなと感じました。

文字ばっかりで疲れてきたと思うので、ちょっとやっていきましょう!

GPGファイルをPGXにロードする

①Node.jsのインストール

G2GMLはNode.js上で動くので、Node.jsパッケージをこちらからダウンロードします。もしくはwgetします。
そして.bash_profileに書いてパスを通します。

$ cd ~
$ mkdir node | cd node
$ wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-x64.tar.xz
$ tar xvJf node-v8.9.4-linux-x64.tar.xz
$ cd ~
$ vim .bash_profile
export PATH=$PATH:$HOME/node/node-v8.9.4-linux-x64/bin
$ . .bash_profile

②G2GMLのインストール

GitHubからレポジトリを共有して、npmを用いてパッケージをインストールします。

$ cd ~
$ git clone https://github.com/g2gml/g2gml.git
$ cd g2gml
$ npm install js-yaml fs require config

npm はnode.jsのパッケージを管理するためのツールだそうです、難しい。。でも便利ですね!

③GPGファイルの作成

GPGファイルは、GitHubを読んでいただければわかるかと思いますが、

nodes
    ID1 "name":"apple" "color":"red"
    ID2 "name":"taro" "age":"20"
edges
    ID1 ID2 "type":"like" "label":"fruit"

というように記述していきます。
ここで2つ注意したいことがあります。1つは、エッジデータの記述の際はラベルを定義する前にエッジの性質?(type)を定義する必要があることです。もう1つはエッジデータのIDの順番で有向性を持つのでカラムの順番に注意してください。

④GPGファイルをPGXロードファイルに変換する

G2GMLで実装されているGPG_to_PGXを利用してファイルの変換を行います!

$ cd ~/g2gml
$ node src/gpg_to_pgx.js ~/create_file.gpg ~/create_file

インプットとアウトプットとして、作成したファイル(上記ではcreate_file.gpgにあたる)の場所と変換後のファイルの置き場所を指定します。

変換に成功したら、以下のような文が表示されます。

"/home/ec2-user/create_file.pgx.nodes" has been created.
"/home/ec2-user/create_file.pgx.edges" has been created.
"/home/ec2-user/create_file.pgx.json" has been created.

これでノード、エッジ、jsonとすべて変換してもらえますね、すごい楽です、、、、有難うございます、、、、

実際にロードできるかも試して見ましょう。以下のロードは私が実際に使っているファイルです。

$ pgx

pgx> G = session.readGraphWithProperties("output/druppi.json")
==> PgxGraph[name=druppi.pgx,N=22398,E=7080173,created=1517221695676]

と、このようにロードが出来ると思います!!

⑤Neo4jへロードする

neo4j.png

Neo4jを用いると、ノード、エッジの情報がこんなように可視化して見れるわけです。やはり可視化というのは情報の理解しやすさが段違いです。

というわけで、Neo4jをインストールして、データを入れます!

$ export NEO4J_DIR=~/neo4j/neo4j-community-3.3.2
$ rm -r $NEO4J_DIR/data/databases/graph.db
$ $NEO4J_DIR/bin/neo4j-import \
  --into $NEO4J_DIR/data/databases/graph.db \
  --nodes output/create_file.neo.nodes --relationships output/create_file.neo.edges

ここまで出来たら、外からアクセスできるようにして起動します。

$ vim $NEO4J_DIR/conf/neo4j.conf
dbms.connectors.default_listen_address=0.0.0.0 //「#」をはずす
$ $NEO4J_DIR/bin/neo4j console
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0