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.
Info!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:
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.
Veri Kaynağı: https://www.slideshare.net/bodacea/network-analysis-lecture.
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.
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")
Sıra | Kütüphane | Durumu |
---|---|---|
1 | dplyr | Yüklendi |
2 | tibble | Yüklendi |
3 | tidyr | Yüklendi |
4 | ggplot2 | Yüklendi |
5 | ggthemes | Yüklendi |
6 | readxl | Yüklendi |
7 | writexl | Yüklendi |
8 | psych | Yüklendi |
9 | GGally | Yüklendi |
10 | rstatix | Yüklendi |
11 | RColorBrewer | Yüklendi |
12 | htmlwidgets | Yüklendi |
13 | kableExtra | Yüklendi |
14 | stargazer | Yüklendi |
15 | readr | Yüklendi |
16 | visNetwork | Yüklendi |
17 | igraph | Yüklendi |
18 | networkD3 | Yüklendi |
19 | tidygraph | Yüklendi |
20 | ggraph | Yüklendi |
21 | netrankr | Yüklendi |
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")
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)
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")
Info!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)
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)
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")
hk <- hclust(dist(USArrests), "ave")
radialNetwork(as.radialNetwork(hk))
radialNetwork(as.radialNetwork(hk), fontSize = 14)
Radyal Ağ Örneği
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)
Yay diyagramı, özel bir ağ grafiği türüdür. Birimleri temsil eden düğümlerden ve birimler arasındaki ilişkileri gösteren bağlantılardan oluşur. Yay diyagramlarında düğümler tek bir eksen boyunca gösterilir ve bağlantılar yaylarla gösterilir.Düğümlerin sırası ark diyagramlarının anahtarıdır.
require(tidygraph)
# Make a graph with different directions of edges
gr <- create_notable('Meredith') %>%
convert(to_directed) %>%
mutate(class = sample(letters[1:3], n(), replace = TRUE)) %>%
activate(edges) %>%
mutate(
class = sample(letters[1:3], n(), replace = TRUE),
switch = sample(c(TRUE, FALSE), n(), replace = TRUE)
) %>%
reroute(from = to, to = from, subset = switch)
ggraph(gr, 'linear') +
geom_edge_arc(aes(alpha = stat(index)))+
geom_node_text(aes(label=class), angle=65, hjust=1, nudge_y = -1.1, size=2.3)
ggraph(gr, 'linear') +
geom_edge_arc2(aes(colour = node.class), strength = 0.6)+
geom_node_text(aes(label=class), angle=65, hjust=1, nudge_y = -1.1, size=2.3)
## Ağ diyagramı ile kümeleme sonucu görselleştirme
library(RColorBrewer)
#Korelasyon matrisi
kor <- cor(t(iris[,c(1:4)]))
kor[kor<0.9] <- 0
network <- graph_from_adjacency_matrix(kor, weighted=T, mode="undirected", diag=F)
renk<- brewer.pal(nlevels(as.factor(iris$Species)), "Set1")
renkd <- renk[as.numeric(as.factor(iris$Species))]
# grafik
par(bg="grey11", mar=c(0,0,0,0))
set.seed(1461)
plot(network,
vertex.size=12,
vertex.color=renkd,
vertex.label.cex=0.7,
vertex.label.color="white",
vertex.frame.color="transparent"
)
# başlık ve legend
text(0,0,"iris bitki ağı",col="white", cex=1.5)
legend(x=-0.2, y=-0.12,
legend=paste( levels(as.factor(iris$Species)), " Türü", sep=""),
col = renk ,
bty = "n", pch=20 , pt.cex = 2, cex = 1,
text.col="white" , horiz = F)
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"))
kaynak | hedef | deger | IDKaynak | IDHedef |
---|---|---|---|---|
Ankara | Tekirdağ | 679 | 0 | 3 |
Trabzon | Siirt | 919 | 1 | 4 |
Trabzon | Tekirdağ | 506 | 1 | 3 |
İzmir | Kars | 216 | 2 | 5 |
İzmir | Tekirdağ | 124 | 2 | 3 |
Ankara | Kars | 333 | 0 | 5 |
Ankara | Siirt | 637 | 0 | 4 |
İzmir | Manisa | 308 | 2 | 6 |
Trabzon | Manisa | 126 | 1 | 6 |
İzmir | Manisa | 925 | 2 | 6 |
Ankara | Tekirdağ | 680 | 0 | 3 |
İzmir | Kars | 283 | 2 | 5 |
Ankara | Kars | 172 | 0 | 5 |
Trabzon | Kars | 669 | 1 | 5 |
Ankara | Kayseri | 279 | 0 | 7 |
Trabzon | Manisa | 962 | 1 | 6 |
Ankara | Siirt | 22 | 0 | 4 |
Ankara | Kayseri | 833 | 0 | 7 |
Ankara | Siirt | 191 | 0 | 4 |
İzmir | Kars | 178 | 2 | 5 |
İzmir | Manisa | 861 | 2 | 6 |
İzmir | Manisa | 270 | 2 | 6 |
İzmir | Siirt | 501 | 2 | 4 |
Ankara | Manisa | 373 | 0 | 6 |
Ankara | Kars | 138 | 0 | 5 |
İzmir | Siirt | 366 | 2 | 4 |
Ankara | Kayseri | 922 | 0 | 7 |
Ankara | Kayseri | 72 | 0 | 7 |
Trabzon | Tekirdağ | 305 | 1 | 3 |
Trabzon | Manisa | 624 | 1 | 6 |
Trabzon | Manisa | 254 | 1 | 6 |
Trabzon | Manisa | 341 | 1 | 6 |
İzmir | Siirt | 864 | 2 | 4 |
Ankara | Tekirdağ | 301 | 0 | 3 |
Ankara | Kars | 536 | 0 | 5 |
İzmir | Tekirdağ | 854 | 2 | 3 |
İzmir | Manisa | 394 | 2 | 6 |
İzmir | Manisa | 201 | 2 | 6 |
Trabzon | Siirt | 974 | 1 | 4 |
İzmir | Siirt | 838 | 2 | 4 |
# 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
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))
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))
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))
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))
Bu kısımda metrikler tidygraph paketi ile hesaplanmıştır.
Endojen ve eksojen faktörlerin göreceli önemini gösterir.
set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
mutate("Önem Düzeyi" = centrality_alpha())%>%
mutate_at("Önem Düzeyi", round, 3) %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Önem Düzeyi |
---|
2.513 |
-10.284 |
-9.260 |
0.992 |
6.302 |
-20.588 |
-4.407 |
-3.015 |
-3.014 |
11.222 |
4.637 |
8.368 |
4.403 |
-5.472 |
4.676 |
-1.212 |
10.465 |
-0.014 |
3.542 |
-2.595 |
-4.695 |
-5.380 |
2.954 |
-0.735 |
-1.958 |
-0.598 |
-0.321 |
7.268 |
1.119 |
1.063 |
-7.517 |
-2.560 |
-5.671 |
-7.950 |
-4.250 |
-0.083 |
12.632 |
15.134 |
-4.156 |
6.751 |
-1.123 |
-9.053 |
-3.464 |
3.427 |
4.614 |
-4.289 |
-2.484 |
4.141 |
1.979 |
3.553 |
set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
mutate("Derece" = centrality_degree()) %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Derece |
---|
14 |
17 |
15 |
18 |
22 |
15 |
20 |
17 |
13 |
14 |
18 |
12 |
14 |
17 |
13 |
21 |
21 |
23 |
16 |
20 |
17 |
17 |
20 |
10 |
17 |
20 |
16 |
14 |
21 |
14 |
15 |
18 |
20 |
17 |
24 |
12 |
19 |
19 |
14 |
14 |
18 |
20 |
13 |
18 |
17 |
17 |
19 |
21 |
19 |
18 |
set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
mutate(
"Derece içi" = centrality_degree(mode = "in"),
"Derece Dışı"= centrality_degree(mode = "out"),
"Derece" = centrality_degree(mode = "all")
) %>%
kable() %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Derece içi | Derece Dışı | Derece |
---|---|---|
20 | 14 | 34 |
16 | 17 | 33 |
14 | 15 | 29 |
17 | 18 | 35 |
19 | 22 | 41 |
17 | 15 | 32 |
17 | 20 | 37 |
15 | 17 | 32 |
13 | 13 | 26 |
13 | 14 | 27 |
15 | 18 | 33 |
17 | 12 | 29 |
14 | 14 | 28 |
20 | 17 | 37 |
29 | 13 | 42 |
21 | 21 | 42 |
22 | 21 | 43 |
15 | 23 | 38 |
22 | 16 | 38 |
16 | 20 | 36 |
18 | 17 | 35 |
21 | 17 | 38 |
14 | 20 | 34 |
14 | 10 | 24 |
13 | 17 | 30 |
22 | 20 | 42 |
17 | 16 | 33 |
15 | 14 | 29 |
13 | 21 | 34 |
17 | 14 | 31 |
18 | 15 | 33 |
19 | 18 | 37 |
18 | 20 | 38 |
17 | 17 | 34 |
22 | 24 | 46 |
14 | 12 | 26 |
16 | 19 | 35 |
22 | 19 | 41 |
21 | 14 | 35 |
16 | 14 | 30 |
15 | 18 | 33 |
15 | 20 | 35 |
21 | 13 | 34 |
15 | 18 | 33 |
16 | 17 | 33 |
10 | 17 | 27 |
14 | 19 | 33 |
19 | 21 | 40 |
18 | 19 | 37 |
16 | 18 | 34 |
Info!Birçok ağ çalışmasının amacı, hangi düğümlerin önemli veya “merkezi” olduğunu bulmaktır. Düğüm merkeziliği için çeşitli metrikler vardır. Bu bölümde, iki merkezilik ölçüsü daha tartışacağız: arasındalık ve özvektör merkeziliği.
Bir düğümün arasındalığı, bu düğümden geçen en kısa yolların sayısıdır (başlangıç ve bitiş düğümleri hariç). Arasındalık oranı yüksek bir düğüm, ağdaki bilgi akışı için önemlidir, çünkü ağın farklı bölümleri arasındaki en verimli iletişim kanallarının çoğunda bulunur. İki düğüm arasında birden fazla en kısa yol varsa, tüm yolların arasındalığa olan katkısını eşit olarak böleriz. set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
mutate("Arasındalık" = centrality_betweenness()) %>%
arrange(desc("Arasındalık")) %>%
mutate_at("Arasındalık", round, 3) %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Arasındalık |
---|
23.360 |
25.312 |
25.234 |
31.516 |
43.192 |
27.408 |
37.703 |
31.637 |
16.135 |
24.131 |
36.015 |
19.825 |
22.020 |
33.226 |
43.817 |
49.388 |
56.422 |
38.672 |
36.821 |
37.029 |
29.407 |
38.169 |
25.692 |
17.147 |
20.335 |
44.382 |
30.520 |
25.120 |
30.551 |
26.912 |
32.377 |
31.082 |
43.522 |
33.056 |
57.165 |
19.241 |
26.772 |
45.610 |
36.055 |
26.000 |
34.633 |
29.320 |
25.499 |
27.660 |
30.756 |
17.463 |
26.405 |
37.950 |
38.816 |
26.520 |
set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
mutate("Özvektör" = centrality_eigen()) %>%
arrange(desc("Özvektör")) %>%
mutate_at("Özvektör", round, 3) %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover"))
Özvektör |
---|
0.752 |
0.725 |
0.614 |
0.760 |
0.893 |
0.680 |
0.792 |
0.674 |
0.569 |
0.554 |
0.705 |
0.642 |
0.597 |
0.794 |
0.906 |
0.901 |
0.905 |
0.813 |
0.823 |
0.778 |
0.782 |
0.832 |
0.773 |
0.491 |
0.667 |
0.914 |
0.699 |
0.582 |
0.731 |
0.673 |
0.695 |
0.817 |
0.788 |
0.741 |
1.000 |
0.562 |
0.777 |
0.887 |
0.739 |
0.612 |
0.696 |
0.775 |
0.755 |
0.719 |
0.713 |
0.582 |
0.722 |
0.889 |
0.790 |
0.764 |
Bir ağın yoğunluğu, tüm düğüm çiftleri bağlıysa potansiyel olarak var olabilecek tüm kenarların gerçekte var olan bir ağdaki kenarların sayısına oranlanması ile hesaplanır. Teorik olarak olası kenarların sayısını saydığımızda, paralel kenarlar ve döngüler olasılığını dışlıyoruz.Örneğin, aşağıdaki örnekte 5*4 =20 kenarla bağlanabilen 5 düğüm vardır. Gerçekte 5 kenar vardır, dolayısıyla yoğunluk 19 / 72 ≈0,26’dır.
set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
edge_density() %>% as_tibble()%>%
rename("Yoğunluk"=value) %>%
kable()%>%
kable_styling()
Yoğunluk |
---|
0.3502041 |
Bir ağın genel bağlantılılığı için başka bir ölçü, ortalama mesafedir. İlk önce tüm düğüm çiftleri arasındaki en kısa yolların uzunlukları belirlenerek hesaplanır. Sonra bu uzunlukların ortalaması alınır.
set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
mean_distance() %>% as_tibble()%>%
rename("Ortalama Uzaklık"=value) %>%
kable()%>%
kable_styling()
Ortalama Uzaklık |
---|
1.650204 |
Bir ağın geçişlilik veya kümelenme katsayısı, düğümlerin birlikte kümelenme eğiliminin bir ölçüsüdür. Yüksek geçişlilik, ağın, dahili olarak yoğun bir şekilde bağlı olan toplulukları veya düğüm gruplarını içerdiği anlamına gelir.Ağda gözlenen kapalı üçlü sayısı ile mümkün olan maksimum kapalı üçlü sayısı arasındaki oran ile hesaplanır. Karmaşık ağlar ve özellikle küçük ağlar genellikle yüksek geçişliliğe sahiptir.
set.seed(1461)
sample_gnp(n=50, p=7/20, directed=TRUE) %>%
as_tbl_graph()%>%
activate(nodes) %>%
transitivity() %>% as_tibble()%>%
rename("Geçişlilik"=value) %>%
kable()%>%
kable_styling()
Geçişlilik |
---|
0.5793687 |
Karşılıklılık, yönlendirilmiş bir ağdaki köşelerin karşılıklı olarak bağlantılı olma olasılığının bir ölçüsüdür. Kümeleme katsayısı, ölçeksiz derece dağılımı veya topluluk yapısı gibi karşılıklılık, karmaşık ağları incelemek için kullanılan nicel bir ölçüdür.Karşılıklılık ölçüsü, yönlendirilmiş bir ağda karşılıklı bağlantıların oranını tanımlar. En yaygın olarak, yönlendirilmiş bir kenarın zıt karşılığının da grafiğe dahil olma olasılığı olarak tanımlanır.
set.seed(1461)
# ağın grafiği (Düğüm sayısı:50)
g=sample_gnp(n=50, p=7/20, directed=TRUE)
ggraph(g, layout="kk") +
geom_edge_link() +
geom_node_point()+
ggtitle("Ağın Yapısı")+
theme(plot.title = element_text(hjust = 0.5))+
ggtitle(paste("Örnek Ağın Yapısı(Kenar Sayısı=",gsize(g),","," Düğüm Sayısı=",gorder(g),")", sep=""))+
theme(plot.title = element_text(hjust = 0.5))
# ağın karşılıklılık ölçüsü
g %>%
as_tbl_graph()%>%
activate(nodes) %>%
reciprocity() %>% as_tibble()%>%
rename("Karşılıklılık"=value) %>%
kable()%>%
kable_styling()
Karşılıklılık |
---|
0.3403263 |
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))
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))
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))
graph <- as_tbl_graph(highschool[,1:2])%>%
activate(nodes) %>%
mutate(name=factor(name))
undirected_graph <- graph %>%
convert(to_undirected) %>%
convert(to_simple)
g <- fastgreedy.community(undirected_graph)
# grup sayısı
paste("Grup Sayısı=",length(g), sep="")
## [1] "Grup Sayısı=4"
# grupların büyüklükleri
sizes(g)
## Community sizes
## 1 2 3 4
## 23 18 14 15
# Grup üyeleri
membership(g)
## 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28
## 2 2 2 1 1 2 2 2 2 1 2 2 2 2 1 2 1 1 2 2 2 4 2 1 1 2
## 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3
## 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 10
## 3 4 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 1
plot(g, as_tbl_graph(highschool))
Bu kısımda tidygraph paketi kullanılarak topluluklar gösterilmiştir.
graph <- as_tbl_graph(highschool[,1:2])%>%
activate(nodes) %>%
mutate(name=factor(name))
undirected_graph <- graph %>%
convert(to_undirected) %>%
convert(to_simple)
undirected_graph %>%
mutate(Topluluk = as.factor(group_infomap())) %>%
ggraph(layout = 'kk') +
geom_edge_link(aes(alpha = ..index..), show.legend = FALSE) +
geom_node_point(aes(colour = Topluluk), size = 7) +
theme_graph()
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
graph <- as_tbl_graph(highschool) %>%
mutate(Derece = centrality_degree(mode = 'all'))
ggraph(graph, layout = 'kk') +
geom_edge_fan(aes(alpha = stat(index)), show.legend = FALSE) +
geom_node_point(aes(size = Derece, color=Derece)) +
facet_edges(~year) +
theme_graph(foreground = 'powderblue', fg_text_colour = 'black')+
ggtitle("Dereceyle Orantılı Alt Grafikler")+
theme(plot.title = element_text(hjust = 0.5))
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
graph <- as_tbl_graph(highschool)%>%
activate(edges) %>%
mutate(year=factor(year))
undirected_graph <- graph %>%
convert(to_undirected) %>%
convert(to_simple)
undirected_graph <- undirected_graph %>%
activate(nodes) %>%
mutate(degree=centrality_degree())%>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover"))
undirected_graph
name | .tidygraph_node_index | degree |
---|---|---|
1 | 1 | 7 |
2 | 2 | 3 |
3 | 3 | 2 |
4 | 4 | 6 |
5 | 5 | 5 |
6 | 6 | 6 |
7 | 7 | 3 |
8 | 8 | 5 |
9 | 9 | 9 |
11 | 10 | 9 |
12 | 11 | 6 |
13 | 12 | 10 |
14 | 13 | 5 |
15 | 14 | 5 |
16 | 15 | 8 |
17 | 16 | 6 |
18 | 17 | 6 |
19 | 18 | 10 |
20 | 19 | 9 |
21 | 20 | 14 |
22 | 21 | 13 |
23 | 22 | 13 |
24 | 23 | 2 |
26 | 24 | 9 |
27 | 25 | 7 |
28 | 26 | 5 |
29 | 27 | 8 |
30 | 28 | 5 |
31 | 29 | 6 |
32 | 30 | 8 |
33 | 31 | 7 |
34 | 32 | 3 |
35 | 33 | 5 |
36 | 34 | 7 |
37 | 35 | 4 |
38 | 36 | 9 |
39 | 37 | 9 |
40 | 38 | 7 |
41 | 39 | 7 |
42 | 40 | 8 |
43 | 41 | 11 |
44 | 42 | 2 |
45 | 43 | 7 |
46 | 44 | 7 |
47 | 45 | 6 |
48 | 46 | 12 |
49 | 47 | 13 |
50 | 48 | 9 |
51 | 49 | 13 |
52 | 50 | 9 |
53 | 51 | 10 |
54 | 52 | 13 |
55 | 53 | 13 |
56 | 54 | 7 |
57 | 55 | 7 |
58 | 56 | 3 |
59 | 57 | 8 |
60 | 58 | 8 |
61 | 59 | 5 |
62 | 60 | 9 |
63 | 61 | 8 |
64 | 62 | 6 |
65 | 63 | 9 |
66 | 64 | 8 |
67 | 65 | 9 |
68 | 66 | 15 |
69 | 67 | 8 |
70 | 68 | 19 |
71 | 69 | 15 |
10 | 70 | 3 |
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))
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))
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))
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))
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))
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))
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))
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.
Faydalı olması ve farkındalık oluşturması dileğiyle.
Bilimle ve teknoloji ile kalınız.
https://www.sci.unich.it/~francesc/teaching/network/degree.html
https://www.r-graph-gallery.com/322-custom-colours-in-sankey-diagram.html
http://www.hcbravo.org/networks-across-scales/misc/tidygraph.nb.html
Bodwin, Kelly, and Hunter Glanz. 2020. Flair: Highlight, Annotate, and Format Your r Source Code.
https://www.r-graph-gallery.com/250-correlation-network-with-igraph.html