web-dev-qa-db-ja.com

グラフ探索とデータ過負荷

私は巨大なグラフを視覚化するのが大好きです(これは趣味です: http://anvaka.github.io/pm/ )。ただし、夜間に目を覚まし続ける1つの問題は、そのようなグラフでのデータの過負荷です。

すべての接続をグラフ内にレンダリングすると、混乱の毛玉ができます。

Edge mess

Xピクセルよりもリンクが短い接続のみをレンダリングすると、混乱を減らすことができます。

limit Edge length

これは、小さいグラフ(200kノード未満)で機能しますが、大きいグラフ(1,000kノードを超える)では、ノード自体がグラフに過負荷をかけ、ホワイトノイズのように見えます。

github graph

(ここで最後のグラフを見ることができます: Github Followers

私はこの時点でやや必死で、非常に一般的な質問をします。大きなグラフでデータの過負荷を回避するために何を使用することをお勧めしますか?

11
Anvaka

おお、かなり。

ええ、まあ、毛玉(あなたが示したこの種の巨大なグラフ)は判読できないのでほとんど役に立ちません。ゲノム学者やバイオインフォマティシャンは、データセットが問題を実証するのに十分な大きさであるため、これを初期の段階で発見しました。

いいえ、3Dを追加しても原因にはなりません。

毛玉の解は ハイブプロット です。

enter image description here

Mike Bostockの D3でのHiveプロットの作成に関するガイド も参照してください。

6
Zoe K

ディスプレイ上の既存のパン/ズーム以外の選択肢は、マウスポインターの周りにローカルフォーカス+コンテキストレンズを導入して、現在の関心領域を整理/拡大することです。しかし、あなたが言及しているデータセットのサイズでは、データ自体の集約やフィルタリングを検討する必要があるかもしれません-100万ピクセルのディスプレイ上の100万ノードのグラフは、乱雑にしか見えません。

ノードに固有の階層構造がある場合(またはそれらの上にそのような構造を生成できる場合)にノードを集約し、クラスター化されたグラフを作成します。これは、クラスター化のいくつかのレイヤーにノードが表示された再帰的なクラスター化です(実際の例では、ローカルクラスターと考えます) ->銀河->星座->個別に開始すると、アイデアがわかります)-これにより、リンクも自然に集約されます

ノードのフィルター-重要度の高いノードのみを表示する(リンクのない)程度または中心性のメジャー、またはノードがある場合はタイプでフィルターします。例で行ったように、特定のプロパティでリンクをフィルタリングします(多くの場合、「長い」ものが興味深いものですが、2D表現の距離はデータ空間の距離の概算です)

これらをインタラクティブにするのが最善ですが、グラフのサイズが大きいため、計算が瞬時に行われない場合があります...

Gephiのようなパッケージがノードとリンクのフィルター/対策のアイデアのために何をするかを見てください

3
mgraham

グラフで何が伝えられているかという問題に取り組む必要があると思います。特定の興味深い観察をポイントしたい場合、それらをマークするか、または同じものを強調するために個別のグラフを生成することは、注意を引くための1つの方法かもしれません。

このようなグラフは視覚的に魅力的に見えますが、洞察を生成するプロセスは困難な場合があります。

ユーザーに表示内容を制御できるようにすると、ユーザーは関連する視覚化を行うのに役立ちます。

2
Bindu

免責事項:非専門家からの非常にランダムなアイデア

大きなグラフによるデータの過負荷を避けるために何を使用することをお勧めしますか?

大きなグラフの成功した視覚化を見てみます。

ここにいくつかあります:

私が思う他のこと:

  • 力ベースのレイアウトは、リンク/ノードの比率が狭い場合に意味があります。私は、そのような大きなデータセットのWord2netのような空間化を調査します
    • すべてのクラスターが混合するヘアボール効果を回避する
    • 多分3次元以上で空間化し、次元の組み合わせを切り替えることができます(実際に不安定なようです)
  • あなたのgithubグラフには、Reactコミュニティ、a Rubyコミュニティ、... dhh donのような大きな中央ノードさえあるかもしれません見せない
  • また、クラスターはありますが、クラスターの中心点を確認することは困難です(ほとんどの人がクラスターでフォローしている人です)。
  • ナビゲーションに関しては、2Dの方が簡単に見えます。 3Dはクラスターを分離するためにいくつかの価値を追加しますが、ナビゲーションを困難にします
2
damio

他の人が言ったように、それはあなたが達成したいことに依存します。 3Dフォースレイアウトに非常に多くのノードとエッジが重なっているため、特に「ホワイトノイズ」効果を強調しているので、これに焦点を当てます。

別のレイアウトを使用することをお勧めします。力指向のレイアウトは、中央に向かってノード密度が高くなる傾向があり、3Dでは、密な質量が、見ている他のノードの下または上にあり、密度を合成します。 1つの解決策は、より均一なレイアウトにすることだと思います。

2つのステップのプロセスを使用する1つのソリューションを次に示します。

  1. コミュニティ構造を検出するためにニューマンの高速アルゴリズムのようなものを使用して、ノードの密集したクラスターを自動的に検出します。以下は、そのアルゴリズムを実装するSocialActionのスクリーンショットです。 enter image description here

  2. グループインボックスレイアウトアルゴリズムを使用して密なノードクラスターをレイアウトします。3Dアスペクトを保持する場合は、クラスターに単純な3次ツリーマップレイアウトを使用します。以下は、Chattervediらの論文「Group-in-a-Box meta-トポロジークラスターと属性ベースのグループのレイアウト:ネットワークコミュニティとそのつながりのスペース効率の良い視覚化 ": enter image description here 力指向のレイアウトの中央に高密度があり、それがグループインボックスレイアウトでは存在しないことに注意してください。

このような手法を使用すると、ノードはレイアウトスペース内でより均一に分散され、ノードは接続されている他のノードに近くなる傾向があります。これにより、ノードとエッジの両方の視覚的な重なりを減らすことで、「ホワイトノイズ」と「ヘアボール」の影響を減らすことができます。

2
rpgove