Introdução à Análise de Redes Sociais com o pacote igraph

A Análise de Redes Sociais (Social Network Analysis) permite investigar aspectos sobre a estrutura e o padrão das relações sociais. Este documento apresenta: 1. Como ler uma base de dados e criar uma rede em formato de edgelist 2. Como plotar essa rede 3. Como calcular medidas de rede e centralidade

library(igraph)

edgelist <- read.csv2("C:/Users/Daniel/Desktop/Projetos/IntroRedes/edgelist.csv", header=T)

head(edgelist)

Edgelist

Uma mesma rede pode ser representada de diversas formas (por exemplo, matrizes, nodelists e edgelists). O formato de edgelist significa que cada linha representa um relacionamento da rede. Assim, podemos interpretar os nossos dados da seguinte forma: “Joao está conectado com Renata”, “Joao está conectado com Paulo” (…) “Renata está conectada com Leandro”.

net_edgelist <- graph.data.frame(edgelist, directed=FALSE)
plot(net_edgelist)

Redes Direcionadas

As relações das redes podem ter direção ou não. Por exemplo, se a conexão representa uma relação da casamento, não faz sentido considerar uma direção na relação, afinal, se “A está casado com B” necessariamente “B está casado com A”. No entanto, se a relação é de um empréstimo de dinheiro, então a direção faz sentido, já que é possível diz que “A empregou dinheiro para B”, sem que necessariamente “B emprestou dinheiro para A” seja verdade.

net_edgelist2 <- graph.data.frame(edgelist, directed=TRUE)
plot(net_edgelist2)

Aspectos visuais da rede

Os aspectos visuais de uma rede podem ser alterados. No entanto, alterar essa representação visual não altera a estrutura que, de fato, existe na rede. Ou seja, a rede abaixo é exatamente igual à rede plotada no início deste documento.

plot(net_edgelist2, 
     edge.arrow.size=0.2,
     edge.width=2,
     vertex.size=45,
     vertex.color="green",
     edge.color="blue",
     vertex.label.color="black",
     vertex.frame.color="darkgreen",
     layout=layout.circle)

Estrutura da Rede

Existem diversas medidas que representam a estrutura da rede.

# Criando um data frame com as medidas da estrutura da rede 
resultadosRede <- data.frame(densidade <- edge_density(net_edgelist),
                             diametro <- diameter(net_edgelist, directed = FALSE, weights = NA),
                             distancia_media <- mean_distance(net_edgelist, directed = FALSE),
                             transitividade <- transitivity(net_edgelist))

# Adicionando os nomes das colunas
colnames(resultadosRede) <- c("Densidade", "Diâmetro", "Distância Média", "Transitividade")

resultadosRede

Centralidades

Outras medidas relevantes dizem respeito à posição de cada ponto na rede.

# Criando um data frame com as medidas dos nós 
resultadosNos <- data.frame(degree(net_edgelist),
                              closeness(net_edgelist),
                              betweenness(net_edgelist), 
                              alpha.centrality(net_edgelist), 
                              power_centrality(net_edgelist))

# Adicionando os nomes das colunas
colnames(resultadosNos) <- c("Degree",
                             "Closeness", 
                             "Betweenness", 
                             "Alpha centrality", 
                             "Power centrality")

resultadosNos