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)
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)
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)
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)
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
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