분석준비

## 패키지 로딩
require(readxl)
require(igraph)
require(sp)
require(leaflet)
require(ggmap)
require(dplyr)


## 데이터 로딩
meta <- read_excel("data.xlsx", sheet = "meta")
df <- read_excel("data.xlsx", sheet = "data")

## Data Cleaning : 가중치에 로그, 음수, 0이거나 NA는 1로 치환 
df$Weight2<-log(df$LW)
df$Weight2<-ifelse(df$Weight2<0, 1, df$Weight2)
df[is.na(df)] <- 1
data<-select(df, s_, O, LW, Weight2, transaction, File)
colnames(data)<-c("From", "To", "Weight", "Weightlog", "Transaction", "Industry")
dataraw<-data
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g2 <- induced_subgraph(g, V(g)$degree > 0)
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 분석

전체 산업

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 1988
#### 기업간 연결의 수
length(E(g))
## [1] 1993
#### 밀도
graph.density(g)
## [1] 0.000504537
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0.001343033
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.00402693
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1.139601
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 10.22731
#### 가장긴 연결
diameter(g)
## [1] 4
get.diameter(g)
## + 5/1988 vertices, named, from 14e29ae:
## [1] 삼성화재경보기 신동양         에스더전자     용인테크      
## [5] 미래세미컴

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/1993 edges from 14e29ae (vertex names):
##  [1] 삼성화재경보기->신동양         에스더전자    ->용인테크      
##  [3] 신동양        ->에스더전자     용인테크      ->삼성화재경보기
##  [5] 엠텍통신      ->메스코         용인테크      ->에스더전자    
##  [7] 에스오씨      ->에스디시스템   현대자동차    ->포스코        
##  [9] 한국기공      ->케이엠더블유   지비티 코리아 ->에코레이
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
#write_excel_csv(g_nStat, "all.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

1. s_4_1 산업

data<-filter(dataraw, Industry=="s_4_1")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 170
#### 기업간 연결의 수
length(E(g))
## [1] 165
#### 밀도
graph.density(g)
## [1] 0.005743126
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.04184027
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 4.055679
#### 가장긴 연결
diameter(g)
## [1] 1
get.diameter(g)
## + 2/170 vertices, named, from 34369d3:
## [1] 네오테크놀로지 거명

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
## Warning in centr_eigen(g, directed = TRUE): At centrality.c:344 :graph is
## directed and acyclic; eigenvector centralities will be zeros
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/165 edges from 34369d3 (vertex names):
##  [1] 비엠월드->반도자수        비엠월드->코스트코코리아 
##  [3] 비엠월드->충무타올공업사  두진    ->한국전력공사   
##  [5] 두진    ->우노건설        두진    ->두진정공       
##  [7] 두진    ->에스엠(S.M)섬유 두진    ->유진           
##  [9] 두진    ->유일에스씨      두진    ->에스엠소방기계
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
subset(g_nStat, Degree > 0)
#write_excel_csv(g_nStat, "1.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

2. s_4_2 산업

data<-filter(dataraw, Industry=="s_4_2")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 163
#### 기업간 연결의 수
length(E(g))
## [1] 152
#### 밀도
graph.density(g)
## [1] 0.005756268
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.04079028
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 2.198439
#### 가장긴 연결
diameter(g)
## [1] 1
get.diameter(g)
## + 2/163 vertices, named, from dfd8086:
## [1] 광진실리콘 NS하이테크

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
## Warning in centr_eigen(g, directed = TRUE): At centrality.c:344 :graph is
## directed and acyclic; eigenvector centralities will be zeros
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/152 edges from dfd8086 (vertex names):
##  [1] 광진실리콘->서 진          광진실리콘->케이물류      
##  [3] 광진실리콘->상진           광진실리콘->폴리텍        
##  [5] 광진실리콘->인성물류창고   광진실리콘->연우          
##  [7] 광진실리콘->가스뱅크       광진실리콘->마이크로패닉스
##  [9] 광진실리콘->NS하이테크     우진화인  ->나노필터텍
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)

#write_excel_csv(g_nStat, "2.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

3. s_4_3 산업

data<-filter(dataraw, Industry=="s_4_3")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 326
#### 기업간 연결의 수
length(E(g))
## [1] 314
#### 밀도
graph.density(g)
## [1] 0.002963662
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.02326154
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 4.765109
#### 가장긴 연결
diameter(g)
## [1] 1
get.diameter(g)
## + 2/326 vertices, named, from a0dfd5e:
## [1] 강산금속   금강이엠씨

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
## Warning in centr_eigen(g, directed = TRUE): At centrality.c:344 :graph is
## directed and acyclic; eigenvector centralities will be zeros
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/314 edges from a0dfd5e (vertex names):
##  [1] 덕신하우징->대우건설         덕신하우징->에이스건설      
##  [3] 덕신하우징->현대건설         덕신하우징->한국전력공사    
##  [5] 덕신하우징->창화철강         덕신하우징->디에스인터내셔널
##  [7] 덕신하우징->서브원           덕신하우징->태영건설        
##  [9] 덕신하우징->동국제강         덕신하우징->대림산업
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
#write_excel_csv(g_nStat, "3.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

4. s_4_4 산업

data<-filter(dataraw, Industry=="s_4_4")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 375
#### 기업간 연결의 수
length(E(g))
## [1] 366
#### 밀도
graph.density(g)
## [1] 0.002609626
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.01883096
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1.046448
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 3.718104
#### 가장긴 연결
diameter(g)
## [1] 2
get.diameter(g)
## + 3/375 vertices, named, from 0682f30:
## [1] 엠텍통신       메스코         H&TENGINEERING

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
## Warning in centr_eigen(g, directed = TRUE): At centrality.c:344 :graph is
## directed and acyclic; eigenvector centralities will be zeros
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/366 edges from 0682f30 (vertex names):
##  [1] 엠텍통신    ->메스코         한국기공    ->케이엠더블유  
##  [3] 케이엠더블유->성림전자       케이엠더블유->서진시스템    
##  [5] 케이엠더블유->텔콘알에프제약 케이엠더블유->비엠에스코리아
##  [7] 메스코      ->H&TENGINEERING 메스코      ->한진중공업    
##  [9] 메스코      ->대한조선       메스코      ->케이티샛
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
#write_excel_csv(g_nStat, "4.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

5. s_4_5 산업

data<-filter(dataraw, Industry=="s_4_5")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 205
#### 기업간 연결의 수
length(E(g))
## [1] 189
#### 밀도
graph.density(g)
## [1] 0.004519369
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0.004347826
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.02747741
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1.02139
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 2.183394
#### 가장긴 연결
diameter(g)
## [1] 2
get.diameter(g)
## + 3/205 vertices, named, from e97ab05:
## [1] 지비티 코리아 에코레이      국제공업사

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/189 edges from e97ab05 (vertex names):
##  [1] 지비티 코리아     ->에코레이           
##  [2] 에코레이          ->대성               
##  [3] 에코레이          ->본테크             
##  [4] 에코레이          ->국제공업사         
##  [5] 에코레이          ->신지               
##  [6] 케이에이에스시스템->케이아이이 시스템즈
##  [7] 케이에이에스시스템->협성히스코         
##  [8] 케이에이에스시스템->우리시스템         
##  [9] 케이에이에스시스템->선일계기상사       
## [10] 케이에이에스시스템->아이비엔지니어링
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
#write_excel_csv(g_nStat, "5.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

6. s_4_6 산업

data<-filter(dataraw, Industry=="s_4_6")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 537
#### 기업간 연결의 수
length(E(g))
## [1] 527
#### 밀도
graph.density(g)
## [1] 0.001830929
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0.002298851
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.01498803
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1.378049
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 4.621929
#### 가장긴 연결
diameter(g)
## [1] 4
get.diameter(g)
## + 5/537 vertices, named, from 65a94e5:
## [1] 삼성화재경보기 신동양         에스더전자     용인테크      
## [5] 미래세미컴

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/527 edges from 65a94e5 (vertex names):
##  [1] 삼성화재경보기->신동양         에스더전자    ->용인테크      
##  [3] 신동양        ->에스더전자     용인테크      ->삼성화재경보기
##  [5] 용인테크      ->에스더전자     에스더전자    ->광신전설      
##  [7] 에스더전자    ->우진지앤티     에스더전자    ->명진이엔지    
##  [9] 에스더전자    ->대림산업       에스더전자    ->효원이앤씨
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
#write_excel_csv(g_nStat, "6.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

7. s_4_7 산업

data<-filter(dataraw, Industry=="s_4_7")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 86
#### 기업간 연결의 수
length(E(g))
## [1] 80
#### 밀도
graph.density(g)
## [1] 0.01094391
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.07820069
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 1.81
#### 가장긴 연결
diameter(g)
## [1] 1
get.diameter(g)
## + 2/86 vertices, named, from 81d397f:
## [1] 경인기술   기펠코리아

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/80 edges from 81d397f (vertex names):
##  [1] 나인테코  ->여흥레이저텍 나인테코  ->나노메딕스  
##  [3] 나인테코  ->삼의성이엔지 나인테코  ->비엔씨하이텍
##  [5] 나인테코  ->에프원텍     나인테코  ->우리특장    
##  [7] 스탕코리아->중앙공업     스탕코리아->지에스건설  
##  [9] 스탕코리아->영 샘플실    스탕코리아->미래산업
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
#write_excel_csv(g_nStat, "7.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)

8. s_4_8 산업

data<-filter(dataraw, Industry=="s_4_8")
g <- graph.data.frame(data, directed=TRUE, vertices=meta)
g <- delete.vertices(g, V(g)[degree(g) == 0])
lo <- layout.norm(as.matrix(meta[,2:3]))

네트워크 레벨

#### 기업의 수
length(V(g))
## [1] 203
#### 기업간 연결의 수
length(E(g))
## [1] 200
#### 밀도
graph.density(g)
## [1] 0.004877335
#### 클러스터링 코이피션시
transitivity(g, type="global")
## [1] 0.004854369
#### 집중화 경향
centralization.degree(g)$centralization
## [1] 0.03241104
hist(centralization.degree(g)$res)

#### 평균연결정도
average.path.length(g, directed=TRUE) # 방향성 고려
## [1] 1.052083
average.path.length(g, directed=FALSE) # 방향성 무시
## [1] 3.21345
#### 가장긴 연결
diameter(g)
## [1] 3
get.diameter(g)
## + 4/203 vertices, named, from d6ad2a7:
## [1] 한국차량공업 현대위아     현대자동차   포스코

노드레벨 (상위 10)

g_degree <- degree(g, mode="all")
g_indegree <- degree(g, mode="in")
g_outdegree <- degree(g, mode="out")
g_betweeness <- betweenness(g, directed =TRUE, normalized = TRUE)
g_closeness <- closeness(g)
## Warning in closeness(g): At centrality.c:2784 :closeness centrality is not
## well-defined for disconnected graphs
g_eigencentrality <- centr_eigen(g, directed=TRUE)$vector
g_coreness<- coreness(g)
g_constraint <-  constraint(g)
g_Lable<- V(g)$label
g_Size <-V(g)$size
g_ATTR <- cbind(g_Lable, g_Size)
g_nStat <- as.data.frame(cbind(g_degree, g_indegree, g_outdegree, g_betweeness, g_closeness, g_eigencentrality, g_coreness, g_constraint))
colnames(g_nStat) <- c("Degree","InDegree","OutDegree","Betweenness","Closeness","Eigencentrality","Coreness","Constraint")
#### 디그리
head(g_nStat[order(-g_nStat$Degree),], n=10)
#### 인디그리
head(g_nStat[order(-g_nStat$InDegree),], n=10)
#### 아웃디그리
head(g_nStat[order(-g_nStat$OutDegree),], n=10)
#### 비트윈니스(평균화)
head(g_nStat[order(-g_nStat$Betweenness),], n=10)
##### 엣지 비트윈니스 상위 10개
head(g_nStat[order(-g_nStat$Degree),], n=10)
eb <- edge.betweenness (g)
E(g) [order(eb, decreasing =T) [1:10]]
## + 10/200 edges from d6ad2a7 (vertex names):
##  [1] 현대자동차    ->포스코              
##  [2] 오텍          ->현대자동차          
##  [3] 성우모터스    ->현대자동차          
##  [4] 현대위아      ->현대자동차          
##  [5] 현대위아      ->현대자동차          
##  [6] 현대위아      ->위아마그나파워트레인
##  [7] 한국차량공업  ->현대위아            
##  [8] 한국차량공업  ->현대위아            
##  [9] 상전정공      ->현대자동차          
## [10] 신정개발특장차->현대자동차
#### 클로스니스
head(g_nStat[order(-g_nStat$Closeness),], n=10)
#### 아이젠
head(g_nStat[order(-g_nStat$Eigencentrality),], n=10)
#### 코어니스
head(g_nStat[order(-g_nStat$Coreness),], n=10)
#### Constrant (중첩정도)
head(g_nStat[order(-g_nStat$Constraint),], n=10)
g_nStat$Name<-rownames(g_nStat)
#write_excel_csv(g_nStat, "8.csv")

Geographical Visualization

gg <- get.data.frame(g, "both")
vert <- gg$vertices
coordinates(vert) <- ~ lon + lat

edges <- gg$edges

edges <- lapply(1:nrow(edges), function(i) {
  as(rbind(vert[vert$name == edges[i, "from"], ],
           vert[vert$name == edges[i, "to"], ]),
     "SpatialLines")
})


for (i in seq_along(edges)) {
  edges[[i]] <- spChFIDs(edges[[i]], as.character(i))
}

edges <- do.call(rbind, edges)

location_label <- function(loc){
  paste0(
    "기업명: ",loc
  )
}

library(leaflet)
leaflet(vert) %>% 
  addTiles() %>% 
  addMarkers(clusterOptions = markerClusterOptions(), data = vert, popup = ~location_label(name)) %>%
  addPolylines(data = edges, weight = data$Weightlog, 
               popup = paste("거래량", data$Weight, "<br>",
                             "거래관계:", data$Transaction)) %>% 
  addCircleMarkers(radius = 0.5,
                   color = "red",
                   stroke = FALSE, fillOpacity = 0.5)