[R의 기본개념]



1. 소개


R 프로그램은 오픈 소스 프로그램으로 통계와  데이터 마이닝 및 그래프 수행을 위한 언어입니다. 주로 연구 및 산업별 응용 프로그램으로 많이 사용되고  있으며, 최근에는 기업들이 많이 사용하기 시작했습니다. 특히, 빅데이터 분석을 위한 아키텍처 전반에  걸쳐 공통적인 분석 플랫폼으로 자리잡고 있으며, 2013년 2월 기준 4332개가 넘는 패키지들이 다양한  기능을 지원하고 있으며 수시로 업데이트 되고 있습니다.


R은 다양한 최신 통계분석 및 마이닝 기능을 자동화 할 수 있습니다. 언어에 가까운 문장형식이므로  자동화가 매우 쉽고, 다양한 사용자들이 다양한 예제들을 공유할 수 있습니다. www.r-project.org에서의  Core팀에 의한 내용 및 www.r-blogers.com에서 다양한 예제들이 제공되고 있습니다.  구체적으로 다시 살펴보면 www.r-project.org 사이트는 통계 프로그램인 R을 소개하는 사이트로서  R 프로그램 개발 Project를 소개하고 R 프로그램의, 매뉴얼 및 설치 파일 등에 대한 다운로드를 제공합니다.

또한 www.r-bloggers.com 사이트에서는 앞서 언급했다시피 R 프로그램의 다양한 예제들이 제공되고  있습니다.




기능

R은 프로그래밍 언어이기 때문에 패키지가 미리 프로그램 해 놓은 절차에  제한 받지 않고 새로운 방법을 프로그램 하기가 상대적으로 쉽습니다. 또한, R은 대화식으로 수행하여 한번에 하나의 프로세스를 수행하고 분석하는 동안 보이는 것에 기초해 변경이 가능하고 빠른 처리속도를  가지고 다양한 함수 및 데이터를 내장하고 있습니다. 그리고 Help의 examples을 바로 사용할 수 있으며  분석에 효과적으로 활용될 수 있는 그래픽을 지원하고 각종 그래프를 R에서 바로 사용할 수 있습니다.


그렇다면 R은 어떤 분야에서 응용되고 있을까요? R은 우리 생활 곳곳에 있지만 주로 통계 분석이나  자료 분석 등의 분석 역할을 하며, 모델링이나 그래픽 작업, 조직화 및 시각화 작업 시에도 R이 쓰이고  있습니다. 또한 학문에서도 R이 쓰이고 있는데요. 재정학이나 생물정보학 등 다양한 학문에서 활발히  사용되고 있습니다. 이처럼 R은 생각보다 많은 분야에서 응용되고 있습니다.



2. 설치

( Link :   http://cran.nexr.com )


R을 설치할 때 주의할 점입니다. 만약에 설치과정에서 시작 환경 설정을 변경하지  않았거나 화면표시형식을 MDI, 즉 One big window로 선택하였다면 RGui 메인 창 안에 명령어 입력을  기다리는 R Console창이 들어있는 형태로 시작될 수 있습니다. 여기서 R Console이란 R의 표준 입력 및  출력 장치입니다. 그리고 Mdi는 하나의 화면으로 제공되는 형태를 말합니다.






[R 사용법과 분석모듈]



1. R의 기초 사용법



R은 공학수식 계산이 가능한데요. 각 표시가 무엇을  의미하는지 알아보겠습니다. 다음 명령어가 제시된 화면을 보시죠. 


  



명령어 입력 다음 줄 처음에 [1]라는  표시가 있습니다. 이는 R이 명령어 수행결과를 벡터로 출력하기 때문에 나타난 수행결과로서 벡터의 첫 번째 요소라는 것을 의미합니다. 이 값에 log10(10)와 log(exp(1))를 세미콜론을 이용하여  동시에 수행하는데 각각의 결과 값은 [1]이라는 표시로 나누어 보여줍니다.


여기서 세미콜론(;) 은 한 줄에 여러 개의 명령을 입력할 때 사용합니다. 현재 이미지를 보시면 log10(10)와  log(exp(1)) 두 가지 명령을 한 줄에 넣고 있지요? 이럴 경우 세미콜론으로 명령을 구분해주는 것입니다.

exp(2)를 수행하면 7.389056으로 수행결과 값이 나옵니다. 그리고 rnorm(12)명령어는 임의의 숫자 12개를  불러 내는 것으로 이를 실행하면 이미지와 같이 12개의 숫자가 나옵니다. 하지만 이것을 어떻게 해석해야  할까요? 아까 [1]는 R이 명령어 수행결과 중 첫 번째 요소라는 것을 의미한다고 했습니다.  그렇다면 이 꺽쇠괄호 안에 있는 숫자7은 무슨 의미일까요? 이는 rnorm(12) 명령어 수행결과처럼 한 줄에  모든 결과를 표현하지 못할 경우 새로운 줄 앞에 [7]과 같은 숫자를 출력하여 -0.21073790이 계산결과의 7번째 요소라는 것을 표시합니다. 여기서 rnorm은 정규분포를 의미합니다.


벡터 라는 것은 크기와 방향을 동시에 나타내는 물리량으로, 여러 개 차원의 수치 값으로 이루어진 데이터  구조로 이해할 수 있습니다. 본 화면에 대해 추가로 설명을 하면 5 더하기 6의 제곱에 대한 수행결과는  백터의 첫 번째 요소가 41이라는 것입니다. 그리고 벡터는 데이터 구조의 가장 기본이 되는 것인데  여기서 데이터 구조란 데이터 베이스에 있는 파일 간에 관련성과 각 파일 내의 항목 간의 관련성 형태를  말합니다. 이때, R프로그램은 데이터구조를 기반으로 어떤 기능을 수행합니다.   


또한 벡터는 기본적으로 R프로그램에서 벡터를 다루는 작업이 가장 기초가 됩니다. 이것은 여러 개 차원의  수치 값으로 이루어진 데이터 구조를 가집니다. 다음 화면에 제시된 것은 벡터를 생성하기 위한 입력  값들입니다. 





즉, 벡터를 생성하기 위해서 이와 같이 입력한다면 벡터 값이 생성 되어지는 것입니다. 

그러면 화면에 제시된 입력 값들에 대해 하나씩 살펴 보면 x는 벡터 변수를 의미하며 는 할당 연산자를  나타냅니다. 그리고 c()는 ,(쉼표)로 구분된 길이 1인 하나의 벡터를 묶어서, 연속된 하나의 벡터로  생성하는 함수를 의미합니다. 





변수의 사용과 값 지정


R은 공학수학 계산 표시 외에도 변수의 사용과 값 지정이  가능합니다.

다음 이미지를 보면




amount.x를 3으로 설정한 후 amount.x에 amount.x를 더합니다. 

그 결과 [1]는 6이라는 결과값을 얻게 됩니다. 그리고 amount.y를 7로 설정합니다. 

그 후 amount.total로 amount.x에 amount.y 값을 더하게 됩니다. 그 결과 [1]은 13이라는 결과값을  얻게 됩니다. R은 이와 같은 변수 사용을 할 수 있습니다. 이처럼 R을 이용하는데 있어 문자변수에 값을  할당하고 이들 변수의 연산을 수행하는 것은 매우 중요한데요. 주의해야 할 사항은 특수문자로 시작하는  변수이름과 숫자만으로 이루어진 변수이름은 사용하지 않는 것입니다. 예를들면, 특수문자인 #으로  시작되는 #abc나 숫자로만 이루어진 123과 같은 이름은 변수이름으로는 사용할 수 없습니다.




데이터 벡터의 산술연산


또한 R은 데이터 벡터의 산술연산이 가능합니다. 

다음 이미지를 보면






먼저, weight라는 이름의  데이터 벡터를 생성하였습니다. 여기서는 값을 보시는 것처럼 93, 82, 80, 67, 72,  69로 설정하였습니다.

또한, height 데이터 벡터를 생성하는데, 여기서는 다음처럼 값을 설정하였습니다. 그리고 weight 벡터의  각 요소 값들을 각각에 대응하는 height 벡터 각 요소 제곱 값으로 나누어 BMI 벡터를 구합니다.  여기서도 그 과정으로 BMI 벡터를 구한 결과 다음과 같은 6개의 결과값을 산출하였습니다.  산출한 값으로 데이터 벡터의 weight 요소들의 평균과 표준편차를 계산할 수 있는데요.  다음 이미지를 보면






우선 앞서 생성한 weight 벡터의 각 요소 값들을 다 합산한 결과 463이라는  결과값이 나왔습니다. 그 후 weight 벡터의 관측 수를 계산한 결과 6이라는 값이 나옵니다. 

이렇게 산출된 값을 통해서 weight의 평균을 계산하면 77.16667이라는 값이 도출됩니다. 이 값을 weight  벡터의 각각의 관측 값에서 빼면 다음과 같이 결과가 도출됩니다. 그리고 이 값들을 제곱하여 값을  산출하고 이 결과값을 합산합니다. 그럼 478.8333이라는 결과값이 도출됩니다. 이 값에서 다음식처럼 weight  벡터의 관측 수에서 1개를 뺀 값으로 나누면 weight의 분산 값, 즉 95.76667이라는 값이 도출됩니다. 다시 이 값에서 weight의 표준편차를 구하려면 제곱근 함수인 sqrt 함수를 적용하게 되는데  그러면 9.786044라는 표준편차 값을 구할 수 있습니다. 이렇게 해서 합, 평균, 분산, 표준편차와 같은  통계 값을 R을 이용하여 산출할 수 있습니다. 평균을 계산하면 77.16667, 분산 값을 계산하면 95.76667,  표준편차는 9.786044입니다. 이처럼 R을 활용하여 데이터 벡터의 산술연산을 수행할 수 있습니다. 



표준 통계분석


그리고 R에서 통계분석을 수행할 수 있습니다. 예를들면, 가설 검정이라는 통계분석을 수행할 수 있습니다.  가설검정은 귀무가설과 대립가설을 세워 표본 데이터를 수집하여 귀무가설이 참인지를 통계적으로 검정하는  방법입니다. 아래의 이미지는 데이터 벡터 BMI의 평균 값이 22.5라고 말할 수 있는지를 유의수준 5%에서  통계의 t검정을 통해 검정하는 경우입니다. 이를 위해 R함수 t.test 함수를 사용하였습니다. 






앞의 예에서 사용한 BMI 데이터가 표본 데이터에 해당합니다. alternativ hypothsis 즉 대립가설은 ‘모집단의 평균이  22.5가 아니다’이고 귀무가설은 ‘모집단의 평균이 22.5이다’입니다. 이를 통해 T.test 결과가 result  변수에 저장되고 저장된 결과값중 p-value 값만 조회하면 0.1346972라는 것을 알 수 있습니다.  

          


이 부분에 대해 좀 더 구체적으로 알아보도록 하겠습니다. 


여기서는 가설검정 결과를 특정 이름의 변수에 저장한 후 그 변수에 저장된 값 가운데 p-value 값만을  호출할 수 있어 요약된 결과 출력을 명령할 수 있습니다. 즉, 주어진 예에서는 result라는 변수에  BMI 데이터에 대한 t검정 결과 값을 저장한 것이고 이렇게 저장된 T test 결과값 중 p-value 값만 조회하면   0.1346972라는 것을 알 수 있는 것입니다. 참고로 여기서 p-value는 통계학에서 어떠한 가설을 검증하기  위해 사용되는 확률로, 실제 관측된 표본 값으로부터 산출되는 확률 값입니다. 이것은 유의확률이라고도 하는데, 구체적으로 통계적 가설 검정에서 유의 확률이라고 합니다. 또한 이것은 귀무가설이 맞다고  가정할 때 얻은 결과보다 극단적인 결과가 실제로 관측될 확률을 의미합니다.  help 기능을 이용하고 싶을 때는 화면에서와 같이 help(함수이름)을 입력합니다.



그래프 그리기


R은 그래프를 그릴 수 있습니다. 데이터 사이의 관계를 표현하는데 유용한 플롯함수 라인즈함수 를 활용할 수 있는데요. 간단하게 각 함수에 대해 설명하겠습니다. 


먼저 플롯함수 는 그림을 그릴 때 일반적으로 사용되는 함수이고 기본적인 사용 형식으로 plot(x, y,…) 를 사용합니다.  그리고 x, y 2차원 축으로 도표를 그려주는데 그래프 매개변수라 하여 그래프 타입 등 다양한 사항을  정의할 수 있습니다. 또한 Help 명령어를 이용하여 자세한 내용을 알 수 있다는 특징이 있습니다. 


다음으로 라인즈 함수 는 플롯 함수로 출력한 결과에 덧붙여 선들을 출력하고자 할 때 쓰이는 함수를 말하며,  Graphic 함수 군에 속하므로 par()함수의 옵션 대부분을 그대로 이용할 수 있습니다. 그리고 y축 또는  Line Type을 정의할 수 있으며 기본적인 형식은 lines(x, ...) 입니다.  더불어 라인즈 함수도 Help 명령어를 이용하여 자세한 내용을 알 수 있다는 특징이 있습니다. 

두 함수가 모두 Help 명령어를 이용하여 자세한 내용을 알 수 있기 때문에 각각에 대한 Help 명령어  수행결과를 살펴보도록 하겠습니다.



이 두 함수의 사용 예시를 살펴보겠습니다. 



여섯 사람의 키와 몸무게 데이터를 가지고 그래프를 그린 것입니다. height를 x축, weight를 y축으로 하여  각 데이터 쌍을 좌표평면에 한 점으로 대응시키되 위치 표식으로 정수 15번이 가리키는 심볼인 ■ 을   사용하는 산점도 그래프를 출력합니다. 그리고 xvalue를 x축, xvalue의 제곱 값에 22.5을 곱한 값을  y축으로 하여 각 데이터 쌍을 선으로 연결한 선 그래프를 출력합니다. 여기서 xvalue라는 변수는 6개의  height 값을 sorting하여 얻어지므로 가장 작은 값인 1.69부터 가장 큰 값인 1.83이 순서대로 값을 가짐을  알 수 있습니다. 결과값이 나타난 R 그래프 출력 창을 확인해보세요.








2. R의 데이터 마이닝 분석모듈



기본적인 행렬의 생성 및 조작과 관련된 명령어




먼저 지금 보시는 함수는 c 함수로 1차원 벡터를 생성하는데  사용됩니다. 다음으로 차원(dimension) 지정함수인 dim함수입니다. 이 함수는 보시는 것처럼 m × n차원의  행렬을 생성합니다. 다음으로 진행되는 명령어는 matrix 함수인 matrix인데요. 행수를 지정하는 방식으로 행렬을 생성하는 함수입니다. 이때 byrow=F가 기본인자이기 때문에 matrix(1:15, nrow=3)의 경우 1부터  15까지 3개씩 아래방향으로 써내려 가며 행렬을 만들어내게 됩니다. 즉 byrow=T라는 인자를 사용하면  1부터 3개씩 우측방향(행 방향)으로 배열하게 되는 것입니다. 그 다음은 rownames, colnames 함수입니다.   이 함수는 행렬의 행 제목과 열 제목을 부여하는 함수입니다.




다음은 transposition 함수인  t입니다. 이 함수는 행렬의 행과 열 index를 바꾸는 역할을 합니다. 

이는 이전 명령어에서의 결과와 t함수 명령어의 결과를 보시는 것처럼 (2,3)위치 요소는 (3,2)위치로  바뀌게 된다는 것을 알 수 있습니다. 






다음 함수는 columnwise 결합 함수 cbind, rowwise 결합함수 rbind입니다. 이 함수들은 같은 길이의 벡터를   열 또는 행 방향으로 합쳐 행렬을 만들 수 있는 함수입니다. month.name[1:12], LETTERS[1:26]과 같   달 이름이나 알파벳 대문자 벡터 등은 별도로 생성하지 않고 사용할 수 있습니다. 또한 month.abb[c(1,3)]은  1월과 3월 영문약자 벡터 c("Jan","Mar")를 의미한다는 것을 기억하시기 바랍니다.

 예시와 함께 기본적인 행렬의 생성 및 조작과 관련된 명령어에 사용되는 함수들을 살펴보았습니다. 

 각 함수들에 대한 설명을 간단하게 도표로 정리하였습니다. 실무에 응용할 수 있도록 함수의 설명들을  숙지하도록 하세요.







데이터셋(Data Set) 구성


다음은 R에서 분석할 데이터 세트를 구성하는 방법에 대해 소개하고자 합니다. 데이터 세트는 대부분의  경우 데이터 프레임 함수를 이용하여 구성합니다. 그렇다면 데이터 프레임이란 무엇일까요?  데이터 프레임은 행과 열 형태로 데이터 요소들이 집합을 이룬 것입니다. 데이터 프레임에서는 각각의 열은  다른 타입의 데이터를 가질 수 있습니다. 이러한 데이터 프레임은 data.frame()함수로 만들게 되는데  이 함수를 통해 하나의 워크시트에 열이 각종 변수의 측정값이 되도록 데이터를 정리합니다.  데이터 프레임 함수로 만들어진 데이터 세트는 컴퓨터상의 데이터 처리에서 그 자체로 한 개의 단위로  취급하는 데이터의 집합으로 각종 연산 등을 처리할 수 있습니다. 각 개념에 대해 숙지하시기 바랍니다.






예시를 보면 deit1이라는 데이터 셋은 data.frame( ) 함수에 의해 Before와 After라는 변수가 합쳐져서   만들어집니다. data.frame( ) 함수 괄호 안에 Before=diet.pre라고 쓰는 것은 Before라는 새로운 내부  변수(열 제목 개념)에 diet.pre 벡터를 입력한다는 의미입니다. 동일하게 After는 diet.post 벡터 값을  입력한다는 의미입니다.



         



dataset.diet1과 개체를 데이터 프레임이라고 하는데 내부의 Before 개체의 값을 확인하기 위해서  dataset.diet1$Before와 같이 데이터 프레임 이름과 개체이름 사이에 문자 $를 사용합니다. 

dataset.diet2는 data.frame(diet.pre, diet.post)처럼 괄호 안에 벡터나 요인의 이름만 열거했다면  그 이름(diet.pre, diet.post)이 그대로 열 제목으로 사용되므로 dataset.diet2$diet.pre와 같은 표현을  사용할 수 있습니다. 물론 dataset.diet2[1] 표현도 사용 가능합니다.




데이터파일의 통계분석


사용자가 생성한 데이터파일을 R 시스템의 데이터세트(data set)로 읽어들인 후 통계분석을 수행하는 것이  가장 일반적인 방식입니다. 이때 사용 가능한 명령어, 즉 함수로는 read.table( )가 가장 편리합니다.  read.table( ) 함수는 구분자로 공백문자(탭 포함)를, 소수점으로 도트문자(.)가 사용된 파일을 머리글, 

즉, 변수 이름 없이 읽어 들이는 것이 기본 인자 값(default arguments)이므로 header가 있는 경우  괄호 안에 데이터파일 경로와 함께 반드시 header=TRUE를 입력해주어야 합니다.




read 함수의 종류


다음으로 read 함수의 종류에 대해 살펴보겠습니다. read.table과 유사한 함수가 있지만 활용도는  떨어집니다. 그 이유는 데이터파일에서 사용된 구분자와 소수점 문자가 어떤 것이냐에 따라 선택해서  사용하면 되는데 read.table() 함수 인자로 구분자와 소수점 문자를 설정할 수 있어 read.table()만으로도   텍스트 형식의 데이터 파일 읽기는 충분하기 때문입니다. 어떤 유사함수가 있는지 알아볼까요? 


첫 번째 함수는 구분자로 공백문자, 소수점으로 도트 문자를 사용한 파일을 읽고, 두 번째 함수는 구분자로  tab문자, 소수점으로 도트 문자를 사용한 파일을 읽습니다. 세 번째 함수는 구분자로 tab문자,  소수점으로 콤마 문자를 사용한 파일을 읽고, 네 번째 함수는 구분자로 콤마문자, 소수점으로 도트 문자를  사용한 파일 읽습니다. 마지막 함수는 구분자로 세미콜론, 소수점으로 콤마 문자를 사용한 파일을 읽습니다.