Öne çıkan

R’da Sosyal Ağ Analizi (SAA): Social Network Analysis in R


Intro

In this study, it is aimed to raise awareness about network analysis (NA or SNA) by analyzing synthetic data produced after basic components of network analysis have been revealed and to show metrics widely used.

Giriş

Ağ analizi ya da sosyal ağ analizi (SAA), araştırmacıların aktörler arasındaki ilişkileri tanımlamasına ve bu ilişkilerin tekrarından ortaya çıkan sosyal yapıları analiz etmesine olanak sağlayan bir dizi tekniktir. SAA’nın temel amacı, sosyal olguyu olabildiğince açıklamaktır ve bu analiz genellikle sosyal ağ analizi (SNA) olarak adlandırılmaktadır. Burada sosyal ağ terimi, bireyler, aileler, haneler, köyler, topluluklar, bölgeler vb.olarak ifade edilebilir. SAA, nicel kavramların açıklanmasına katkısının yanı sıra, nitel kavramların nicel ölçümlerini sağlayarak olguların daha iyi anlaşılmasını sağlar.

Bu çalışma kapsamında R programlama dili kullanılarak üretilen sentetik veriler üzerinden sosyal ağ analizine giriş niteliğinde uygulama örnekleri yapılacaktır.

SNA’da, veri seti genellikle analizden önce matris formatına dönüştürülür. Ancak, diğer veri kümesi biçimleri, R veya Python gibi bazı programlama dilleri tarafından desteklenir.

Ağ analizi birçok farklı konu alanında yapılabilmektedir. Öne çıkan alanlar şu şekilde sıralanabilir:

  • Pazarlama Analitiği
  • Sosyal ilişkiler
  • İlaç
  • Bankacılık İşlemleri
  • Tedarik zinciri
  • Telekom
  • Lojistik

Bir ağın bileşenleri

Bir SAA’nın bileşenleri düğüm ve kenar olup Şekil 1’de gösterilmiştir.

  • Düğüm (Vertex ya da Node): Düğümler veya köşeler, birbiriyle ilişkili birimlerdir. Bir kenar (iki elemanlı bir set), iki köşeyi birleştiren bir çizgi olarak çizilir.

  • Kenar (Edge): İki öğeden oluşan bir küme olan kenar, iki düğümü birbirine bağlayan bir çizgi olarak tanımlanır.


Şekil 1: Bir Ağın Bileşenleri

Sonraki bölümlerde sırasıyla adım adım R kod blokları verilecektir. Daha sonra elde edilen sonuçlar sunulacaktır. Aşağıda çok fazla kütüphane yüklediğime bakmayınız :). Çok daha azı ile de SAA yapılabilmektedir. Daha çok burada visNetwork, dplyr, igraph ve *networkD3 paketleri kullanılmıştır. İlk çalışmadan farklı olarak ikinci çalışmada 3d ağlara, Sankey diyagramına, dendrograma ve radyal ağlara yer verilmiştir. Çalışmanın bu versiyonunda ise tidygraph, ggraph ve netrankr paketlerinin kullanılmasına ve diğer metriklerin hesaplanmasına yer verilmiştir.

Yüklenen kütüphaneler

kütüphane<-c("dplyr","tibble","tidyr","ggplot2","ggthemes","readxl", "writexl", "psych", "GGally", "rstatix","RColorBrewer","htmlwidgets","kableExtra","stargazer","readr", "visNetwork" , "igraph", "networkD3", "tidygraph", "ggraph", "netrankr")
yükle<-sapply(kütüphane, require, character.only = TRUE, warn.conflicts = FALSE)
 
#Kütüphane yüklenme durumunu gösteren tablo
 
tablo=suppressWarnings(yükle, classes = "warning")
   
isim=names(tablo)
   
deger=as_tibble(tablo)
   
data.frame(Sıra=1:length(isim), Kütüphane=isim, Durumu=deger$value) %>% mutate(Durumu=if_else(Durumu==TRUE, "Yüklendi", "Paket Kurulumu Gerekli")) %>% kbl(caption = "Kütüphane Yüklenme Bilgisi") %>% kable_styling(bootstrap_options = c("striped", "hover"), full_width = F, html_font="calibri")

Örnek 1

düğüm <- data.frame(id = 1:3, label=1:3)
kenar <- data.frame(from = c(1,2), to = c(2,3), arrows="to")
visNetwork(düğüm, kenar, main="Basit Bir Ağ Örneği")

Örnek 2

dugum <- data.frame(id = 1:10, label = paste("Etiket", 1:10),
 group = sample(LETTERS[1:3], 10, replace = TRUE), value = 1:10,
 title = paste0("<p>", 1:10,"<br>Düğüm</p>"), stringsAsFactors = FALSE)

kenar <- data.frame(from = c(8,2,7,6,1,8,9,4,6,2),
 to = c(3,7,2,7,9,1,5,3,2,9),
 value = rnorm(10, 10), label = paste("Kenar", 1:10),
 title = paste0("<p>", 1:10,"<br>Kenar</p>"))

visNetwork(dugum, kenar, height = "500px", width = "100%") %>% 
  visOptions(highlightNearest = TRUE) %>%
  visLayout(randomSeed = 1461)

Örnek 3

dugum <- data.frame(
  id = 1:3,
  label = 1:3,
  group=c("A","B","C"),
  value = c(10, 10, 10)
)
kenar<- data.frame(
  from = c(1, 2, 3),
  to = c(2, 3, 1)
)
visNetwork(dugum, kenar, main="Gruplara Göre Ağın Gösterimi") %>% 
  visNodes(shape = "ellipse") %>% 
  visEdges(arrows = "to", smooth = list(enabled = FALSE))%>%
  visGroups(groupname = "A", color = "red") %>%
  visGroups(groupname = "B", color = "lightblue") %>%
  visGroups(groupname = "C", color = "green")%>%
  visLegend(width = 0.1, position = "left", main = "Grup")

Örnek 4: Merkezilik Ölçüleri

Bu kısımda ağ analizinde düğümlerin derece metriği hesaplanmıştır. Derece, bir düğümün kaç komşusu olduğunu gösteren basit bir merkezilik ölçüsüdür. Ağ yönlendiriliyorsa, ölçümün iki versiyonuna sahibiz: derece içi, gelen bağlantıların sayısı veya önceki düğümlerin sayısıdır. Derece dışı, giden bağlantıların sayısı veya ardıl düğümlerin sayısıdır. Tipik olarak, derece ile ilgileniyoruz, çünkü iç bağlantılar ağdaki diğer düğümler tarafından verilirken, dış bağlantılar düğümün kendisi tarafından belirlenir.

Bir düğüm, çok sayıda komşusu varsa veya yönlendirilmiş durumda, kendisine bağlanan çok sayıda başka düğüm varsa veya diğer birçok düğüme bağlanırsa önemlidir.

set.seed(1461)
grup=sample(x=c("Ankara", "İzmir", "Trabzon"), 10, replace = T)
nodes <- data.frame(id = 1:10, label = paste("E", 1:10), grup=grup, title = grup)
edges <- data.frame(from = sample(1:10, 10, replace = T), to =sample(1:10, 10, replace = T), arrows = "to", dashes=c(TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE))
graph <- graph.data.frame(edges, directed = T)
degree_value <- degree(graph, mode = "total")# derece içi ve dışının toplamı verilmektedir.
nodes$derece <- degree_value[match(nodes$id, names(degree_value))]
nodes$label <- paste("Derece:", nodes$derece, "(", nodes$id, ")")

visNetwork(nodes, edges, main="Ağ Analizinde Düğümlerde Toplam Derecenin Hesaplanması")%>% 
  visOptions(selectedBy = list(variable = "derece", multiple = F),highlightNearest = TRUE)

Örnek 5: Ağa Navigasyon Butonlarının Atanması

Bu kısımda ağ analizinde düğümlerin derece metriği hesaplanmıştır.

Bir düğüm, çok sayıda komşusu varsa veya yönlendirilmiş durumda, kendisine bağlanan çok sayıda başka düğüm varsa veya diğer birçok düğüme bağlanırsa önemlidir.

set.seed(1461)
grup=sample(x=c("Ankara", "İzmir", "Trabzon"), 10, replace = T)
nodes <- data.frame(id = 1:10, label = paste("E", 1:10), grup=grup, title = grup)
edges <- data.frame(from = sample(1:10, 10, replace = T), to =sample(1:10, 10, replace = T), arrows = "to", dashes=c(TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE))
graph <- graph.data.frame(edges, directed = T)
degree_value <- degree(graph, mode = "total")# derece içi ve dışının toplamı verilmektedir.
nodes$derece <- degree_value[match(nodes$id, names(degree_value))]
nodes$label <- paste("Derece:", nodes$derece, "(", nodes$id, ")")

visNetwork(nodes, edges, main="Ağ Analizinde Düğümlerde Toplam Derecenin Hesaplanması")%>% 
visOptions(selectedBy = list(variable = "derece", multiple = F),highlightNearest = TRUE)%>% 
visInteraction(navigationButtons = TRUE)

3D ağlar oluşturma

set.seed(1461)

kaynak <- sample(x=c("Ankara", "İzmir", "Trabzon", "Kayseri", "Sivas", "Antalya"), 10, replace = T)
hedef <-  sample(x=c("Ankara", "İzmir", "Trabzon", "Kayseri", "Sivas", "Antalya"), 10, replace = T)
veri <- data.frame(kaynak, hedef)

simpleNetwork(veri, fontFamily = "calibri", fontSize = 16, zoom = T, nodeColour = "blue", linkColour = "#666", linkDistance = 100)

Hiyerarşik dendogram oluşturma

set.seed(1461)
hk <- USArrests %>% sample_n(20) %>%
  scale() %>% dist() %>%
  hclust(method = "complete")
dendroNetwork(hk, fontSize = 14, height = 500, width = 800,  zoom = T, linkColour = "blue", nodeColour = "green")

Radyal Ağ Oluşturma 1

hk <- hclust(dist(USArrests), "ave")
radialNetwork(as.radialNetwork(hk))

Radyal Ağ Oluşturma 2

radialNetwork(as.radialNetwork(hk), fontSize = 14)

Chord ağı oluşturma

ulasim <- matrix(sample(x=1:10000, 25, replace=F),
nrow =5)
chordNetwork(Data = ulasim, width = 500, height = 500, colourScale = c("#000000", "#FFDD89", "#957244", "#F26223", "#CCFF99"),
             labels = c("Trabzon", "Sivas", "Ankara", "İstanbul", "Antalya"),
             padding = 0.1, fontSize = 16,
             fontFamily = "calibri", labelDistance = 30)

Sankey Diyagram Oluşturma

set.seed(1453)
baglantı <- data.frame(
  kaynak=sample(x=c("Ankara", "İzmir", "Trabzon"), 40, replace = T), 
  hedef=sample(x=c("Kars", "Manisa", "Siirt", "Tekirdağ", "Kayseri"), 40, replace = T),
  deger=sample(x=1:1000, 40, replace=F))

dugum <- data.frame(
  isim=c(as.character(baglantı$kaynak), as.character(baglantı$hedef)) %>% 
    unique()
)

baglantı$IDKaynak <- match(baglantı$kaynak, dugum$isim)-1 
baglantı$IDHedef <- match(baglantı$hedef, dugum$isim)-1

# veri seti
baglantı %>% 
kbl() %>%  
kable_styling(bootstrap_options = c("striped", "hover"))

# Sankey Diyagramı
sd=sankeyNetwork(Links = baglantı, Nodes = dugum, Source = "IDKaynak", Target = "IDHedef", 
              Value = "deger", NodeID = "isim", fontSize= 15, nodeWidth = 10, nodePadding = 50, sinksRight=F, fontFamily = "Calibri")

sd<- prependContent(sd, htmltools::tags$h5("Örnek Bir Sankey Diyagramı"))
sd<-  htmltools::strong(sd)
sd

Tidygraph ve ggraph paketleri ile ağın gösterimi

Burada düğüm sayısı 25 olan bir ağ gösterilmiştir.

f=create_complete(25)
ggraph(f, layout="stress") + 
  geom_edge_link() + 
  geom_node_point()+
  theme_graph()+
  ggtitle(paste("Örnek Ağın Yapısı(Kenar Sayısı=",gsize(f),","," Düğüm Sayısı=",gorder(f),")", sep=""))+
  theme(plot.title = element_text(hjust = 0.5))

Tidygraph ve ggraph paketleri ile ağın gösterimi 1

Burada düğüm sayısı 20 olan halka ağ gösterilmiştir.

f=create_ring(20,  directed = TRUE)
ggraph(f, layout = "stress") + 
  geom_edge_link() + 
  geom_node_point()+
  theme_graph()+
  ggtitle(paste("Örnek Ağın Yapısı(Kenar Sayısı=",gsize(f),","," Düğüm Sayısı=",gorder(f),")", sep=""))+
  theme(plot.title = element_text(hjust = 0.5))

Tidygraph ve ggraph paketleri ile ağın gösterimi 2

k=create_notable('bull') %>%
activate(nodes) %>%
mutate(name = letters[1:5])
ggraph(k, layout = "stress") + 
  geom_edge_link() + 
  geom_node_point()+
  geom_node_label(aes(label = name))+
  theme_graph()+
  ggtitle(paste("Örnek Ağın Yapısı (Kenar Sayısı=",gsize(k),","," Düğüm Sayısı=",gorder(k),")", sep=""))+
  theme(plot.title = element_text(hjust = 0.5))

Tidygraph ve ggraph paketleri ile ağın gösterimi 3

dugum <- tibble(id = c(1, 2, 3, 4, 5, 6, 7, 8), dugum=letters[1:8])
kenar <- tibble(from = c(1, 4, 2, 4, 4, 6, 6, 7, 7, 7),
                  to = c(2, 4, 3, 2, 1, 5, 8, 8, 6, 5))
grafik <- tbl_graph(nodes = dugum, edges = kenar, directed = F)

ggraph(grafik, layout = 'linear', circular = TRUE) +
    geom_edge_link(arrow = arrow(length = unit(4, 'mm')), 
                   end_cap = circle(3, 'mm')) +
    geom_node_point(size = 10, colour = "red") +
    geom_node_text(aes(label = dugum)) +
    theme_graph()+
    ggtitle(paste("Örnek Ağın Yapısı(Kenar Sayısı=",gsize(grafik),","," Düğüm Sayısı=",gorder(grafik),")", sep=""))+
    theme(plot.title = element_text(hjust = 0.5))

Veri seti üzerinden ağ analizi

Bu kısımda R ortamında bulunan highschool veri seti üzerinden ağ analizi yapılarak metrikleri verilmiştir.

data(highschool) 
graph <- highschool %>% mutate(year=factor(year))
graph <- as_tbl_graph(highschool)
graph %>%
ggraph(layout="kk") +
geom_edge_fan(aes(color=year), arrow=arrow()) +
geom_node_point() +
theme_graph()+
ggtitle("Highschool Veri Setindeki Ağın Yapısı")+
theme(plot.title = element_text(hjust = 0.5))

Alt grafiklere bakma

graph <- as_tbl_graph(highschool)
graph %>%
  activate(edges) %>% 
  mutate(year=factor(year))%>%
  filter(year == 1958) %>%
  ggraph(layout="kk") +
  geom_edge_fan(aes(color=year), arrow=arrow()) +
  geom_node_point() +
  theme_graph()+
  ggtitle("Alt Grafikler:1958")+
  theme(plot.title = element_text(hjust = 0.5))

Yönsüz ağa dönüştürme

graph <- as_tbl_graph(highschool)%>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
undirected_graph <- graph %>%
  convert(to_undirected) %>%
  convert(to_simple)
  
undirected_graph  %>%
    ggraph(layout="kk") +
    geom_edge_fan() +
    geom_node_point() +
    theme_graph()+
    ggtitle("Yönsüz Ağ")+
    theme(plot.title = element_text(hjust = 0.5))

Dereceyle orantılı olarak düğümleri gösterme

graph <- as_tbl_graph(highschool)%>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
undirected_graph <- graph %>%
  convert(to_undirected) %>%
  convert(to_simple)
  
undirected_graph %>%
activate(nodes) %>%
mutate(degree=centrality_degree())%>% 
ggraph(layout="kk") +
geom_edge_fan() +
geom_node_point(aes(size=degree, color=degree)) +
theme_graph()+
ggtitle("Dereceyle Orantılı Düğümler")+
theme(plot.title = element_text(hjust = 0.5))

Özvektör merkezilik ölçüsü ile gösterme

graph <- as_tbl_graph(highschool) %>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
graph %>%
convert(to_undirected) %>%
convert(to_simple)%>%
activate(nodes) %>%
mutate(centrality=centrality_eigen()) %>%
ggraph(layout="kk") +
geom_edge_fan() +
geom_node_point(aes(size=centrality, color=centrality)) +
theme_graph()+
ggtitle("Özvektör Merkezilik Ölçüsü")+
theme(plot.title = element_text(hjust = 0.5))

Arasındalık merkezilik ölçüsü ile gösterme

graph <- as_tbl_graph(highschool)%>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
graph %>%
convert(to_undirected) %>%
convert(to_simple)%>%
activate(nodes) %>%
mutate(Arasindalik=centrality_betweenness()) %>%
ggraph(layout="kk") +
geom_edge_fan() +
geom_node_point(aes(size=Arasindalik, color=Arasindalik)) +
theme_graph()+
ggtitle("Arasındalık Merkezilik Ölçüsü")+
theme(plot.title = element_text(hjust = 0.5))

Merkezilik bilgi kriteri ile ağı gösterme

Arasındaki direnç mesafesinin tersin toplamına dayalı merkezilik ölçüsüdür.

graph <- as_tbl_graph(highschool)%>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
graph %>%
convert(to_undirected) %>%
convert(to_simple)%>%
activate(nodes) %>%
mutate(Bilgi_Kriteri=centrality_information()) %>%
ggraph(layout="kk") +
geom_edge_fan() +
geom_node_point(aes(size=Bilgi_Kriteri, color=Bilgi_Kriteri)) +
theme_graph()+
ggtitle("Merkezilik Bilgi Kriteri Ölçüsü")+
theme(plot.title = element_text(hjust = 0.5))

Merkezilik Katz kriteri ile ağı gösterme

Uzak düğümleri cezalandıran yürüyüşlere dayalı merkezilik ölçüsüdür.

graph <- as_tbl_graph(highschool)%>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
graph %>%
convert(to_undirected) %>%
convert(to_simple)%>%
activate(nodes) %>%
mutate(Katz_Kriteri=centrality_katz()) %>%
ggraph(layout="kk") +
geom_edge_fan() +
geom_node_point(aes(size=Katz_Kriteri, color=Katz_Kriteri)) +
theme_graph()+
ggtitle("Merkezilik Katz Kriteri Ölçüsü")+
theme(plot.title = element_text(hjust = 0.5))

Merkezilik rassal yürüyüş (RY) kriteri ile ağı gösterme

Düğümler arasında beklenen rastgele yürüyüş uzunluğunun tersinin toplamına eşit merkezilik ölçüsüdür.

options(scipen = 999)

graph <- as_tbl_graph(highschool)%>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
graph %>%
convert(to_undirected) %>%
convert(to_simple)%>%
activate(nodes) %>%
mutate(RY_Kriteri=centrality_random_walk()) %>%
ggraph(layout="kk") +
geom_edge_fan() +
geom_node_point(aes(size=RY_Kriteri, color=RY_Kriteri)) +
theme_graph()+
ggtitle("Merkezilik Rassal Yürüyüş (RY) Kriteri Ölçüsü")+
theme(plot.title = element_text(hjust = 0.5))

K core decomposition ölçüsü ile ağı gösterme

Düğümler arasında beklenen rastgele yürüyüş uzunluğunun tersinin toplamına eşit merkezilik ölçüsüdür.

options(scipen = 999)
graph <- as_tbl_graph(highschool) %>%
         activate(edges) %>% 
         mutate(year=factor(year))
         
graph %>%
convert(to_undirected) %>%
convert(to_simple)%>%
activate(nodes) %>%
mutate(K_Core=node_coreness()) %>%
ggraph(layout="kk") +
geom_edge_fan() +
geom_node_point(aes(size=K_Core, color=K_Core)) +
theme_graph()+
ggtitle("K Core Merkezilik Ölçüsü")+
theme(plot.title = element_text(hjust = 0.5))

Sonuç

Bu çalışmada, ağ analizinin temel bileşenleri ortaya konulduktan sonra üretilen sentetik veriler analiz edilerek ağ analizi (AA veya SAA) konusunda farkındalık oluşturulması ve yaygın kullanım alanına sahip metriklerin gösterilmesi amaçlanmıştır.

Sosyal ağ analizi ile ilgili çalışmanın tamamına https://rpubs.com/tevfik1461/saa5 linkinden de ulaşabilirsiniz.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknoloji ile kalınız.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

An Introduction to Network Analysis (NA or SNA) in R

Network analysis is a set of techniques that allow researchers to describe relations among actors and to analyze the social structures that emerge from the recurrence of these relations. The main purpose of NA is to explain the social phenomenon as well as possible, and this analysis is often called as social network analysis (SNA).In here, the term social network refers to the expression of a social relationship among individuals, families, households, villages, communities, regions, and so on. Beside contribution to explanation of quantitative concepts, SNA provide to be understood phenomena better by enabling the quantitative measures of qualitative concepts.

Within the scope of this study, examples of application will be conducted as an introduction to social network analysis by producing synthetic data using R programming language.

In the SNA, data set generally is converted into matrix format before analysis. But, other forms of data set is supported by some programming languages such as R or Python.

Network analysis can be done in many different subject areas. Featured areas can be listed as follows:

  1. Marketing Analytics
  2. Social relationships
  3. Pharma
  4. Banking Transactions
  5. Supply Chain
  6. Telecom

Components of a Network

Node (Vertex): Nodes or vertices are the units that are related to each other. An edge (a set of two elements) is drawn as a line connecting two vertices.

Edge: An edge, a set of two elements, is described as a line linking two nodes.

Components of a network is presented at Figure 1.

Figure 1: Components of a Network

In the next sections, R code blocks will be given step by step, respectively. After that, the results obtained will be presented.

Loading Libraries

sapply(c("dplyr", "tibble", "tidyr", "ggplot2","ggraph", "igraph", "tidygraph"), require, character.only = TRUE)

Indirected Networks

set.seed(1)

edge<-c(sample(1:3, 6, replace=T))#Simple Random Sampling (SRS) With Replacement)

g1 <- graph(edges=edge, n=3, directed=F ) 

plot(g1)

Directed Networks

set.seed(3)

edge<-c(sample(1:3, 6, replace=T))#Simple Random Sampling (SRS) With Replacement

g1 <- graph(edges=edge, n=3, directed=T) 

plot(g1)

Determining number of vertices or nodes

set.seed(5)

edge<-c(sample(1:5, 10, replace=T))

g1 <- graph(edges=edge, n=15, directed=T) 

plot(g1) 

Creating the edge list with vertex names in directed networks

set.seed(7)

edge<-c(sample(LETTERS[1:5], 10, replace=T))

g1 <- graph(edges=edge, directed=T) 

plot(g1)

g1

Names of vertices or nodes are given below depending on the R code block above.

IGRAPH 6ea3d94 DN-- 3 5 -- 
+ attr: name (v/c)
+ edges from 6ea3d94 (vertex names):
[1] B->C D->B B->C C->B D->C

In netwok, it can be defined isolates by providing a list of their names.

set.seed(9)

edge<-c(sample(LETTERS[1:5], 10, replace=T))

isolated_edge<-c(sample(LETTERS[6:20], 8, replace=F))#SRS without Replacement

name <- graph(edge, isolates=isolated_edge)

plot(name, edge.arrow.size=.5, vertex.color="red", vertex.size=20, 

     vertex.frame.color="brown", vertex.label.color="black", 

     vertex.label.cex=0.8, vertex.label.dist=3, edge.curved=0.2)

Determining Directed Networks Manually

plot(graph_from_literal(Artvin--+Trabzon, Trabzon+--Ankara, Trabzon+-- 
                       Mardin, Trabzon+--İzmir), 
     edge.curved=0.8, vertex.color="red", edge.arrow.size=0.5, 
     vertex.size=50)

Determining Undirected Networks Manually

plot(graph_from_literal(Artvin---Trabzon, Trabzon---Ankara, Trabzon--- 
                        Mardin, Trabzon---İzmir), 
     edge.curved=0.8, vertex.color="gray", edge.arrow.size=0.5, 
     vertex.size=50)

Identifying Mutual Directions Manually

plot(graph_from_literal(Artvin+-+Trabzon, Trabzon+-+Ankara, Trabzon++Mardin, 
                        Trabzon+-+İzmir), 
     edge.curved=0.8, vertex.color="gray", edge.arrow.size=0.5, 
     vertex.size=50)

Network Attributes

E(name)# Edges
+ 5/5 edges from 87b24d1 (vertex names):
[1] C->E C->C C->D C->D E->B
V(name)# Vertices or Nodes
+ 12/12 vertices, named, from 87b24d1:
 [1] C E D B J O Q H N K P F

Implementation Examples of Network Analysis

Version 1

set.seed(11)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), 
              C=sample(200:204,400, replace=T))

graph <- graph.data.frame(data)#This function creates igraph graphs from data frames or vice-versa.

plot(graph)

Version 2

set.seed(13)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), 
             C=sample(200:204,400, replace=T))

graph1 <- graph_from_data_frame(data)#graph_from_data_frame creates igraph graphs from one or two data frames. It has two modes of operatation, depending whether the vertices argument is NULL or not.

ggraph(graph1) + 
      geom_edge_link(aes(colour = factor(C))) + 
      geom_node_point()

Version 3: Layout “Linear”

set.seed(15)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))

graph1 <- graph_from_data_frame(data)#graph_from_data_frame creates igraph graphs from one or two data frames. It has two modes of operatation, depending whether the vertices argument is NULL or not.

ggraph(graph1, layout = 'linear', circular = TRUE) + 
    geom_edge_link(aes(colour = factor(C))) + 
    geom_node_point()

Version 4: Layout “Star”

A simple layout generator, that places one vertex in the center of a circle and the rest of the vertices equidistantly on the perimeter.

set.seed(17)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("red",5),rep("blue", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="star") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()

Version 5: Layout “Circle”

Layout Circle is used to describe place vertices on a circle, in the order of their vertex ids.

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("green",5),rep("blue", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="circle") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()

Version 6: Layout “Grid”

This layout places vertices on a rectangulat grid, in two or three dimensions.

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("green",5),rep("blue", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="grid") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()+
  ggtitle("Grid Layout")

Version 7: Layout “Sphere”

Layout Sphere is used to define place vertices on a sphere, approximately uniformly, in the order of their vertex ids.

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("green",5),rep("blue", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="sphere") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()+
  ggtitle("Layout Sphere")

Version 7: Layout “KK”

kkconst: Numeric scalar, the Kamada-Kawai vertex attraction constant. Typical (and default) value is the number of vertices.

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("green",5),rep("blue", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="kk") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()+
  ggtitle("Layout KK")

Version 7: Layout “FR”

Layout FR is used to describe place vertices on the plane using the force-directed layout algorithm by Fruchterman and Reingold.

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("brown",5),rep("blue", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="fr") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()+
  ggtitle("Layout FR")

Version 8: Layout “MDS”

Layout MDS is used to describe multidimensional scaling of some distance matrix defined on the vertices of a graph.

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("brown",5),rep("green", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="mds") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()+
  ggtitle("Layout MDS")

Version 9: Layout “LGL”

Layout LGL is defines as a layout generator for larger graphs.

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
y<-c(rep("brown",5),rep("green", 5))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout="lgl") +
  geom_edge_fan(color="gray50", width=0.8, alpha=0.5) + 
  geom_node_point(color=y, size=10) +
  theme_void()+
  ggtitle("Layout LGL")

Version 10: Layout “Arch”

set.seed(19)
data<-tibble(A=sample(1:6,400, replace=T),B=sample(1:10,400, replace=T), C=sample(200:204,400, replace=T))
graph1 <- graph_from_data_frame(data)
ggraph(graph1, layout = 'linear') + 
    geom_edge_arc(color = "brown", width=0.7) +
    geom_node_point(size=5, color="gray50") +
    theme_void()+
    ggtitle("Layout Arch")

Version 11: Layout “Dendrogram”

set.seed(1453)

data1 <- data_frame(from=sample(1:15,30, replace=T),to=sample(1:15,30, replace=T))

letter<-sample(LETTERS[1:15],30, replace=T)

data1<-as.matrix(data1)

rownames(data1)<-letter

hc1 <- hclust(dist(data1), "ave")

dendroNetwork(hc1)

Version 12: Layout “Dendrogram” with Link Type “Diagonal

set.seed(1453)

data1 <- data_frame(from=sample(1:15,30, replace=T),to=sample(1:15,30, 
                    replace=T))

letter<-sample(LETTERS[1:15],30, replace=T)

data1<-as.matrix(data1)

rownames(data1)<-letter

hc1 <- hclust(dist(data1), "ave")

dendroNetwork(hc1, height = 600, linkType = "diagonal")

Version 13: Layout “Dendrogram” with Link Type “Elbow”

set.seed(1461)

data1 <- data_frame(from=sample(1:15,30, replace=T),to=sample(1:15,30, 
                    replace=T))

letter<-sample(LETTERS[1:15],30, replace=T)

data1<-as.matrix(data1)

rownames(data1)<-letter

hc1 <- hclust(dist(data1), "ave")

dendroNetwork(hc1, linkType = "elbow", textColour = c("red", "green", "blue")[cutree(hc1, 3)],treeOrientation = "vertical")

Conclusion

In this study, it is aimed to raise awareness about network analysis (NA or SNA) by analyzing the synthetic data produced after revealing the basic components of network analysis.

We hope it will be useful and raise awareness.

Stay with science and technology.

Your’s respectfully.

References

socnet_howto.pdf erişimi için tıklayın

https://dash.harvard.edu/bitstream/handle/1/4276348/Christakis_SocialNetwkVisual.pdf?sequence=2

https://cran.r-project.org/web/packages/tidygraph/index.html

https://sna.stanford.edu/lab.php?l=1

https://sna.stanford.edu/lab.php?l=5

https://www.sciencedirect.com/topics/social-sciences/network-analysis

https://www.slideshare.net/bodacea

35208_Chapter1.pdf erişimi için tıklayın

https://www.rdocumentation.org/packages/networkD3/versions/0.4/topics/dendroNetwork

https://sites.google.com/a/umn.edu/social-network-analysis/terminology

https://kateto.net/network-visualization

https://igraph.org/r/doc/layout_with_kk.html

Kamada, T. and Kawai, S.: An Algorithm for Drawing General Undirected Graphs. Information Processing Letters, 31/1, 7–15, 1989.

https://igraph.org/r/doc/layout_on_grid.html

https://igraph.org/r/doc/layout_with_lgl.html

Fruchterman, T.M.J. and Reingold, E.M. (1991). Graph Drawing by Force-directed Placement. Software – Practice and Experience, 21(11):1129-1164.

https://igraph.org/r/doc/layout_with_fr.html

https://igraph.org/r/doc/layout_on_sphere.html

https://igraph.org/r/doc/layout_in_circle.html