- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
데이터 분석 전문가 [ADP] R 기본 문법 및 통계 프로그래밍
2014.10.24 15:48
[출처] http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=37720
R 기본 문법 및 통계 프로그래밍
R은 맥 OS, 유닉스 기반의 OS나 윈도우 등 대부분의 컴퓨팅 환경을 지원하고, 프로그래밍 언어 기반으로 구현돼 기본적인 통계 기법부터 모델링, 보다 복잡한 데이터 마이닝 기법까지 모두 커스터마이즈해 구현하는 것이 가능하다. 이렇게 구현한 결과를 그래프로 보여줄 수 있고, 자바나 C, 파이썬 등 다른 프로그래밍 언어와의 인터페이스가 용이해 사용 난이도나 사용환경에 상관 없이 통계 분석과 관련된 다양한 방면에서 활용할 수 있다는 것 또한 R의 장점으로 꼽힌다. 본 글에서는 R을 실제로 어떻게 시작하고 사용할 수 있는지에 대해 프로그래밍 언어의 관점에서 살펴보고자 한다.
권정민 cojette@gmail.com|KAIST, POSTECH에서 산업공학을 수학하고 4년여간 DBMS 및 데이터 마이닝 관련 업무를 했으며, 현재 NexR에서 대용량 데이터 분석 관련 업무를 하고 있다. 클라우드 컴퓨팅 및 대용량 데이터 분석 등에 관심을 갖고 있으며, 많은 지식과 혜안으로 무장한 진정한 Data Scientist로 거듭나기 위해 노력하고 있다.
최근 ‘빅 데이터’, ‘데이터 마이닝’이라는 용어가 은근히 신문지면에서 화두가 되고 있다. 그러면서 이를 위해 사용되는 통계 분석 툴에 대한 관심 또한 높아지고 있는데 현재 학계나 비즈니스에서 주로 사용되고 있는 통계 분석 툴인 SAS, SPSS, R 등이 특히 집중 조명을 받고 있다. 이 중 R의 경우에는 GNU 프로젝트로 만들어져서 무료로 사용할 수 있는데다 다양하게 활용할 수 있는 패키지들이 빠르게 추가되고 있어서 상용 소프트웨어와 통계 기능상 손색이 없어서 최근 들어 더욱 주목을 받고 있다.
R이 프로그래밍 언어 기반이라는 것은 프로그래밍을 통해 유연한 통계 분석 모델링이 가능하고 패키지 추가 및 확장이 용이하다는 장점과 함께 일반 분석가들에게 굉장한 장벽으로 느껴지기도 해 ‘양날의 검’ 같은 특징이다. 또한 이는 R이 기존 상용 통계 프로그램인 SAS 등과 가장 큰 차이점을 보이는 부분 중 하나이기도 하다.
<화면 1> R 웹사이트(www.r-project.org)
프로그래밍 언어라는 것이 살펴보기 시작하면 굉장히 깊고 방대한 분야고, R 역시 마찬가지여서 한 번에 자세히 들여다보는 것은 불가능에 가깝다. 아마도 이 글에서 다룰 수 있는 것은 R이라는 수박의 겉에 붙은 먼지 하나 찍어보는 정도가 아닐까 싶다. 다만 이 글을 읽고 R이 조금이라도 쉽게 느껴진다거나 R을 자신의 일이나 관심사에 어떤 식으로 적용·활용할 수 있을 것인지 독자들이 조금이라도 상상할 수 있다면 이 글의 역할은 충분히 다 한 것이 아닐까 생각한다.
R언어 소개 및 기본 구동
R은 벨 연구소에서 개발됐던 S언어를 기반으로 통계 계산과 이의 시각화를 위한 프로그래밍 언어를 포함한 개발환경이다. 그래서 다른 통계 분석 툴보다 프로그래밍 위주다. 물론 rattle, R Commander 등 GUI를 지원하는 다양한 패키지가 개발돼 있지만 이 역시 아직 개발 단계여서 사용 가능한 기능이 한정돼 있다. 이에 따라 R을 커스터마이징해 유연하게, 충분히 활용하기 위해서는 R언어를 익혀야 한다. 이와 관련해 기본적으로 홈페이지에 매뉴얼, 기술 보고서 등의 문서들이 잘 정리돼 있고 <R Cookbook>이나 <R in a nutshell> 등 잘 정리된 책들도 나와 있으니 관심이 있다면 이를 활용하면 좋다.
<화면 2> R 기본 화면
R의 기본 화면은 <화면 2>와 같다. 물론 꼭 R에서 제공하는 기본 콘솔을 사용해야 하는 것은 아니다. 차후 익숙해지면 vi 등 자신이 주로 사용하는 편집기를 R과 연결한 후 스크립트를 작성해 실행할 수도 있고 RStudio와 같은 유용한 R 기반 개발환경도 다양하게 나와 있으니 잘 살펴보고 자신에게 가장 적합한 개발환경을 사용하면 된다. 다만 통계 개발용 언어이다 보니 프로그래밍에 익숙한 사람들이라도 처음부터 이 언어가 원활하게 손에 익지는 않을 것이다. 그래서 R을 배우는 초반에는 콘솔 화면 내 인터프리터에서 한 줄 한 줄 실행해보고 익숙하지 않은 함수는 help(function) 명령어를 사용해 익혀가면서 R에 익숙해 지는 것이 좋다. 이 글에서도 R에서 기본적으로 제공하는 콘솔의 인터프리터를 사용한다. 지면의 한계로 아주 소수의 내용만 맛보기로 보게 될 것이다. 함수 역시 다 설명하기 어려우니 확인하면 좋을 관련 함수에 대한 내용을 문장 끝에 간단히 언급할 것이니 참고하길 바란다.
R의 입구 둘러보기
일반적으로 사용되는 통계 분석의 기본적인 프로세스는 <그림 1>과 같다.
<그림 1> 통계 분석 과정
기본적으로 <그림 1>의 순서대로 살펴볼 것이다. 통계 분석, 모델링이라는 단어가 나왔다고 지레짐작으로 겁부터 먹을 필요는 없다. 물론 R이 통계 분석의 목적으로 사용되기는 하지만 여기서는 일단 R을 프로그래밍 언어의 관점에 가깝게 볼 것이다. 통계 함수를 통해 보다 원활하게 다룰 수 있다는 사실을 알려주는 것이 이 글의 가장 큰 목적이므로 복잡한 통계적 지식이나 수학적 지식이 필요한 내용은 거의 다루지 않을 것이다. 편안한 마음으로 일단 데이터를 입력하는 것부터 따라가보자.
R에 데이터 입력
R에 데이터를 입력하는 방법은 크게 네 가지다. 첫째, scan() 함수를 통해 ‘1, 2, 3, 4…’의 식으로 값을 콘솔 상에서 바로 입력받을 수 있다. 둘째, read.table() 함수를 통해 text, csv, 압축파일(zip, gzip, bzip 등) 같은 것을 읽어올 수 있다. 셋째, 여러 제공되는 패키지를 활용해 url, database 등 다양한 소스의 이미 만들어진 데이터를 <표 1>과 같이 R에서 제공하는 다양한 형태로 읽어 들이는 것도 가능하다(help(read.table), help(scan)를 입력해 관련 내용을 확인해 보자). 마지막으로 R 내에 기본적인 예제 데이터들이 다양하게 들어있어서 교육 및 테스트용으로 이를 활용할 수도 있다(help(data)를 통해 어떤 데이터셋을 사용할 수 있는지 훑어보자).
<표 1> R의 데이터형
본 글에서는 WWWusage와 iris라는 두 가지의 데이터셋을 사용한다. WWWusage는 어느 곳에서 분당 접속 횟수를 체크한 1차원의 시계열 데이터고, iris는 붓꽃의 꽃받침과 꽃잎의 길이와 넓이, 종을 정리해 놓은 데이터다. help(dataset)을 통해 R 패키지 내에 들어있는 데이터셋의 설명 또한 확인할 수 있다(help(WWWusage)와 help(iris)를 입력해 각 데이터셋의 자세한 성격을 직접 파악해 보자). 두 데이터셋이 파악됐다면 실제로 변수를 생성해 해당 데이터셋을 읽어들일 수 있다. 물론 기존에 존재하는 데이터셋의 경우 변수에 넣지 않고 해당 데이터셋의 이름으로 바로 사용할 수 있지만 다른 데이터를 읽어서 사용할 때를 가정해 변수에 익숙해질 수 있도록 변수에 넣어서 사용해 봤다(<리스트 1>, <리스트 2> 참조). 이미 값이 입력된 변수명을 입력하면 해당 변수의 데이터를 모두 확인할 수 있다.
<리스트 1> WWWusage |
<리스트 2> iris |
데이터의 면면 확인
데이터를 불러왔으니 해당 데이터의 기본적인 요약 통계 정보를 보자. R에서는 summary라는 함수를 통해 간단하게 데이터의 통계 정보를 볼 수 있다(이정도 되면 자연히 help(sum mary)를 먼저 확인할 것이라고 믿어 의심치 않는다).
<리스트 3> summary(wu) |
<리스트 4> summary(ir) |
< 리스트3>, <리스트 4>와 같이 summary 함수에서는 연속형 변수의 최소(Min.), 최고값(Max.), 중간값(Median), 평균(Mean) 및 각 4분위수(1stQu., 3rdQu.)를 제공한다. 범주형 변수가 있을 경우에는 각 범주의 빈도 정보 또한 보여준다. 이 외에도 다른 함수들을 통해 데이터의 관련 통계 수치도 확인할 수 있다. 각 함수당 help(function)을 통해 자세한 옵션 및 사용법을 익히길 바란다.
<리스트 5> wu의 기초 통계값 |
해당 데이터들을 숫자로만 보면 직관적으로 느낌이 오지 않는다. 데이터의 분포와 구성을 간단히 그래프로 표현한 다음의 화면들을 보자.
<화면 3> hist(wu) : 수치 데이터의 분포를 간단하게 히스토드램으로 요약해서 보여준다.
<화면 4> plot(wu) : 데이터가 time-series라고 지정돼 time 값의 선그래프가 그려진다. 행과 열에 들어갈 값을 지정해 주면 이에 맞는 그래프를 보여준다.
<화면 5> boxplot(wu) : 최대, 최소, 4분위수 및 전반적인 데이터 분포를 boxplot으로 보여준다.
<화면 6> plot(ir) : 모든 행에 대한 산점도 행렬(scatterplot martrix)을 보여준다.
<화면 7> boxplot(ir) : 행렬 데이터의 경우 모든 행의 데이터에 대한 boxplot을 한 화면에서 확인할 수 있다.
데이터를 확인하고 보여줄 때 이들 그래프를 통한 시각화는 단순하면서도 중요한 부분이니 해당 함수들을 충분히 활용하게 되면 유용할 것이다. 특히 plot 함수의 경우 주는 옵션과 넣는 변수에 따라 굉장히 다양하게 활용할 수 있다. 물론 다른 함수에 대해서도 help를 확인해 봐야겠지만 특히 help(plot)은 여러 번 확인해서 원하는 대로 쓸 수 있게 되면 매우 유용하다.
R 기초 프로그래밍으로 모델 만들기
통계 모델이라고 하면 먼저 떠오르는 것이 데이터 마이닝 모델(결정나무(decision tree)모형이나 신경망(neural network) 모형 등…)같이 뭔가 있어 보이지만 그만큼 진입장벽이 높은 모델들이다. 하지만 간단히 데이터를 가공하는 함수도 하나의 통계용 모델로 볼 수 있고, 간단한 프로그래밍을 통해 결과값을 얻는 것 또한 통계용 모델에 해당된다. 이런 부분에도 R은 유용하게 사용될 수 있다.
통계 계산용 프로그래밍 언어로서의 R은 많은 함수와 연산자를 갖고 있고, 일반 프로그래밍 언어에는 없는 통계 분석과 수치 계산을 위한 함수와 연산자를 다양하게 제공한다. 이를 통해 분석할 데이터를 포함하는 데이터 객체를 적당한 함수와 연산자 및 제어구문을 사용해 입력, 변형, 조작, 계산, 출력 등을 하는 것이 가능하다.
R은 프로그래밍 언어를 기반으로 만들어졌기 때문에 생각보다 풍부한 프로그래밍 문법을 포함하고 있다. 여기서는 간단하게 제어문과 함수 정의를 통해 데이터 처리 모델을 만들어 보자.
R은 여느 프로그래밍 언어처럼 기본적인 제어문을 제공한다. If~else 부류의 조건 분기문, for나 while같은 조건 반복문, break같은 무조건 분기문이다. 기능 및 형태도 다른 언어들과 유사해 프로그래밍의 기초만 익힌 사람이라고 해도 금방 익숙해질 수 있다.
다음 페이지의 <리스트 6>을 보자.
<리스트 6> wu 데이터셋에서 특정 조건 이하의 값 자동 변환 |
이 정도는 다른 프로그래밍 언어의 정말 기초적인 내용과 큰 차이가 없을 것이다. 하지만 <리스트 6>은 순전히 R에서 이뤄진 것이다. 그리고 이 또한 데이터를 필요한 형태로 가공하는 모델의 일종이다.
그럼 조금 더 복잡한 함수 정의 및 데이터 처리 예제를 살펴보자. <리스트 7>은 행렬 데이터에서 각각의 행렬로 상관계수를 구한 후 모든 다른 행과 상관관계가 가장 높은 한 행을 제거한 새로운 행렬을 반환해 주는 함수를 직접 정의하고 이를 ir dataset에서 실행한 결과를 확인하는 것이다.
<리스트 7> iris 데이터셋에서 타 행과의 상관계수가 가장 높은 행 자동 제거 > ir2 <- corfunc(ir1) # 함수 실행 |
< 리스트 7> 역시 기본적인 프로그래밍 언어에 기초 이상의 지식을 갖고 있는 사람이라면 일부 함수 및 형식이 조금 익숙하지 않은 것을 제외하고는 쉽게 이해할 수 있을 것이다. R에서 함수 정의는 ‘함수명 <- function(인수 리스트) {함수 내용}’의 형식으로 구성돼 있고, ‘result(변수명)’의 형식으로 결과값을 반환할 수 있다(이 외에도 행렬 처리 방법이나 일부 함수에 대해서는 눈여겨 볼 필요가 있다. 두 벡터간의 상관계수를 구하는 cor(), mean 함수에서 결측치를 제거하는 옵션인 na.rm = TRUE, 데이터 객체의 개별 차원에 대해 계산함수를 적용해 집계하는 함수인 apply() 등에 대해서는 꼭 한 번 짚고 넘어가자. R 프로그래밍에 많은 도움이 될 것이다. 특히 apply()의 경우 데이터 처리 시 굉장히 광범위하게 활용할 수 있는 함수이니 꼭 help(apply)로 자세한 내용 및 옵션을 같이 확인할 것을 적극 권장한다).
함수 내에서 통계 함수로 사용된 것은 cor()뿐이었지만 이를 행렬의 모든 행의 조합에 대해 구한 후 비교하고 상관계수가 가장 높은 행을 제거하면 행렬이 커질 경우 단순 반복작업이 굉장히 많아진다. 특히 데이터를 여러 방법으로 처리해서 모델링하고 비교하는 과정이 필요한 데이터 마이닝 작업에서 단순 반복 작업을 줄이는 것은 굉장히 중요한 일이다. 이럴 때 이같은 함수 정의 및 프로그래밍 기능은 매우 유용하게 사용될 수 있다.
R 디버깅
갑자기 분석 과정에 없던 디버깅이 나온다고 당황하지 말자. 통계 분석일수록 결과가 정확해야 하기 때문에 프로그래밍에서 발생할 수 있는 논리적 오류에 더욱 민감해 질 수밖에 없다. R 역시 프로그래밍 언어인 만큼 에러 및 경고 메시지에서 자유롭지 못하다. 또한 R의 기본 경고 및 에러 메시지 역시 다른 프로그래밍 언어처럼 불친절하다. 또한 결과가 생각했던 것과 다르게 나올 수도 있다. 스크립트를 사용하거나 함수를 만들어서 사용할 경우 특히 그렇다. 그래서 R 단독으로도 trackback, debug, recover, trace 등의 몇 가지 디버깅 함수를 제공한다. 이 중 에러 탐색 및 논리적 오류를 해결하는 데 가장 유용한 debug 함수의 예제를 하나 살펴보자(당연히 다른 함수들도 help(function)으로 찾아보고 자신에게 적합한 함수를 선택, 옵션에 대해서도 정확히 익혀서 충분히 활용하자).
Debug 함수는 가장 기본적인 디버깅 수행방법이다. 프로그램을 순차적으로 수행하면서 값을 추적하고 이상 여부를 진단할 수 있게 해 준다. <리스트 8>은 앞에서 만들었던 corfunc() 함수에 debug 함수를 적용한 내용이다.
<리스트 8> corfunc()에 debug 함수 적용 |
<표 2> debug 함수 내 명령어
Debug Browser 모드에서 추가로 사용 가능한 명령어를 확인해 보다 꼼꼼하고 정확한 디버깅을 할 수 있다.
광범위한 분야에서 활용할 수 있는 R
지금까지 하나의 프로그래밍 언어라는 관점에서 R의 기본적인 내용을 간단한 예제와 함께 살펴봤다. 이들 내용은 정말 초보적인 맛보기에 불과하다. 무엇을 상상하든 그 이상으로 다양하게 활용할 수 있는 도구가 R이다. 특히 통계적 기법과 프로그래밍적 기법이 조합된 도구로서 일부 사전 정의된 기능만 수행하는 통계 툴들보다 훨씬 광범위한 분야에서 활용할 수 있다.
이후 R의 분산처리 및 병렬처리에 대해 보다 자세하게 다루겠지만 소규모 데이터를 사용하거나 아주 간단한 통계 기법만 사용하는 사람이더라도 기회가 된다면 R의 기능들을 보다 자세히 살펴볼 것을 권한다. 생각보다 깊고 넓은 R의 세계를 확인할 수 있는 것은 물론 생각도 하지 못했던 데이터 활용에 대한 인사이트도 발견할 수 있을 것이다.
| 참고자료 1. R-project Documentation: www.r-project.org 2. Paul Teetor. R Cookbook. O’Reilly, first edition, 2011 3. 유충현, <예제로 배우는 R프로그래밍>, 자유아카데미, 2010 |
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86196 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78671 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95410 |
| 5 | XML database | 졸리운_곰 | 2016.11.29 | 4392 |
| 4 |
Learn XQuery in 10 Minutes: An XQuery Tutorial
| 졸리운_곰 | 2016.11.29 | 1996 |
| 3 |
xquery-tutorial.pdf
| 졸리운_곰 | 2016.11.29 | 1727 |
| 2 | XML 문서 가져오기 및 XQuery 쿼리 예제 | 졸리운_곰 | 2016.11.29 | 1563 |
| 1 |
[SQL] XQuery로 XML Data에 접근하기
| 졸리운_곰 | 2016.11.29 | 1921 |

