0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE html>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 <html>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <head>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <style type="text/css">
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 .center {
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 margin-left: auto;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 margin-right: auto;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 text-align: center;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 }
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 </style>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 <title>Presentation</title>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <meta charset='utf-8'>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 <script src='./slides.js'></script>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 </head>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 <body style='display: none'>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <section class='slides layout-regular template-default'>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <h1>GraphDB 入門<br>TinkerPop の使い方</h1>
|
5
|
20 <p>Shoshi Tamaki<br>Nobuyasu Oshiro<br>08 Sep 2012</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 </article>
|
5
|
22
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 <h3>もくじ</h3>
|
5
|
25 <br/>
|
|
26 <small>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 <ul>
|
5
|
28 <li>ストライクウィッチーズで,GraphDB/TinkerPop入門</li>
|
|
29 <ul>
|
|
30 <li>GraphDBとは</li>
|
|
31 <li>PropertyGraphについて</li>
|
|
32 <li>TinkerPopとは</li>
|
|
33 <li>TinkerPopを使ってストライクウィッチーズの相関図を解析</li>
|
|
34 </ul>
|
|
35 <li>TinkerPop による PageRank の実装</li>
|
|
36 <ul>
|
7
|
37 <li>PageRank アルゴリズム</li>
|
|
38 <li>Page と PageRank の GraphDB による表現</li>
|
|
39 <li>TinkerPop による PageRank の計算</li>
|
|
40 <li>Pipes による走査</li>
|
|
41 <li>PageRank の計算にかかる時間</li>
|
5
|
42 </ul>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 </ul>
|
5
|
44 </small>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 <h3>GraphDB とは?</h3>
|
5
|
49 <p>Graph構造を保存するためのデータベース.</p>
|
|
50 <p>Graph構造とは,たとえばこんなもの</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 <br/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 <img src="./images/de2bf86e.jpeg" class="centered" height="470px"/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 <h3>GraphDB とは?</h3>
|
5
|
57 <p>このような構造をしたGraphは<span style="color: red">PropertyGraph</span>と呼ばれる.</p>
|
|
58 <p>PropertyGraphとは,</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 <br/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 <img src="./images/propertygraph_sw.png" height="470px" class="centered"/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 <article>
|
5
|
64 <h3>PropertyGraph</h3>
|
|
65 <p><span color="red">関係・人物・名前・特徴</span>は<span color="red">Vertex・Edge・Label・Property</span>と呼ばれる.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 <small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 <ul>
|
5
|
68 <li>Edge(関係)が方向を持つ</li>
|
|
69 <li>Vertex(人物)とEdge(関係)はLabel(名前)を持つ</li>
|
|
70 <li><span style="color: red">VertexとEdgeはKey/Valueのマップ(Property)を持っている.</span></li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 </small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 <img src="./images/propertygraph_sw2.png" height="400px" class="centered"/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 <article>
|
5
|
77 <h3>GraphDBとは?</h3>
|
|
78 <p>GraphDBは,保存されたGraphのVertex,Edgeを渡り歩き,目的のデータを取得するようなデータベースである.</p>
|
|
79 <p>渡り歩くことをTraverseという.</p>
|
|
80 <br/>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 <img src="./images/traverse_sw.png" class="centered"/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83
|
5
|
84 <!--
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 <article>
|
5
|
86 <h3>GraphDB入門</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 <p>ここまでに,GraphDB とそのデータ構造である,Property Graph とは何か説明してきた.</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 <p>今日は,この<span style="color: red">ストライクウィッチーズの相関図</span>を GraphDB に叩きこみ <span style="color:red">TinkerPop</span> を使って解析する.</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 <br/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 <img src="./images/today-demo.png" class="centered"/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 </article>
|
5
|
92 -->
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 <h3>TinkerPop</h3>
|
5
|
96 <p>TinkerPopはGraphDBを利用するためのツール群である.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 <br/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 <br/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 <img height="300px" src="./images/tinkerpop_with_name.png" class="centered"/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 <h3>Blueprints</h3>
|
5
|
104 <p>Blueprintsは,PropertyGraphのJavaのinterfaceを提供する.</p>
|
|
105 <p>GraphDBの世界のJDBCの立場を目指している.</p><br/>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 <small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 Blueprints を実装している GraphDB の一例
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 <li>Neo4j<li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 <li>OrientDB</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 <li>MongoDB</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 <li>etc...</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 </small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 <img src="./images/blueprints-logo.png" height="100px"/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 <h3>Gremlin</h3>
|
5
|
120 <p>GraphをTraverseするための言語.Groovyがベースである.GraphDBに対してQueryを発行することが出来る.コンソールも利用できる.</p>
|
|
121 <pre>gremlin> graph.v(1).out.name
|
|
122 ==>vadas
|
|
123 ==>lop
|
|
124 ==>josh</pre>
|
|
125 <p>GremlinはPipesを利用して,GraphをTraverseする..out.nameがPipeである..</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 <img src="./images/gremlin-logo.png"/>
|
5
|
127 </article>
|
|
128
|
|
129 <article>
|
|
130 <h3>Pipes</h3>
|
|
131 <p>PipesはGraphを処理するためのフレームワークである.Pipeという処理の単位を複数連結し,複雑なTraverseを実現する.</p>
|
|
132 <img src="./images/pipes.png" height="150px" class="center"/>
|
|
133 <p>graph.v(1)はGraphからIDか1のVertexを取得する,.out .name がぞれぞれPipeに値する.</p>
|
|
134 <img src="./images/pipes-logo.png" height="200px"/>
|
|
135 </article>
|
|
136
|
|
137 <article>
|
|
138 <h3>Pipes</h3>
|
|
139 <p>この例題の動作は・・・</p>
|
|
140 <br/>
|
|
141 <br/>
|
|
142 <img style="float: left; margin-right:10px" src="./images/pipes-mario-2.png" height="300px"/>
|
|
143 <br/>
|
|
144 <img src="./images/pipes-mario-4.png" height="75px"/>
|
|
145 <pre>gremlin> g.v(1).out.name
|
|
146 ==>vadas
|
|
147 ==>lop
|
|
148 ==>josh</pre>
|
|
149 <br style="clear: both;"/>
|
|
150 <small>
|
|
151 <p>outはVertexから外向きのEdgeで繋がっているVertex一覧を取得する,nameはProperty名でPipeではVertexのnameを取得している.</p>
|
|
152 </small>
|
|
153 </article>
|
|
154
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 <br/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 <ol>
|
5
|
159 <li>BlueprintsでTinkerGraphにストライクウィッチーズの相関図を入力する.</li>
|
|
160 <li>作成したTinkerGraphを,</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 <ul>
|
5
|
162 <li>Gremlinのコンソールから解析してみる.</li>
|
|
163 <li>JavaからGremlinを使って解析してみる.</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 </ol>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 <br/>
|
5
|
167 <p>まずは,TinkerGraphにストライクウィッチーズの相関図を入力する.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 <article>
|
5
|
171 <h3>この発表のサンプルコードについて</h3>
|
|
172 <br/>
|
|
173 <p><span style="color:red">hg clone https://bitbucket.org/suikwasha/graphdb_javakuche</span></p>
|
|
174 <br/>
|
|
175 <small>
|
|
176 <p>Mavenというプロジェクト管理ツールを利用したプロジェクトになってます.</p>
|
|
177 </small>
|
|
178 <pre>ビルド方法・解凍したディレクトリに移動して
|
|
179 $ mvn compile</pre>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
5
|
184 <p>Blueprintsは,GraphDBへのインターフェイスを提供する.TinkerGraphはBlueprintsを用いて利用できる.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 <small>
|
5
|
186 <p>相関図のGraphを作るためには,<span style="color:red">Graph</span>を作成し<span style="color:red">人物(Vertex)</span>と<span style="color:red">関係(Edge)</span>,<span style="color:red">特徴(Property)</span>を作る必要がある.</p>
|
|
187 </small>
|
|
188 <small>
|
|
189 <pre>// 相関図(Graph)の作成,データを保存するディレクトリを引数に取る
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 Graph g = new TinkerGraph();</pre>
|
5
|
191 <pre>// 人物(Vertex)の作成,設定したいIDを引数に取る
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 Vertex character = g.addVertex(ID);</pre>
|
5
|
193 <pre>// 関係(Edge)の作成,設定したいIDを引数に取る
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 Edge relation = g.addEdge(ID,From,To,Label);</pre>
|
5
|
195 <pre>// 特徴(Property)の作成 , Vertex・Edgeともに同様のメソッド
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 character.setProperty(PropertyName,PropertyValue);</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 </small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
5
|
202 <p>これを入力します.</p>
|
|
203 <img src="./images/de2bf86e.jpeg" height="550px" class="centered"/>
|
|
204 </article>
|
|
205
|
|
206 <article>
|
|
207 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 <p>画像を見ながらコードに書き起こすと・・・</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 <small>
|
5
|
210 <pre>Graph g = new TinkerGraph("./strikewitches"); // 保存ディレクトリ
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 Vertex strikeWitches = g.addVertex("StrikeWitches");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 Vertex yoshika = g.addVertex("yoshika");
|
5
|
213 yoshika.setProperty(propName,"宮藤芳佳");
|
|
214 yoshika.setProperty(propRank,"軍曹");
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 yoshika.setProperty(propAge,14);
|
5
|
216 yoshika.setProperty(propCV,"福圓美里");
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 yoshika.setProperty(propUnit,"扶桑皇国海軍遣欧艦隊");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 yoshika.setProperty(propPersonality,"明るく前向きで一生懸命");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 Vertex lynett = g.addVertex("lynett");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 lynett.setProperty(propName,"リネット・ビショップ");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 lynett.setProperty(propRank,"軍曹");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 lynett.setProperty(propAge, 15);
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 lynett.setProperty(propCV,"名塚佳織");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 lynett.setProperty(propUnit,"ブリタニア空軍");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 lynett.setProperty(propPersonality,"家庭的で戦闘は苦手");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 g.addEdge(null,yoshika,lynett,"仲良し新人コンビ");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 g.addEdge(null,lynett,yoshika,"仲良し新人コンビ");</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 </small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 </article>
|
5
|
230
|
|
231 <article>
|
|
232 <h3>CreateStrikeWitchesGraph</h3>
|
|
233 <p>実際にコードを動作させてTinkerGraphに入力する.</p>
|
|
234 <br/>
|
|
235 <small>
|
|
236 <p>mvn exec:java -Dexec.mainClass=suikwasha.javakuche.CreateStrikeWitchesGraph</p>
|
|
237 </small>
|
|
238 <br/>
|
|
239 <p>プロジェクトのディレクトリにstrikwitchesが作成される.</p>
|
|
240 </article>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
241
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
242 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
5
|
244 <p>Blueprintsを用いてTinkerGraphに相関図を書き込むことが出来た.</p>
|
|
245 <p>今回は,Graph探索のサンプルのため"StrikeWitches"というキャラクター全員が所属する頂点を追加してある.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
246 <br/>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247 <ol>
|
5
|
248 <li>BlueprintsでTinkerGraphにストライクウィッチーズの相関図を入力する.</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 <span style="color:red">
|
5
|
250 <li>Gremlinを使って,TinkerGraphを読み込み,</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 <ul>
|
5
|
252 <li>Gremlinのコンソールから解析してみる.</li>
|
|
253 <li>JavaからGremlinを使って解析してみる.</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
254 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
255 </span>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
256 </ol>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
257 <br/>
|
5
|
258 <p>では,Gremlinを利用して相関図を解析してみる.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
259 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
260
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
261 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
262 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
5
|
263 <p>Gremlinのセットアップ</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
264 <ul>
|
5
|
265 <li>github tinkerpop/gremlin > Wiki のdownloadsから<span style="color:red">gremlin-groovy-2.1.0.zip</span>を利用する.</span></li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
266 <li>解凍して展開する.</li>
|
5
|
267 <li>bin/gremlin.shを実行</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
268 </ul>
|
5
|
269 <pre>% ./gremlin.sh [~/Downloads/gremlin-groovy-2.1.0/bin]
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
270 \,,,/
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
271 (o o)
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
272 -----oOOo-(_)-oOOo-----
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
273 gremlin></pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
274 <p>こんなの表示される.</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
275 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
276
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
277 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
278 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
279 <p>Gremlin に相関図を食べさせて,解析開始.</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
280 <pre>gremlin> g = new TinkerGraph("path_to_graph");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
281 ==>tinkergraph[vertices:12 edges:32 directory:path_to_graph]
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
282 gremlin> </pre>
|
5
|
283 <p>Vertexの一覧を取得してみる.</p>
|
|
284 <pre>gremlin> g.V // GraphのVertex一覧
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
285 ==>v[mio]
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
286 ...
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
287 ==>v[minna]
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
288 ==>v[lynett]
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
289 ...
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
290 ==>v[gertrud]
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
291 ==>v[francesca]</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
292 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
293
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
294 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
295 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
296 <p><span style="color:red">宮藤芳佳</span>の<span style="color:red">年齢</span>を取得.</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
297 <pre>gremlin> g.v("yoshika").age
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
298 ==>14</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
299 <p><span style="color:red">宮藤芳佳</span>を<span style="color:red">指導</span>しているのは誰?</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
300 <pre>gremlin> g.v("yoshika").in("指導").name
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
301 ==>坂本美緒</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
302 <p><small><span style="color:red">宮藤芳佳</span>のことを<span style="color:red">きっー!なんなんですのアナタは!?</span>と思っている人が<span style="color:red">勤務態度に不満</span>を持っている人たち</small></p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
303 <pre>gremlin> g.v("yoshika").in("きっー!なんなんですのアナタは!?")
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
304 .out("勤務態度に不満").name
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
305 ==>シャーロット・E・イエーガー
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
306 ==>フランチェスカ・ルッキーニ</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
307 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
308
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
309 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
310 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
5
|
311 <p><small><span style="color:red">宮藤芳佳</span>のことを<span style="color:red">きっー!なんなんですのアナタは!?</span>と思っている人が<span style="color:red">勤務態度に不満</span>を持っている人たち</small></p>
|
|
312 <pre>gremlin> g.v("yoshika").in("きっー!なんなんですのアナタは!?")
|
|
313 .out("勤務態度に不満").name
|
|
314 ==>シャーロット・E・イエーガー
|
|
315 ==>フランチェスカ・ルッキーニ</pre>
|
|
316 <img src="./images/traverse_demo.png" height="250px" class="centered"/>
|
|
317 </article>
|
|
318
|
|
319 <article>
|
|
320 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
321 <p><span style="color:red">16歳以下</span>の<span style="color:red">ウィッチ一覧</span></p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
322 <pre>gremlin> g.v("StrikeWitches").out.filter{it.age < 16}.name
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
323 ==>宮藤芳佳
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
324 ==>エイラ・イルマタル・ユーティライネン
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
325 ==>サーニャ・V・リトヴャク
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
326 ==>リネット・ビショップ
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
327 ==>ペリーヌ・クロステルマン
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
328 ==>フランチェスカ・ルッキーニ</pre>
|
5
|
329 <small>
|
|
330 <p>{it.age < 16}はクロージャである.outで出力されたキャラクターのVertexが,それぞれitに格納される.Groovyでitは暗黙に定義されるクロージャの変数であり,第一引数が自動的に割り当てられる.</p>
|
|
331 </small>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
332 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
333
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
334 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
335 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
5
|
336 <p>GremlinをJavaから使うためには,Mavenを利用するのが簡単である.</p>
|
|
337 <p>Mavenはプロジェクト管理ツールであり,他のプロジェクトのライブラリを簡単に取り込むことができる.</p>
|
|
338 <p>pom.xmlにGremlinを取り込むように記述する.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
339 <pre><dependency>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
340 <groupId>com.tinkerpop.gremlin</groupId>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
341 <artifactId>gremlin-java</artifactId>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
342 <version>2.1.0</version>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
343 </dependency></pre>
|
5
|
344 <p>"Using Gremlin through Java" よりtinkerpop/gremlin wiki</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
345 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
346
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
347 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
348 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
5
|
349 <p>TinkerGraphで作った,相関図を読み込む</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
350 <pre>Graph g = new TinkerGraph("path_to_graph");</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
351 <p>GremlinPipeline の作成</p>
|
5
|
352 <pre>GremlinPipeline<Vertex,String> pipe
|
|
353 = new GremlinPipeline<Vertex,String>();
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
354 pipe.start(g.getVertex("yoshika"))....</pre>
|
5
|
355 <p>GremlinはGraphに対して処理をするPipeをつなげて,複雑な探索を可能にする.Gremlin コンソールでは見えないが,JavaではPipesを利用しているのが確認できる.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
356 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
357
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
358 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
359 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
360 <p><span style="color:red">宮藤芳佳</span>を<span style="color:red">指導</span>しているのは誰?</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
361 <pre>pipe.start(g.getVertex("yoshika")).in("指導").property("name");
|
5
|
362 for(String name : pipe){
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
363 System.out.println("name")
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
364 }</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
365 <p><small><span style="color:red">宮藤芳佳</span>のことを<span style="color:red">きっー!なんなんですのアナタは!?</span>と思っている人が<span style="color:red">勤務態度に不満</span>を持っている人たちの年齢</small></p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
366 <pre>pipe.start(g.getVertex("yoshika")).in("きっー!なんなんですのアナタは!?")
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
367 .out("勤務態度に不満").property("age");
|
5
|
368 for(Integer age : pipe){
|
|
369 System.out.println(age);
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
370 }</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
371 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
372
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
373 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
374 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
375 <p><span style="color:red">15歳以上</span>の<span style="color:red">ウィッチーズの名前</span></p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
376 <pre>pipe.start(g.getVertex("StrikeWitches")).out("member")
|
5
|
377 .filter(new PipeFunction<Vertex,Boolean>(){
|
|
378 public Boolean compute(Vertex _argument){
|
|
379 return (Integer)_argument.getProperty("age") >= 15;
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
380 }
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
381 }).name;
|
5
|
382 for(String name : pipe){
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
383 System.out.println(name);
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
384 }</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
385 <p>書き方としては,Gremlin コンソールでのほうが簡潔.</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
386 <pre>gremlin> g.v("StrikeWitches").out.filter{it.age > 15}.name</pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
387 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
388
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
389 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
390 <h3>ストライクウィッチーズの相関図を解析するには?</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
391 <p>Gremlin コンソールでの書き方を Java で利用することができる.</p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
392 <pre>Pipe pipe = Gremlin.compile("_().out.filter{it.age > 15}.name");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
393 pipe.setStarts(
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
394 new SingleIterator<Vertex>(g.getVertex("StrikeWitches"));
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
395 for(Object name : pipe){
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
396 System.out.println(name);
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
397 }</pre>
|
5
|
398 <p>_()はGremlinePipelineに定義されている何もしないPipe</p>
|
|
399 <p>JavaでPipeを直接構築するより,こっちのほうが簡単である.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
400 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
401
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
402 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
403 <h3>まとめ</h3>
|
5
|
404 <p>これまでに,ストライクウィッチーズの相関図を利用してGraphDBの概要とTinkerPopの簡単な使い方を見てきた.</p>
|
|
405 <p>この発表で大体のイメージが掴めてもらえれば幸いです.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
406 <ul>
|
5
|
407 <li>GraphDBは,GraphのEdgeをTraverseして,目的のデータを取得するデータベース</li>
|
|
408 <li>GraphDBは,PropertyGraphを格納する.</p>
|
|
409 <li>TinkerPopは,GraphDBを利用するためのツールの集合</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
410 </ul>
|
5
|
411 <br/>
|
|
412 <p>次に,具体的な利用例としてPageRankのGraphDBでの表現について発表する.</p>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
413 </article>
|
5
|
414
|
1
|
415
|
5
|
416
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
417 <article>
|
1
|
418 <h3>Google の PageRank アルゴリズム</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
419 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
420 <li>Google の Webページ検索エンジンに使われているアルゴリズム。</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
421 <li>あるページの『重要度』を示す値で、各ページ毎に持っている。 </li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
422 <li>PageRank が高いほど検索結果の上位に表示される。</li>
|
1
|
423 <li>『多くの良質なページからリンクされているページは、やはり良質なページである』という考えのアルゴリズム<br></li>
|
|
424 <li>GraphDB は PageRank の計算に向いている。</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
425 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
426 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
427
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
428
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
429 <article>
|
1
|
430 <h3>Page と PageRank の GraphDB による表現</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
431 <ul>
|
1
|
432 <li>アンサイクロペディアの各ページを GraphDB で表す。</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
433 <li>1 Vertex が1つのページを表す。</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
434 <li>各Vertex は Page Title と PageRank を Property として持つ。</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
435 <li>リンクは "HAS_LINK" という関係で表される。</li>
|
1
|
436 <li>PageRank は double で初期値は 0.15 , 最大値はページ数*0.15</li>
|
|
437 <li>アンサイクロペディアでは URI はページタイトルと同じ。</li>
|
|
438 <li>URI に対してユニークな Vertex ID を割り振る。</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
439 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
440 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
441
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
442 <article>
|
1
|
443 <h3>TinkerPop による PageRank の計算</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
444 <ul>
|
2
|
445 <li>○は Vertex を、→ は Edge を表す。</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
446 <p class="center">
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
447 <img src="./pic/graph.png" style="height:70%;">
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
448 </p>
|
2
|
449 <small><p>例:アンサイクロペディア内のページ『琉球大学』のリンクの関係 </p></small>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
450 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
451 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
452
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
453 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
454 <h3>PageRank アルゴリズム</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
455 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
456 <li>PageRank は次の計算式で求めることができる。</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
457 <pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
458 PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))</pre>
|
1
|
459 <li>PR(A) は A というページの PageRank を表す。</li>
|
|
460 <li>d は定数で 0.85</li>
|
|
461 <li>C(T1) は T1 というページがリンクを張っている数を表す。 </li>
|
2
|
462 <li>T1...Tn は A をリンクしているページなので、C(T1)...C(Tn) は 0 にならない。</li>
|
|
463 <li>Google の PageRank はこれを改良したものである。</li>
|
|
464 <!--
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
465 <li>PageRank はリンクを張ってくるページの PageRank が加算される。 </li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
466 <li>この時加算される PageRank はリンクの数で割られた値となる。</li>
|
2
|
467 -->
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
468 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
469 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
470
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
471 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
472 <h3>PageRank の取得</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
473 <ul>
|
1
|
474 <li>TinkerPop 上で PageRank の値を出すために以下の2つの値が必要</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
475 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
476 <li>リンク("HasLink")の関係を張ってくる Vertex の取得</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
477 <li>リンクしてくる Vertex がどれだけリンクを張っているかを取得</li>
|
2
|
478 <small><p>*各ページの情報は XML から取り出し Blueprints を用いて TinkerGraph に書き込み済み。</p></small>
|
|
479 <p class="center">
|
|
480 <img src="./pic/page_rank.png" style="height:40%;">
|
|
481 </p>
|
|
482
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
483 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
484 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
485 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
486
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
487 <article>
|
2
|
488 <h3>Pipes による走査</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
489 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
490 <li>あるページへとリンクを張るページ(Vertex)の取得</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
491 <pre>
|
2
|
492 Graph graph = ...
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
493 GremlinPipeline pipe = new GremlinPipeline();
|
2
|
494 pipe.start(graph.getVertex(id));
|
|
495 pipe.in("HasLink");
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
496 for (Object inVerObj : pipe) {
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
497 Vertex inVer = (Vertex)inVerObj;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
498 :
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
499 } </pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
500 <p class="center">
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
501 <img src="./pic/inHasLink.png" style="height:30%;">
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
502 </p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
503 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
504 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
505
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
506
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
507 <article>
|
2
|
508 <h3>Pipes による走査</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
509 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
510 <li>あるページが張っているリンクの数の取得</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
511 <pre>
|
2
|
512 Graph graph = ...
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
513 GremlinPipeline pipe = new GremlinPipeline();
|
2
|
514 pipe.start(graph.getVertex(id));
|
|
515 pipe.out("HasLink");
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
516 long linkNum = pipe.count();
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
517 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
518 <p class="center">
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
519 <img src="./pic/outHasLink.png" style="height:30%;">
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
520 </p>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
521
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
522 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
523
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
524 <article>
|
1
|
525 <h3>TinkerPop による PageRank の計算</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
526 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
527 <pre>
|
2
|
528 final double weight = 0.85;
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
529 double sum = 0.0;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
530 double pageRank = 0.0;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
531 Vertex v = graph.getVertex(id);
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
532 GremlinPipeline pipe = new GremlinPipeline();
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
533 pipe.start(graph.getVertex(id)).in("HasLink");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
534 for (Object inVerObj : pipe) {
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
535 Vertex inVer = (Vertex) inVerObj;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
536 Object inVerId = inVer.getId();
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
537 GremlinPipeline inPipe = new GremlinPipeline();
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
538 inPipe.start(graph.getVertex(inVerId)).out("HasLink");
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
539 long linkNum = inPipe.count();
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
540 double pr = (Double) inVer.getProperty(PAGE_RANK);
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
541 sum += (double) pr / linkNum;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
542 }
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
543 pageRank = (double) 1 - weight + (double) sum * weight;
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
544 v.setProperty(PAGE_RANK, pageRank);
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
545 </pre>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
546 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
547 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
548
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
549 <article>
|
7
|
550 <h3>計算結果</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
551 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
552 <li>アンサイクロペディア内で PageRank の高いページ</li>
|
2
|
553 <li>総ページ数: 242014 ページ</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
554 <table>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
555 <tr>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
556 <td>ページ名</td>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
557 <td>リンク数</td>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
558 <td>PageRank</td>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
559 </tr>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
560 <tr>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
561 <td>ユーモア枯渇症</td>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
562 <td>7162</td>
|
4
|
563 <td>71.120</td>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
564 <!-- <td>2.9387157726301383E-4</td> -->
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
565 </tr>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
566 <tr>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
567 <td>日本</td>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
568 <td>3537</td>
|
4
|
569 <td>54.584</td>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
570 <!-- <td>2.2555002445844352E-4</td> -->
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
571 </tr>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
572 <tr>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
573 <td>アンサイクロペディア</td>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
574 <td>3887</td>
|
4
|
575 <td>54.164</td>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
576 <!-- <td>2.2381320294806578E-4</td> -->
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
577 </tr>
|
4
|
578 <tr>
|
|
579 <td>ウィキペディア </td>
|
|
580 <td>2414</td>
|
|
581 <td>44.617</td>
|
|
582 </tr>
|
|
583 <tr>
|
|
584 <td>ニンジャスター</td>
|
|
585 <td>177</td>
|
|
586 <td>36.167</td>
|
|
587 </tr>
|
|
588
|
|
589 </table>
|
|
590 </ul>
|
|
591 </article>
|
|
592
|
|
593 <article>
|
|
594 <h3>PageRank の計算にかかる時間</h3>
|
|
595 <ul>
|
|
596 <li>PageRank は 10 回程の計算でほぼ収束した。</li>
|
|
597 <table>
|
|
598 <td>
|
|
599 <img src="./pic/pageRank.png" style="height:70%;">
|
|
600 </td>
|
|
601 <td>
|
|
602 <img src="./pic/computePageRank.png" style="height:70%;">
|
|
603 </td>
|
|
604 </table>
|
|
605 <li>PageRank の計算は10回行うとして、ページ数に対してかかる時間を測ってみた。</li>
|
|
606 </ul>
|
|
607 </article>
|
|
608
|
|
609 <article>
|
|
610 <h3>PageRank の計算にかかる時間</h3>
|
|
611 <ul>
|
|
612 <li>各ページ数で行う10回計算をそれぞれ10回ずつタイムを測り平均をとった。</li>
|
|
613 <table>
|
|
614 <tr>
|
|
615 <td>ページ数</td>
|
|
616 <td>10回の計算にかかった時間(単位:ms)</td>
|
|
617 </tr>
|
|
618 <tr>
|
|
619 <td>100</td>
|
|
620 <td>21</td>
|
|
621 </tr>
|
|
622 <tr>
|
|
623 <td>1000</td>
|
|
624 <td>67</td>
|
|
625 </tr>
|
|
626 <tr>
|
|
627 <td>10000</td>
|
|
628 <td>976</td>
|
|
629 </tr>
|
|
630 <tr>
|
|
631 <td>50000</td>
|
|
632 <td>7140</td>
|
|
633 </tr>
|
|
634 <tr>
|
|
635 <td>100000</td>
|
|
636 <td>26150</td>
|
|
637 </tr>
|
|
638 <tr>
|
|
639 <td>200000</td>
|
|
640 <td>74130</td>
|
|
641 </tr>
|
|
642 <tr>
|
|
643 <td>242014</td>
|
|
644 <td>93512</td>
|
|
645 </tr>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
646 </table>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
647 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
648 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
649
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
650
|
4
|
651 <article>
|
|
652 <h3>PageRank の計算にかかる時間</h3>
|
|
653 <ul>
|
|
654 <img src="./pic/pageRankCompare.png">
|
|
655 </ul>
|
|
656 </article>
|
|
657
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
658 <article>
|
7
|
659 <h3>まとめ</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
660 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
661 <li>今回、TinkerPop を用いてアンサイクロペディアの各ページの PageRank を求めた。</li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
662 <li>各ページと Vertex, リンクの関係を Edge で表すことで各ページ間の関係を TinkerPop 上で表した。 </li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
663 <li>Gremlin を用いて各 Vertex を渡り歩ことで PageRank の計算を行った。</li>
|
7
|
664 <li>全 Vertex に対しての計算量は Vertex の数に比例する。 </li>
|
|
665 </ul>
|
|
666 </article>
|
|
667
|
|
668 <article>
|
|
669 <h3>まとめ</h3>
|
|
670 <ul>
|
|
671 <li></li>
|
|
672 <li></li>
|
|
673 <li></li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
674 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
675 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
676
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
677 <article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
678 <h3>参考文献・サイト</h3>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
679 <ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
680 <small><li>[1] Google の秘密 - PageRank 徹底解説<br>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
681 <a href="http://homepage2.nifty.com/baba_hajime/wais/pagerank.html">http://homepage2.nifty.com/baba_hajime/wais/pagerank.html</a></li></small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
682 <small><li>[2] Lawrence Page, Sergey Brin, Rajeev Motwani, Terry Winograd, 'The PageRank Citation Ranking: Bringing Order to the Web', 1998,<br>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
683 <a href="http://www-db.stanford.edu/~backrub/pageranksub.ps">http://www-db.stanford.edu/~backrub/pageranksub.ps</a></li></small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
684 <small><li>[3] The PageRank Algorithm<br>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
685 <a href="http://pr.efactory.de/e-pagerank-algorithm.shtml">http://pr.efactory.de/e-pagerank-algorithm.shtml</a></li></small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
686
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
687 <small><li>[4] グラフデータベースを用いた PageRank 実装の試み:スケーラブルなグラフ処理系に向けて<br>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
688 <a href="http://live-e.naist.jp/sensor_overlay/5/doc/hanai.pdf">http://live-e.naist.jp/sensor_overlay/5/doc/hanai.pdf</a></li></small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
689 <!--
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
690 <small><li>Taher H. Haveliwala, 'Efficient Computation of PageRank', Stanford Technical Report, 1999,<br>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
691 <a href="http://dbpubs.stanford.edu:8090/pub/1999-31">http://dbpubs.stanford.edu:8090/pub/1999-31</a></li>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
692 -->
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
693 </small>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
694 </ul>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
695 </article>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
696
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
697
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
698
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
699 <article>
|
5
|
700 <h3>なぜ PageRank なのか</h3>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
701 <ul>
|
5
|
702 <li>PageRank は Page と Page のリンクの有無を利用して計算できる。</li>
|
|
703 <li>GraphDB は Vertex と Vertex を結ぶ Edge を走査(Traverse)することで、
|
|
704 目的のデータを得るようなデータベースである。</li>
|
|
705 <li>また、GraphDB は局所性のあるデータを高速に計算することができる。 </li>
|
|
706 <li>PageRank の Page の関係は GraphDB の Vertex と Edge で表すことが出来る。 </li>
|
|
707 <li>また、Page の数が増えても局所的な計算ができるため GraphDB は PageRank
|
|
708 を求める DB に向いている。</li>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
709 </ul>
|
5
|
710 </article>
|
0
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
711
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
712
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
713 </section>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
714 </body>
|
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
715 </html>
|