2011-11-03 13 views
25

W przypadku projektu szkolnego muszę zdefiniować social network, przeanalizować i narysować. Mogłem je narysować ręcznie i przeanalizować (obliczyć różne metryki) ręcznie. Ale będąc miłośnikiem Pythona, mam nadzieję, że istnieje na to narzędzie Python.Łatwa wizualizacja i analiza sieci społecznościowej za pomocą Pythona?

Marzę o graficznym odpowiedniku matplotlib. To znaczy. Mogę go użyć interaktywnie, a w kilku liniach powiedzieć, jak załadować dane, a następnie wywołać funkcję renderowania, która wyrenderuje wykres jako svg. Może z niektórymi danymi na nim wyświetlanymi, np. Liczba powiązań dla każdego węzła, średnie relacje itp.

Jeśli znasz taki moduł Pythona, docenisz, czy możesz podać przykład zabawki w swojej odpowiedzi, zamiast odpowiadać na nazwę modułu.

Odpowiedz

21

networkx to bardzo potężna i elastyczna biblioteka Pythona do pracy z wykresami sieciowymi. Do łączenia węzłów można używać połączeń kierowanych i nieukierunkowanych. Sieci można budować, dodając węzły, a następnie krawędzie, które je łączą, lub po prostu wyświetlając pary krawędzi (nieokreślone węzły zostaną utworzone automatycznie). Po utworzeniu węzły (i krawędzie) można opisywać za pomocą dowolnych etykiet.

Chociaż NetworkX mogą być wykorzystywane do wizualizacji sieci (patrz dokumentacja), może wolisz używać aplikacji wizualizacji sieciowej, takie jak Gephi (dostępny od gephi.org). networkx obsługuje szeroki zakres formatów importu i eksportu. Jeśli eksportujesz sieć przy użyciu formatu takiego jak GraphML, wyeksportowany plik można łatwo załadować do Gephi i tam go wizualizować.

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

jak pobrać wykres n/w do html przez wywołanie ajax? – NoobEditor

4

networkx jest dobry. może również potrzebować graphviz do wizualizacji.

+0

Graphviz nie jest potrzebny, ale jest pożądany. –

1

Chociaż ściśle nie w ramach twoich parametrów, przed użyciem Pythona przeprowadziłem analizę sieci społecznościowej. To było ok, skończyło się używanie NodeXL (http://www.nodexl.codeplex.com/), wtyczki Excel (agast!) Do projektu raz i myślę, że to całkiem niesamowite. Nieważne, o co prosisz, zarówno z GUI, jak iz programowaniem zorientowanym na kod.

1

Do wizualizacji mogę polecić XDot (również na GitHub) autorstwa José Fonseca. Połączenie z networkx może być odpowiednie dla Ciebie.

8

Kombinacja networkx i Gephi jest fajna. networkx może wyprowadzać format graphml. Aby uzyskać więcej informacji na temat gephi: http://gephi.org/

+0

Format pliku gexf jest jeszcze bardziej "natywny" dla Gephi (na przykład zarządzanie dynamiką) i wyjście sieciowe dla niego: https://networkx.github.io/documentation/networkx-1.10/reference/readwrite.gexf. html – seinecle

0

Networkx jest rzeczywiście schludną biblioteką. Sugerowałbym to również z Gephi, o którym wiedziałbym, użyłbym Python console (nie testowałem tego combo jeszcze).

Używałem do wizualizacji Ubigraph, ale nie skaluje się tak dobrze i jest zastrzeżona.

1

Innym sposobem jest Cytoscape. Możesz również używać z plikami gml.

Tak jak w przypadku psychemedia, możesz użyć Networkx do wykreślenia wykresu i eksportu do pliku gml.

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

Następnie w Cytoscape kliknij Z pliku sieciowego i wybierz plik gml. Tam też możesz zmienić styl.

+0

Odpowiedzi dotyczące linków są w tym przypadku zdecydowanie odradzane w Stack Overflow. Zamiast tego [preferowane] (http://meta.stackoverflow.com/q/8259) zawiera podstawowy przykład korzystania z Cytoscape w sieciach społecznościowych. – drs

+0

Przykro mi, drs. Ale właśnie ukończyłem inne odpowiedzi. Będę lepszy. – anapaulagomes

9

Istnieją trzy odpowiedzi, które wspominają Networkx i Gephi, ale nikt nie wspomniał o graph-tool. Główną różnicą jest to, że algorytmy są zaimplementowane w C++, co daje performance boost w porównaniu do np. Networkx.

Dotyczy to również wizualizacji. Ze strony:

Dogodnie narysuj wykresy, korzystając z różnych algorytmów i formatów wyjściowych (w tym na ekranie). Graph-tool ma własne algorytmy układania i wszechstronne, interaktywne procedury rysowania oparte na kodzie cairo i GTK +, ale może również działać jako bardzo wygodny interfejs do doskonałego pakietu graphviz.

Oto czysty przykład from the docs (istnieje wiele wiele innych):

Block partition of a political blogs network

(Blok rozbiór sieć blogów politycznych).

I kod do niego:

>>> 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") 
<...> 

(Uwaga: Pozycje każdym węźle jest określona w tym przykładzie, więc nie ma algorytm układ miał być uruchomiony)

Oto kolejny przykład przy użyciu tych samych danych (a wynik jest niesamowity): http://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/

+0

'output =" polblogs_agg.pdf "' byłoby problemem, gdyby trzeba było osadzić te wykresy na stronie html? można zwrócić 'html' lub' div' ?? – NoobEditor

+1

@NoobEditor patrz [the docs] (https://graph-tool.skewed.de/static/doc/draw.html?highlight=output): 'fmt: Format pliku wyjściowego. Możliwe wartości to "auto", "ps", "pdf", "svg" i "png". Jeśli wartość jest "auto", format jest odgadywany z parametru wyjściowego. "" Po prostu nazwij go np. .png na przykład, a dostaniesz png. Następnie kolejnym krokiem jest włączenie tego obrazu do twojego html. – keyser

+0

Instalowanie graphtool w 2017 na mac jest niemożliwe. wymaga os x indywidualistów – swyx

Powiązane problemy