library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)

options(scipen = TRUE)

twitterdata <- read.csv("C:/Users/Tolga/Desktop/YTU/sosyalag/network.csv")
twitterdata <- twitterdata[,-1]

names <- c("alperumuttosun","eaylnk","gizemzzengin","canaltundaloglu","palairemm","senatosko","86alkin","alishanozturk","tolgaakurtuluss","nurdanayozturk","mrv2712")
paste0("Çalışmaya katıldığın için teşekkürler! :) ", names)
##  [1] "Çalışmaya katıldığın için teşekkürler! :) alperumuttosun" 
##  [2] "Çalışmaya katıldığın için teşekkürler! :) eaylnk"         
##  [3] "Çalışmaya katıldığın için teşekkürler! :) gizemzzengin"   
##  [4] "Çalışmaya katıldığın için teşekkürler! :) canaltundaloglu"
##  [5] "Çalışmaya katıldığın için teşekkürler! :) palairemm"      
##  [6] "Çalışmaya katıldığın için teşekkürler! :) senatosko"      
##  [7] "Çalışmaya katıldığın için teşekkürler! :) 86alkin"        
##  [8] "Çalışmaya katıldığın için teşekkürler! :) alishanozturk"  
##  [9] "Çalışmaya katıldığın için teşekkürler! :) tolgaakurtuluss"
## [10] "Çalışmaya katıldığın için teşekkürler! :) nurdanayozturk" 
## [11] "Çalışmaya katıldığın için teşekkürler! :) mrv2712"

1. Gruplandırma

##from 'a göre gruplandırma

twitterdata%>%
  group_by(from)%>%
  summarise(n=n())%>%
  arrange(desc(n))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 1,205 x 2
##    from                n
##    <chr>           <int>
##  1 tolgaakurtuluss   684
##  2 eaylnk            240
##  3 gizemzzengin      197
##  4 canaltundaloglu   167
##  5 palairemm         140
##  6 senatosko         106
##  7 86alkin            92
##  8 alishanozturk      76
##  9 alperumuttosun     63
## 10 nurdanayozturk     59
## # ... with 1,195 more rows
##to 'ya göre gruplandırma

twitterdata%>%
  group_by(to)%>%
  summarise(n=n())%>%
  arrange(desc(n))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 1,687 x 2
##    to                  n
##    <chr>           <int>
##  1 tolgaakurtuluss   560
##  2 canaltundaloglu   215
##  3 gizemzzengin      184
##  4 senatosko          73
##  5 eaylnk             67
##  6 nurdanayozturk     45
##  7 86alkin            25
##  8 alishanozturk      20
##  9 mrv2712            19
## 10 eskitvitler         5
## # ... with 1,677 more rows
## Ağırlıklandırma yapıldığında dağılım

twitterdata %>%
  group_by(from,to)%>%
  summarise(wgt=n())%>%
  arrange(desc(wgt))
## `summarise()` regrouping output by 'from' (override with `.groups` argument)
## # A tibble: 3,059 x 3
## # Groups:   from [1,205]
##    from            to                wgt
##    <chr>           <chr>           <int>
##  1 alishanozturk   tolgaakurtuluss     2
##  2 tolgaakurtuluss alishanozturk       2
##  3 _merveks        senatosko           1
##  4 _ozanc_         tolgaakurtuluss     1
##  5 _Seydaates      nurdanayozturk      1
##  6 _Sokak_Sairi_   canaltundaloglu     1
##  7 _ytumed         alishanozturk       1
##  8 _zbek1          tolgaakurtuluss     1
##  9 07Mk7           eaylnk              1
## 10 12Azgar         tolgaakurtuluss     1
## # ... with 3,049 more rows
ggplotly(twitterdata %>%
  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)
library(igraph)
library(visNetwork)
plot2 <- graph_from_data_frame(d=twitterdata, directed=T)
plot(plot2)

İnteraktif Plot

myViz <- function (myGraph){
  visIgraph(myGraph, randomSeed = 10)  %>%
    visIgraphLayout(randomSeed = 10) %>%
    visNodes(
      font = list(size = 59),
      shape = "dot",
      color = list(
        background = "#0085AF",
        border = "#013848",
        highlight = "#FF8000"
      )
    ) %>%
    visEdges(
      shadow = FALSE,
      color = list(color = "#0085AF", highlight = "#C62F4B")
    ) %>%
    visLayout(randomSeed = 10)%>%
    visOptions(
      highlightNearest = TRUE,
      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
    )
}

myViz(plot2)

#Tablo

library(DT)
derece <- degree(plot2)
derecemerkez <- degree(plot2, normalized=TRUE, mode = "in")
yakinlikmerkez <- closeness(plot2, normalized=TRUE)
## 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")

Uzaklıklarımızın tablosu

#Bir kişinin diğerleri ile bağlantısı olup olmadığını ya da kaçıncı seviye bağlantısı olduğunu listelemek için kullanılır

datatable(distances(plot2, v=V(plot2)[names], to=V(plot2)[names], weights=NA),options = list(pageLength = 11, width="100%", scrollX = TRUE))%>%
  formatStyle(
    columns = 1:11,
    color = styleEqual(c(1,2,3,4), c("red", "orange","purple","blue"))
  )

Dendogram Plot

plot3 <- graph_from_data_frame(d=twitterdata, directed=F)

ceb <- cluster_edge_betweenness(plot3)
dendPlot(ceb, mode="hclust")

par(mfrow=c(1, 3), mar=c(0,0,1,0))
plot(ceb, plot3, layout=layout_as_tree, main="Tree")
plot(ceb, plot3, layout=layout_with_fr, main="Force-directed")
plot(ceb, plot3, layout=layout_nicely, main="Nicely")

ceb
## IGRAPH clustering edge betweenness, groups: 9, mod: 0.73
## + groups:
##   $`1`
##      [1] "DataCornering"   "bdemirbilek1"    "EkremBayar_"     "nefise_mutlu"   
##      [5] "mustafa_ersoyy"  "fofiabril396"    "Michelle_32842"  "onurcelikgun"   
##      [9] "furkaandmr0"     "xvlademir"       "iremkomurcu"     "kbra_ferah"     
##     [13] "HusnuHatipoglu"  "OzancanOzdemir"  "bolattburak"     "navidnassiri"   
##     [17] "kmahi_way"       "divadnojnarg"    "debashism222"    "Merzmensch"     
##     [21] "l_aviator_96"    "onurrcamli"      "YBerk7"          "birazartist"    
##     [25] "hayriyegreler"   "furknzlp"        "sametejem"       "ibrhm1nce"      
##     [29] "kutupokuzu"      "yasinerofc"      "_ozanc_"         "iambarisozkan"  
##     [33] "muzaffersaid"    "pnar_aktan"      "saykoohayat"     "utkuozev"       
##   + ... omitted several groups/vertices
#IGRAPH clustering edge betweenness, groups: 9

Ağ yapısının istatistikleri

  1. Yoğunluk (density)
  2. Ortalama uzaklık (mean distance)
  3. En uzun mesafe (diameter)
  4. Karşılıklılık (reciprocity)
  5. Geçişlilik (transitivity)
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.0005211675
#Ortalama yol uzunluğu mean_distance() fonksiyonu ile hesaplanır. 
mean_distance(plot2, directed=FALSE)
## [1] 3.474699
#İki birim arasındaki en uzun mesafe diameter() fonksiyonu ile hesaplanır.

diameter(plot2, directed=FALSE, weights=NA)
## [1] 6
#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=twitterdata, directed=T)
reciprocity(plot2)
## [1] 0.3070892
#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.00006833934

Takipçilere Göre Ağ yapısı

https://tolgakurtuluss.github.io/twittersunum1.html

Takip Ettiklerimize Göre Ağ yapısı

https://tolgakurtuluss.github.io/twittersunum2.html