O Igraph é uma coleção de bibliotecas para criar e manipular gráficos e analisar redes. Está escrito em C e também existe como pacotes Python e R. Existe além disso uma interface para o Mathematica . O software é amplamente utilizado em pesquisas acadêmicas em ciência de redes e áreas afins. A publicação que introduz o software tem 1268 citações em 5 de junho de 2015 de acordo com o Google Scholar .
O Igraph foi desenvolvido por Gábor Csárdi e Tamás Nepusz. O código fonte dos pacotes IGraph foi escrito em C. igraph está disponível gratuitamente sob a GNU General Public License Version 2. Resumindo, se você quer manipular grafos e visualiza-los o igraph é uma excelente ferramenta e pode te ajudar muito em seus projetos.
Começando a usar o IGraph
A primeira coisa que gostaria de abordar nesse tutorial é a instalação, pessoalmente tive alguns problemas com algumas dependências e gostaria de compartilhar um passo a passo que pode ser útil pra você. Primeiramente eu estou utilizando Windows 10 64 bits, ou seja, se você é usuário Linux talvez você não tenha os mesmos problemas.
O primeiro passo é instalar o igraph para python com o comando:
pip install python-igraph
uma dependência do igraph é o cairo, sendo assim, você precisará fazer download dela:
pip install pycairo
Caso você utilize o Anaconda (que recomendo muito mesmo) você pode executar os comandos:
conda install -c vtraag python-igraph
conda install -c anaconda cairo
Após ter instalado essas bibliotecas você poderá abrir seu editor de texto Python preferido e começar a diversão.
Veja algumas instruções no anaconda também: clique aqui.
Criando o “hello grafo”
O primeiro grafo é importantíssimo para simplesmente testar seu ambiente e também compreender como é a sintaxe básica para construção de grafos. Sendo assim, em um arquivo Python digite o seguinte código:
from igraph import *
g = Graph()
g.add_vertices(4)
g.add_edges([(1,2),(2,3),(0,3)])
plot(g)
Ao executar esse grafo teremos o seguinte resultado:
Adicionando labels aos vértices do grafo
Cada grafo tem suas especificidades, vale a pena olhar a documentação e ver como cada função pode alterar características do grafo. No exemplo a seguir, definimos um grafo e logo após colocamos os nós com a cor branca e adicionamos Labels a esse grafo.
g = Graph()
g.add_vertices(4)
g.add_edges([(1,2),(2,3),(0,3)])
plot(g, vertex_label=["A", "B", "C", "D"], vertex_color="white")
Adicionando peso aos relacionamentos do grafo
O ultimo exemplo é realizando a adição de pesos nas linhas do grafo. Isso pode demonstrar o peso das ligações entre os nós.
eG=Graph(directed=False)
eG.add_vertices(6)
eG.add_edges([(0,1),(1,2),(2,3),(3,4),(3,5),(5,3)])
eG.es['weight']=[12,1,2,3,4,1]
layout = eG.layout("kk")
visual_style = {}
visual_style["vertex_size"] = 20
visual_style["vertex_label"] = ["a","b","c","d","e","f"]
visual_style["edge_width"] = eG.es['weight']
visual_style["bbox"] = (300, 300)
plot(eG, **visual_style)