1

ETL (抽出変換読み込み) パイプラインとのさまざまなデータ エンティティの関係を表現しようとしています。最終的な出力は、大きな有向グラフです。これまでのところ、Python を使用してデータ関係を抽出しています。Pydot は、ブラウザーを使用して開くことができる svg ファイルを生成するのに役立ちます。私が生成するグラフは静的です。

Pydot を使用すると、ツールチップを設定したり、他の HTML ページをノードまたはエッジにリンクしたりできます。それ以上のものを探しています。

グラフのごく一部を以下に示します

有向グラフ

ここに画像の説明を入力

このグラフでいくつかのことをしたいと思います。

  • すべてのノードは、複数の属性 (名前を含む) を持つことができます。スペースが不足しているため、これらの属性を表示することはできません。しかし、ユーザーがマウスオーバーする (または他のマウスベースのアクションを実行する) と、これらの属性が「フローティング」テーブルとして表示され、ユーザーが興味がない場合は閉じることができます。
  • すべてのノード アトリビュートが整数または文字列であるとは限りません。グラフでも構いません。たとえば、ノードの 1 つについて、このデータ エンティティが過去 7 日間に読み込まれた頻度を示す棒グラフを使用できます。ユーザーがそのノードの上にマウスを移動 (クリック) すると、その棒グラフが浮かび上がります。現在、ノードに関連付けられた棒グラフ/円グラフ (上記を参照) を生成するために matplotlib を使用しています。pydot で setURL を使用して、これらの図を元の有向グラフにリンクします。しかし、ユーザーが新しいページに移動するため、ユーザー エクスペリエンスは良くありません。
  • Pydot/GraphViz からデフォルトで取得するノード レイアウトなどに満足しています。絶対に必要でない限り、すべてをゼロから行うことは好まない.
  • ノードまたはエッジ属性のクエリに基づいて、グラフの特定の部分のみを強調表示する機能

私はこのフォーラムを読み、私のものと同様の質問に対するいくつかの選択肢を見つけました。

  • ゲフィ

  • igraph (頂点またはエッジでクエリできる igraph をいじってみました。ユーザー入力に基づいて最終的なグラフをインタラクティブにする方法がわかりませんでした。たとえば、ノードの上にマウスを置いてテーブルをフローティングするなど)。
  • Javascript ライブラリ - sigma.js、arbor.js、d3.js ノードボックス
  • ネットワークX
  • ノードボックス

Python のスキルはありますが、Javascript に関しては初心者です。(機能性と使いやすさの観点から)何が最善の策であるかを専門家から知りたいです。ブラウザベースのソリューションが推奨されます。

任意の提案/ヘルプをいただければ幸いです。

ありがとうアビジット

4

1 に答える 1

1

NetworkX を試してみてください。ノード属性は、(少なくとも) 最初の 2 つの箇条書きに対処できるように、ハッシュ可能なものであれば何でもかまいません。

グラフの生成には引き続き matplotlib を使用します。それよりも良い解決策を私は知りません。

于 2013-06-17T21:53:22.077 に答える