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 ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ํ๋กฌํํธ๋ > ์์ ๊ธฐ์ตํ ํ์๊ฐ ์๋ค.
R์ ๋ค์ํ ๋ถ์๋๊ตฌ๋ฅผ packages๋ค๋ก ํฌํจํ๊ณ ์๋ค. R์ ์ฌ์ฉํด์ ์ฌํ์ฐ๊ฒฐ๋ง๋ถ์์ ํ๊ธฐ ์ํด์๋ ๋จผ์ ๊ทธ์ ๊ดํ ํจํค์ง๋ค์ ์ค์นํ์ฌ์ผ ํ๋ค. ๋ค์ํ ํจํค์ง๋ค์ด ์กด์ฌํ๊ณ ์๋๋ฐ, ์ด ์ค ๊ฐ์ฅ ํฌ๊ด์ ์ธ ๊ฒ์ผ๋ก ํ๋จ๋๋ "statnet" ํจํค์ง(http://statnet.csde.washington.edu/)๋ฅผ R ํ๋ก๊ทธ๋จ์ ์ถ๊ฐ๋ก ์ค์นํด์ผ ํ๋ค. ์ค์นํ๋ ๋ช
๋ น์ ์๋์ ๊ฐ๋ค. R์ commandline ์ฐฝ์์ ์๋์ ๊ฐ์ ๋ช
๋ น์ ์
๋ ฅํ๋ฉด R ํ๋ก๊ทธ๋จ ์์์ CRAN mirror ์ฐฝ์ด ๋ฌ๋ค. ์ ์ ํ mirror๋ฅผ ์ฐพ์ ํด๋ฆญํ๋ฉด "statnet" ํจํค์ง๊ฐ ์ค์น๋๋ค.
>install.packages("statnet")
์์ ๋ช
๋ น์ผ๋ก statnet์ด ์ฑ๊ณต์ ์ผ๋ก ์ค์น๋์๋ค๋ฉด, R ์์์ ์ด ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ ํจํค์ง๋ฅผ ํธ์ถํด์ฃผ์ด์ผ ํ๋ค. ํธ์ถํ๋ ๋ช
๋ น์ด๋ ์๋์ ๊ฐ๋ค.
statnet์ ํธ์ถํ๊ณ ๋๋ฉด ์ด์ ๋ถํฐ R์์ ์ฌํ์ฐ๊ฒฐ๋ง๋ถ์์ ์์ํ ์ ์๋ค.
statnet์ผ๋ก ์ฌํ์ฐ๊ฒฐ๋ง๋ถ์์ ํ๊ธฐ ์ํด์ ์ด ํจํค์ง๊ฐ ์ ๊ณตํ๋ network object์ ํ์์ผ๋ก ์ฌํ์ฐ๊ฒฐ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค. network object์ ์ธ์ธํ ์์ฑ์ ํ์
ํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ๋ช
๋ น์ ์
๋ ฅํ๋ค.
์์ ๊ฐ์ ๋ช
๋ น์ ์น๊ฒ ๋๋ฉด R์ ์น๋ธ๋ผ์ฐ์ง ํ๋ก๊ทธ๋จ์ ์๋์ผ๋ก ์คํ์ํค๋ฉด์ network objects์ ์ธ์ธํ ์ค๋ช
์ด ๋ค์ด ์๋ ํด๋น R Documentation ์นํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค.ย help() ๋ช
๋ น์ด๋ R์ ๋ช
๋ น์ด๋ค์ ์ ๋ณด๊ฐ ๋ด๊ธด R Documentation ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ฃผ๋ ๋ช
๋ น์ด์ด๋ค. network object์ ์ธ์ธํ ๋ด์ฉ์ ๊ดํด์๋ ๋ฐ๋ก ์ค๋ช
ํ์ง ์๋๋ค. ์ค์ค๋ก ์์งํ๊ธฐ ๋ฐ๋๋ค.
์ด์ network object๋ฅผ ํ๋ ๋ง๋ค์ด ๋ณด๊ธฐ๋ก ํ์. network object๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ฐ, ์ฌ๊ธฐ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก ํด๋ณด๋ ค ํ๋ค. ๋จผ์ ๋ฌด์์๋ก ๋คํธ์ํฌ๋ฅผ ํ๋ ๋ง๋ค์ด ๋ณด์. ์๋์ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋๋ก ํ๋ค.
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 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() ๋ช
๋ น์ด๊ฐ ์ด๊ฒ์ ํด์ค๋ค. ์๋์ ๊ฐ์ด ๋ช
๋ น์ ๋ฃ์ด๋ณด์.
์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด 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์ ๊ฐ ๋ช
๋ น์ด ๊ท์น๋ค์ ์ง์ ์คํํด ๋ณด๋ ์ค์ต์ด ํ์ํ๋ค๊ณ ๋ณธ๋ค. ๋น๋ก ๋๋จํ ๊ธฐ์ด์ ์ธ ๋ด์ฉ๋ง์ ์๊ฐํ ๊ฒ์ด์ง๋ง ์ฝ์ ์ฌ๋๋ค์๊ฒ๋ ์ฝ๊ฐ์ด๋ผ๋ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉด์ ์ด ๊ธ์ ์ค์ธ๋ค.