Teoria dos grafos - análise e visualização

22

Não sei se o assunto entra no interesse CrossValidated. Você vai me dizer.

Eu tenho que estudar um gráfico (a partir da teoria dos grafos ) ou seja. Eu tenho um certo número de pontos que estão conectados. Eu tenho uma mesa com todos os pontos e os pontos de que cada um depende. (Eu também tenho outra tabela com as implicações)

Minhas perguntas são:
Existe um bom software (ou um pacote R) para estudar tão facilmente?
Existe uma maneira fácil de exibir o gráfico?

RockScience
fonte
Tentei usar cran.r-project.org/web/packages/graph/vignettes/graph.pdf, mas parece que o pacote "Rgraphviz" não está mais disponível. Alguém tem outra solução?
RockScience
1
Rgraphviz está no biocondutor: bioconductor.org/packages/release/bioc/html/Rgraphviz.html
Rob Hyndman
1
Obrigado! O Graphviz é perfeito e muito flexível, eu o uso em R com a interface Rgraphviz e funciona muito bem.
RockScience 29/03

Respostas:

15

O iGraph é uma biblioteca de linguagem cruzada (R, Python, Ruby, C) muito interessante. Ele permite que você trabalhe com gráficos direcionados e não direcionados e possui alguns algoritmos de análise já implementados.

nico
fonte
1
(+1) Parece que minha resposta veio depois da sua. Como sua resposta destaca uma perspectiva um pouco diferente (plataforma cruzada, algoritmos), sinto que nossas respostas não são tão redundantes, mas posso remover as minhas sem nenhum problema.
chl
14

Existem vários pacotes para representar gráficos direcionados e não direcionados, matriz de incidência / adjacência, etc., além do gráfico ; veja, por exemplo, a visualização gR Task.

Para visualização e computação básica, acho que o pacote igraph é confiável, além do Rgraphviz (no BioC, como apontado pelo @Rob). Esteja ciente de que, para que este funcione corretamente, o graphviz também deve ser instalado. O pacote igraph possui bons algoritmos para criar bons layouts, como o graphviz .

Aqui está um exemplo de uso, iniciando a partir de uma matriz de adjacência falsa:

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

texto alternativo

chl
fonte
Obrigado pela sua resposta. graphviz não é fácil de instalar com R, mas nas encostas para ser um grande biblioteca
RockScience
Para sua informação, o que faço agora é que gere o código graphviz com R e o leio em um mediawiki usando a extensão mediawiki graphviz. (O pacote Rgraphviz não é fácil de instalar e não funciona com a última versão do R)
RockScience
"O pacote 'graph' foi removido do repositório CRAN."
precisa saber é o seguinte
8

Além do que foi dito, apenas para a tarefa de vinctization (e fora do R), você pode estar interessado em verificar o Gephi .

F. Tusell
fonte
8

Outra opção é o pacote statnet. O Statnet possui funções para todas as medidas comumente usadas no SNA e também pode estimar os modelos ERG. Se você tiver seus dados em uma lista de margem, leia-os da seguinte maneira (assumindo que seu quadro de dados esteja rotulado como "edgelist"):

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

Se seus dados estiverem em uma matriz de adjacência, substitua o argumento matrix.type por "adjacency":

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

O pacote statnet possui alguns recursos de plotagem muito agradáveis. Para fazer um gráfico simples, basta digitar:

gplot(net)

Para dimensionar os nós de acordo com a centralidade entre eles, basta:

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

Por padrão, a função gplot usa o algoritmo Fruchterman-Reingold para colocar os nós; no entanto, isso pode ser controlado a partir da opção mode, por exemplo, para usar o MDS para a colocação do tipo de nós:

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

ou para usar um layout de círculo:

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

Existem muito mais possibilidades, e este guia cobre a maioria das opções básicas. Para um exemplo independente:

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
fonte
(+1) Nunca usei este pacote, mas sua visão geral sugere que eu deveria experimentá-lo. Parece bom à primeira vista.
chl
3

Uma pergunta semelhante foi feita na história, também se você estiver especificamente interessado em gráficos planares ou visualização bibliográfica .

Gephi já foi mencionado aqui, mas também foi recomendado por alguns na história, por isso acho que é uma boa escolha.

Outras opções interessantes incluem:

  • O Flare fornece algumas ferramentas de visualização muito interessantes e cria gráficos muito bonitos para relatórios e documentos.
  • O Cyptoscape possui algumas ferramentas poderosas de análise e visualização. É particularmente bom para química e biologia molecular.
  • Este site fornece links para muitas outras ferramentas e bibliotecas agradáveis ​​de visualização (embora não para o R).
Artem Kaznatcheev
fonte
2

Achei o NodeXL muito útil e fácil de usar. É um modelo do MS Excel que fornece fácil importação / exportação de um gráfico, formatação de arestas / vértices, calcula algumas métricas, possui alguns algoritmos de agrupamento. Você pode usar facilmente imagens personalizadas como vértices.
Outra ferramenta útil para mim foi o layout do Microsoft Automatic Graph, que fornece um bom layout, que pode ser experimentado on-line (com um navegador que suporta SVG).

Kniganapolke
fonte