부록: r 사용법 - openwith.net¶€록r.pdfobject의 형식으로 메모리에 남아 있는다....

15
출처: 윤형기, 「빅데이터: Hadoop데이터 분석」, 201310, 교보문고(퍼플) 부록: r 사용법 1. 개요 (1)특징 R 오픈소스이고 거의 모든 환경에서 설치 운영이 가능하지만 여기서는 편의상 PC Windows 환경만을 살펴본다. 또한 R 매우 다양한 기능과 많은 확장제품이 있지만 여기서는 기본 기능의 활용만을 살펴본다. 먼저 R 기본적인 특징을 살펴보면 다음과 같다. Interpreted 언어이다. - compile 방식이 아니어서 명령을 실행시키면 별도의 컴파일 작업 이도 곧바로 결과가 출력한다. 구문이 단순하다 - 대부분 통계용어이고 직관적 이해가 가능하다. 많은 다양한 package있다. – r설치 그대로 사용해도 강력하지만 추가적인 많은 듈이 package형태로 제공되는 것은 많은 경우 R선택하는 원인이 되고 있다. 이들은 별도의 다운로드 설치작업을 통해 이용할 있으며 목록은 http://cran.r- project.org/web/packages/ 있다. 1 (2) 설치와 작업환경 PC Windows 경우 설치는 매우 쉬워서 프로젝트 사이트인 http://www.r-project.org/ 에서 2 해당 파일을 다운로드하여 설치프로그램을 한번 실행시켜 주기만 하면 1~2 분만에 종료한다. 설치 프로그램을 실행하면 아래 화면이 나타난다. 여기서 > 표시된 부분에 명령어를 입력하면 해당 명령이 수행되는 방식으로 진행한다. 1 2013 년 7 월현재 약 4,500 개가 존재한다 2 우리나라를 포함하여 나라별 mirror 사이트가 있다

Upload: others

Post on 07-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

  • 출처 : 윤형기 , 「빅데이터 : Hadoop과 데이터 분석」 , 2013년10월 , 교보문고 (퍼플 )

    부록: r 사용법

    1. 개요

    (1)특징

    R 은 오픈소스이고 거의 모든 환경에서 설치 및 운영이 가능하지만 여기서는 편의상 PC 의 Windows

    환경만을 살펴본다. 또한 R 은 매우 다양한 기능과 수 많은 확장제품이 있지만 여기서는 기본 기능의 활용만을

    살펴본다.

    먼저 R 의 기본적인 특징을 살펴보면 다음과 같다.

    Interpreted 언어이다. - compile 방식이 아니어서 명령을 실행시키면 별도의 컴파일 작업 없

    이도 곧바로 결과가 출력한다.

    구문이 단순하다 - 대부분 통계용어이고 직관적 이해가 가능하다.

    많은 다양한 package가 있다. – r을 설치 후 그대로 사용해도 강력하지만 추가적인 많은 모

    듈이 package의 형태로 제공되는 것은 많은 경우 R을 선택하는 원인이 되고 있다. 이들은 별도의

    다운로드 및 설치작업을 통해 이용할 수 있으며 그 목록은 http://cran.r-

    project.org/web/packages/ 에 있다.1

    (2) 설치와 작업환경

    PC Windows 의 경우 설치는 매우 쉬워서 프로젝트 사이트인 http://www.r-project.org/ 에서2 해당

    파일을 다운로드하여 설치프로그램을 한번 실행시켜 주기만 하면 1~2 분만에 종료한다.

    설치 후 프로그램을 실행하면 아래 화면이 나타난다. 여기서 > 표시된 부분에 명령어를 입력하면 해당

    명령이 수행되는 방식으로 진행한다.

    1 2013 년 7 월현재 약 4,500 개가 존재한다

    2 우리나라를 포함하여 나라별 mirror 사이트가 있다

    http://cran.r-project.org/web/packages/http://cran.r-project.org/web/packages/http://www.r-project.org/

  • 2

    이제부터 화면의 > 프롬프트 뒤에 필요한 명령어를 입력하고 Enter 키를 누르면 결과가 화면에 출력된다.

    R 의 수행은 메인메모리에서 작업이 이루어지므로 변수, 데이터, 함수, 결과 등은 모두 각자 이름을 가지는

    object 의 형식으로 메모리에 남아 있는다. 사용자는 이들 object 에 대해 연산자 (operator: 수학연산,

    논리연산, 비교연산 등)와 함수를 통해 작업을 하게 된다.

    여기서 argument 는 object 일 수도 있고 (예:데이터, 공식, 수식 등) 또는 함수 자체가 가지는 디폴드

    값일 수도 있다. 그리고 R 이 수행된 결과값도 마찬가지로 object 임을 유의한다.

  • 3

    2. 기본기능 실습

    (1) 첫 걸음

    첫 작업으로 n 이라는 변수를 만들고 여기에 15 라는 숫자를 부여한다. 다음 줄에서 n 을 조회하니 n 이란

    변수의 1 번째 원소의 값이 출력되었다.

    > n n

    [1] 15

    > print(n)

    [1] 15

    여기서 직접 변수명을 입력시키는 방식으로 그 내용을 조회하는 대신 print(n) 이라는 독립적인 명령을

    사용하여도 동일한 결과를 가져온다.

    > (10+3) *3.5

    [1] 45.5

    >

    한편 특정변수에 치환시키는 작업을 하지 않아도 그 결과를 받아 볼 수 있다. 세미콜론 (‘;’)을 통해 여러

    명령을 하나의 줄에서 수행할 수도 있다.

    > name ls.str()

    m : num 12

    n : num [1:3] -1.492 -1.425 -0.509

    n1 : num 100

    n2 : num 5

    name : chr """| __truncated__

    x : num 10

    >

    위에서 ls()는 현재 메모리에 존재하는 object 의 목록을 보여주는 명령이다. (Linux 의 ls 를 연상할 것)

    그리고 ls()의 인자로서 pat 는 pattern 을 뜻하는 것으로서 n 으로 시작하는 object 만 출력하도록 조건을

    부여하였다. 한편 ls.str()은 object 에 대한 보다 자세한 내용을 출력하여 준다.

    > n n

    [1] -1.4920626 -1.4247796 -0.5092691

    >

    rnorm 은 난수(亂數: random number) 생성함수로서 3 개를 출력헸다. 메모리에서 object 를 없애려면

    remove 를 뜻하는 rm() 명령을 사용한다.

    > rm(n1,n2)

    > ls()

    [1] "m" "n" "name" "x"

    >

  • 4

    > getwd()

    [1] "C:/Documents and Settings/HKYoon/My Documents"

    > setwd("c:/temp")

    > getwd()

    [1] "c:/temp"

    >

    R 에서 이와 같이 명령어 하나하나를 수행시킬 수도 있지만 이들 명령을 모아서 프로그램으로 만들 수 있다.

    이때 프로그램의 확장자는 R 이며 이 프로그램을 수행시킬 때는 source() 명령을 이용한다. 예컨대

    myhello.R 이라는 프로그램을 수행시키려면 다음과 같이 한다.

    > source(“myhello.R”)

    이번에는 데이터를 직접 입력시켜 보기로 한다. 데이터를 입력할 때는 c()라는 함수를 이용하는데 이것은

    argument 를 vector 또는 list 와 결합시켜주는 역할을 한다. (vector 등에 대해서는 잠시 후에 설명)

    > age weight mean(weight)

    [1] 61.5

    > cor(age,weight)

    [1] 0.9575511

    > plot(age,weight)

    즉, 6 명의 나이와 몸무게를 vector 타입으로 입력한 후 mean()을 통해 평균을, cor()를 통해 상관관계를

    살펴보았다. 특히 맨 마지막의 plot()을 통해 다음과 같이 산포도(scatter plot)가 출력되었다.

    한편 명령어 수행이든 프로그램 실행이든 산출물을 관리하는 방법에 대해 살펴본다. 텍스트 출력물은

    sink(“파일명”) 을 사용해서 출력위치를 조정(redirect)하거나 append 할 수 있다. 뿐만 아니라 여러 형태의

    그래픽 출력이 가능한데 이를 위해서는 해당 형태를 pdf(“파일명”) 또는 png(“파일명”)과 같이 지정한다.

    예를 들어 보자.

    > getwd()

    [1] "C:/Users/HKYoon/Documents"

    > age weight sink("myresult")

    > pdf("myresult.pdf")

  • 5

    > mean(weight)

    > sd(weight)

    > cor(age,weight)

    > plot(age,weight)

    >

    위에서는 현재의 작업위치를 확인하고 나이와 몸무게 값을 입력한 후 sink()를 통해 텍스트 출력파일을,

    pdf()를 통해 pdf 출력파일을 지정하였다. 그런 후 작업을 하니 현행 디렉토리에 다음과 같은 결과가 만들어

    졌다.

    작업을 하다가 도움말이 필요하면 의문부호 ‘?’를 입력하면 된다.

    > ?ls()

    >

    그러면 설치 시 저장된 내용이 브라우저를 통해 도움말로 출력된다.

    > help.start()

    위의 명령 통해 도움말 기본화면이 브라우저에 나타난다.

  • 6

    앞서의 그래픽 출력과 관련하여 각 그래픽 형태마다 출력 상세조건을 지정할 수 있다. 예컨대 par( …) 를

    통해 그래픽 파라미터를 지정하는데 여기에는 데이터를 표시하는 도형(symbol), 선의 형태와 두께, 각

    그래픽요소의 색깔 및 범례(legend)등을 지정할 수 있다. 예컨대 plot 의 경우 plot(x, y, ...)를 이용하는데 이

    경우에도 plot 의 타입은 help(plot) 명령을 통해 문의하면 결과를 도움말 화면에서 얻게 된다.

    "p" for points,

    "l" for lines,

    "b" for both,

    "c" for the lines part alone of "b",

    "o" for both ‘overplotted’,

    "h" for ‘histogram’ like (or ‘high-density’) vertical lines,

    "s" for stair steps,

    "S" for other steps, see ‘Details’ below,

    "n" for no plotting.

    각각에 적용할 수 있는 파라미터는 같은 help 화면에서 찾아가면 된다. 또한 R 의 학습자료도 메뉴의

    이용할 수 있다. R 의 작업공간인 워크스페이스에서 끝내고 나오려면 q()를 입력한다.

    > q()

    (2) R에서의 데이터

    Dataset 이란 행과 열의 형태로 배열된 데이터를 말하는데 이를 구성하는 항목 데이터는 나름의 데이터

    타입을 가진다.

    가 .데이터 유형

    도입부에서 r 은 변수를 object 로 다룬다고 하였는데 이는 중요한 의미를 가진다. 특히 데이터가 nominal,

    ordinal, interval, ratio 등 여러 범주에 속할 수 있고 이에 따라 분석방법이 달라질 수 있기 때문이다. 각

    object 는 다음과 같은 본래적 속성 (intrinsic attribute)를 가진다:

    Mode – 숫자형(numeric), 문자형(character), complex형, 논리형(logical)의 기본 데이터 타입을

    말한다.

    Length – object의 element 숫자를 말한다.

    다음의 명령수행을 보자.

    > Y

  • 7

    Y, compare, z 라는 이름을 가진 3 개 변수에 값을 부여한 후 각각에 대해 mode()를 조사하니 그 값이

    출력되었다. 여기서 TRUE 는 논리값으로서의 ‘참(TRUE)’이 2i 는 복소수로서 complex 가 출력되었다.

    이제 데이터를 나타내는 object 의 타입을 살펴보면 다음과 같다.

    Object 설명 그림설명

    Vector R 에서의 벡터는 1 차원 배열 (1-dimensional array)을 말함.

    combine 을 뜻하는 c() 함수를 이용하여 생성할 수 있다.

    (참고: R 에서 Scala 타입은 1 개의 원소만 가지는 vector 를

    말한다)

    Matrix 배열 중 특히 k=2 인 2 차원 배열

    matrix()를 통해 생성되며 다양한 matrix 연산이 가능하다.

    myymat

  • 8

    이제 여러 object 타입 중 Data frame 의 생성에 대해서만 살펴 본다.

    > patientID age status patientdata patientdata

    patientID age status

    1 101 38 양호

    2 102 42 호전

    3 103 44 악화

    4 104 53 양호

    >

    나 . 데이터의 입력

    우선 ‘현행 디렉토리’를 보자. 현재 작업 중인 디렉토리를 뜻하며 getwd()를 이용한다. 또한 디렉토리를

    변경하려면 setwd()를 이용한다.

    데이터는 키보드로 입력할 수도 있고 파일을 가져올 수도 있으며 다른 프로그램에서 데이터를 import 하는

    방법도 있다.

    키보드에서 입력할 때 가장 편한 방법은 edit() 명령을 사용하는 것이다.

    > classmember classmember

  • 9

    (3) r에서의 그래프 이용

    어쩌면 r 언어의 가장 큰 장점이 시각화기능이라 할 수 있을 정도로 다양한 기능이 제공된다. 우선 지원되는

    device driver 자체가 매우 다양해서 화면에 출력하는 것 외에도 여러형태로 결과를 볼 수 있다.

    PostScript, pdf, png, jpeg, WMF (Windows Metafile)

    그래픽 기능은 크게 몇 가지 유형으로 나누어 볼 수 있다.

    High-level 함수: 출력내용을 직접 plotting해주는 함수를 말한다.

    Plot, hist. boxplot, pair 등

    Low-level함수: High-level 그래픽함수에 부가적으로 이용된다.

    Points, lines, text, axis, 기타

    Trellis 함수: 한번의 호출로 multipanel display가 가능하다.

    Xyplot, bwplot, histogram 등

    또한 기본기능 외에도 lattice 등 다양한 확장 패키지가 제공된다. 다만, 여기서는 그래픽 구현에 대한

    설명을 생략하고 다변량 데이터에 대한 scatterplotting matrix 의 예를 보는 것으로 대신하고자 한다.

    > data(Region1Arrest)

    > pairs(Region1Arrest)

    > splom(~ Region1Arrest)

    > splom(~ Region1Arrest,

    + panel = function(x,y) {panel.xyplot(x,y);panel.loess(x,y)})

    (4) r의 주요 명령어

    이하에서 주요 명령을 요약하여 제시한다.

  • 10

  • 11

    3. r 프로그래밍

    R 은 R 명령어 프롬프트에서 대화식으로 진행도 가능하지만 프로그램을 작성하여 일괄 수행도 가능하다.

    (1) Loop과 vectorization

    R 은 일반 프로그래밍 언어가 제공하는 기능을 대부분 가지면서도 프로그래머가 아닌 분석가들이 쓰기

    용이하도록 몇 가지 특징적 기능이 제공된다.

    우선 프로그램 제어를 위한 기능을 가진다. 예를 들어 x 라는 vector 가 있는데 각각의 원소가 b 라는 값을

    때는 0 을, 그 이외의 값을 가질 때는 1 을 부여한다고 할 때 다음과 같이 구현하고자 한다고면 이 경우 x 와

    동일한 크기의 y 라는 vector 를 생성하면서 다음과 같이 구현한다.

  • 12

    y

  • 13

    apply(X, MARGIN, FUN, ...)

    여기서, X 는 matrix 를 의미하며, MARGIN 은 대상체를 지정한다.

    row 인 경우 (1), column 인 경우 (2), row/column 모두를 대상으로 경우 (c(1, 2))를 지정한다.

    FUN 은 적용할 함수 (또는 연산자도 가능한데 이 때는 괄호로 표시해야 한다)를 지정한다,

    끝으로 ... 로 표시한 부분에는 FUN 에 제공할 argument 를 선택적으로 지정할 수 있다. 간단한 예를

    살펴본다.

    > x y X apply(X, 2, mean)

    x y

    -4.975132 4.932979

    > apply(X, 2, sd)

    x y

    0.0755153 2.1388071

    lapply()의 경우 이러한 작업을 list 에 대해 수행하며 구문은 비슷하다.

    > forms lapply(forms, lm)

    [[1]]

    Call:

    FUN(formula = X[[1]])

    Coefficients:

    (Intercept) x

    31.683 5.377

    [[2]]

    Call:

    FUN(formula = X[[2]])

    Coefficients:

    (Intercept) poly(x, 2)1 poly(x, 2)2

    4.9330 1.2181 -0.6037

    이와 함께 sapply()도 있는데 이는 argument 로 vector 또는 matrix 를 받아서 처리한 후 결과를 테이블

    형태로 출력시켜 준다.

    (2) R 에서의 프로그램 작성

    통상 R 프로그램은 명령어 군을 반복적으로 사용할 때 이용되는데 명령어를 나열한 후 ASCII 파일로

    저장하며 확장자는 `.R'이다.

    여기서는 하나의 프로그램 로직을 이용해서 3 가지 종류를 비교하고자 하는 경우를 상정해 본다.

  • 14

    우선 그 결과를 받아보기 위해 그래픽을 (예: 화면 또는 출력장치) 나누는 작업을 선행하였다. (참고: #는

    주석 처리를 표시함)

    layout(matrix(1:3, 3, 1)) # 그래픽 장치를 나눈다.

    data

  • 15

    이를 수행하기 위해서는 함수를 메모리로 탑재하여야 하는데 일반적인 명령어처럼 명령어 프롬프트에서

    수행해도 되고 파일로 저장한 후 source() 명령을 이용해도 된다.3

    일반 함수를 탑재하면 myfun("상품 A", "prodA.dat") 라는 명령을 통해 수행가능하다. 즉, 위 예의 경우

    다음과 같이 간단한 명령으로 수행이 가능하다.

    layout(matrix(1:3, 3, 1))

    myfun("상품A", "prodA.dat")

    myfun("상품B", "prodB.dat")

    myfun("상품C", "prodC.dat")

    또는 앞서의 sapply() 명령을 이용하면 한번에 처리가 가능하다.

    layout(matrix(1:3, 3, 1))

    prods x foo2 x

    [1] 1

    여기서 해당 "함수 밖 (enclosing)" 이라는 것에 주목할 필요가 있다. 위의 예에서는 global 환경과 함수

    (foo 또는 foo2) 자체라는 2 개의 환경만 존재하지만 경우에 따라서는 보다 더 깊게 (nested) 환경이 구성될

    수도 있을 것이다. 이 경우에도 기본 원칙은 동일하게 적용된다.

    한편 다른 프로그래밍 언어에서와 마찬가지로 함수에 인자를 지정하는 방법에도 위치에 의한 지정과 이름에

    의한 지정 모두 가능하다.

    3 R 패키지로 만들 수도 있지만 여기서는 설명을 생략한다.