ANALIZA SIECI SPOŁECZNOŚCIOWYCH STAR WARS

Majkowska Agata

semestr letni 2025

PAKIETY

library(readxl)
library(igraph)
library(RColorBrewer)
library(ggplot2)
library(ggrepel)
library(writexl)

WCZYTYWANIE DANYCH

UWAGA!!!!!

Prosze podać swoją ścieżkę do pliku!

dane<-readRDS("C:/Users/majko/OneDrive/Dokumenty/DOKTORAT/2 rok/Podyplomowe/Cwiczenia_SNA/dane_star_wars_macierz.rds")

head(dane,10)
##             BERU BIGGS CAMIE DARTH VADER DODONNA GOLD FIVE GOLD LEADER GREEDO
## BERU           1     0     0           0       0         0           0      0
## BIGGS          0    29     0           0       0         0           1      0
## CAMIE          0     0     2           0       0         0           0      0
## DARTH VADER    0     0     0          41       0         0           0      0
## DODONNA        0     0     0           0       4         0           1      0
## GOLD FIVE      0     0     0           0       0         7           0      0
## GOLD LEADER    0     1     0           0       1         0          10      0
## GREEDO         0     0     0           0       0         0           0      2
## HAN            0     0     0           0       0         0           0      1
## JABBA          0     0     0           0       0         0           0      0
##             HAN JABBA LEIA LUKE OBI-WAN OWEN RED LEADER WEDGE
## BERU          0     0    0    1       0    0          0     0
## BIGGS         0     0    1    9       0    0          2     2
## CAMIE         0     0    0    2       0    0          0     0
## DARTH VADER   0     0    5    0       2    0          0     0
## DODONNA       0     0    0    0       0    0          0     0
## GOLD FIVE     0     0    0    0       0    0          0     0
## GOLD LEADER   0     0    0    0       0    0          1     0
## GREEDO        1     0    0    0       0    0          0     0
## HAN          99     3   22   43      12    0          0     0
## JABBA         3     3    0    0       0    0          0     0

BUDOWA SIECI

g <- graph.adjacency(dane, weighted = TRUE, mode = "undirected", diag = FALSE)

OPIS SIECI

g
## IGRAPH 285684d UNW- 16 21 -- 
## + attr: name (v/c), weight (e/n)
## + edges from 285684d (vertex names):
##  [1] BERU       --LUKE        BIGGS      --GOLD LEADER BIGGS      --LEIA       
##  [4] BIGGS      --LUKE        BIGGS      --RED LEADER  BIGGS      --WEDGE      
##  [7] CAMIE      --LUKE        DARTH VADER--LEIA        DARTH VADER--OBI-WAN    
## [10] DODONNA    --GOLD LEADER GOLD LEADER--RED LEADER  GREEDO     --HAN        
## [13] HAN        --JABBA       HAN        --LEIA        HAN        --LUKE       
## [16] HAN        --OBI-WAN     LEIA       --LUKE        LUKE       --OBI-WAN    
## [19] LUKE       --OWEN        LUKE       --RED LEADER  LUKE       --WEDGE

KRAWĘDZIE

E(g)
## + 21/21 edges from 285684d (vertex names):
##  [1] BERU       --LUKE        BIGGS      --GOLD LEADER BIGGS      --LEIA       
##  [4] BIGGS      --LUKE        BIGGS      --RED LEADER  BIGGS      --WEDGE      
##  [7] CAMIE      --LUKE        DARTH VADER--LEIA        DARTH VADER--OBI-WAN    
## [10] DODONNA    --GOLD LEADER GOLD LEADER--RED LEADER  GREEDO     --HAN        
## [13] HAN        --JABBA       HAN        --LEIA        HAN        --LUKE       
## [16] HAN        --OBI-WAN     LEIA       --LUKE        LUKE       --OBI-WAN    
## [19] LUKE       --OWEN        LUKE       --RED LEADER  LUKE       --WEDGE

WIERZCHOŁKI

V(g)
## + 16/16 vertices, named, from 285684d:
##  [1] BERU        BIGGS       CAMIE       DARTH VADER DODONNA     GOLD FIVE  
##  [7] GOLD LEADER GREEDO      HAN         JABBA       LEIA        LUKE       
## [13] OBI-WAN     OWEN        RED LEADER  WEDGE

MIARY

STOPIEŃ WIERZCHOŁKA

degree(g)
##        BERU       BIGGS       CAMIE DARTH VADER     DODONNA   GOLD FIVE 
##           1           5           1           2           1           0 
## GOLD LEADER      GREEDO         HAN       JABBA        LEIA        LUKE 
##           3           1           5           1           4           9 
##     OBI-WAN        OWEN  RED LEADER       WEDGE 
##           3           1           3           2
degree(g, mode = 'in')
##        BERU       BIGGS       CAMIE DARTH VADER     DODONNA   GOLD FIVE 
##           1           5           1           2           1           0 
## GOLD LEADER      GREEDO         HAN       JABBA        LEIA        LUKE 
##           3           1           5           1           4           9 
##     OBI-WAN        OWEN  RED LEADER       WEDGE 
##           3           1           3           2
degree(g, mode = 'out')
##        BERU       BIGGS       CAMIE DARTH VADER     DODONNA   GOLD FIVE 
##           1           5           1           2           1           0 
## GOLD LEADER      GREEDO         HAN       JABBA        LEIA        LUKE 
##           3           1           5           1           4           9 
##     OBI-WAN        OWEN  RED LEADER       WEDGE 
##           3           1           3           2
mean(degree(g, mode = 'in'))
## [1] 2.625
mean(degree(g, mode = 'out'))
## [1] 2.625
mean(degree(g))
## [1] 2.625

NAJKRÓTSZA ŚCIEŻKA

shortest.paths(g)
##             BERU BIGGS CAMIE DARTH VADER DODONNA GOLD FIVE GOLD LEADER GREEDO
## BERU           0     4     3          10       4       Inf           3     25
## BIGGS          4     0     5           6       2       Inf           1     21
## CAMIE          3     5     0          11       5       Inf           4     26
## DARTH VADER   10     6    11           0       8       Inf           7     15
## DODONNA        4     2     5           8       0       Inf           1     23
## GOLD FIVE    Inf   Inf   Inf         Inf     Inf         0         Inf    Inf
## GOLD LEADER    3     1     4           7       1       Inf           0     22
## GREEDO        25    21    26          15      23       Inf          22      0
## HAN           24    20    25          14      22       Inf          21      1
## JABBA         27    23    28          17      25       Inf          24      4
## LEIA           5     1     6           5       3       Inf           2     20
## LUKE           1     3     2           9       3       Inf           2     24
## OBI-WAN       12     8    13           2      10       Inf           9     13
## OWEN           7     9     8          15       9       Inf           8     30
## RED LEADER     2     2     3           8       2       Inf           1     23
## WEDGE          2     2     3           8       4       Inf           3     23
##             HAN JABBA LEIA LUKE OBI-WAN OWEN RED LEADER WEDGE
## BERU         24    27    5    1      12    7          2     2
## BIGGS        20    23    1    3       8    9          2     2
## CAMIE        25    28    6    2      13    8          3     3
## DARTH VADER  14    17    5    9       2   15          8     8
## DODONNA      22    25    3    3      10    9          2     4
## GOLD FIVE   Inf   Inf  Inf  Inf     Inf  Inf        Inf   Inf
## GOLD LEADER  21    24    2    2       9    8          1     3
## GREEDO        1     4   20   24      13   30         23    23
## HAN           0     3   19   23      12   29         22    22
## JABBA         3     0   22   26      15   32         25    25
## LEIA         19    22    0    4       7   10          3     3
## LUKE         23    26    4    0      11    6          1     1
## OBI-WAN      12    15    7   11       0   17         10    10
## OWEN         29    32   10    6      17    0          7     7
## RED LEADER   22    25    3    1      10    7          0     2
## WEDGE        22    25    3    1      10    7          2     0
sp=get.all.shortest.paths(g, "CAMIE", "DODONNA")
sp
## $res
## $res[[1]]
## + 5/16 vertices, named, from 285684d:
## [1] CAMIE       LUKE        RED LEADER  GOLD LEADER DODONNA    
## 
## 
## $nrgeo
##  [1] 1 0 1 0 1 0 1 0 0 0 0 1 0 0 1 1

ŚREDNIA DŁUGOŚC ŚCIEŻKI

average.path.length(g) 
## [1] 11.2381

GĘSTOŚĆ

edge_density(g, loops = F)
## [1] 0.175
graph.density(g, loop=T)
## [1] 0.1544118

BLISKOŚĆ

closeness(g,mode = 'all')
##        BERU       BIGGS       CAMIE DARTH VADER     DODONNA   GOLD FIVE 
## 0.007751938 0.009345794 0.007042254 0.007407407 0.008264463         NaN 
## GOLD LEADER      GREEDO         HAN       JABBA        LEIA        LUKE 
## 0.009259259 0.003703704 0.003891051 0.003378378 0.009090909 0.008620690 
##     OBI-WAN        OWEN  RED LEADER       WEDGE 
## 0.006711409 0.005154639 0.009009009 0.008695652
closeness(g,mode = 'all',weights=NA)
##        BERU       BIGGS       CAMIE DARTH VADER     DODONNA   GOLD FIVE 
##  0.03030303  0.04000000  0.03030303  0.02777778  0.02083333         NaN 
## GOLD LEADER      GREEDO         HAN       JABBA        LEIA        LUKE 
##  0.02857143  0.02564103  0.03846154  0.02564103  0.04000000  0.05000000 
##     OBI-WAN        OWEN  RED LEADER       WEDGE 
##  0.03571429  0.03030303  0.03571429  0.03333333
max(closeness(g,mode = 'all'))
## [1] NaN
max(closeness(g,mode = 'all',weights = NA))
## [1] NaN

POŚREDNICTWO

betweenness(g,weights=NA)
##        BERU       BIGGS       CAMIE DARTH VADER     DODONNA   GOLD FIVE 
##   0.0000000  17.1666667   0.0000000   0.3333333   0.0000000   0.0000000 
## GOLD LEADER      GREEDO         HAN       JABBA        LEIA        LUKE 
##  13.0000000   0.0000000  25.3333333   0.0000000  11.3333333  55.6666667 
##     OBI-WAN        OWEN  RED LEADER       WEDGE 
##   4.1666667   0.0000000   7.0000000   0.0000000
betweenness(g)
##        BERU       BIGGS       CAMIE DARTH VADER     DODONNA   GOLD FIVE 
##    0.000000   49.000000    0.000000   40.000000    0.000000    0.000000 
## GOLD LEADER      GREEDO         HAN       JABBA        LEIA        LUKE 
##   25.833333    0.000000   25.000000    0.000000   45.000000   38.000000 
##     OBI-WAN        OWEN  RED LEADER       WEDGE 
##   33.000000    0.000000   27.666667    9.333333

WIZUALIZACJA PROSTA

plot(g)

WIZUALIZACJA

plot(g,
     vertex.color=brewer.pal(8, "Pastel2"), 
     edge.arrow.size=10,
     edge.color="black", ### KOLOR KRAWĘDZI
     vertex.size=20, ### WIELKOŚĆ WĘZŁA (AKTORA)
     vertex.label.cex=2, ### WIELKOŚĆ ETYKIETY WĘZŁA 
     vertex.size=5, 
     layout=layout.fruchterman.reingold,
     main="GRAF") 

LAYOUT

layouts <- grep("^layout\\.", ls("package:igraph"), value=TRUE)
layouts
##  [1] "layout.auto"                      "layout.bipartite"                
##  [3] "layout.circle"                    "layout.davidson.harel"           
##  [5] "layout.drl"                       "layout.fruchterman.reingold"     
##  [7] "layout.fruchterman.reingold.grid" "layout.gem"                      
##  [9] "layout.graphopt"                  "layout.grid"                     
## [11] "layout.grid.3d"                   "layout.kamada.kawai"             
## [13] "layout.lgl"                       "layout.mds"                      
## [15] "layout.merge"                     "layout.norm"                     
## [17] "layout.random"                    "layout.reingold.tilford"         
## [19] "layout.sphere"                    "layout.spring"                   
## [21] "layout.star"                      "layout.sugiyama"                 
## [23] "layout.svd"

WIZUALIZACJA - WIELKOŚC WIERZCHOŁKA ZE WZGLĘDU NA STOPIEŃ WIERZCHOŁKA

plot(g,
     vertex.color=brewer.pal(8, "Pastel2"), 
     edge.arrow.size=10,
     edge.color="black", ### KOLOR KRAWĘDZI
     vertex.size=degree(g)*2,  ### WIELKOŚĆ WĘZŁA (AKTORA)
     vertex.label.cex=2, ### WIELKOŚĆ ETYKIETY WĘZŁA 
     layout=layout.fruchterman.reingold,
     main="Graf wględem liczby połączeń") 

WIZUALIZACJA - GRUBOŚCI KRAWEDZI ZE WZGLĘDU NA WSPÓLNĄ LICZBĘ SCEN AKTORÓW

PRZYGOTOWANIE DANYCH

GRUBOŚC KRAWĘDZI JAKO FUNCKJA WSPÓLNYCH SCEN AKTORÓW

E(g)$width <- log(E(g)$weight) + 1
edge_attr(g)
## $weight
##  [1]  1  1  1  9  2  2  2  5  2  1  1  1  3 22 43 12 20 33  6  1  1
## 
## $width
##  [1] 1.000000 1.000000 1.000000 3.197225 1.693147 1.693147 1.693147 2.609438
##  [9] 1.693147 1.000000 1.000000 1.000000 2.098612 4.091042 4.761200 3.484907
## [17] 3.995732 4.496508 2.791759 1.000000 1.000000

WIZUALIZACJA

plot(g)

plot(g,
     vertex.color=brewer.pal(8, "Pastel2"), 
     edge.arrow.size=10,
     edge.color="red", ### KOLOR KRAWĘDZI
     vertex.size=degree(g)*2,  ### WIELKOŚĆ WĘZŁA (AKTORA)
     vertex.label.cex=2, ### WIELKOŚĆ ETYKIETY WĘZŁA 
     layout=layout.fruchterman.reingold,
     main="Graf wględem liczby połączeń")

PODZIAŁ NA ZŁĄ I DOBRĄ STRONĘ MOCY

PRZYGOTOWANIE DANYCH

dark_side <- c("DARTH VADER", "MOTTI", "TARKIN")
light_side <- c("R2-D2", "CHEWBACCA", "C-3PO", "LUKE", "CAMIE", "BIGGS",
                "LEIA", "BERU", "OWEN", "OBI-WAN", "HAN", "DODONNA",
                "GOLD LEADER", "WEDGE", "RED LEADER", "RED TEN", "GOLD FIVE")
other <- c("GREEDO", "JABBA")

PRZYPISANIE KOLORÓW DO POSZCZEGÓLNYCH “STRON MOCY”

V(g)$color <- NA
V(g)$color[V(g)$name %in% dark_side] <- "red"
V(g)$color[V(g)$name %in% light_side] <- "gold"
V(g)$color[V(g)$name %in% other] <- "grey20"
vertex_attr(g)
## $name
##  [1] "BERU"        "BIGGS"       "CAMIE"       "DARTH VADER" "DODONNA"    
##  [6] "GOLD FIVE"   "GOLD LEADER" "GREEDO"      "HAN"         "JABBA"      
## [11] "LEIA"        "LUKE"        "OBI-WAN"     "OWEN"        "RED LEADER" 
## [16] "WEDGE"      
## 
## $color
##  [1] "gold"   "gold"   "gold"   "red"    "gold"   "gold"   "gold"   "grey20"
##  [9] "gold"   "grey20" "gold"   "gold"   "gold"   "gold"   "gold"   "gold"

WIZUALIZACJA

plot(g)
legend(x=.8, y=.8, legend=c("Dark side", "Light side", "Other"), 
               pch=21, pt.bg=c("red", "gold", "grey20"), pt.cex=2, bty="n")

plot(g,
     # vertex.color=brewer.pal(8, "Pastel2"), 
     edge.arrow.size=10,
     edge.color="black", ### KOLOR KRAWĘDZI
     vertex.size=degree(g)*2,  ### WIELKOŚĆ WĘZŁA (AKTORA)
     vertex.label.cex=2, ### WIELKOŚĆ ETYKIETY WĘZŁA 
     layout=layout.fruchterman.reingold,
     main="Graf wględem liczby połączeń") 
legend(x=.8, y=.8, legend=c("Dark side", "Light side", "Other"), 
               pch=21, pt.bg=c("red", "gold", "grey20"), pt.cex=3, bty="n")

SIEĆ 3D

library(d3Network)
## Warning: pakiet 'd3Network' został zbudowany w wersji R 4.1.3
library(networkD3)
## Warning: pakiet 'networkD3' został zbudowany w wersji R 4.1.3
sg <- simplify(g)
df <- get.edgelist(g, names=TRUE)
df <- as.data.frame(df)
colnames(df) <- c('source', 'target')
df$value <- rep(1, nrow(df))
# get communities
fc <- fastgreedy.community(g)
com <- membership(fc)
node.info <- data.frame(name=names(com), group=as.vector(com))
links <- data.frame(source=match(df$source, node.info$name)-1,target=match(df$target, node.info$name)-1,value=df$value)

forceNetwork(Links = links, Nodes = node.info,Source = "source", Target = "target",Value = "value", NodeID = "name",Group = "group", opacity = 1, opacityNoHover=1)
#saveRDS(dane, file = "C:/Users/majko/OneDrive/Dokumenty/Zajecia_WZR/Zajecia 2021-2022/Podypolomowe_2021-22/AGATA.rds")


#dane<-as.data.frame(dane)

#write_xlsx(dane, "C:/Users/majko/OneDrive/Dokumenty/Zajecia_WZR/Zajecia 2021-2022/Podypolomowe_2021-22/AGATA.xlsx")

#write.csv(dane, "C:/Users/majko/OneDrive/Dokumenty/Zajecia_WZR/Zajecia 2021-2022/Podypolomowe_2021-22/AGATA.csv")
kliki = cliques(g)


a<-largest_cliques(g)
a[[2]]
## + 3/16 vertices, named, from 285684d:
## [1] RED LEADER  BIGGS       GOLD LEADER
clique2<-a[[2]]


g2<-induced.subgraph(graph=g,vids=clique2)
plot(g2)

# Filtrowanie klik zawierających "LUKE"
kliki_z_luke <- Filter(function(k) "LUKE" %in% V(g)[k]$name, kliki)

# Wyświetlenie klik zawierających LUKE
print(kliki_z_luke)
## [[1]]
## + 1/16 vertex, named, from 285684d:
## [1] LUKE
## 
## [[2]]
## + 2/16 vertices, named, from 285684d:
## [1] BIGGS LUKE 
## 
## [[3]]
## + 2/16 vertices, named, from 285684d:
## [1] HAN  LUKE
## 
## [[4]]
## + 2/16 vertices, named, from 285684d:
## [1] LUKE OWEN
## 
## [[5]]
## + 2/16 vertices, named, from 285684d:
## [1] CAMIE LUKE 
## 
## [[6]]
## + 2/16 vertices, named, from 285684d:
## [1] BERU LUKE
## 
## [[7]]
## + 3/16 vertices, named, from 285684d:
## [1] BIGGS LUKE  WEDGE
## 
## [[8]]
## + 2/16 vertices, named, from 285684d:
## [1] LUKE  WEDGE
## 
## [[9]]
## + 3/16 vertices, named, from 285684d:
## [1] BIGGS      LUKE       RED LEADER
## 
## [[10]]
## + 2/16 vertices, named, from 285684d:
## [1] LUKE       RED LEADER
## 
## [[11]]
## + 3/16 vertices, named, from 285684d:
## [1] HAN     LUKE    OBI-WAN
## 
## [[12]]
## + 2/16 vertices, named, from 285684d:
## [1] LUKE    OBI-WAN
## 
## [[13]]
## + 3/16 vertices, named, from 285684d:
## [1] HAN  LEIA LUKE
## 
## [[14]]
## + 3/16 vertices, named, from 285684d:
## [1] BIGGS LEIA  LUKE 
## 
## [[15]]
## + 2/16 vertices, named, from 285684d:
## [1] LEIA LUKE