R&Gephi:arestas em uma rede não são importadas corretamente usando o pacote rgexf
-
21-12-2019 - |
Pergunta
Eu tenho um problema com o pacote R "rgexf"
.Em particular, tenho um problema com o arestas da rede que importo para o Gephi.Em RI posso produzir um banco de dados de vértices
>vertices
Id Label
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
e um banco de dados de arestas (uma única aresta para ser mais preciso)
>edges
Source Target
1 5 9
Eu crio um arquivo .gexf usando
>write.gexf(output = path_gexf, nodes = vertices, edges = edges, defaultedgetype = "undirected")
onde path_gexf
é apenas o caminho do arquivo de saída (chamado example.gexf).
Abro example.gexf usando Gephi (versão 0.8.2 beta).Na imagem 1:
você pode ver o relatório de importação no Gephi:o número de vértices e arestas está correto;Altero manualmente o tipo de gráfico para não direcionado e importo todos os dados para a janela do Data Laboratory.
- Questão 1. Por que devo especificar "não direcionado" na janela do relatório de importação se já fiz isso na função write.gexf?
Na imagem2
você pode ver que, após a importação, o tipo de gráfico muda automaticamente para "direcionado" e nenhuma borda é realmente importada.
Na imagem 3
temos a lista de vértices:está tudo bem.Etiquetas e IDs são importados corretamente.Na imagem 4
você pode ver a janela do Data Laboratory para arestas:nenhuma borda é importada, conforme já observado na imagem 2.Eu realmente não entendo porque nenhuma borda é importada.
- Questão 2.Como corrigir a importação do arquivo example.gexf?No nível do código R, tudo é suave e os vértices/arestas são gerados corretamente pelo meu código.Problemas ocorrem com Gephi.
Observações:Tenho muitos arquivos .gexf com problemas relacionados à importação de arestas;em muitos casos, apenas algumas arestas são importadas com "Origem" e "Destino" incorretos.Estranhamente, arestas paralelas são sempre contadas adequadamente de acordo com suas multiplicidades.
Peço desculpas pela longa postagem.
EDITAR:alguns testes com código R fictício
Fiz alguns testes usando o código do @James Tobin (obrigado!).Funciona bem também no meu pc.Fiz testes com gráficos com 2 arestas:os testes foram todos ok.Então mudei para os casos de 3,4 arestas, usando
require(rgexf)
vertices <- as.data.frame(cbind(seq(1,10),seq(1,10)))
colnames(vertices) <- c('Id','Label')
edges <- as.data.frame(cbind(c(5,1,2),c(1,1,3)))
colnames(edges) <- c('Source','Target')
write.gexf(nodes=vertices,edges=edges,
defaultedgetype = "undirected")
e
require(rgexf)
vertices <- as.data.frame(cbind(seq(1,10),seq(1,10)))
colnames(vertices) <- c('Id','Label')
edges <- as.data.frame(cbind(c(5,1,4,2),c(2,3,1,2)))
colnames(edges) <- c('Source','Target')
write.gexf(nodes=vertices,edges=edges,
defaultedgetype = "undirected")
Em ambos os casos, o código XLM está correto em relação ao valor.os IDs de nós e bordas, rótulos, fontes e destinos.
Onde estão os problemas?No caso das 3 arestas o relatório de importação no Gephi está correto, enquanto a janela de arestas do laboratório de dados não mostra a aresta
<edge id="1" source="1" target="1" weight="1.0"/>
No caso das 4 arestas a aresta
<edge id="0" source="5" target="2" weight="1.0"/>
está faltando, em vez disso.
Começo a acreditar que há um bug no Gephi 0.8.2 e não no meu código.
Alguma sugestão/comentário?
Solução
Questão 1:Mesmo que você já tenha especificado o gráfico como não direcionado no arquivo gexf, direcionado é o padrão, embora clicar nele seja um pouco chato, pelo menos não é grande coisa.Do ponto de vista da segurança, é mais fácil permitir que um usuário verifique novamente que tipo de gráfico está importando do que potencialmente selecionar incorretamente.Demora 2 segundos, não é grande coisa.
Questão 2:Copiei seu exemplo
require(rgexf)
vertices <- as.data.frame(cbind(seq(1,10),seq(1,10)))
colnames(vertices) <- c('Id','Label')
edges <- as.data.frame(cbind(5,9))
colnames(edges) <- c('Source','Target')
write.gexf(output='testgex.gexf',nodes=vertices,edges=edges,
defaultedgetype = "undirected")
mas não tenho problemas com bordas.
Talvez você possa incluir o código exato que falhou?Talvez suas arestas não estejam no formato data.frame?Só estou adivinhando porque não consegui replicar seu erro.