R 할줄 R지? #5 - 벡터 연산편

    인트로


    이전 시간에는 벡터(Vector)의 심화 사용 방법에 대해서 알아봤습니다. 오늘은 R이 왜 데이터 분석에 특화된 언어인지 보여줄 수 있는 벡터의 연산에 대해서 보여드리도록 하겠습니다. R와 파이썬은 바로 이 벡터라는 부분이 자바나 C, C++과 다르게 매우 쉽게 핸들링이 가능하기 때문에 머신러닝이나 데이터 분석 등에 매우 유용하게 쓰입니다.


    물론 데이터를 최종적으로 이쁘게 출력해주는 비주얼 적인면도 있지만, 제일 좋은건 강력한 기능들을 쉽게 다루는 것이겠지요.



    벡터 연산


    R은 일반적인 언어와 다르게 벡터와 같은 데이터를 매우 쉽고 강력하게 다룰 수 있는 방법을 제공합니다. 아래는 쉽게 벡터들을 연산하는 방법들입니다.


    > a <- 20:30

    > b <- 10:20

    > d <- c(b,a)

    > d

    ## [1] 10 11 12 13 14 15 16 17 18 19 20 20 21 22 23 24 25 26 27 28 29 30

    ##은 결과입니다. [1] 은 결과의 위치를 뜻합니다.


    위의 예처럼 벡터를 위와 같은 방식으로 매우 간단하게 합치며 합쳐진 데이터를 다른 변수에 쉽게 넣을 수 있습니다. 다른 언어를 이미 다를 줄 아는 개발자라면, 위의 소스의 내용이 얼마나 간단한지 이해할 수 있을 것입니다.


    > e <- d-a

    > e

    [1] -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10   0   0   0   0   0   0   0   0   0   0   0


    위 예시를 보면, a 변수와 b 변수를 합친 d를 a로 뺀 후, 그 값을 e에 넣어봤습니다. e를 출력해보니 길이가 다른 d와 a가 연산이 된 모습을 볼 수 있습니다. R은 이와같이 알아서 크기에 맞춰서 반복해서 계산을 자동적으로 해주는 강력한 연산 도구입니다.


    이번에는 벡터와 벡터를 연산하지 말고, 벡터와 스칼라를 연산해보도록 하겠습니다.


    f <- e+10

    > f

    [1]  0  0  0  0  0  0  0  0  0  0  0 10 10 10 10 10 10 10 10 10 10 10


    이렇게 모든 배열의 값에 +10을 더하는 벡터와 스칼라의 연산도 알아서 하는 모습을 보여줍니다. 



    벡터 함수


    이번에는 데이터 분석에 맞게 통계에 쓰이는 함수를 사용해보도록 하겠습니다.


    우선 데이터를 아래와 같이 세팅하겠습니다.

    > a <- 30:20

    > b <- 50:40

    > c <- 10:40

    > d <- c(a,b,c)

    > length(d)

    [1] 53


    위 세팅 내용은 a에 30부터 20까지 1씩 감소하는 값과, b는 50에서 40으로 1씩 내려가는 값 c는 10부터 40까지 1씩 증가하는 값들을 벡터로 생성하였고, 그 값들을 d에 담아봤습니다. a는 11개, b는 11개, c는 31개의 벡터 크기를 가지고 있으니 length 함수로 벡터의 길이를 출력하니 53이 나오게 되었습니다.


    총합(sum), 평균(mean), 중간값(median)

    > sum(d)

    [1] 1545

    > mean(d)

    [1] 29.15094

    > median(d)

    [1] 28


    sum이라는 함수에 벡터값을 넣으면 전체를 합한 값이 리턴이 되고, 마찬가지로 mean이라는 함수를 쓰면 평균 값을 리턴하게 됩니다. 다른 언어나 DB 명령어에서는 avg라는 함수도 자주 쓰는데 R에서는 avg라는 함수가 없습니다. 마지막으로 median으로 중간값을 구할 수 있습니다. 



    mean과 median을 헷갈리실 수 있는데 mean은 전체를 합친 수에서 N을 나눈 값이고, 중간값은 전체를 나열한 후 중간에 위치한 값을 가리킵니다.



    최대(max), 최소(min)

    > max(d)

    [1] 50

    > min(d)

    [1] 10


    최대, 최소는 말 그대로 벡터에서 가장 높은 값과 가장 낮은 값 리턴 합니다.



    분산(variance), 표준편차(stnadard deviation)

    > var(d)

    [1] 118.9768

    > sd(d)

    [1] 10.90765


    위와같이 분산은 var라는 함수로 표준편차는 sd라는 함수로 쉽게 연산을 할 수 있습니다.


    통계상식

    분산은 평균(mean)에서 얼만큼 많이 벗어났는가이며, 표준편차는 분산 값에서 루트(√)를 씌운 값으로 분산은 제곱하기 때문에 실제 값보다 크므로, 일반적으로 통계에서는 표준편차를 많이 활용합니다.



    포스팅에 사용된 전체 R스크립트

    # a와 b 변수에 벡터값 세팅

    a <- 20:30

    a

    b <- 10:20

    b


    # b와 a를 d변수에 세팅

    d <- c(b,a)

    d


    # 벡터 d에 벡터 a를 빼고, e에 세팅한다

    e <- d-a

    e


    # 벡터 e에 스칼라값 10을 더하고, f에 세팅한다

    f <- e+10

    f


    # a,b,c 변수에 벡터값을 세팅한다

    a <- 30:20

    b <- 50:40

    c <- 10:40


    # a,b,c를 합친 d 벡터를 생성한다

    d <- c(a,b,c)


    # 벡터 d의 전체 길이

    length(d)


    # 벡터 d의 총합

    sum(d)


    # 벡터 d의 평균값

    mean(d)


    # 벡터 d의 중간값

    median(d)


    # 벡터 d의 최대값

    max(d)


    # 벡터 d의 최소값

    min(d)


    # 벡터 d의 분산

    var(d)


    # 벡터 d의 표준편차

    sd(d)




    댓글

    Designed by JB FACTORY