こんにちは。
ノートパソコン早く変えたいです、、
現在研究でグラフデータの分析に用いているORACLE PGXですが、これにデータをロードさせる際、
####データの量や種類が増えてきているので、今までのやり方だとうまくデータを格納してPGXにロードできない!!
ということが起こってきました、、
そこで!もっと便利な方法としてデータの形式(書式)をGPG形式にする案がでたため、変更することにしました。
GPG とは
GPGは現在開発が進められているG2GMLという言語のファイル形式です。G2GMLについてはこちら
GPG形式は、ある1つのIDと、それに付随する各プロパティというデータの形をとります(key-value方式)。
GPG形式に変更することで、
- プロパティの数に制限がない
- つまり数を合わせる必要がない
- 記述する形式だけ注意すればノード、エッジを正しく認識してくれる、すなわちデータの順番に注意する必要もない
などといいことが色々とあります!
GPGのデータは、RDF(Resource Description Framework)データから変換されるそうで、データの表現自体はRDFデータでもそうなのですが、SVOの関係をとります!!
めちゃくちゃ分かりやすく、しかも生物のネタで例示してもらえていて(笑)、RDFについてブログ形式でまとめてくれている方がいたので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を読んでいただければわかるかと思いますが、
ID1 "name":"apple" "color":"red"
ID2 "name":"taro" "age":"20"
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を用いると、ノード、エッジの情報がこんなように可視化して見れるわけです。やはり可視化というのは情報の理解しやすさが段違いです。
というわけで、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