Analisando uma network de uma competição esportiva com Python (NetworkX) e Gephi

Davis Victor Nascimento
7 min readDec 18, 2020

Inicialmente veremos como exportar a rede por meio do Gephi e depois como importá-la para o Python e realizar a análise com a biblioteca NetworkX.

A rede que iremos analisar se trata do campeonato de Futebol Americano de Universidades nos Estados Unidos no ano de 2000 (NCAA Division I-A), o qual teve como campeão a equipe Oklahoma Sooners, representante da Universidade de Oklahoma. A network (rede) pode ser encontrada em https://networks.skewed.de/net/football, utilizaremos a versão em csv. Na rede, os nós são as esquipesm, as arestas são os confrontos realizados e as cores são a quais conferências pertencem.

Caso ache necessário, vou deixar também uma explicação geral dos passos em vídeo por meio da aplicação Loom, para acessar clique aqui.

1. Exportação da rede com o Gephi

O Gephi é um pacote de software de código aberto e gratuito para visualização, análise e manipulação de redes e grafos, para realizar o download do software acesse https://gephi.org/.

Ao criar um novo projeto o primeiro passo é realizar a importação de ambos arquivos csv, o que comporta os nós e o que comporta as arestas. Para isso, basta ir em “Arquivo” > “Importar planilha” (para ambos, um de cada vez), depois escolher o “Separator” como “Comma” e o “Import as” como “Edges table” (para o arquivo das arestas) e como “Nodes table” (para o arquivo dos nós). É importante também que seja selecionada a opção de deixar o segundo arquivo importado na mesma janela (ou área de trabalho) que o primeiro. Obs.: vale ressaltar que será necessário editar o arquivo csv e remover o caractere #, que fica na primeira linha do arquivo.

A imagem a seguir mostra como aparecerá a rede e como fazemos para iniciar o processo de dar vida à ela, definindo uma paleta de cores para os nós. Os botões sinalizados em amarelo destacam os passos a seguir: escolheremos primeiro “Nós”, separaremos por “Partition” (partição), a qual será dada pelo campo “value” que representa a qual conferência a equipe pertence. Depois de escolher a paleta de cores, basta aplicar.

Apesar de já vermos umas cores nos nós, ainda não dá para entendermos o que está acontecendo ali com precisão. Então, vamos agora alterar o tamanho dos nós e a distribuição deles.

Para alterar o tamanho dos nós, iremos selecionar “Nós” depois “Ranking”, novamente iremos classificar os nós por conferência, no caso escolheremos dimensionar o tamanho deles por “value”. Com tamanho mínimo de 5 e máximo de 50. Feito isso, aplicaremos.

A distribuição que utilizaremos é a “ForceAtlas2”, a qual foca em qualidade (com sentido de “ser útil para explorar dados reais”) para permitir uma rigorosa interpretação da rede. Escolhendo-a, definiremos o campo dimensionamento em 30 (que espaçará nossa rede) e ativaremos a opção de “Evitar sobreposição”. Dessa forma, executaremos o algoritmo que realiza a distribuição.

Agora, feitos os ajustes de cores, tamanhos e distribuição dos nós, vamos para aba de visualização da rede, na qual iremos fazer os últimos detalhes para exportar a rede como png (por exemplo). Vamos, inicialmente, atualizar a visualização sem fazer alterações nas configurações.

A rede parece bem mais viva agora, com muito mais clareza nas relações. Entretanto, vamos realizar alguns ajustes para deixá-la mais atrativa e compreensível ainda. Para isso, alteraremos os campos marcados em amarelo para como estão na imagem abaixo. Assim, quando alterados, poderemos atualizar a visualização da rede e, então, se estiver em conformidade com o objetivo poderemos fazer a exportação como png.

Pronto, está feita a exportação! Ops, na verdade não. Essa é apenas a exportação para visualização. Logo, para trabalharmos com a rede no Python, precisamos exportá-la em outro formato, a exportaremos em graphml, que é um formato de arquivo baseado em XML para gráficos. Dessa maneira, iremos até “Arquivo” > “Exportar” > “Arquivo de grafo…”.

2. Importação para o Python

Vamos agora para o Python! A nossa análise será realizada no Google Colab. Primeiro, precisamos subir o arquivo graphml (fazer o upload) na plataforma.

A análise da rede será feita utilizando a biblioteca NetworkX, a qual é um pacote para a criação, manipulação e estudo da estrutura, dinâmica e funções de redes complexas. Para visualização em gráficos, utilizaremos a biblioteca matplotlib.pyplot.

Sendo assim, o trecho de código a seguir realiza a importação das bibliotecas e a leitura do arquivo graphml.

3. Análise da rede

Antes de realizar a análise mais profunda, vamos observar a rede e buscar conclusões a partir da imagem.

Podemos notar que há uma proximidade entre as equipes que são da mesma conferência (mesma cor), é perceptível também que elas realizam a maior parte dos jogos entre si. Percebe-se também que há equipes que apesar de serem de uma conferência, realizaram os jogos contra equipes de outras conferências. Outro ponto interessante notar é que a conferência representada pela cor roxa pode ser considerada uma conferência de equipes independentes, pois realizam quase nenhum jogo entre si, elas jogam contra as de outras conferências.

Iniciaremos a análise com o NetworkX pelas medições globais, nossa visão inicial será como a de uma névoa vista à distância, conseguiremos saber o tamanho e a densidade da nossa network (rede).

Pode-se perceber que há um número considerado pequeno de nós e de arestas, porém só com essa medida não podemos classificar uma rede como simples, pois uma rede simples não é aquela que é pequena, mas aquela que é regular (independentemente do seu tamanho).

A densidade de uma rede (de 0 a 1) mede a fração de todos nós por todas potenciais possibilidades de arestas. Para calcular a densidade podemos utilizar a função a seguir.

Normalmente as networks complexas possuem baixa densidade, a densidade da que estamos analisando é em torno de 9%, o que comparado a outras networks complexas pode ser considerada mais densa, ou seja, possui menos possibilidades de arestas para cada nó.

Realizando agora uma visualização mais profunda, agora, além da visão global, teremos uma visão detalhada nó por nó. Vamos, então, analisar a rede por meio do coeficiente de agrupamento (clustering coefficient), o qual mede o grau com que os nós de um grafo tendem a agrupar-se, com essa medida temos que se determinado nó i estiver conectado a um nó j, que por sua vez se encontra conectado a um nó k, há uma probabilidade alta de i estar ligado a k.

A seguir, de modo global, veremos a média do coeficiente de agrupamento.

Dessa forma, temos, na média, que a chance de um nó i estar conectado a um nó k é em torno de 40% na nossa network. Que pode ser considerada alta.

Vamos realizar agora, por meio de gráficos, mais algumas análises.

Os gráficos acima representam os coeficientes de agrupamento dos nós por um histograma e por um boxplot. Sendo assim, por meio deles, podemos observar que há uma concentração na área entre 40% e 50%. Mesmo com pontos fora da curva, temos a tendência de um alto coeficiente de agrupamento.

Realizando, agora, uma correlação entre graus e clustering:

No nosso caso o grau corresponde a quantidade de jogos realizados pelo time, podemos perceber que as equipes que mais jogam são as que possuem maior coeficiente de agrupamento.

4. Conclusão

Agradeço pela leitura! Este estudo foi incentivado pelo professor Ivanovich Silva na disciplina de Ciências de Dados I na Universidade Federal do RN.

Bons estudos! O melhoramento do estudo realizado passa por análise mais profunda e detalhada da rede e de maior exploração do NetworkX.

--

--