Takashi Washio
washi****@ar*****
2004年 8月 16日 (月) 12:04:47 JST
羽室先生 鷲尾です。 以下、大概理解しました。これはデータの厳密性というか、どこまでをデータに含め、 どこからをユーザーの任意にするかという問題に関わりますね。 下でおっしゃっている解決方法1)なら誰が見てもnode.xtとedge.xtの関係がわかり、 どれがvertexのIDかが記されていますから、データの曖昧性がないわけです。 解決方法2)の現状フォーマットの場合、どの項目を-vertexIDとしてオプション指定 するかで、まるでグラフというかデータの意味が変わってきますね。問題はこれが 好都合なことなのか、それとも不都合なことなのか、だと思います。 同じデータでも、ユーザーの都合で-vertexIDとするキーを柔軟に変えて扱いたい なら、現状の解決方法2)がいいと思います。しかし、そのような使用があまりないなら、 データ表現の曖昧性を排除する上から解決方法1)が望ましいでしょう。 現状、私達の問題では、解決方法2)のようにユーザーがキーを任意に指定する ようなデータや使い方は経験したことがないので、解決方法1)が望ましいと思って います。 羽室先生の場合、どうでしょうか。ユーザーがキーを任意に指定する解決方法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