[Musashi-devel 21] Re: xt2gml コマンド

Back to archive index

Yukinobu Hamuro hamur****@adm*****
2004年 8月 16日 (月) 13:54:17 JST


鷲尾先生、羽室です。

agmの利用者として矢田先生に質問した方がよいのかもしれません。
矢田先生はまだMUSASHI-develに登録されていないようで。。。
登録お願いできますか?>矢田先生。

私の経験だけで話をしますと、方法1)によるものは混乱をきたすのではと考えています。
この問題はRDBでプライマリキー(entity)を項目の組み合わせで設定するか、
もしくはシーケンシャルな番号を裏で設定するかの差と同じような話だと思われます。

アソシエーションルールの例にありますように、通常、entityとしてのノード(すなわちユニークキー)が具体的なイメージ(例えば「ブランド」)として既にあると思わ
れます。
にも関わらず、ノード番号を振りなおさなければならないというのは、「なんで?」といことになるような気がします。
化学式のように、元素記号だけではユニークにならないようなケースを示して初めて「なるほど」ということになるでしょうが。

>下でおっしゃっている解決方法1)なら誰が見てもnode.xtとedge.xtの関係がわかり、
>どれがvertexのIDかが記されていますから、データの曖昧性がないわけです。
はい、その通りですね。

>解決方法2)の現状フォーマットの場合、どの項目を-vertexIDとしてオプション指定
>するかで、まるでグラフというかデータの意味が変わってきますね。問題はこれが
>好都合なことなのか、それとも不都合なことなのか、だと思います。
>
>同じデータでも、ユーザーの都合で-vertexIDとするキーを柔軟に変えて扱いたい
>なら、現状の解決方法2)がいいと思います。しかし、そのような使用があまりないなら、
>データ表現の曖昧性を排除する上から解決方法1)が望ましいでしょう。
同じデータについて、キーを変えるということは稀だと思います。
「キーを柔軟に変えれるように」-vertexIDというオプションでキーを指定させるようにしたのではなく、
むしろ、ユーザが「vertexをユニークに決める属性とは何か」を考えるとき、
私の経験上、例えば「ブランド」のような具体的なentityが存在するケースが多いと思い、解決案2が良いのではと考えました。

>現状、私達の問題では、解決方法2)のようにユーザーがキーを任意に指定する
>ようなデータや使い方は経験したことがないので、解決方法1)が望ましいと思って
>います。
そうですね。厳密に考えると解決案1の方が美しいですね。

>羽室先生の場合、どうでしょうか。ユーザーがキーを任意に指定する解決方法2)の
>ようなニーズはあるのでしょうか。
はい、アソシエーションルールの例で示したようなケースを考えていましたので、
解決方法1がINTの番号をわざわさ振らなければならないという意味において、
解決方法2の方が自然かと思いました。


>>現在、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 mailing list
>>Musas****@lists*****
>>http://lists.sourceforge.jp/mailman/listinfo/musashi-devel
>
>
>_______________________________________________
>Musashi-devel mailing list
>Musas****@lists*****
>http://lists.sourceforge.jp/mailman/listinfo/musashi-devel
>

----
Yukinobu Hamuro  hamur****@adm*****



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