web-dev-qa-db-ja.com

Pythonでソーシャルネットワークを視覚化する方法

ソーシャルネットワーク を定義し、分析して描画する必要があります。手書きで描画することも、手動で分析(さまざまなメトリックを計算)することもできます。しかし、私は車輪を再発明したくありません。

Matplotlibを使用しようとしましたが、インタラクティブに使用する必要があり、数行でデータのロード方法を説明してから、関数を呼び出してグラフをSVGとしてレンダリングします。

説明した方法でソーシャルネットワークを視覚化するにはどうすればよいですか?

31
Mads Skjern

networkxは、ネットワークグラフを操作するための非常に強力で柔軟なPythonライブラリです。有向接続と無向接続を使用できますノードとノードを接続するエッジを追加するか、エッジペアをリストするだけでネットワークを構築できます(未定義のノードは自動的に作成されます)。作成後、ノード(およびエッジ)に任意のラベルを付けることができます。

networkxを使用してネットワークを視覚化できます(ドキュメントを参照)が、Gephigephi.org から利用可能)。 networkxは、幅広いインポートおよびエクスポート形式をサポートしています。 GraphMLなどの形式を使用してネットワークをエクスポートする場合、エクスポートされたファイルはGephiに簡単にロードして視覚化できます。

import networkx as nx
G=nx.Graph()
G.add_edges_from([(1,2),(1,3),(1,4),(3,4)])
G
>>> <networkx.classes.graph.Graph object at 0x128a930>
G.nodes(data=True)
>>> [(1, {}), (2, {}), (3, {}), (4, {})]
G.node[1]['attribute']='value'
G.nodes(data=True)
>>> [(1, {'attribute': 'value'}), (2, {}), (3, {}), (4, {})]
nx.write_graphml(G,'so.graphml')
28
psychemedia

NetworkxとGephiについては3つの回答がありますが、誰も graph-tool について言及していません。主な違いは、アルゴリズムがC++で実装されていることです。たとえば、 performance boost と比較します。 Networkx。

また、視覚化もカバーしています。サイトから:

さまざまなアルゴリズムと出力形式(画面を含む)を使用して、便利にグラフを描画します。 Graph-toolには、cairoとGTK +に基づく独自のレイアウトアルゴリズムと多目的でインタラクティブな描画ルーチンがありますが、優れたgraphvizパッケージへの非常に快適なインターフェイスとしても機能します。

ここにきちんとした例があります ドキュメントから (もっとたくさんあります):

Block partition of a political blogs network

(政治ブログネットワークのブロックパーティション)。

そして、そのためのコード:

>>> g = gt.collection.data["polblogs"]
>>> g = gt.GraphView(g, vfilt=gt.label_largest_component(gt.GraphView(g, directed=False)))
>>> state = gt.BlockState(g, B=g.num_vertices(), deg_corr=True)
>>> state = gt.multilevel_minimize(state, B=2)
>>> gt.graph_draw(g, pos=g.vp["pos"], vertex_fill_color=state.get_blocks(), output="polblogs_agg.pdf")
<...>

(注:各ノードの位置はこの例では事前に決定されているため、レイアウトアルゴリズムを実行する必要はありませんでした)

同じデータを使用した別の例を次に示します(結果は信じられません): http://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/

14
keyser

別の方法は Cytoscape です。 gmlファイルでも使用できます。

Psychemediaが言ったように、Networkxを使用してグラフをプロットし、gmlファイルにエクスポートできます。

nx.write_graphml(G,'my_file.gml')

その後、Cytoscapeで[ネットワークファイルから]をクリックして、gmlファイルを選択します。そこで、スタイルも変更できます。

1
anapaulagomes

最近ここで多くのことが起こっています!Netwulf は、Python(免責事項:私は寄稿者です)。

img

webweb も確認してください。これは、ネットワークをhtmlとしてエクスポートする場合に適しています。

0
Ulf Aslak