[Musashi-devel 16] xt2gmlコマンド

Back to archive index

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*****



Musashi-devel メーリングリストの案内
Back to archive index