Konu: www.amazon.com’da yapılan alışverişlerde birlikte alınan ürünlerin ağ yapısının belirlenmesi
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
options(scipen = TRUE)
amazon <- read_excel("C:/Users/Tolga/Desktop/YTU/sosyalag/Ödevler/Ödevler/Amazon/Amazon Purchasing.xlsx", sheet = "Amazon(4)")
##from 'a göre gruplandırma
amazon%>%
group_by(from)%>%
summarise(n=n())%>%
ggplot()+
geom_point(aes(x=from, y=n))
## `summarise()` ungrouping output (override with `.groups` argument)
##to 'ya göre gruplandırma
amazon%>%
group_by(to)%>%
summarise(n=n())%>%
ggplot()+
geom_point(aes(x=to, y=n))
## `summarise()` ungrouping output (override with `.groups` argument)
##date 'e göre gruplandırma
amazon%>%
group_by(date)%>%
summarise(n=n())%>%
ggplot()+
geom_col(aes(x=date,y=n,fill=date))
## `summarise()` ungrouping output (override with `.groups` argument)
## Ağırlıklandırma yapıldığında dağılım
amazon %>%
group_by(from,to)%>%
summarise(wgt=n())%>%
ungroup()%>%
group_by(wgt)%>%
summarise(n=n())
## `summarise()` regrouping output by 'from' (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 2 x 2
## wgt n
## <int> <int>
## 1 1 14643
## 2 2 249
ggplotly(amazon %>%
group_by(from,to)%>%
summarise(wgt=n())%>%
ggplot()+
geom_point(aes(x=from,y=to,color=as.factor(wgt))))
## `summarise()` regrouping output by 'from' (override with `.groups` argument)
amazon %>%
group_by(from,to,date)%>%
summarise(wgt=n())%>%
ungroup()%>%
group_by(wgt)%>%
summarise(n=n())
## `summarise()` regrouping output by 'from', 'to' (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 1 x 2
## wgt n
## <int> <int>
## 1 1 15141
#Amazon datasını filtreliyoruz.
amazon4 <- amazon %>%
group_by(from,to)%>%
summarise(wgt=n())%>%
filter(wgt == 2)
## `summarise()` regrouping output by 'from' (override with `.groups` argument)
Genel “amazon” verisi gösterimi
library(igraph)
library(visNetwork)
plot2 <- graph_from_data_frame(d=amazon, directed=T)
E(plot2)$color <- ifelse(E(plot2)$date == "01-10-2020", "blue",
ifelse(E(plot2)$date == "02-10-2020", "red",
ifelse(E(plot2)$date == "03-10-2020", "green",
ifelse(E(plot2)$date == "04-10-2020", "yellow","black"))))
plot(plot2)
Genel “amazon” verisi gösterimi - 1
myViz <- function (myGraph){
visIgraph(myGraph, randomSeed = 11) %>%
visIgraphLayout(randomSeed = 11) %>%
visNodes(
font = list(size = 39),
shape = "dot",
color = list(
background = "#0085AF",
border = "#013848",
highlight = "#FF8000"
),
shadow = list(enabled = TRUE, size = 10)
) %>%
visEdges(
shadow = FALSE,
color = list(color = "#0085AF", highlight = "#C62F4B")
) %>%
visLayout(randomSeed = 11)%>%
visOptions(nodesIdSelection = TRUE)
}
myViz(plot2)
library(DT)
derece <- degree(plot2)
derecemerkez <- degree(plot2, normalized=TRUE, mode = "in") #Yönsüz ağlarda bir düğümün derecesi basitçe o düğüme bağlanan kenarların sayısıdır.
yakinlikmerkez <- closeness(plot2, normalized=TRUE) #Yakınlık Merkeziliği bir düğümün ağdaki tüm diğer düğümlere ne kadar yakın olduğunu gösterir
## Warning in closeness(plot2, normalized = TRUE): At centrality.c:2784 :closeness
## centrality is not well-defined for disconnected graphs
arasindamerkez <- betweenness(plot2, normalized=TRUE)
pagerankmerkez <- page_rank(plot2)$vector #Google’ın web sayfalarını sıralama başarısı PageRank adlı algoritmaya dayanmaktadır
datatable(data.frame(derece,derecemerkez, yakinlikmerkez, arasindamerkez, pagerankmerkez),filter="top")
Filtrelenmiş “amazon4” verisi gösterimi
plot3 <- graph_from_data_frame(d=amazon4, directed=T)
nodes <- data.frame(id=unique(amazon4$from),label=unique(amazon4$from))
edges <- amazon4%>%select(from,to)
visNetwork(nodes, edges, main = "Amazon Sheet (4) Network Graph") %>%
visNodes(
font = list(size = 59),
shape = "dot",
color = list(
background = "#0085AF",
border = "#013848",
highlight = "#FF8000"
),
shadow = list(enabled = TRUE, size = 10)
) %>%
visEdges(
shadow = FALSE,
color = list(color = "#0085AF", highlight = "#C62F4B"),
arrows = "to"
) %>%
visGroups(groupname = "1", color = "red") %>%
visGroups(groupname = "2", color = "lightblue") %>%
visLegend()%>%
visOptions(
highlightNearest = FALSE,
clickToUse = FALSE,
manipulation = FALSE,
collapse = list(enabled = FALSE, clusterOptions = list(shape = "square")),
autoResize = TRUE,
nodesIdSelection = TRUE
)%>%
visInteraction(
hover = TRUE,
hoverConnectedEdges = FALSE,
selectConnectedEdges = FALSE,
multiselect = FALSE,
dragNodes = TRUE,
dragView = TRUE,
zoomView = TRUE,
navigationButtons = FALSE,
selectable = TRUE
)%>%
visPhysics(
stabilization = TRUE,
solver = "repulsion",
repulsion = list(
nodeDistance = 500,
centralGravity = 0,
springLength = 200
),
enabled = TRUE
)
library(DT)
derece <- degree(plot3)
derecemerkez <- degree(plot3, normalized=TRUE, mode = "in") #Yönsüz ağlarda bir düğümün derecesi basitçe o düğüme bağlanan kenarların sayısıdır.
yakinlikmerkez <- closeness(plot3, normalized=TRUE) #Yakınlık Merkeziliği bir düğümün ağdaki tüm diğer düğümlere ne kadar yakın olduğunu gösterir
## Warning in closeness(plot3, normalized = TRUE): At centrality.c:2784 :closeness
## centrality is not well-defined for disconnected graphs
arasindamerkez <- betweenness(plot3, normalized=TRUE)
pagerankmerkez <- page_rank(plot3)$vector #Google’ın web sayfalarını sıralama başarısı PageRank adlı algoritmaya dayanmaktadır
datatable(data.frame(derece, derecemerkez, yakinlikmerkez, arasindamerkez, pagerankmerkez),filter="top")
plot3 <- graph_from_data_frame(d=amazon4, directed=F)
ceb <- cluster_edge_betweenness(plot3)
dendPlot(ceb, mode="hclust")
par(mfrow=c(2, 3), mar=c(0,0,1,0))
plot(ceb, plot3, layout=layout_randomly, main="Random")
plot(ceb, plot3, layout=layout_in_circle, main="Circle")
plot(ceb, plot3, layout=layout_as_star, main="Star")
plot(ceb, plot3, layout=layout_as_tree, main="Tree")
plot(ceb, plot3, layout=layout_on_grid, main="Grid")
plot(ceb, plot3, layout=layout_with_fr, main="Force-directed")
ceb
## IGRAPH clustering edge betweenness, groups: 115, mod: 0.99
## + groups:
## $`1`
## [1] "3104" "3106" "3105"
##
## $`2`
## [1] "3108" "3109"
##
## $`3`
## [1] "3118" "3117"
##
## $`4`
## + ... omitted several groups/vertices
#IGRAPH clustering edge betweenness, groups: 115, mod: 0.99
library(CINNA)
#Yoğunluk (Density) mevcut bağlantı sayısının potansiyel olabilecek tüm bağlantı sayısına oranını verir.
edge_density(plot2)
## [1] 0.0003459626
edge_density(plot3)
## [1] 0.006657576
#Ortalama yol uzunluğu mean_distance() fonksiyonu ile hesaplanır.
mean_distance(plot2, directed=FALSE)
## [1] 6.479386
mean_distance(plot3, directed=FALSE)
## [1] 1.222727
#İki birim arasındaki en uzun mesafe diameter() fonksiyonu ile hesaplanır.
diameter(plot2, directed=FALSE, weights=NA)
## [1] 13
diameter(plot3, directed=FALSE, weights=NA)
## [1] 4
#Karşılıklılık (Reciprocity) geçişliliğin başka bir ölçüsüdür. Düğümler arasındaki bağlantıların karşılıklı yani iki yönlü olup olmadığının ölçülmesidir. Dolayısıyla yalnızca yönlü ağlar için tanımlıdır. Takip edersen takip ederim.
plot2 <- graph_from_data_frame(d=amazon, directed=T)
reciprocity(plot2)
## [1] 0.2335381
plot3 <- graph_from_data_frame(d=amazon4, directed=T)
reciprocity(plot3)
## [1] 0.5542169
#Kümelenme katsayısı olarak da bilinen geçişlilik transitivity() fonksiyonu ile hesaplanır. Örneğin, A birimi B birimi ile bağlantılı ve B birimi de C birimi ile bağlantılıysa, A biriminin C birimi ile bağlantılı olma olasılığı nedir sorusunun yanıtıdır. Bu örnekte birimlerin %18.4’ü ve %66.3'ü bu şekilde bağlantılıdır.
transitivity(plot2)
## [1] 0.1846984
transitivity(plot3)
## [1] 0.6634615
unique(amazon$date)
## [1] "01-10-2020" "02-10-2020" "03-10-2020" "04-10-2020"
amazondate1 <- amazon %>%
filter(date == "01-10-2020")
dateplot1 <- graph_from_data_frame(d=amazondate1, directed=T)
amazondate2 <- amazon %>%
filter(date == "02-10-2020")
dateplot2 <- graph_from_data_frame(d=amazondate2, directed=T)
amazondate3 <- amazon %>%
filter(date == "03-10-2020")
dateplot3 <- graph_from_data_frame(d=amazondate3, directed=T)
amazondate4 <- amazon %>%
filter(date == "04-10-2020")
dateplot4 <- graph_from_data_frame(d=amazondate1, directed=T)
library(tidyr)
data.frame(edge_density(dateplot1),edge_density(dateplot2),edge_density(dateplot3),edge_density(dateplot4),mean_distance.dateplot1=mean_distance(dateplot1, directed=FALSE),mean_distance.dateplot2=mean_distance(dateplot2, directed=FALSE),mean_distance.dateplot3=mean_distance(dateplot3, directed=FALSE),mean_distance.dateplot4=mean_distance(dateplot4, directed=FALSE),diameter.dateplot1=diameter(dateplot1, directed=FALSE, weights=NA),diameter.dateplot2=diameter(dateplot2, directed=FALSE, weights=NA),diameter.dateplot3=diameter(dateplot3, directed=FALSE, weights=NA),diameter.dateplot4=diameter(dateplot4, directed=FALSE, weights=NA),reciprocity(dateplot1),reciprocity(dateplot2),reciprocity(dateplot3),reciprocity(dateplot4),transitivity(dateplot1),transitivity(dateplot2),transitivity(dateplot3),transitivity(dateplot4))%>%
gather(key,value,1:20)
## key value
## 1 edge_density.dateplot1. 0.0006314849
## 2 edge_density.dateplot2. 0.0007526706
## 3 edge_density.dateplot3. 0.0005109239
## 4 edge_density.dateplot4. 0.0006314849
## 5 mean_distance.dateplot1 12.1963352483
## 6 mean_distance.dateplot2 12.1503821868
## 7 mean_distance.dateplot3 16.5487918777
## 8 mean_distance.dateplot4 12.1963352483
## 9 diameter.dateplot1 37.0000000000
## 10 diameter.dateplot2 31.0000000000
## 11 diameter.dateplot3 40.0000000000
## 12 diameter.dateplot4 37.0000000000
## 13 reciprocity.dateplot1. 0.1558752998
## 14 reciprocity.dateplot2. 0.1832000000
## 15 reciprocity.dateplot3. 0.2210934367
## 16 reciprocity.dateplot4. 0.1558752998
## 17 transitivity.dateplot1. 0.2209852066
## 18 transitivity.dateplot2. 0.2656183595
## 19 transitivity.dateplot3. 0.2979623049
## 20 transitivity.dateplot4. 0.2209852066