getwd()
## [1] "C:/Users/distr/OneDrive/R FILE/network"
setwd("C:/Users/distr/OneDrive/바탕 화면/Research/NETWORK lgbtq organization in SK/Data_220615")
rm(list=ls())

library(tidygraph)
library(ggraph)
library(igraph)
library(tidyverse)

\(~\)

1990년대

linkdata_1990 <- read.csv("C:/Users/distr/OneDrive/바탕 화면/Research/NETWORK lgbtq organization in SK/Data_220615/network_1990_onemode.csv"
                     , header = T #첫 행 변수명으로  
                     , sep = "," #csv에서 자료 구분은 ","
                     , stringsAsFactors = F
                     , row.name = 1 #★엑셀파일상 1열을 데이터프레임의 열 제목으로
                     , na.strings = ""
                     , as.is = T)

nodedata_1990 <- read.csv("C:/Users/distr/OneDrive/바탕 화면/Research/NETWORK lgbtq organization in SK/Data_220615/node_1990_220610_2.csv"
                     , header = T #첫 행 변수명으로  
                     , sep = "," #csv에서 자료 구분은 ","
                     , stringsAsFactors = F
                     , na.strings = "" 
                     , as.is = T) #as.is = T: character을 팩터로 바꾸지 마라

nodedata_1990 <- nodedata_1990 %>% 
    mutate(level4 = ifelse(level2 == 1 & level3 <= 3, 1,
                    ifelse(level2 == 2 & level3 <= 3, 2,
                    ifelse(level3 == 4, 3, NA))))
mynetwork1990 <- igraph::graph_from_adjacency_matrix(as.matrix(linkdata_1990)
                                                     , mode = "undirected" #화살표 방향
                                                     , diag = F # 대각선값
                                                     , weighted = T) # 누적값
V(mynetwork1990)$between =  nodedata_1990$between #nodedata에서 bet 속성 가져오기
V(mynetwork1990)$degree =  nodedata_1990$degree #nodedata에서 degree 속성 가져오기
V(mynetwork1990)$foundyear =  nodedata_1990$foundyear #nodedata에서 foundyear 속성 가져오기
V(mynetwork1990)$level1 =  nodedata_1990$level1 #nodedata에서 level1 속성 가져오기
V(mynetwork1990)$level2 =  nodedata_1990$level2 #nodedata에서 level2 속성 가져오기
V(mynetwork1990)$level3 =  nodedata_1990$level3 #nodedata에서 level3 속성 가져오기
V(mynetwork1990)$level4 =  nodedata_1990$level4 #nodedata에서 level4 속성 가져오기
isolated <- which(degree(mynetwork1990)==0) # 결측치 찾기
mynetwork1990 <- delete.vertices(mynetwork1990, isolated) #결측치 없는 네트워크 데이터 만들기
 mynetwork1990 %>% 
  ggraph() +
  theme_graph() +
  geom_edge_link2(aes(edge_linetype = factor(weight)
                     , edge_colour = factor(weight) 
                     , edge_width = factor(weight) 
                     , alpha = 0.5)) +
  geom_node_point(aes(fill = factor(level4)
                      , size = between
                      , alpha = 0.9)
                      , shape = 21) + 
    geom_node_text(aes(filter = degree > 0.23, label = name)
                     , col = 'black'
                     , repel = T) + 
  scale_edge_color_manual(values = c('gray20', 'gray20', 'gray20')) + # tie color를 weight 값에 맞춰서
  scale_edge_width_manual(values = c(0.2, 1.0, 1.0)) + # tie width를 weight에 비례하게
  scale_edge_linetype_manual(values = c(2, 1, 1)) +
  scale_fill_manual(name = ""
                       , values = c("gray99", "gray50", "gray1")
                       , labels = c("Univ","Professional", "Others")) +
  scale_size_continuous(range = c(3,  6)) +
  scale_alpha_identity() +
  guides(size = F
         , edge_alpha = F
         , edge_width = F
         , edge_linetype = F
         , edge_colour = F
         , alpha = F) + 
  theme(legend.position = "right")

\(~\)

2000년대

linkdata_2000 <- read.csv("C:/Users/distr/OneDrive/바탕 화면/Research/NETWORK lgbtq organization in SK/Data_220615/network_2000_onemode.csv"
                     , header = T #첫 행 변수명으로  
                     , sep = "," #csv에서 자료 구분은 ","
                     , stringsAsFactors = F
                     , row.name = 1 #★엑셀파일상 1열을 데이터프레임의 열 제목으로
                     , na.strings = ""
                     , as.is = T)

nodedata_2000 <- read.csv("C:/Users/distr/OneDrive/바탕 화면/Research/NETWORK lgbtq organization in SK/Data_220615/node_2000_220610_2.csv"
                     , header = T #첫 행 변수명으로  
                     , sep = "," #csv에서 자료 구분은 ","
                     , stringsAsFactors = F
                     , na.strings = ""
                     , as.is = T) #as.is = T: character을 팩터로 바꾸지 마라
nodedata_2000 <- as.tibble(nodedata_2000)
nodedata_2000 <- nodedata_2000 %>% 
    mutate(level4 = ifelse(level2 == 1 & level3 <= 3, 1,
                    ifelse(level2 == 2 & level3 <= 3, 2,
                    ifelse(level3 == 4, 3, NA))))
mynetwork2000 <- igraph::graph_from_adjacency_matrix(as.matrix(linkdata_2000)
                                                     , mode = "undirected" #화살표 방향
                                                     , diag = F # 대각선값
                                                     , weighted = T) # 누적값

V(mynetwork2000)$between =  nodedata_2000$between #nodedata에서 bet 속성 가져오기
V(mynetwork2000)$degree =  nodedata_2000$degree #nodedata에서 degree 속성 가져오기
V(mynetwork2000)$foundyear =  nodedata_2000$foundyear #nodedata에서 foundyear 속성 가져오기
V(mynetwork2000)$level1 =  nodedata_2000$level1 
V(mynetwork2000)$level2 =  nodedata_2000$level2 
V(mynetwork2000)$level3 =  nodedata_2000$level3
V(mynetwork2000)$level4 =  nodedata_2000$level4 
isolated_2000 <- which(degree(mynetwork2000)==0) # 결측치 찾기
mynetwork2000 <- delete.vertices(mynetwork2000, isolated_2000) #결측치 없는 네트워크 데이터 만들기
mynetwork2000 %>% 
    ggraph() +
    theme_graph() +
    geom_edge_link2(aes(edge_linetype = factor(weight)
                        , edge_colour = factor(weight) 
                        , edge_width = factor(weight) 
                        , alpha = 0.5)) +
    geom_node_point(aes(fill = factor(level4)
                        , size = between
                        , alpha = 0.9)
                        , shape = 21) + 
    geom_node_text(aes(filter = between > 0, label = name)
                     , repel = TRUE
                     , col = 'black'
                     , size = 3)+
    scale_edge_color_manual(values = c('gray20', 'gray20', 'gray20', 'gray20'))+ 
    scale_edge_width_manual(values = c(0.2, 0.6, 1.0, 1.5))+
    scale_edge_linetype_manual(values = c(2, 1, 1, 1)) +
    scale_fill_manual(name = ""
                      , values = c("gray99", "gray50", "gray1")
                      , labels = c("Univ","Professional", "Others")) +
    scale_size_continuous(range = c(3,  6)) +
    scale_alpha_identity() +
    guides(size = F
           , edge_alpha = F
           , edge_width = F
           , edge_linetype = F
           , edge_colour = F
           , alpha = F) + 
    theme(legend.position = "right")

\(~\)

2010년대

linkdata_2010 <- read.csv("C:/Users/distr/OneDrive/바탕 화면/Research/NETWORK lgbtq organization in SK/Data_220615/network_2010_onemode.csv"
                       , header = T #첫 행 변수명으로  
                       , sep = "," #csv에서 자료 구분은 ","
                       , stringsAsFactors = F
                       , row.name = 1 #★엑셀파일상 1열을 데이터프레임의 열 제목으로
                       , na.strings = ""
                       , as.is = T)
nodedata_2010 <- read.csv("C:/Users/distr/OneDrive/바탕 화면/Research/NETWORK lgbtq organization in SK/Data_220615/node_2010_220610_2.csv"
                     , header = T #첫 행 변수명으로  
                     , sep = "," #csv에서 자료 구분은 ","
                     , stringsAsFactors = F
                     , na.strings = ""
                     , as.is = F) #as.is = T: character을 팩터로 바꾸지 마라
nodedata_2010 <- nodedata_2010 %>% 
    mutate(level4 = ifelse(level2 == 1 & level3 <= 3, 1,
                    ifelse(level2 == 2 & level3 <= 3, 2,
                    ifelse(level3 == 4, 3, NA))))
mynetwork2010 <- igraph::graph_from_adjacency_matrix(as.matrix(linkdata_2010)
                                                     , mode = "undirected" #화살표 방향
                                                     , diag = F # 대각선값
                                                     , weighted = T) # 누적값

V(mynetwork2010)$between =  nodedata_2010$between #nodedata에서 bet 속성 가져오기
V(mynetwork2010)$between_2 =  nodedata_2010$between_2 #nodedata에서 bet 속성 가져오기
V(mynetwork2010)$degree =  nodedata_2010$degree #nodedata에서 degree 속성 가져오기
V(mynetwork2010)$foundyear =  nodedata_2010$foundyear #nodedata에서 foundyear 속성 가져오기
V(mynetwork2010)$level1 =  nodedata_2010$level1
V(mynetwork2010)$level2 =  nodedata_2010$level2
V(mynetwork2010)$level3 =  nodedata_2010$level3
V(mynetwork2010)$level4 =  nodedata_2010$level4

isolated_2010 <- which(degree(mynetwork2010)==0) # 결측치 찾기
mynetwork2010 <- delete.vertices(mynetwork2010, isolated_2010) #결측치 없는 네트워크 데이터 만들기
mynetwork2010 %>% 
  ggraph() +
  theme_graph() +
    geom_edge_link2(aes(edge_linetype = factor(weight)
                        , edge_colour = factor(weight) 
                        , edge_width = factor(weight) 
                        , alpha = 0.5)) +
    geom_node_point(aes(fill = factor(level4)
                        , size = between
                        , alpha = 0.9)
                        , shape = 21) +  
    geom_node_text(aes(filter = between > 1, label = name)
                   , repel = TRUE
                   , col = 'black')+
  scale_edge_color_manual(values = c('gray50', 'gray20', 'gray20', 'gray20', 'gray20', 'gray20'))+
  scale_edge_width_manual(values = c(0.2, 0.5, 0.8, 1.2, 1.5, 1.8))+ 
    scale_edge_linetype_manual(values = c(2, 1, 1, 1, 1, 1)) +
    scale_fill_manual(name = ""
                      , values = c("gray99", "gray50", "gray1")
                      , labels = c("Univ","Professional", "Others")) +
    scale_size_continuous(range = c(3,  6)) +
    scale_alpha_identity() +
    guides(size = F
           , edge_alpha = F
           , edge_width = F
           , edge_linetype = F
           , edge_colour = F
           , alpha = F) + 
    theme(legend.position = "right")

\(~\)

2010년대 Strong Network

linkdata_2010_2 <- linkdata_2010
nodedata_2010_2 <- nodedata_2010
mynetwork2010_2 <- igraph::graph_from_adjacency_matrix(as.matrix(linkdata_2010_2)
                                                     , mode = "undirected" #화살표 방향
                                                     , diag = F # 대각선값
                                                     , weighted = T) # 누적값
V(mynetwork2010_2)$between =  nodedata_2010_2$between #nodedata에서 bet 속성 가져오기
V(mynetwork2010_2)$degree =  nodedata_2010_2$degree #nodedata에서 degree 속성 가져오기
V(mynetwork2010_2)$foundyear =  nodedata_2010_2$foundyear #nodedata에서 degree 속성 가져오기
V(mynetwork2010_2)$between_2 =  nodedata_2010_2$between_2 #nodedata에서 bet2 속성 가져오기
V(mynetwork2010_2)$level1 =  nodedata_2010_2$level1 
V(mynetwork2010_2)$level2 =  nodedata_2010_2$level2 
V(mynetwork2010_2)$level3 =  nodedata_2010_2$level3
V(mynetwork2010_2)$level4 =  nodedata_2010_2$level4 
isolated_2010_2 <- which(E(mynetwork2010_2)$weight< 2) #weight가 2보다 작은 애들(대학조직) 설정
mynetwork2010_2 <- delete.edges(mynetwork2010_2, isolated_2010_2) #없애기
isolated_2010_3 <- which(degree(mynetwork2010_2)==0) # 방금 위에서 만들어진 네트워크 기준으로 결측치 찾기
mynetwork2010_2 <- delete.vertices(mynetwork2010_2, isolated_2010_3) #결측치 없는 네트워크 데이터 만들기
mynetwork2010_2 %>% 
  ggraph() +
  theme_graph() +
    geom_edge_link2(aes(edge_linetype = factor(weight)
                        , edge_colour = factor(weight) 
                        , edge_width = factor(weight) 
                        , alpha = 0.5)) +
    geom_node_point(aes(fill = factor(level4)
                        , size = between
                        , alpha = 0.9)
                        , shape = 21) + 
        geom_node_text(aes(filter = between_2 > 0, label = name)
                   , col = 'black'
                   , repel = T)+
  scale_edge_color_manual(values = c('gray50', 'gray20', 'gray20', 'gray20', 'gray20', 'gray20'))+
  scale_edge_width_manual(values = c(0.2, 0.5, 0.8, 1.2, 1.5, 1.8))+ 
    scale_edge_linetype_manual(values = c(2, 1, 1, 1, 1, 1)) +
    scale_fill_manual(name = ""
                      , values = c("gray99", "gray50", "gray1")
                      , labels = c("Univ","Professional", "Others")) +
    scale_size_continuous(range = c(3,  6)) +
    scale_alpha_identity() +
    guides(size = F
           , edge_alpha = F
           , edge_width = F
           , edge_linetype = F
           , edge_colour = F
           , alpha = F) + 
    theme(legend.position = "right")

\(~\)

2000년대 Without Brokers

linkdata_2000_2 <- linkdata_2000
nodedata_2000_2 <- nodedata_2000
mynetwork2000_2 <- igraph::graph_from_adjacency_matrix(as.matrix(linkdata_2000_2)
                                                     , mode = "undirected" #화살표 방향
                                                     , diag = F # 대각선값
                                                     , weighted = T) # 누적값

V(mynetwork2000_2)$between =  nodedata_2000_2$between #nodedata에서 bet 속성 가져오기
V(mynetwork2000_2)$degree =  nodedata_2000_2$degree #nodedata에서 degree 속성 가져오기
V(mynetwork2000_2)$foundyear =  nodedata_2000_2$foundyear #nodedata에서 degree 속성 가져오기
V(mynetwork2000_2)$level1 =  nodedata_2000_2$level1 
V(mynetwork2000_2)$level2 =  nodedata_2000_2$level2 
V(mynetwork2000_2)$level3 =  nodedata_2000_2$level3 
V(mynetwork2000_2)$level4 =  nodedata_2000_2$level4 
isolated_2000_2 <- which(degree(mynetwork2000_2)==0) # 결측치 찾기
mynetwork2000_2 <- delete.vertices(mynetwork2000_2, isolated_2000_2) #결측치 없는 네트워크 데이터 만들기
isolated_2000_3 <- which(V(mynetwork2000_2)$between > 1) # 표준화된 bet 값이 1보다 큰 애들 결측치 처리
mynetwork2000_2 <- delete.vertices(mynetwork2000_2, isolated_2000_3)
mynetwork2000_2 %>% 
    ggraph() +
    theme_graph() +
    geom_edge_link2(aes(edge_linetype = factor(weight)
                        , edge_colour = factor(weight) 
                        , edge_width = factor(weight) 
                        , alpha = 0.5)) +
    geom_node_point(aes(fill = factor(level4)
                        , size = between
                        , alpha = 0.9)
                        , shape = 21) + 
    geom_node_text(aes(filter = between >= 0, label = name)
                     , repel = T
                     , col = 'black')+
    scale_edge_color_manual(values = c('gray20', 'gray20', 'gray20', 'gray20'))+ 
    scale_edge_width_manual(values = c(0.2, 0.6, 1.0, 1.5))+
    scale_edge_linetype_manual(values = c(2, 1, 1, 1)) +
    scale_fill_manual(name = ""
                      , values = c("gray99", "gray50", "gray1")
                      , labels = c("Univ","Professional", "Others")) +
    scale_size_continuous(range = c(3,  6)) +
    scale_alpha_identity() +
    guides(size = F
           , edge_alpha = F
           , edge_width = F
           , edge_linetype = F
           , edge_colour = F
           , alpha = F) + 
    theme(legend.position = "right")

\(~\)

2010년대 Without Brokers

linkdata_2010_3 <- linkdata_2010
nodedata_2010_3 <- nodedata_2010
mynetwork2010_3 <- igraph::graph_from_adjacency_matrix(as.matrix(linkdata_2010_3)
                                                     , mode = "undirected" #화살표 방향
                                                     , diag = F # 대각선값
                                                     , weighted = T) # 누적값

V(mynetwork2010_3)$between =  nodedata_2010_3$between #nodedata에서 bet 속성 가져오기
V(mynetwork2010_3)$degree =  nodedata_2010_3$degree #nodedata에서 degree 속성 가져오기
V(mynetwork2010_3)$foundyear = nodedata_2010_3$foundyear #nodedata에서 degree 속성 가져오기
V(mynetwork2010_3)$level1 =  nodedata_2010_3$level1
V(mynetwork2010_3)$level2 =  nodedata_2010_3$level2
V(mynetwork2010_3)$level3 =  nodedata_2010_3$level3
V(mynetwork2010_3)$level4 =  nodedata_2010_3$level4
isolated_2010_3 <- which(degree(mynetwork2010_3)==0) # 결측치 찾기
mynetwork2010_3 <- delete.vertices(mynetwork2010_3, isolated_2010_3) #결측치 없는 네트워크 데이터 만들기
isolated_2010_4 <- which(V(mynetwork2010_3)$between > 1)
mynetwork2010_3 <- delete.vertices(mynetwork2010_3, isolated_2010_4)
mynetwork2010_3 %>% 
    ggraph() +
    theme_graph() +
    geom_edge_link2(aes(edge_linetype = factor(weight)
                        , edge_colour = factor(weight) 
                        , edge_width = factor(weight) 
                        , alpha = 0.5)) +
    geom_node_point(aes(fill = factor(level4)
                        , size = between
                        , alpha = 0.9)
                        , shape = 21) +  
    geom_node_text(aes(filter = between > 0, label = name)
                   , col = 'black'
                   , size = 2
                   , repel = T)+
    scale_edge_color_manual(values = c('gray50', 'gray20', 'gray20', 'gray20', 'gray20', 'gray20'))+
    scale_edge_width_manual(values = c(0.2, 0.5, 0.8, 1.2, 1.5, 1.8))+ 
    scale_edge_linetype_manual(values = c(2, 1, 1, 1, 1, 1)) +
    scale_fill_manual(name = ""
                      , values = c("gray99", "gray50", "gray1")
                      , labels = c("Univ","Professional", "Others")) +
    scale_size_continuous(range = c(3,  6)) +
    scale_alpha_identity() +
    guides(size = F
           , edge_alpha = F
           , edge_width = F
           , edge_linetype = F
           , edge_colour = F
           , alpha = F) + 
    theme(legend.position = "right")