Daizaburo (Dai) Shizuka's research home page. I am an evolutionary ecologist focusing on evolution of social behavior in birds.
R project를 활용하여 사회연결망분석을 하는 데 필요한 기본 정보들을 잘 담아 놓은 웹사이트.
seen from United States
seen from United States

seen from United States
seen from Maldives
seen from China

seen from United States

seen from United States
seen from United States
seen from United States
seen from T1
seen from United States
seen from China

seen from United States
seen from South Africa
seen from United States
seen from Spain
seen from United States
seen from China

seen from France
seen from United States
Daizaburo (Dai) Shizuka's research home page. I am an evolutionary ecologist focusing on evolution of social behavior in birds.
R project를 활용하여 사회연결망분석을 하는 데 필요한 기본 정보들을 잘 담아 놓은 웹사이트.
R패키지로 하는 사회연결망분석 기초
R 패키지는 우수한 통계분석 프로그래밍 언어이다. 통계분석 도구로서 R의 우수함은 그 컴퓨터 성능뿐 아니라, 그것을 이용하는 데 금전적인 대가를 지불하지 않아도 된다는 점에도 있다. 단순히 통계분석의 도구만을 포함하는 것이 아니라, 사회연결망(Social Networks)의 좋은 도구들을 제공하고 있다는 점에서도 주목할만하다.
최근 나는 UCINET이나 Pajek이 다루기에는 대단히 큰 사이즈의 네트워크 분석을 할 필요가 생겼는데, R이 큰 사이즈의 네트워크 분석을 비교적 용이하게 해준다는 것을 알게 되어 이것의 사용법을 스스로 한 번 익혀보고 있는 중이다. 현재 나는 R에 관해 완전한 초보자이기 때문에 R의 사용법을 조금씩 익히고 있는 중이다. 내가 익힌 기초들을 여기에 약간이라도 기록을 해보려고 한다.
먼저 자신의 컴퓨터 사양과 사용 중인 운영체제에 맞는 R을 R Project 웹페이지(http://www.r-project.org/)에서 찾아 설치하도록 한다. 나는 현재 윈도7의 영문판 64비트 버전을 사용하고 있다. 여기서는 이같은 사양을 기준으로 설명한다.
참고로 R은 모든 명령어가 OOP(Object-Oriented Programming)의 형태로 만들어져 있다고 한다. OOP에 관해서는 세세하게 설명하지 않는다. 다만 여기서 알아둘 것은 모든 명령어 뒤에는 () 가 따라붙는 특성이 이때문에 생긴다. 이점 익숙해질 필요가 있다. 또한 R 프로그램의 기본 프롬프트는 > 임을 기억할 필요가 있다.
statnet 설치
R은 다양한 분석도구를 packages들로 포함하고 있다. R을 사용해서 사회연결망분석을 하기 위해서는 먼저 그에 관한 패키지들을 설치하여야 한다. 다양한 패키지들이 존재하고 있는데, 이 중 가장 포괄적인 것으로 판단되는 "statnet" 패키지(http://statnet.csde.washington.edu/)를 R 프로그램에 추가로 설치해야 한다. 설치하는 명령은 아래와 같다. R의 commandline 창에서 아래와 같은 명령을 입력하면 R 프로그램 안에서 CRAN mirror 창이 뜬다. 적절한 mirror를 찾아 클릭하면 "statnet" 패키지가 설치된다.
>install.packages("statnet")
위의 명령으로 statnet이 성공적으로 설치되었다면, R 안에서 이 패키지를 사용하기 위하여 패키지를 호출해주어야 한다. 호출하는 명령어는 아래와 같다.
>library("statnet")
statnet을 호출하고 나면 이제부터 R에서 사회연결망분석을 시작할 수 있다.
network object 만들기
statnet으로 사회연결망분석을 하기 위해서 이 패키지가 제공하는 network object의 형식으로 사회연결망 데이터를 만들어 주어야 한다. network object의 세세한 속성을 파악하기 위해서는 아래와 같은 명령을 입력한다.
>help(network)
위와 같은 명령을 치게 되면 R은 웹브라우징 프로그램을 자동으로 실행시키면서 network objects의 세세한 설명이 들어 있는 해당 R Documentation 웹페이지를 보여준다. help() 명령어는 R의 명령어들의 정보가 담긴 R Documentation 페이지를 불러주는 명령어이다. network object의 세세한 내용에 관해서는 따로 설명하지 않는다. 스스로 숙지하기 바란다.
이제 network object를 하나 만들어 보기로 하자. network object를 만드는 방법은 다양한데, 여기서는 가장 간단한 방식으로 해보려 한다. 먼저 무작위로 네트워크를 하나 만들어 보자. 아래와 같은 명령어를 입력하도록 한다.
>x <-rgraph(5)
rgraph() 명령어는 무작위로 square matrix 형식의 network graph 자료를 하나 만들어 주는데 사용된다. 위와 같이 입력을 하게 되면 x라는 이름을 가진 graph가 하나 만들어진다. R 프로그램은 x와 같은 변수명에 특정 object를 할당하는 operator로 <- 를 사용한다. 여타의 프로그램 언어에서의 =에 해당하는 것이다.
만들어진 x의 내용을 보기 위해서는 아래와 같이 입력한다.
>x [,1] [,2] [,3] [,4] [,5] [1,] 0 0 0 0 0 [2,] 0 0 0 1 0 [3,] 1 1 0 0 1 [4,] 0 0 0 0 0 [5,] 1 0 0 0 0
위와 같이 x는 5 by 5 크기의 정방행렬(square matrix) 형태를 지니게 된다. 여기서 주의할 것은 x는 아직 network object가 아니라 점이다. x를 statnet 패키지에서 제공하는 network object로 만들어 주기 위해서는 아래와 같은 명령어를 사용해야 한다.
>n <-network(x)
이제 n이라는 이름으로 network object가 하나 만들어졌다. n의 내용이 어떤 것인지 알기 위해서는 먼저 간단하게 n을 아래와 같이 불러준다.
> n Network attributes: vertices = 5 directed = TRUE hyper = FALSE loops = FALSE multiple = FALSE bipartite = FALSE total edges= 5 missing edges= 0 non-missing edges= 5 Vertex attribute names: vertex.names
n의 내용을 보다 자세하게 보는 방법으로 summary() 명령어가 있다. 이 명령어를 사용해서 network object인 n을 불러보자.
> summary(n) Network attributes: vertices = 5 directed = TRUE hyper = FALSE loops = FALSE multiple = FALSE bipartite = FALSE total edges = 5 missing edges = 0 non-missing edges = 5 density = 0.25 Vertex attributes: vertex.names: character valued attribute 5 valid vertex names No edge attributes Network adjacency matrix: 1 2 3 4 5 1 0 0 0 0 0 2 0 0 0 1 0 3 1 1 0 0 1 4 0 0 0 0 0 5 1 0 0 0 0
단순히 n만을 입력하여 부르는 것에 비해서는 조금 더 자세한 내용(예를 들어 Network adjacency matrix의 내용까지 소개)을 볼 수 있음을 확인할 수 있다.
network 그래프 그리기
이제 network graph를 한 번 그려보자. gplot() 명령어가 이것을 해준다. 아래와 같이 명령을 넣어보자.
>gplot(n)
위 명령어를 실행하면 R 프로그램은 프로그램 안에서 별도의 윈도를 하나 띄우는 방식으로 아래와 같은 network graph를 그려준다.
그러나 이렇게 그린 그림에서는 5개의 node들 중 어느 것이 어느 것인지를 알기가 어렵다. 이제 5명의 node 들의 정보를 여기서 사용하고 있는 network object인 n에 그 세부정보로 넣어보도록 하자. 아래와 같이 network.vertex.names() 명령어를 사용해서 그같은 작업을 해보자.
>network.vertex.names(n) <- c("A", "B", "C", "D", "E"
이제 n에 각 노드들의 이름들이 잘 들어가 있는 지를 summary() 명령어로 확인해 보자.
> summary(n) Network attributes: vertices = 5 directed = TRUE hyper = FALSE loops = FALSE multiple = FALSE bipartite = FALSE total edges = 5 missing edges = 0 non-missing edges = 5 density = 0.25 Vertex attributes: vertex.names: character valued attribute 5 valid vertex names No edge attributes Network adjacency matrix: A B C D E A 0 0 0 0 0 B 0 0 0 1 0 C 1 1 0 0 1 D 0 0 0 0 0 E 1 0 0 0 0 >
위의 결과 맨 아래의 Network adjacency matrix: 부분에서 각 노드들의 이름값이 성공적으로 들어간 것을 확인할 수 있다. 이제 gplot() 명령어로 다시 network graph를 그려보도록 하자.
> gplot(n, label=network.vertex.names(n))
이제 network graph에서 각 노드들의 Label이 제대로 나오는 것을 위와 같이 확인할 수 있다.
마침
이 글에서는 R 프로그램을 사용해서 사회연결망을 분석하는 데 가장 기본적인 것들을 간략하게 소개해 보았다. network object 를 만드는 가장 기본적인 방법과 함께 그것을 그림으로 그려내보는 것만을 소개하였지만, 위의 절차들을 직접 실행해보면서 R 프로그램의 명령어들을 어떻게 사용하는 지도 간략하게 경험해 볼 수 있을 것으로 생각한다.
조금더 세세하게 배우기 위해서는 R에서 제공하는 문서들을 살펴 보고 R의 각 명령어 규칙들을 직접 실행해 보는 실습이 필요하다고 본다. 비록 대단히 기초적인 내용만을 소개한 것이지만 읽은 사람들에게는 약간이라도 도움이 되었기를 바라면서 이 글을 줄인다.