2011-11-03 7 views
25

学校のプロジェクトでは、social networkを定義し、それを分析して描画する必要があります。私は手でそれを描き、手でそれを分析する(さまざまなメトリックを計算する)ことができます。しかし、Pythonの恋人である私は、このためのPythonツールがあることを願っています。Pythonを使ったソーシャルネットワークの視覚化と分析が簡単ですか?

私は、matplotlibに相当するソーシャルグラフを夢見ています。私。私はそれをインタラクティブに使うことができ、いくつかの行で、データをロードして、グラフをsvgとしてレンダリングするレンダリング関数を呼び出す方法を教えてください。おそらくいくつかの指標が表示されます。各ノードの関係数、平均関係など

このようなPythonモジュールを知っていれば、モジュール名で返信するのではなく、答えにおもちゃの例を与えることができれば幸いです。

答えて

21

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

networkxは(ドキュメントを参照してください)ネットワークを可視化するために使用することができますが、そのような(gephi.orgから入手可能)Gephiなどのネットワークの可視化アプリケーションを使用することを好むことがあります。 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') 
+0

このn/wグラフをajaxコール経由でhtmlにフェッチする方法は? – NoobEditor

4

networkxが良いです。視覚化のためにgraphvizも必要になるかもしれません。

+0

Graphvizは必要ありませんが、望ましいです。 –

1

あなたのパラメータに厳密には含まれていませんが、私はPythonを使用する前にソーシャルネットワーク分析を行っています。それはOKだった、私はNodeXL(http://www.nodexl.codeplex.com/)、プロジェクトのためのExcel(agast!)プラグインを使用して終わったと私はそれが非常に素晴らしいと思う。 GUIとコード指向のプログラミング方法の両方で、あなたが求めているものはかなりですか?

1

私は視覚化のために、ホセ・フォンセカのXDotGitHubでも)をお勧めします。 networkxとの組み合わせが適している場合があります。

8

networkxとGephiの組み合わせがクールです。 networkxはグラフ形式を出力することができます。ゲーファイの詳細についてはhttp://gephi.org/

+0

gexfファイルフォーマットは、Gephi(例えば、ダイナミクスを管理する)やネットワークxの出力にも「ネイティブ」です(https://networkx.github.io/documentation/networkx-1.10/reference/readwrite.gexf)。 html – seinecle

0

Networkxは本当にきれいなライブラリです。私はまた、Python console(私はまだこのコンボをテストしていない)を使用することを知っているGephiと提案します。

私は以前はUbigraphを使用していましたが、それは拡張性がなく、独自のものです。

1

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

psychemediaと同様に、Networkxを使用してグラフをプロットし、gmlファイルに書き出すことができます。

その後、Cytoscapeで[From Network File]をクリックし、gmlファイルを選択します。そこでは、スタイルを変更することもできます。

+0

スタックオーバーフローでは、ここではリンクのみの回答をお勧めしません。代わりに、ソーシャルネットワークにCytoscapeを使用する基本的な例を含めることが望ましい(http://meta.stackoverflow.com/q/8259)。 – drs

+0

すみません、Drs。しかし、私はちょうど他の答えを完了した。私はよかったよ。 – anapaulagomes

9

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

また、視覚化についても説明します。サイトから:

便利なことに、様々なアルゴリズムと 出力形式(画面を含む)を使用してグラフを描画します。 Graph-toolは、 レイアウトアルゴリズムと、 カイロとGTK +をベースにした多彩なインタラクティブな描画ルーチンを備えていますが、優れたgraphvizパッケージへの非常に快適なインターフェイス としても機能します。

は、ここできちんとした例from the docsです(多くのより多くのがあります):

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/

+0

'output =" polblogs_agg.pdf "'は、これらのグラフをhtmlページに埋めなければならない場合は問題になりますか? 'html'や' div'を返すことができますか? – NoobEditor

+1

@NoobEditor [the docs](https://graph-tool.skewed.de/static/doc/draw.html?highlight=output): 'fmt:出力ファイル形式を参照してください。可能な値は "auto"、 "ps"、 "pdf"、 "svg"、 "png"です。値が "auto"の場合、フォーマットは出力パラメータから推測されます。 " .pngたとえば、pngを取得します。次に、このイメージをあなたのhtmlに含めることです。 – keyser

+0

Macで2017年にグラフツールをインストールすることはできません。 os x mavericksが必要です – swyx

関連する問題