Yukinobu Hamuro
hamur****@adm*****
2004年 8月 16日 (月) 10:53:46 JST
鷲尾先生、羽室です。 現在、XMLtable→GraphMLの変換コマンドを作っていますが、 先の3つの質問の続きとして、確認の意味も含めまして意見をいただけたらと思います。 XMLtable→GraphMLでは、vertexとedgeの情報は別々のファイルにあることを前提とします。 そこで、vertexIDとEdgeのbgnVertexID,endVertexIDをいかにして同一のものと識別するかという点について、化学式と以下のような例とでは少し違いがあるような気 がしました。 現在こちらで想定しているデータは、例えばアソシエーションルールの結果をGraphMLで表現する場合で、 以下のようなものです。 ------- node.xt ------- ブランド 価格 売上数量 A 100 20 B 80 15 C 60 90 ------- edge.xt ------- ブランド1 ブランド2 confidence lift A B 0.7 1.0 B A 0.6 1.0 B C 0.8 2.1 C B 0.3 2.1 C A 0.5 1.2 A C 0.4 1.2 (confidenceは"directed"、liftは"undirected") xt2gmlコマンドは8つのパラメータを持ち、上記のファイルをGraphMLに変換すると 次のようになります(パラメータのキーワードは分かりやすいものに変えています)。 xt2gml -vertexFile node.xt -vertexID ブランド -vertexLabel 価格,売上数量 -edgeFile edge.xt -edgeBgnVertexID ブランド1 -edgeEndVertexID ブランド2 -edgeUndirectedLabel confidence -edgeUndirectedLabel lift -o result.gml (-vertexLabel, -edgeUndirectedLabel, -edgeUndirectedLabelは省略可) 注)xt2gmlでは、-kというパラメータを用意しておりまして、複数のグラフ(Graph要素に対応)も変換可能ですが、ここでは簡単のために省いています。 結果は、以下の通りです。 ---------- result.gml ---------- : <Vertex vertexID="1" dimension="3"> <VertexLabel field="ブランド" value="A" /> <VertexLabel field="価格" value="100"/> <VertexLabel field="売上数量" value="20" /> </Vertex> <Vertex vertexID="2" dimension="3"> <VertexLabel field="ブランド" value="B" /> <VertexLabel field="価格" value="80" /> <VertexLabel field="売上数量" value="15" /> </Vertex> <Vertex vertexID="3" dimension="3"> <VertexLabel field="ブランド" value="C" /> <VertexLabel field="価格" value="60" /> <VertexLabel field="売上数量" value="90" /> </Vertex> : : <Edge edgeId="1" edgeType="directed" dimension="1" bgnVertexId="1" endVertexId="2"> <EdgeLabel field="confidence" value="0.7" /> </Edge> <Edge edgeId="2" edgeType="undirected" dimension="1" bgnVertexId="1" endVertexId="2"> <EdgeLabel field="lift" value="1.0" /> </Edge> : : ===================================================================================== この場合、node.xtにおける「ブランド」はvertexIDとしての役割を担っています。 ただ、GraphMLではvertexIDはINT型なので、xt2gmlコマンドが内部的にINT番号を振り、「ブランド」はVertexLabelにします。 一方で、以前に送っていただいた化学式は、テーブルで表すと以下のようになると思われます。 -------- node2.xt -------- ID atomy 1 H 2 H 3 C 4 C 5 H 6 H -------- edge2.xt -------- ID1 ID2 bondtype 1 3 singlebond 2 3 singlebond 3 4 doublebond : : このデータを現在の仕様のxt2gmlで変換すると、Edgeについては問題ありませんが、Vertexは以下のようになり、 不必要なVertexLabel(ID)が含まれることになります。 <Vertex vertexID="1" dimension="2"> <VertexLabel field="ID" value="1"> <VertexLabel field="atomy" value="H"> </Vertex> この問題の解決法は2つだと思います。 1) 元データには必ずGraphMLにおけるvertexIDを含める。 例えばアソシエーションルールのような例であっても、各vertexにINT番号を以下のように振る。 ID ブランド 価格 売上数量 1 A 100 20 2 B 80 15 3 C 60 90 そして、コマンドパラメータは以下のように変更し、前述のものと同様な結果が得られるように変更する。 xt2gml -vertexID ID -vertexLabel ブランド,価格,売上数量 -edgeBgnVertexID ID1 -edgeEndVertexID ID2 (その他のパラメータは同じ) ~~ ~~~~~~~~ 2) vertexIDの問題はさほど大きくないと考え、現状のコマンド仕様を採用する。 方法1)の欠点は、データを用意するユーザにINTのIDを振る手間をかけてしまいます。 vertexだけでなくedgeの{bgn|end}VertexIDもINTのIDにする必要があります。 以上のようなことを考えながらxt2gmlコマンドを作成中です。 vertexIDの問題だけでなく、お気づきの点がありましたらご指摘ねがいます。 よろしくお願いします。 ---- Yukinobu Hamuro hamur****@adm*****