Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
Oracle Labs 発!
Parallel Graph AnalytiX(PGX)
2017年...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
Safe Harbor
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。
...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 3
グラフ・データベース?
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
ネットワーク分析とグラフ
• さまざまな関係構造をネットワークとして扱うことができる
• このネッ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフ・データベース
5
DB-Engines に掲載のカテゴリ別人気変化率
(http://db...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
データを表に格納する
6
deptno dname loc
1 営業第一 東京
2 研究開発 大阪...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
データをグラフに格納する
プロパティ・グラフなら、簡単かつ柔軟に表現することができ、
さらに、グラ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
誰が最重要人物か? ― つながりの定量化
• 集計を用いた手法
• 誰が多く支払ったか?
• 誰が...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 9
グラフ分析エンジン「PGX」
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
Spatial and Graph オプション
10
Oracle Database Enterp...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフ・データベースが最適?
11
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
インメモリ解析 + 永続化ストレージ
12
RDBMS, Hadoop,
NoSQL (KVS)
...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
Oracle Labs PGX
13
Oracle Labs(旧 Sun Labs)から OTN ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフ分析における2種類の処理
• 参照系処理
• あるノードの周辺ノードの参照
• プロパティ・...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
PGX のコンセプト
• 参照系処理と演算系処理の双方、
これらを組み合わせた処理に対応
• グラ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
参照系処理 ― クエリ言語によるグラフの参照
• Neo4j Cypher に似たクエリ言語「PG...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
演算系処理 ― 定義済みの35のアルゴリズム
17
コンポーネントやコミュニティの検出
強連結成分...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフが利用されるビッグデータ課題
18
購買記録
顧客と商品
リコメンデーション
影響力のある
...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 19
使ってみる
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
PGX のセットアップ(Linux)
20
$ cd $HOME/pgx # ここにファイルを置く...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
PGX のセットアップ(Mac)
21
$ cd $HOME/pgx # ここにファイルを置くとし...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
PGX シェルの起動
22
$ pgx
..
pgx>
PGXシェルを起動します
pgx> :ex...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフの読み込み
23
$ cd $PGX_HOME
$ pgx
PGXシェルを起動します
G =...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
Marvel ヒーローのグラフ
• Marvel のコミックには
多くのキャラクターが登場
• さ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
データの入手
25
$ more hero-network.csv
"IRON MAN/TONY ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフのロード
26
G = session.readGraphWithProperties("h...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフのロード
27
キャラクター(ノード)を表示します
G.queryPgql(" SELECT...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフのロード
28
G = G.simplify( 
MultiEdges.REMOVE_MUL...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
参照型処理の実行
PGQLは参照型処理(パターン・マッチング)に便利です
「アイアンマンとスパイダ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
参照型処理の実行
結果の件数が多いので、一度、結果データを変数に渡して件数を数えます
30
Res...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
ヒーローの重要度の評価
• 次数中心性
• より多くのエッジを持つノードがより重要
• 友だちが多...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
演算型処理の実行
まず、各ノードの次数中心性を求めます
32
analyst.inDegreeCe...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
演算型処理の実行
5人の重要なキャラクターが得られました!
33
| n.id() | n.in_...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
演算型処理の実行
次に、各ノードのページランクを求めます
34
analyst.pagerank(...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
演算型処理の実行
スパイダーマンが1位になりました!
35
| n.id() | n.pagera...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
演算型処理の実行
同様に、各ノードの媒介中心性も求めてみます
36
analyst.vertexB...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
演算型処理の実行
トップ4まではページランクとも順位が一致しています
37
| n.id() | ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
参照と演算の併用
38
演算型処理の結果(ここではページランクのスコア)を参照型処理(パターン・
...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
参照と演算の併用
39
こちらがマイナーなキャラクター10名です
Result.print(10)...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
タンパク質のネットワークであれば…
40
「タンパク質 A、B、C の全てと相互作用があるタンパク...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 41
乗換案内
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
データの入手
42
駅データ.jp から、駅データ、接続駅データ、路線データを入手します。
lin...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
データの加工
43
$ sort -t ',' -k 1 station20161107free....
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフのロード
44
$ vi rail.csv.json
{
"uri": "rail.csv"...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
グラフのロード
45
PGXシェルを開き、グラフを(有向グラフのまま)ロードします
G = ses...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
有向グラフと無効グラフ
46
G.queryPgql(" 
SELECT x.name, r.na...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
有向グラフと無効グラフ
47
G.queryPgql(" 
SELECT x.name, r.na...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
経路の検索
48
G.queryPgql(" 
SELECT y.name, COUNT(*) A...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
経路の検索
49
G.queryPgql(" 
SELECT y.name, COUNT(*) A...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
経路の検索
50
G.queryPgql(" 
SELECT r1.name, r2.name, ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
重要度の高い駅は?
各駅の次数中心性、ページランク、媒介中心性も求めてみます。
同じ駅間に複数の路...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
重要度の高い駅は?
52
G.queryPgql(" 
SELECT n.name, n.in_d...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
重要度の高い駅は?
53
G.queryPgql(" 
SELECT n.name, n.page...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
重要度の高い駅は?
54
G.queryPgql(" 
SELECT n.name, n.betw...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
重要度の高い駅は?
55
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
連結している?
56
G.queryPgql(" 
SELECT x.wcc, COUNT(*) ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
連結している?
57
分割された小さいほうのグラフに含まれる駅を表示します
G.queryPgql...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
最短経路は?
58
G.queryPgql(" SELECT x.id() WHERE (x), ...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
最短経路は?
59
Path.getPathLengthWithHop()
最短で何ホップで到達で...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
最短経路は?
60
最短経路上の駅を確認します。ただし、このデータには新幹線など一部のデータ
が含...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 61
PGX.D
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
PGX.D ― 分散処理版 PGX
62
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
PGX.D ― HPC の SC15 で Best Paper のひとつに
63
http://s...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 64
参考資料
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
参考資料
• Oracle Labs PGX(再掲)
• 関連する Oracle 製品
• Ora...
Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.
Upcoming SlideShare
Loading in …5
×

Oracle Labs 発! Parallel Graph AnalytiX(PGX)

9,035 views

Published on

Oracle Labs 発! Parallel Graph AnalytiX(PGX)

Published in: Engineering
  • Be the first to comment

Oracle Labs 発! Parallel Graph AnalytiX(PGX)

  1. 1. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. Oracle Labs 発! Parallel Graph AnalytiX(PGX) 2017年10月3日 更新 日本オラクル株式会社 山中遼太(ryota.yamanaka@oracle.com)
  2. 2. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. Safe Harbor 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。 また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むこと はできません。以下の事項は、マテリアルやコード、機能を提供することを コミットメント(確約)するものではないため、購買決定を行う際の判断材料に なさらないで下さい。オラクル製品に関して記載されている機能の開発、 リリースおよび時期については、弊社の裁量により決定されます。 Oracle と Java は、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における 登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。 2
  3. 3. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 3 グラフ・データベース?
  4. 4. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. ネットワーク分析とグラフ • さまざまな関係構造をネットワークとして扱うことができる • このネットワークを点と線の集合として抽象化したものがグラフ • グラフ理論は数学の一つとして古くから発展してきた 4 1736年 ケーニヒスベルグの問題(オイラー) 無向/有向グラフ、多重グラフ、重み、… ※ 出典 (ライセンス: CC BY-SA 3.0) https://ja.wikipedia.org/wiki/一筆書き/media/File:7_bridges.svg
  5. 5. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフ・データベース 5 DB-Engines に掲載のカテゴリ別人気変化率 (http://db-engines.com/en/ranking_categories)
  6. 6. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. データを表に格納する 6 deptno dname loc 1 営業第一 東京 2 研究開発 大阪 3 マーケティング 東京 empno ename job deptno 1 アルバート 課長 1 2 バクスター 主任研究員 2 3 チェン 係長 3 4 デイヴィス エンジニア 2 社員表 部門表 主キー 主キー 外部キー SELECT e.ename FROM emp e, dept d WHERE e.deptno = d.deptno AND d.loc = 'Tokyo'
  7. 7. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. データをグラフに格納する プロパティ・グラフなら、簡単かつ柔軟に表現することができ、 さらに、グラフ用の直感的なクエリ言語で検索することができる 7 SELECT e.ename WHERE (e)-[belong_to]->(d) , d.loc = 'Tokyo' 1 1 2 3 4 2 3 dname: 営業第一 loc: 東京 ename: アルバート job: 営業 belong_to from: 2013
  8. 8. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 誰が最重要人物か? ― つながりの定量化 • 集計を用いた手法 • 誰が多く支払ったか? • 誰が高いマージンの商品を買ったか? • 誰が継続的に購入しているか? • つながりを用いた手法 • 誰が強い影響力を周りに対して持っているか? • 誰が特定人物と同じ商品を購入しているか? • 誰が若い世代のコミュニティに属しているか? 8 表に対する問い SQLのような計算 方法が適している グラフに対する問い なにか別の計算方法 が必要とされている!
  9. 9. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 9 グラフ分析エンジン「PGX」
  10. 10. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. Spatial and Graph オプション 10 Oracle Database Enterprise Edition 12c R2 Graph機能 ネットワーク・ データ・モデル RDF セマンティック ・グラフ Spatial機能 プロパティ・グラフ Spatial and Graph オプション
  11. 11. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフ・データベースが最適? 11
  12. 12. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. インメモリ解析 + 永続化ストレージ 12 RDBMS, Hadoop, NoSQL (KVS) Reques t 分析 処理 Reques t Reques t Reques t Reques t 更新 処理 PGX PGX メモリ上 データを並列処理で読み込み ノードとエッジとしてメモリ上に展開 Oracle Labs で開発された高速な インメモリのグラフ分析エンジン トランザクションはデータベースやHadoopで処理 グラフ用クエリ言語 PGQL や、定義済み グラフ分析アルゴリズムを API から使用可能 (ただし PGQL は DB 12.2.0.1 では未サポート) File
  13. 13. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. Oracle Labs PGX 13 Oracle Labs(旧 Sun Labs)から OTN ライセンスで配布 • 商用利用はできませんが、無償で検証や開発ができます。
  14. 14. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフ分析における2種類の処理 • 参照系処理 • あるノードの周辺ノードの参照 • プロパティ・パスによる探索 • パターン・マッチング • サブグラフの抽出 14 • 演算系処理 • コンポーネントやコミュニティの検出 • コミュニティ構造の評価 • ランキングとウォーキング • 経路探索 3 1 5 2 5 4 2 3 2 3 2 2 1 22 1 1 1
  15. 15. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. PGX のコンセプト • 参照系処理と演算系処理の双方、 これらを組み合わせた処理に対応 • グラフのクエリによる参照(PGQL) • グラフへのアルゴリズムの適用 • グラフの変換(Mutation) 「あるノードから3ステップ 以内にあるページランクの 高いノード」を探す、など 15 3 1 5 2 5 4 2 3 2 3 2 2 1 22 1 1 1 3 1 5 2 5 4 2 3 2 3 2 2 1 22 1 1 1 演算! 参照!
  16. 16. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 参照系処理 ― クエリ言語によるグラフの参照 • Neo4j Cypher に似たクエリ言語「PGQL」によってグラフを参照可能 • グラフのパターンを直感的に記述できる: • 「年齢がマリオより2歳下より若く、マリオとルイージが共に好いている 全ての人物の名前と年齢を、名前順に教えてください」 16 SELECT person.name, person.age WHERE (m WITH name='Mario') -[WITH type='likes']-> (person), (l WITH name='Luigi') -[WITH type='likes']-> (person), person.age < m.age - 2 ORDER BY person.name • 仕様詳細はこちら: PGQL 1.0 Specification
  17. 17. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 演算系処理 ― 定義済みの35のアルゴリズム 17 コンポーネントやコミュニティの検出 強連結成分分解 (Tarjan法、Kosaraju法) 弱連結コンポーネント ラベル伝搬法 ランキングとウォーキング ページランク、 パーソナライズドページランク 中心媒介性、次数分布、次数中心性 近接中心性、固有ベクトル中心性 HITS、ランダムウォークサンプリング コミュニティ構造の評価 ∑ ∑ コンダクタンス モジュール性 クラスタ係数 トライアングル数え上げ 経路探索 幅優先探索、ダイクストラ法 双方向ダイクストラ法 ベルマン・フォード法 その他 リンク予測(SALSA)
  18. 18. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフが利用されるビッグデータ課題 18 購買記録 顧客と商品 リコメンデーション 影響力のある 人物の特定 パターン・マッチングコミュニティの検出 私と買い物が似ている人 物によって購入された商 品と、その商品と一緒に 購入されている商品を教 えてください ソーシャル・ネットワー ク上で中心的な役割を 担っている人物を教えて ください(マーケティン グ分析など) 似通った人達やつながり のある人達のグループを 教えてください(ター ゲット・マーケティング など) ある不正取引と同様の取 引パターンがみられる全 ての預金口座を探してく ださい(不正検出や行動 分析など) Twitterなど
  19. 19. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 19 使ってみる
  20. 20. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. PGX のセットアップ(Linux) 20 $ cd $HOME/pgx # ここにファイルを置くとします $ unzip pgx-2.5.0-server.zip $ tar xvzf jdk-8u111-linux-x64.tar.gz $ export JAVA_HOME=$HOME/pgx/jdk1.8.0_111 $ export PATH=$JAVA_HOME/bin:$PATH $ export PGX_HOME=$HOME/pgx/pgx-2.5.0 $ alias pgx='$PGX_HOME/bin/pgx' 環境変数とエイリアスを設定します ファイルを展開します 最新版の PGX 2.5.0 Server をこちらからダウンロードします JDK8(下記では 8u111)もこちらからダウンロードします 参考 Oracle Labs PGX 2.5.0 Documentation – Installation
  21. 21. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. PGX のセットアップ(Mac) 21 $ cd $HOME/pgx # ここにファイルを置くとします $ unzip pgx-2.5.0-server.zip $ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/ $ export PATH=$JAVA_HOME/bin:$PATH $ export PGX_HOME=$HOME/pgx/pgx-2.3.1 $ alias pgx='$PGX_HOME/bin/pgx' 環境変数とエイリアスを設定します ファイルを展開します 最新版の PGX 2.5.0 Server をこちらからダウンロードします JDK8(下記では 8u111)もこちらからダウンロードしてインストールします 参考 Oracle Labs PGX 2.5.0 Documentation – Installation
  22. 22. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. PGX シェルの起動 22 $ pgx .. pgx> PGXシェルを起動します pgx> :exit PGXシェルを閉じるとき pgx> :clear PGXシェルの誤入力でエラーが発生した際はヒストリーをクリアしてください
  23. 23. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフの読み込み 23 $ cd $PGX_HOME $ pgx PGXシェルを起動します G = session.readGraphWithProperties("examples/graphs/sample.adj.json") G.queryPgql(" SELECT x.id(), y.id() WHERE (x)-->(y) ").print() x.id() y.id() ============================================ 333 128 128 1908 128 99 99 333 サンプルのデータをロードした後、全てのエッジを参照します 333 128 1908 99
  24. 24. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. Marvel ヒーローのグラフ • Marvel のコミックには 多くのキャラクターが登場 • さらに、ヒーロー達が集まって 敵と戦ったり、他のコミックに 友情出演することが多々ある • そこでキャラクターの共演を グラフにして解析する 24 ※ 出典 http://www.oracle.com/us/theavengers /avengers-main-body-1571184.html (壁紙もダウンロードできます)
  25. 25. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. データの入手 25 $ more hero-network.csv "IRON MAN/TONY STARK ","CHAIN" "IRON MAN/TONY STARK ","SPIDER-WOMAN II/JULI" "IRON MAN/TONY STARK ","CARPENTER, RACHEL" "CARPENTER, RACHEL","CHAIN" "CARPENTER, RACHEL","SPIDER-WOMAN II/JULI" .. Exposedata.com (http://exposedata.com/marvel/) のウェブ・アーカイブの 「Hero Social Network Data」からCSVデータを入手します このデータは、キャラクターをノードとして、コミックの同じ号に登場している キャラクター同士をカンマ区切りで対にしただけのものです
  26. 26. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフのロード 26 G = session.readGraphWithProperties("hero/hero-network.csv.json").undirect() $ vi hero-network.csv.json { "uri": "hero-network.csv" , "format": "edge_list" , "node_id_type": "string" , "separator": "," } $ pgx グラフのロードのための情報をJSONで記述します PGXシェルから上のファイルを指定してグラフをロードします (無向グラフとして読み込んでいます)
  27. 27. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフのロード 27 キャラクター(ノード)を表示します G.queryPgql(" SELECT x.id() WHERE (x) ").print() G.queryPgql(" SELECT x.id() WHERE (x) ").getNumResults() ==> 6426 キャラクター(ノード)の数を表示します G.queryPgql(" SELECT r.id() WHERE (x)-[r]-(y) ").getNumResults() ==> 1146702 一緒に登場するキャラクターの組(エッジ)の数を表示します
  28. 28. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフのロード 28 G = G.simplify( MultiEdges.REMOVE_MULTI_EDGES , SelfEdges.REMOVE_SELF_EDGES , TrivialVertices.REMOVE_TRIVIAL_VERTICES , Mode.CREATE_COPY , null ) ロードしたグラフに前処理を施します G.queryPgql(" SELECT r.id() WHERE (x)-[r]-(y) ").getNumResults() ==> 334414 一緒に登場するキャラクターの組(エッジ)の数を表示します # 同じ2つのノードを結ぶ複数のエッジを除去 # 始点と終点が同じノードのエッジを除去 # エッジを持たないノードを除去 # 内部的にグラフのコピーを作成 # グラフ名(任意)
  29. 29. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 参照型処理の実行 PGQLは参照型処理(パターン・マッチング)に便利です 「アイアンマンとスパイダーマンとウルヴァリンの全てと 一緒に登場したことのあるキャラクターは?」 29 G.queryPgql(" SELECT x.id() WHERE (x)--(a WITH id()='IRON MAN/TONY STARK ') , (x)--(b WITH id()='SPIDER-MAN/PETER PAR') , (x)--(c WITH id()='WOLVERINE/LOGAN ') ").print()
  30. 30. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 参照型処理の実行 結果の件数が多いので、一度、結果データを変数に渡して件数を数えます 30 Result = G.queryPgql(" SELECT x.id() WHERE (x)--(a WITH id()='IRON MAN/TONY STARK ') , (x)--(b WITH id()='SPIDER-MAN/PETER PAR') , (x)--(c WITH id()='WOLVERINE/LOGAN ') ") Result.getNumResults() ==> 504 10件だけ見てみます Result.print(5)
  31. 31. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. ヒーローの重要度の評価 • 次数中心性 • より多くのエッジを持つノードがより重要 • 友だちが多い人は重要人物? • ページランク • 重要性はグラフ上で伝播するとすれば… • 重要なノードに繋がるノードは重要 • 重要人物の友だちは重要人物? • 媒介中心性 • 多くのノード同士の最短経路にいると重要 • その人がいないとみんなが困る? 31 Iron man Cap Amer Iron man Hulk Nick Cap Amer
  32. 32. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 演算型処理の実行 まず、各ノードの次数中心性を求めます 32 analyst.inDegreeCentrality(G) 計算されたスコアは各ノードの プロパティ in_degree に格納されます 引数として、グラフ(G)が渡されています。計算量はノードの数 N、エッジ数 を E としたとき、計算量は N に依存して増加するため O (N) になります。詳細 はリファレンスに記載されています。 ==> Vertex Property named 'in_degree' of type integer belonging to graph .. Iron man in_degree: 3
  33. 33. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 演算型処理の実行 5人の重要なキャラクターが得られました! 33 | n.id() | n.in_degree | ====================================== | CAPTAIN AMERICA | 1906 | | SPIDER-MAN/PETER PAR | 1737 | | IRON MAN/TONY STARK | 1522 | | THING/BENJAMIN J. GR | 1416 | | MR. FANTASTIC/REED R | 1379 | G.queryPgql(" SELECT n.id(), n.in_degree WHERE (n) ORDER BY n.in_degree DESC ").print(5) 計算結果を参照するためには、PGQLを使います
  34. 34. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 演算型処理の実行 次に、各ノードのページランクを求めます 34 analyst.pagerank(G, 0.0001, 0.85, 100) 計算されたスコアは各ノードの プロパティ pagerank に格納されます 引数として、グラフ(G)および3つのパラメータ(許容される最大エラー値、ダ ンピング・ファクター、計算の反復回数)が渡されています。計算量は反復回数 を k として O (k*E) になります。詳細はリファレンスに記載されています。 ==> Vertex Property named 'pagerank' of type double belonging to graph .. Ironman pagerank: 0.0041204
  35. 35. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 演算型処理の実行 スパイダーマンが1位になりました! 35 | n.id() | n.pagerank | ================================================ | SPIDER-MAN/PETER PAR | 0.005295697226042497 | | CAPTAIN AMERICA | 0.005125996140362315 | | IRON MAN/TONY STARK | 0.0041204415753377755 | | WOLVERINE/LOGAN | 0.0038669573843525297 | | THING/BENJAMIN J. GR | 0.00368240604720028 | G.queryPgql(" SELECT n.id(), n.pagerank WHERE (n) ORDER BY n.pagerank DESC ").print(5) 計算結果を参照するためには、PGQLを使います
  36. 36. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 演算型処理の実行 同様に、各ノードの媒介中心性も求めてみます 36 analyst.vertexBetweennessCentrality(G) 媒介中心性は、全ての頂点間の最短経路の中でその頂点が経路上にいる割合を スコアとしています。媒介中心性の計算量は O (N*E) であり、ページランクの 計算量 O (k*E) と比較して計算コストが高く、やや実行時間が長くかかります。 詳細はリファレンスに記載されています。 ==> Vertex Property named 'betweenness' of type double belonging to graph .. 計算されたスコアは各ノードの プロパティ betweenness に格納されます Ironman pagerank: 0.0072942 betweenness: 1536742
  37. 37. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 演算型処理の実行 トップ4まではページランクとも順位が一致しています 37 | n.id() | n.betweenness | ============================================= | SPIDER-MAN/PETER PAR | 3035278.742514685 | | CAPTAIN AMERICA | 2351348.199987786 | | IRON MAN/TONY STARK | 1536742.6554027207 | | WOLVERINE/LOGAN | 1473595.2238889316 | | HAVOK/ALEX SUMMERS | 1471842.538198293 | G.queryPgql(" SELECT n.id(), n.betweenness WHERE (n) ORDER BY n.betweenness DESC ").print(5) 計算結果を参照するためには、PGQLを使います
  38. 38. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 参照と演算の併用 38 演算型処理の結果(ここではページランクのスコア)を参照型処理(パターン・ マッチング)の対象としてそのまま使えてしまうのがPGQLの便利なところ! 前出の検索をこのように変更してみます。 「アイアンマンとスパイダーマンとウルヴァリンの全てと一緒に登場したこと のあるキャラクターのうちマイナーなキャラクターは?」 Result = G.queryPgql(" SELECT x.id(), x.pagerank WHERE (x)--(a WITH id()='IRON MAN/TONY STARK ') , (x)--(b WITH id()='SPIDER-MAN/PETER PAR') , (x)--(c WITH id()='WOLVERINE/LOGAN ') ORDER BY x.pagerank ASC ")
  39. 39. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 参照と演算の併用 39 こちらがマイナーなキャラクター10名です Result.print(10) | x.id() | x.pagerank | ================================================ | TYCHO | 5.611553899059807E-5 | | ISBISA/DR. SANDERSON | 7.622033978468877E-5 | | MASON, WANDA | 9.52103640547917E-5 | | STORM, CHILI | 1.087940205195763E-4 | | MAGNUM, MOSES | 1.0989429673080101E-4 | | BIRD MAN/HENRY HAWK | 1.206812449804567E-4 | | CAT MAN/HORGAN | 1.206812449804567E-4 | | TERRAXIA | 1.2137478460591338E-4 | | RAZORFIST III | 1.23495696066652E-4 | | SVAROG | 1.2727748790164624E-4 |
  40. 40. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. タンパク質のネットワークであれば… 40 「タンパク質 A、B、C の全てと相互作用があるタンパク質のうちネットワーク 上の重要性が低いタンパク質(ロングテールの標的の可能性がある)は?」 Res = G.queryPgql(" SELECT x, x.pagerank WHERE (x)--(a WITH id()='Protein A') , (x)--(b WITH id()='Protein B') , (x)--(c WITH id()='Protein C') ORDER BY x.betweenness ASC ") A X CB 中心媒介性: 0.00129(低) STRING Database http://string-db.org/
  41. 41. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 41 乗換案内
  42. 42. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. データの入手 42 駅データ.jp から、駅データ、接続駅データ、路線データを入手します。 line_cd,company_cd,line_name,line_name_k, .. 1001,3,中央新幹線,チュウオウシンカンセン, .. 1002,3,東海道新幹線,トウカイドウシンカンセン, .. 1003,4,山陽新幹線,サンヨウシンカンセン, .. line_cd,station_cd1,station_cd2 1002,100201,100202 1002,100202,100203 1002,100203,100204 接続駅データはエッジです。 station_cd,station_g_cd,station_name, .. 1110101,1110101,函館, .. 1110102,1110102,五稜郭, .. 1110103,1110103,桔梗, .. 駅データはノードとそのプロパティです。 路線データはエッジのプロパティです。
  43. 43. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. データの加工 43 $ sort -t ',' -k 1 station20161107free.csv > station.csv $ sort -t ',' -k 1 line20161107free.csv > line.csv $ sort -t ',' -k 2 join20161107.csv > join01.csv $ join -t ',' join01.csv station.csv -1 2 -2 1 -o 1.1,2.2,1.3 > join02.csv $ sort -t ',' -k 3 join02.csv > join03.csv $ join -t ',' join03.csv station.csv -1 3 -2 1 -o 1.1,1.2,2.2 > join04.csv $ sort -t ',' -k 1 join04.csv > join05.csv $ join -t ',' join05.csv line.csv -1 1 -2 1 -o 2.3,1.2,1.3 > join06.csv $ cat station.csv | awk -v FS=',' -v OFS=',' '{if (NR != 1) print $2, "*"}' | sort | uniq > station_uniq.csv $ join -t ',' station_uniq.csv station.csv -1 1 -2 1 -o 1.1,1.2,2.3 > rail.csv $ cat join06.csv | awk -v FS=',' -v OFS=',' '{print $2, $3, $1, "1"}' >> rail.csv データを Edge List 形式に加工します。
  44. 44. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフのロード 44 $ vi rail.csv.json { "uri": "rail.csv" , "format": "edge_list" , "node_id_type": "integer" , "vertex_props":[ {"name":"name", "type":"string"} ] , "edge_props":[ {"name":"name", "type":"string"} , {"name":"score", "type":"double"} ] , "separator": "," } グラフのロードのための情報をJSONで記述します
  45. 45. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. グラフのロード 45 PGXシェルを開き、グラフを(有向グラフのまま)ロードします G = session.readGraphWithProperties("rail/rail.csv.json") 同じ駅間は複数の路線で接続されていることがあるため、 このグラフは同じノード間に複数のエッジが含まれ得るグラフです G.queryPgql(" SELECT x.name, y.name, r.name WHERE (x)-[r]-(y), x.name='恵比寿', y.name='渋谷' ").getResults() ==> x.name(STRING)=恵比寿 y.name(STRING)=渋谷 r.name(STRING)=JR湘南新宿ライン ==> x.name(STRING)=恵比寿 y.name(STRING)=渋谷 r.name(STRING)=JR埼京線 ==> x.name(STRING)=恵比寿 y.name(STRING)=渋谷 r.name(STRING)=JR山手線
  46. 46. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 有向グラフと無効グラフ 46 G.queryPgql(" SELECT x.name, r.name, y.name WHERE (x)-[r]->(y), x.name='外苑前' ").getResults() 外苑前のとなりの駅と路線 ==> x.name(STRING)=外苑前 r.name(STRING)=東京メトロ銀座線 y.name(STRING)=表参道 G.queryPgql(" SELECT x.name, r.name, y.name WHERE (x)<-[r]-(y), x.name='外苑前' ").getResults() ==> x.name(STRING)=外苑前 r.name(STRING)=東京メトロ銀座線 y.name(STRING)=青山一丁目 逆方向の駅
  47. 47. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 有向グラフと無効グラフ 47 G.queryPgql(" SELECT x.name, r.name, y.name WHERE (x)-[r]-(y), x.name='外苑前' ").getResults() ==> x.name(STRING)=外苑前 r.name(STRING)=東京メトロ銀座線 y.name(STRING)=青山一丁目 ==> x.name(STRING)=外苑前 r.name(STRING)=東京メトロ銀座線 y.name(STRING)=表参道 無効グラフにすることにより、同じ路線の逆方向の駅が出力されます 実際には多くの路線は両方向なので、無効グラフに変換します G = G.undirect()
  48. 48. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 経路の検索 48 G.queryPgql(" SELECT y.name, COUNT(*) AS cnt WHERE (x)--()--()--(y), x.name='外苑前' GROUP BY y.name ORDER BY cnt DESC ").getResults() 外苑前から3ホップの駅とその経路の数を求めます ==> y.name(STRING)=青山一丁目 cnt(LONG)=9 ==> y.name(STRING)=表参道 cnt(LONG)=9 ==> y.name(STRING)=恵比寿 cnt(LONG)=6 ==> y.name(STRING)=新宿 cnt(LONG)=6 ==> y.name(STRING)=原宿 cnt(LONG)=5 ==> y.name(STRING)=渋谷 cnt(LONG)=4 ==> y.name(STRING)=溜池山王 cnt(LONG)=4 ... 同じ駅を行き来することができるため隣の駅への経路が多く出力されます
  49. 49. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 経路の検索 49 G.queryPgql(" SELECT y.name, COUNT(*) AS cnt WHERE (x)--(s1)--(s2)--(y), x.name='外苑前', x!=s1, x!=s2, x!=y, s1!=s2, s1!=y, s2!=y GROUP BY y.name ORDER BY cnt DESC ").getResults() 同じ駅を2度通らないように条件を追加します ==> y.name(STRING)=恵比寿 cnt(LONG)=6 ==> y.name(STRING)=新宿 cnt(LONG)=6 ==> y.name(STRING)=原宿 cnt(LONG)=5 ==> y.name(STRING)=四ツ谷 cnt(LONG)=4 ==> y.name(STRING)=渋谷 cnt(LONG)=4 ==> y.name(STRING)=溜池山王 cnt(LONG)=4 ==> y.name(STRING)=桜田門 cnt(LONG)=2 ==> y.name(STRING)=半蔵門 cnt(LONG)=2 ...
  50. 50. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 経路の検索 50 G.queryPgql(" SELECT r1.name, r2.name, r3.name WHERE (x)-[r1]-(s1)-[r2]-(s2)-[r3]-(y), x.name='外苑前', y.name='新宿', x!=s1, x!=s2, x!=y, s1!=s2, s1!=y, s2!=y ").getResults() 経路を確認します ==> r1.name(STRING)=東京メトロ銀座線 r2.name(STRING)=東京メトロ半蔵門線 r3.name(STRING)=JR湘南新宿ライン ==> r1.name(STRING)=東京メトロ銀座線 r2.name(STRING)=東京メトロ半蔵門線 r3.name(STRING)=JR成田エクスプレス ==> r1.name(STRING)=東京メトロ銀座線 r2.name(STRING)=東京メトロ銀座線 r3.name(STRING)=JR湘南新宿ライン ==> r1.name(STRING)=東京メトロ銀座線 r2.name(STRING)=東京メトロ銀座線 r3.name(STRING)=JR成田エクスプレス ==> r1.name(STRING)=東京メトロ銀座線 r2.name(STRING)=東京メトロ半蔵門線 r3.name(STRING)=JR埼京線 ==> r1.name(STRING)=東京メトロ銀座線 r2.name(STRING)=東京メトロ銀座線 r3.name(STRING)=JR埼京線
  51. 51. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 重要度の高い駅は? 各駅の次数中心性、ページランク、媒介中心性も求めてみます。 同じ駅間に複数の路線があった場合にもひとつのエッジとして計算できるように グラフを変換します。複数の路線のうちひとつのみを残して他は削除されます。 51 analyst.inDegreeCentrality(G) analyst.pagerank(G, 0.0001, 0.85, 100) analyst.vertexBetweennessCentrality(G) G = G.simplify( MultiEdges.REMOVE_MULTI_EDGES , SelfEdges.REMOVE_SELF_EDGES , TrivialVertices.REMOVE_TRIVIAL_VERTICES , Mode.CREATE_COPY , null )
  52. 52. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 重要度の高い駅は? 52 G.queryPgql(" SELECT n.name, n.in_degree WHERE (n) ORDER BY n.in_degree DESC ").getResults() 次数中心性の高い駅を参照します ==> n.name(STRING)=横浜 n.in_degree(INTEGER)=14 ==> n.name(STRING)=新宿 n.in_degree(INTEGER)=13 ==> n.name(STRING)=池袋 n.in_degree(INTEGER)=13 ==> n.name(STRING)=大阪 n.in_degree(INTEGER)=12 ==> n.name(STRING)=千葉 n.in_degree(INTEGER)=11 ==> n.name(STRING)=名古屋 n.in_degree(INTEGER)=11 ==> n.name(STRING)=東京 n.in_degree(INTEGER)=11 ==> n.name(STRING)=品川 n.in_degree(INTEGER)=11 ==> n.name(STRING)=大宮 n.in_degree(INTEGER)=9 ==> n.name(STRING)=金山 n.in_degree(INTEGER)=9 ※ 出典 (ライセンス: CC BY-SA 4.0) https://ja.wikipedia.org/wiki/新宿駅#/media/File:JR_Shinjuku_Miraina_TowerB.JPG
  53. 53. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 重要度の高い駅は? 53 G.queryPgql(" SELECT n.name, n.pagerank WHERE (n) ORDER BY n.pagerank DESC ").getResults() ページランクの高い駅を参照します ※ 出典 (ライセンス: CC BY 3.0) https://ja.wikipedia.org/wiki/横浜駅#/media/File:横浜駅西口方駅舎.jpg ==> n.name(STRING)=横浜 n.pagerank(DOUBLE)=4.9.. ==> n.name(STRING)=池袋 n.pagerank(DOUBLE)=4.5.. ==> n.name(STRING)=新宿 n.pagerank(DOUBLE)=4.2.. ==> n.name(STRING)=名古屋 n.pagerank(DOUBLE)=4.0.. ==> n.name(STRING)=千葉 n.pagerank(DOUBLE)=4.0.. ==> n.name(STRING)=大阪 n.pagerank(DOUBLE)=3.8.. ==> n.name(STRING)=三ノ宮 n.pagerank(DOUBLE)=3.6.. ==> n.name(STRING)=大宮 n.pagerank(DOUBLE)=3.4.. ==> n.name(STRING)=金山 n.pagerank(DOUBLE)=3.3.. ==> n.name(STRING)=品川 n.pagerank(DOUBLE)=3.3..
  54. 54. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 重要度の高い駅は? 54 G.queryPgql(" SELECT n.name, n.betweenness WHERE (n) ORDER BY n.betweenness DESC ").getResults() 媒介中心性の高い駅を参照します ※ 出典 (ライセンス: GFDL) https://ja.wikipedia.org/wiki/塩尻駅#/media/File:ShiojiriStnishi.jpg ==> n.name(STRING)=塩尻 n.betweenness(..)=3.5.. ==> n.name(STRING)=恵那 n.betweenness(..)=3.4.. ==> n.name(STRING)=多治見 n.betweenness(..)=3.4.. ==> n.name(STRING)=土岐市 n.betweenness(..)=3.4.. ==> n.name(STRING)=瑞浪 n.betweenness(..)=3.4.. ==> n.name(STRING)=釜戸 n.betweenness(..)=3.4.. ==> n.name(STRING)=武並 n.betweenness(..)=3.4.. ==> n.name(STRING)=美乃坂本 n.betweenness(..)=3.4.. ==> n.name(STRING)=中津川 n.betweenness(..)=3.4.. ==> n.name(STRING)=落合川 n.betweenness(..)=3.4..
  55. 55. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 重要度の高い駅は? 55
  56. 56. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 連結している? 56 G.queryPgql(" SELECT x.wcc, COUNT(*) AS num_station WHERE (x) GROUP BY x.wcc ORDER BY num_station DESC ").print() 出発と到着の駅のノードIDを確認しておきます 連結成分を計算します(WCC: Weakly Connected Compornent) analyst.wcc(G) | x.wcc | num_station | +---------------------+ | 1 | 8915 | | 0 | 15 |
  57. 57. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 連結している? 57 分割された小さいほうのグラフに含まれる駅を表示します G.queryPgql(" SELECT r.name, x.name, y.name WHERE (x)-[r]-(y), x.wcc=0, y.wcc=0 ").getResults() ==> r.name(STRING)=ゆいレール x.name(STRING)=那覇空港 y.name(STRING)=赤嶺 ==> r.name(STRING)=ゆいレール x.name(STRING)=赤嶺 y.name(STRING)=那覇空港 ==> r.name(STRING)=ゆいレール x.name(STRING)=赤嶺 y.name(STRING)=小禄 ==> r.name(STRING)=ゆいレール x.name(STRING)=小禄 y.name(STRING)=赤嶺 ==> r.name(STRING)=ゆいレール x.name(STRING)=小禄 y.name(STRING)=奥武山公園 ==> r.name(STRING)=ゆいレール x.name(STRING)=奥武山公園 y.name(STRING)=小禄 ==> r.name(STRING)=ゆいレール x.name(STRING)=奥武山公園 y.name(STRING)=壺川 ==> r.name(STRING)=ゆいレール x.name(STRING)=壺川 y.name(STRING)=奥武山公園 ==> r.name(STRING)=ゆいレール x.name(STRING)=壺川 y.name(STRING)=旭橋 ==> r.name(STRING)=ゆいレール x.name(STRING)=旭橋 y.name(STRING)=壺川
  58. 58. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 最短経路は? 58 G.queryPgql(" SELECT x.id() WHERE (x), x.name='外苑前' ").print() G.queryPgql(" SELECT x.id() WHERE (x), x.name='名古屋' ").print() 出発と到着の駅のノードIDを確認しておきます | x.id() | +---------+ | 2800117 | | x.id() | +---------+ | 1190412 |
  59. 59. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 最短経路は? 59 Path.getPathLengthWithHop() 最短で何ホップで到達できるかがわかります。 ==> 360 エッジのスコア(今回は距離や時間のデータがないため全て 1 としています)を 指定してダイクストラ法で最短経路を計算します。計算量は O (N log(N)) です。 node1 = G.getVertex(2800117) node2 = G.getVertex(1190412) score = G.getEdgeProperty("score") Path = analyst.shortestPathDijkstra(G, node1, node2, score) Path.exists() ==> true
  60. 60. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 最短経路は? 60 最短経路上の駅を確認します。ただし、このデータには新幹線など一部のデータ が含まれていないことにご留意ください。 vList = Path.getVertices() eList = Path.getEdges() hops = Path.getPathLengthWithHop() for (i=0; i<hops+1; i++) { print vList[i].getProperty("name") if (i==hops) { print "n" } else { print " > " } } 外苑前 > 表参道 > 渋谷 > 新宿 > 吉祥寺 > 三鷹 > 国分寺 > 立川 > 八王子 > 高尾 > 相模湖 > 藤野 > 上野原 > 四方津 > (略) > 加治木 >錦江 > 帖佐 > 姶良 > 重富 > 竜ケ水 > 鹿児島
  61. 61. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 61 PGX.D
  62. 62. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. PGX.D ― 分散処理版 PGX 62
  63. 63. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. PGX.D ― HPC の SC15 で Best Paper のひとつに 63 http://sc15.supercomputing.org/conference-program/technical-program/papers/best-student-paper-and-paper-finalists
  64. 64. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 64 参考資料
  65. 65. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved. 参考資料 • Oracle Labs PGX(再掲) • 関連する Oracle 製品 • Oracle Database Spatial and Graph • Oracle Big Data Spatial and Graph • 関連する SlideShare 資料 • Hadoop Conference Japan 2016 LT資料 グラフデータベース事始め • オラクルのHadoopソリューションご紹介 65
  66. 66. Copyright © 2016-2017 Oracle and/or its affiliates. All rights reserved.

×