다양한 스토리를 담고 있는 연재를 만나보세요.
[초심자를 위한 생물학+정보학] R과 도표 - 52
Bio통신원(고주온)
_52_
- R과 도표 -
과학의 어느 분야든 연구 활동의 결과물은 그것을 보는 사람의 이해를 돕기 위하여 도표의 형태로 표현하게 된다. 많은 경우에 있어서 수치 계산과 각 실체의 연관 관계 등 통계 분석이 동반되기도 한다. 이때 도표의 종류에 따라서 결과의 표현과 전달에 차이가 생기게 되는데, 이것은 글쓴이와 보는 이 사이의 소통과 연결에 있어서 상당히 중요한 요인으로 작용한다. 이를 달리 표현하자면 ‘자료의 시각화’라고 할 수 있는데, 그 표현의 완성도에 따라 저작물의 가치도 함께 판단되는 결과를 초래하기도 한다.
생물학 분야의 논문이나 보고서의 경우에 사진 자료와 함께 상당 부분의 분석 결과를 도표로 나타내게 된다. 이번 연재부터는 통계학 분야의 자유 소프트웨어이며 프로그래밍 언어인 R을 이용하여 작성할 수 있는 다양한 종류의 도표와 그 쓰임새를 소개하고자 한다. 따라서, 본 연재에서는 R의 통계적 연산 기능보다는 도표 작성 기능에 초점을 맞추어 진행할 계획이며, 계산 기능 등에 대해서는 필요한 경우에 관련 설명을 추가할 예정이다.
잘 알려져 있다시피 R은 통계 자료의 분석과 결과 표현에 사용되는 스크립트 언어 묶음이다. R은 미국 벨 연구소 (Bell Laboratories, Lucent Technologies )의 Richard A. Becker, John M. Chambers, 그리고 Allan R. Wilks 등이 개발한 통계 언어인 S로부터 영향을 받아 만들어졌으며, 1993년 뉴질랜드의 'University of Auckland'의 Ross Ihaka와 Robert Gentleman에 의해 R이 최초로 보고되었다. 이후 계속 발전을 거듭하여, 2000년에 version 1.0.0이 발표되었고, 현 시점 (2019년 6월)에서의 R 최신 안정판은 R-3.6.0 (2019-04-26)으로서 the Comprehensive R Archive Network (CRAN) 사이트 에서 내려 받아 설치할 수 있다.
R은 주로 C언어와 Fortran으로 쓰여졌으며, 여러 가지 특성 가운데 대표적인 몇 가지만 소개하자면 다음과 같다.
• R은 원시 코드가 공개된 자유소프트웨어로서 무료이며, 리눅스, MS-Windows, Mac 등의 운영체제에서 사용할 수 있다.
• R은 통계 기능뿐만 아니라, 분석의 자동화 등의 일반적인 객체 지향 언어나 함수형 프로그래밍 언어로서도 활용 가능하며, 파이썬 (Python)이나 C언어, 자바 (Java) 등의 다른 프로그래밍 언어와 연계하여 사용할 수 있다.
• 유려한 그래픽 결과물을 제공한다.
• R은 스크립트 언어로서 시스템에서 독립적인 실행이 가능하다.
특히, 많은 연구자들이 뛰어난 그래픽 기능을 활용하고자 R을 사용하는 경우도 많기 때문에, R을 소개하는 글에서도 그래픽 기능을 소개하는 장 (Chapter 12 [Graphics])을 따로 둘 정도이다 (Venables, W. N. et al.).
이제부터 몇 가지 방법으로 R을 설치해 보자. 이후 내용은 기본적으로 (주분투) 리눅스 환경에서 이루어 진 것이다.
우선, 가장 간단한 방법은 다음과 같이 셸 프롬프트에서 해당 명령어를 입력하여 설치하는 것이다.
------
($ sudo apt update)
$ sudo apt install r-base
$
------
또다른 방법으로는, 주분투 리눅스의 경우에 'Whisker menu'에서 '소프트웨어' 항목의 '그래픽 및 사진' 또는 '교육/과학'에서 R을 설치할 수 있다.
설치가 끝나면, 'Whisker menu'에서 R을 실행하거나, 다음과 같이 셸 프롬프트에서 명령어를 입력한다.
------
$ R
.
.
> _
------
R 프로그램을 끝내려면 q() 명령어를 입력한다.
------
> q()
.
.
$
------
R에 대에 대해 자세한 내용은 차차 알아 보기로 하고, 우선은 자료 파일로부터 도표를 작성하는 간단한 예를 하나 실행하면서 R 환경을 조금씩 익혀 보자.
일단,
R을 실행하고 현재의 디렉터리를 확인한다.
------
$ R
.
.
> getwd()
------
사용자가 최초 로그인한 후 셸 프롬프트에서 R 명령어를 실행한 상태라면 사용자 홈 디렉터리가 표시될 것이다.
만약에 사용자가 주로 사용할 R 디렉터리를 지정하고자 한다면, 해당 디렉터리를 생성한 다음 그 디렉터리로 가서 R 명령어를 실행하고 getwd() 명령어를 실행하여 현재 디렉터리를 확인해 본다. 참고로, 현재 디렉터리를 이동하는 명령어는 setwd("DIR")이다.
셸 프롬프트에서 R을 실행하기 보다 메뉴 방식을 선호한다면, 사용자 홈 디렉터리에 .Rprofile이라는 텍스트 파일을 만들어 그 안에 setwd("/home/john/Rwork")와 같이 R에서 사용할 자료 디렉터리 관련 내용을 입력하여 저장하면, R 실행시 자동으로 사용 디렉터리가 지정된다. .Rprofile 지정은 셸 프롬프트에서의 실행에도 적용된다.
이제 아래의 링크에서 'mortality_50.tsv' 텍스트 파일을 내려 받아 R 작업 디렉터리로 옮기고 다음의 작업을 수행해 보자. 파일은 어느 지역에서 한 해에 기록된 인구 50 명의 성별 수명 자료이다.
https://biostring.org/files/mortality_50.tsv
------
> dir() <-- (1)
[1] "mortality_50.tsv" <-- (2)
> d <- read.delim('mortality_50.tsv') <-- (3)
> head(d) <-- (4)
Gender Age
1 Male 69
2 Female 88
3 Female 83
4 Male 63
5 Male 84
6 Male 74
> str(d) <-- (5)
'data.frame': 50 obs. of 2 variables: <-- (6)
$ Gender: Factor w/ 2 levels "Female","Male": 2 1 1 2 2 2 2 2 2 2 ...
$ Age : int 69 88 83 63 84 74 79 57 47 71 ...
> mode(d) <-- (7)
[1] "list" <-- (8)
> class(d) <-- (9)
[1] "data.frame" <-- (10)
> class(d$Gender) <-- (11)
[1] "factor" <-- (12)
> class(d$Age) <-- (13)
[1] "integer" <-- (14)
> plot(d$Gender, d$Age) <-- (15)
>
------
위에서 보아 알 수 있는 것처럼, R에서 객체를 할당하거나 자료를 불러 올 때, 등호 (=) 보다는 <- 기호를 사용하는 것을 권장한다. 등호도 사용할 수는 있으나, 최상위에서 주로 작동하기 때문에 <- 기호는 사용하는 것이 안전하고 안정적이다.
현재 작업 디렉터리 내의 파일을 확인하고 (1, 2), 해당 자료 파일을 변수 d로 읽어 들인다 (3). 적재된 자료 d의 앞 부분을 head() 명령으로 확인해 본다 (4). 이때 두번째 줄부터 출력되는 맨 앞의 숫자는 원 자료 파일에는 없으며, 자료의 앞쪽 일부의 내용이 표시된다. 이번에는 자료 d의 구조 (structure)를 알아 보기 위하여 str() 함수를 실행한다 (5). 출력 결과를 보면, 자료의 종류가 데이터 프레임 (data frame)이며, 변수는 Gender ("Female", "Male")와 Age 2 개이고 이에 대한 50회 관찰 결과임을 알 수 있다 (6). 또한, 자료 d에 대한 모드 (mode)는 리스트 (list), 클래스는 데이터 프레임임을 관련 함수를 통해 확인할 수 있다 (7-10).
또, 자료 d에 들어 있는 Gender의 유형이 요인 (factor)이고 (11, 12), Age의 유형은 정수 (integer)라는 것을 알 수 있다 (13, 14).
마지막의 plot() 명령을 입력하고 나면 (15), 다음과 같은 상자 그림 (box plot)이 새 창으로 출력된다.
앞서 나온 데이터 프레임 (data frame), 리스트 (list), 요인 (factor) 등의 용어는 R에서 사용하는 자료 구조에 관한 것인데, 이들은 기본적이면서도 중요한 내용이므로 다음 번 연재에서 mode(), class() 등의 함수들과 함께 좀더 자세하게 다룰 것이다.
위의 내용에서 변수 d에 파일 'mortality_50.tsv'의 내용을 적재하는 함수 read.delim()은 tab-separated value (TSV) 파일을 불러 오는 역할을 수행하며, 이와 유사한 함수로는 read.table(), read.csv(), read.csv2(), read.delim2() 등이 있다. 함수의 자세한 내용을 알고 싶다면, R 프롬프트에서 help(read.delim)이라고 입력하면 이에 관한 사항을 확인할 수 있다. help 대신에 ?read.delim이라고 입력해도 된다. ?는 help()와 같이 도움말을 보여 주는 기능을 한다.
< References >
Venables, W. N. et al. An Introduction to R (Notes on R: A Programming Environment for Data Analysis and Graphics) Ver. 3.6.0.
----------------------------------------------------
1. 예전 AT&T.
2. 그래서 종종 'GNU S'라고 불리기도 한다.
3. https://cran.r-project.org/
- 고주온박사(필명)의 "초심자를 위한 생물학+정보학"은 아래 PDF 다운 받으셔서 읽는 것도 가능합니다. -
본 기사는 네티즌에 의해 작성되었거나 기관에서 작성된 보도자료로, BRIC의 입장이 아님을 밝힙니다. 또한 내용 중 개인에게 중요하다고 생각되는 부분은 사실확인을 꼭 하시기 바랍니다.
[기사 오류 신고하기]
(http://bioprofiler.tistory.com) IBM-XT시절부터 개인용 컴퓨터를 사용하였으나, 강산이 변한 지금도 어제 코딩한 내용을 오늘 기억하지 못하는 자유인. 박사학위는 분자유전학 분야로 받았으며, 물리학과 화학에 관심만 있음. 현재 대학 교수로 재직 중.
다른 연재기사 보기
전체 보기