Teoria grafów - analiza i wizualizacja

22

Nie jestem pewien, czy podmiot ten zainteresuje się CrossValidated. Powiesz mi

Muszę przestudiować wykres (z teorii grafów ) tj. Mam pewną liczbę połączonych kropek. Mam tabelę ze wszystkimi kropkami i kropkami, od których każda jest zależna. (Mam też inną tabelę z implikacjami)

Moje pytania brzmią:
czy istnieje dobre oprogramowanie (lub pakiet R) do łatwego studiowania?
Czy istnieje prosty sposób na wyświetlenie wykresu?

RockScience
źródło
Próbowałem użyć cran.r-project.org/web/packages/graph/vignettes/graph.pdf, ale wydaje się, że pakiet „Rgraphviz” nie jest już dostępny. Czy ktoś ma inne rozwiązanie?
RockScience 11.01.11
1
Rgraphviz jest na bioconductor: bioconductor.org/packages/release/bioc/html/Rgraphviz.html
Rob Hyndman
1
Dzięki! Graphviz jest doskonały i bardzo elastyczny, używam go w R z interfejsem Rgraphviz i działa świetnie.
RockScience

Odpowiedzi:

15

iGraph to bardzo interesująca biblioteka międzyjęzykowa (R, Python, Ruby, C). Pozwala pracować z jednokierunkowymi i ukierunkowanymi wykresami i ma już zaimplementowanych kilka algorytmów analizy.

Nico
źródło
1
(+1) Wygląda na to, że moja odpowiedź przyszła po twojej. Ponieważ twoja odpowiedź podkreśla nieco inną perspektywę (międzyplatformowa, algorytmy), wydaje mi się, że nasze odpowiedzi nie są tak zbędne, ale mogę usunąć moją bez żadnych problemów.
chl
14

Istnieją różne pakiety do reprezentowania wykresów skierowanych i niekierowanych, macierzy występowania / przyległości itp. Oprócz wykresu ; poszukaj np . widoku zadań gR .

Jeśli chodzi o wizualizację i podstawowe obliczenia, myślę, że pakiet igraph jest niezawodny, oprócz Rgraphviz (na BioC, jak wskazał @Rob). Pamiętaj, że aby ten ostatni działał poprawnie, graphviz musi być również zainstalowany. Igraph pakiet ma ładne algorytmów do tworzenia dobrych układów, podobnie jak graphviz .

Oto przykład użycia, zaczynając od fałszywej macierzy przylegania:

adj.mat <- matrix(sample(c(0,1), 9, replace=TRUE), nr=3)
g <- graph.adjacency(adj.mat)
plot(g)

alternatywny tekst

chl
źródło
Dzięki za odpowiedź. Graphviz nie jest łatwy do zainstalowania z R, ale wydaje się, że jest świetną biblioteką
RockScience
Do twojej wiadomości, co teraz robię, to generuję kod graphviz za pomocą R i czytam go w mediawiki przy użyciu rozszerzenia grafiiz mediawiki. (Pakiet Rgraphviz nie jest łatwy do zainstalowania i nie działa z ostatnią wersją R)
RockScience
„Wykres„ pakietu ”został usunięty z repozytorium CRAN.”
bartektartanus
8

Oprócz tego, co zostało powiedziane, dla samego zadania wusualizacji (i poza R) możesz być zainteresowany sprawdzeniem Gephi .

F. Tusell
źródło
8

Inną opcją jest pakiet statnet. Statnet ma funkcje dla wszystkich powszechnie używanych miar w SNA, a także może oszacować modele ERG. Jeśli masz swoje dane na liście brzegowej, przeczytaj dane w następujący sposób (zakładając, że twoja ramka danych jest oznaczona jako „edgelist”):

net <- as.network(edgelist, matrix.type = "edgelist", directed = TRUE) #if the network is directed, otherwise: directed = FALSE

Jeśli dane znajdują się w macierzy przyległości, zastępujesz argument matrix.type argumentem „przyleganie”:

net <- as.network(edgelist, matrix.type = "adjacency", directed = TRUE)

Pakiet statnet ma kilka bardzo fajnych możliwości drukowania. Aby zrobić prosty wątek, po prostu wpisz:

gplot(net)

Aby przeskalować węzły zgodnie z centralnością między nimi, po prostu wykonaj:

bet <- betweenness(net)
gplot(net, vertex.cex = bet)

Domyślnie funkcja gplot używa algorytmu Fruchtermana-Reingolda do umieszczania węzłów, jednak można to kontrolować za pomocą opcji trybu, na przykład aby używać MDS do umieszczania typu węzłów:

gplot(net, vertex.cex, mode = "mds")

lub użyć układu okręgu:

gplot(net, vertex.cex, mode = "circle")

Istnieje wiele innych możliwości, a ten przewodnik obejmuje większość podstawowych opcji. Dla niezależnego przykładu:

net <- rgraph(20) #generate a random network with 20 nodes
bet <- betweenness(net) #calculate betweenness scores
gplot(net) #a simple plot
gplot(net, vertex.cex = bet/3) #nodes scaled according to their betweenness centrality, the measure is divided by 3 so the nodes don't become to big.
gplot(net, vertex.cex = bet/3, mode = "circle") #with a circle layout
gplot(net, vertex.cex = bet/3, mode = "circle", label = 1:20) #with node labels
Thomas Jensen
źródło
(+1) Nigdy nie korzystałem z tego pakietu, ale Twój przegląd sugeruje, że powinienem spróbować. Wydaje się dobry od pierwszego wejrzenia.
chl
3

Podobne pytanie został poproszony o cstheory, również jeśli są specjalnie zainteresowany grafach planarnych lub wizualizacji bibliograficznych .

Gephi zostało już tutaj wspomniane, ale niektórzy polecili go również w cstheory, więc myślę, że to dobry wybór.

Inne fajne opcje obejmują:

  • Flare zapewnia kilka naprawdę fajnych narzędzi do wizualizacji i tworzy bardzo ładną grafikę dla raportów i dokumentów.
  • Cyptoscape ma bardzo potężne narzędzia do analizy i wizualizacji. Jest szczególnie przydatny w chemii i biologii molekularnej.
  • Ta strona zawiera linki do wielu innych fajnych narzędzi do wizualizacji i bibliotek (choć nie dla R).
Artem Kaznatcheev
źródło
2

Uważam, że NodeXL jest bardzo pomocny i łatwy w użyciu. Jest to szablon MS Excel, który zapewnia łatwy import / eksport wykresu, formatowanie krawędzi / wierzchołków, oblicza niektóre metryki, ma pewne algorytmy grupowania. Możesz łatwo używać niestandardowych obrazów jako wierzchołków.
Innym pomocnym narzędziem dla mnie był układ automatycznego wykresu Microsoft, który zapewnia dobry układ można wypróbować online (w przeglądarce obsługującej SVG).

Kniganapolke
źródło