2012-10-25 14 views
6

Mam plik tekstowy z około 8,5 miliona punktów danych w formie:Używanie Pythona, aby wygenerować wykres połączenia/sieci

Company 87178481 
Company 893489 
Company 2345788 
[...] 

chcę używać Pythona, aby utworzyć wykres połączenia, aby zobaczyć, co sieć między firmy wyglądają. Z powyższej próby dwie firmy podzieliłyby brzeg, gdyby wartość w drugiej kolumnie była taka sama (wyjaśnienie z/dla Hooked).

Używałem pakietu NetworkX i udało mi się wygenerować sieć na kilka tysięcy punktów, ale nie udało się jej przetworzyć całego pliku tekstowego o długości 8,5 mln węzłów. Uruchomiłem go i zostawiłem na około 15 godzin, a kiedy wróciłem, kursor w powłoce nadal migał, ale nie było wykresu wyjściowego.

Czy można bezpiecznie założyć, że nadal działa? Czy istnieje lepsze/szybsze/łatwiejsze podejście do wykreślania miliona punktów?

+0

W jaki sposób firmy są połączone? To znaczy. jest krawędź dzielona między firmami A i B, jeśli druga kolumna jest taka sama? – Hooked

+0

Tak, to prawda. – Jon

+0

Nie mogę powiedzieć, że miałem problemy z 8.5mln w networkx. Ile masz różnych wierzchołków? Czy używasz skierowanych/niekierowanych? Ponadto, kiedy mówisz "brak wykresu wyjściowego" - co dokładnie masz na myśli? [np. nie próbowałeś go wydrukować czy coś takiego] –

Odpowiedz

5

Jeśli dysponujesz 1000K punktów danych, będziesz potrzebować jakiegoś sposobu patrzenia na szeroki obraz. W zależności od tego, czego dokładnie szukasz, jeśli możesz przypisać "odległość" między firmami (powiedzmy liczbę połączeń od siebie), możesz wizualizować relacje (lub klastrowanie) za pomocą Dendrogram.

scipy nie klastrów:

http://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html#module-scipy.cluster.hierarchy

i ma funkcję, aby włączyć je do dendrogramów wizualizacji:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html#scipy.cluster.hierarchy.dendrogram

Przykładem najkrótszym funkcji odległości drogi poprzez networkx:

http://networkx.lanl.gov/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html#networkx.algorithms.shortest_paths.generic.shortest_path

Ostatecznie musisz zdecydować, jak chcesz zważyć odległość między dwoma firmami (wierzchołkami) na wykresie.

+0

Czy istnieje prosty lub preferowany sposób na budowanie sieci w SAS lub R? – Jon

+0

@Jon Ta odpowiedź (nawet jeśli podano łącza) jest nieobowiązująca. Co chcesz pokazać za pomocą swojego wykresu miliona punktów? Ogólne połączenia, różne skupienia, centralne węzły? Nie jest jasne, co chcielibyście wydostać z zestawu danych, ponieważ można zadać wiele różnych pytań. – Hooked

+0

To jest trochę niejasne. Chciałbym zobaczyć klastry i punkty połączenia między klastrami. Chodzi o to, aby wykorzystać dane do zasięgu sieci, aby zobaczyć, gdzie istnieją pojedyncze połączenia między klastrem głównym a mniejszym klastrem. Te szczególne połączenia biznesowe mogą być następnie wykorzystane do bardziej ukierunkowanych celów marketingowych itp. – Jon

4

Masz zbyt wiele punktów danych i jeśli zrobiłeś wizualizację sieci, nie ma to żadnego sensu. Musisz mieć sposoby, aby 1) zmniejszyć liczbę firm, usuwając te, które są mniej ważne/mniej połączone 2) podsumuj wykres w jakiś sposób, a następnie wizualizuj.

Aby zmniejszyć rozmiar danych, lepiej byłoby samodzielnie utworzyć sieć (za pomocą własnego kodu, aby utworzyć grupę firm). W ten sposób można zmniejszyć rozmiar wykresu (np. Poprzez usunięcie singletonów, których może być wiele).

Do podsumowania zalecam uruchomienie klastrowania lub algorytmu wykrywania społeczności. Można to zrobić bardzo szybko, nawet w bardzo dużych sieciach. Użyj metody "fastgreedy" w pakiecie igraph: http://igraph.sourceforge.net/doc/R/fastgreedy.community.html (istnieje szybszy algorytm dostępny również w Internecie, to jest przez Blondel et al: http://perso.uclouvain.be/vincent.blondel/publications/08BG.pdf Wiem, że ich kod jest dostępny gdzieś w Internecie)

Powiązane problemy