본문 바로가기
시간 관리 및 생산성 도구/빅데이터

[이론]6. 데이터 분석도구 R의 이해와 기본문법

by Coralynn 2022. 8. 24.

본격적인 빅데이터 분석에 앞서 데이터 분석 도구인 R에 대해 알아보는 챕터입니다. 기본 문법에 대해 이미 알고 계신 분들이라면 넘어가셔도 좋습니다:)


 

1. R의 이해

 

1) R이란?

: 통계분석, 그래픽 표현, 보고 작성을 위한 프로그래밍 언어 및 소프트웨어 환경

  • 통계분석
  • 선형 및 비선형 모델링, 통계 검정, 시계열 분석, 분류, 군집화 등의 기능
  • 그래픽 표현 및 보고 작성
  • 막대형 그래프, 원형 그래프, 3차원 그래프 등 출력
  • GNU GPL Version2 라이센스에 의하여 관리
  • Windows, Linux, Mac 등 다양한 운영체제 환경 지원

2) R의 특징

  • 효과적인 데이터 핸들링 및 저장소 기능
  • 선형대수 연산에 적합한 연산자 제공
  • 일관성 있으며 통합된 데이터 분석 도구
  • 데이터 분석의 그래픽 및 출력 기능
  • 견고하면서도 간결하고 효과적인 프로그래밍 언어

      (조건문, 루프, 사용자 정의 재귀 함수, 입출력 기능 등)

3) R 설치 및 RStudio 설치

 

 

2. R 기본 문법

1) 기본문법

대입(할당) 연산자의 사용

  • < -연산자 or - > 연산자를 이용 하여 변수에 값 대입

 

주석의 사용 #

  • comments : 실제로 실행되지 않는 코드의 메모

2) 변수의 사용

■ 변수 Variables

  • 모든 변수는 문자 , 숫자 , 점 '.' , 밑줄 '_' 만 사용 가능
  • 첫번째 문자는 숫자와 문자_로 시작할 수 없음
  • 첫번째 문자가 점.인 경우 두번째 문자는 숫자 외 사용

■ 변수 관련 함수

  • class() : 변수의 데이터형을 알아내기 위한 함수
    • character 문자형
    • numeric 숫자형
    • integer 정수형
    • Logical 논리형
    • complex 복소수형
    • raw 원형

  • ls() : 현재 사용하고 있는 변수의 목록 출력
    • 사용하고 있는 변수 중 글자’v’을 포함하는 변수 보기
ls(pattern=”v”) [l] “v”
  • rm() : 변수를 지우는 함수

3) 데이터형 Data Types

: R에서 기본으로 지원하는 데이터형(데이터를 담는 그릇의 형태)

■ 데이터형의 종류

  • 논리형Logical
    • True, False의 값을 가짐

  • 숫자형 numeric
    • 실수를 표현하기 위한 데이터형

  • 정수형 integer
    • 소수점이 없는 정수를 표현(숫자+L)
i<-1147L
class(i) 
[l] "integer"

  • 복소수형 complex
    • 복소수를 표현하고자 할 때 사용(실수+허수)
c<-3+5i 
class(c) 
[l] "complex"

  • 문자형 character
    • 문자 또는 문자열을 표현할 때 사용

  • 원형 raw
    • 날것, 변형이 되지 않은 데이터
    • 컴퓨터 시스템에서 표현하는 기본 형태
r<-charToRaw("hello") 
r 
[l] 68 65 6c 6c 6f

4) R객체(R-Object)

: R에서 지원하는 특수한 형태의 객체object

■ 자주쓰는 R객체들

ⓐ 벡터Vector

  • ​다수의 값을 담고 있는 R객체
  • 내부 데이터는 한가지 데이터형으로 통일
v<-c('hello', 3.14) #문자형과 숫자형 혼용

class(v) 
[l] "character" #문자형으로 통일 

v 
[l] "hello" "3.14"

ⓑ 리스트lists

  • ​서로 다른 유형의 데이터를 담을 수 있는 R객체
l<-list("hello", 3.14) #문자형과 숫자형 혼용 
class(l) 
[l] "list" #리스트형으로 취급 
l 
[[1]] 
[l] "hello" 
[[2]] 
[l] 3.14

ⓒ 행렬matrices

  • 행과 열로 이루어진 2차원 데이터 집합
m<-matrix(c(2,3,1,5), nrow=2,ncol=2) 
class(m) 
[l] "matrix" 
m 
    [,1] [,2] 
[1,]   2   1 
[2,]   3   5
 

 

ⓓ 배열arrays

  • 다차원으로 구성된 데이터 집합

** 차원의 설정에 따른 배열의 변화

    • 1차원으로 설정 →배열Arrays 취급
    • 2차원으로 설정 →행열Matrix 취급
    • 3차원 이상으로 설정 →배열Arrays로 취급

     : 선형계수를 쉽게 표현하기 위한 장치

ar1<-array(c(1,2,3,4),dim=c(4))
ar2<-array(c(1,2,3,4),dim=c(2,2))
ar3<-array(c(1,2,3,4),dim=c(1,2,2)) 

class(a1) [l] "array" 
class(a2) [l] "matrix" 
class(a3) [l] "array" 

a3
, , 1 
    [,1] [,2] 
[1,]   2   3 
, , 2 
    [,1] [,2] 
[2,]   3   4

 

ⓔ 요인factors(범주)

  • 데이터의 값Value과 레이블Label을 함께 표현
  • 객체가 구축되며 데이터가 자동으로 분석되므로 통계적 모델링과 분석에 유용
v<-c("kim","kim","han","lee","lee","kim") 
vf<-factor(v)
vf
[l] kim kim han lee lee kim 
levels : han kim lee 
class(vf) 
[l] "factory"

ⓕ 데이터프레임data frames

  • 표의 형태로 정리된 데이터 객체의 일종
  • 열Column과 행row의 이름name을 지정 가능
  • 열마다 서로 다른 데이터형을 가질 수 있음
  • 숫자형numeric, 요인factor, 문자형character외의 다른 데이터를 저장할 수 없음
  • 열마다 같은 수의 데이터를 포함하여야 함

5) 연산자

■ 산술연산자 Arithmetic Operators

    • a+b : 덧셈 후 결과 반환
    • a-b : 뺏셈 후 결과 반환
    • a*b : 곱셈 후 결과 반환
    • a/b : 나눗셈 후 결과 반환
    • a%%b : 나눗셈 후 나머지 반환
    • a%/%b : 나눗셈 후 몫 반환
    • a^b : a의 b승을 계산

■ 관계연산자 Relational Operators → 결과는 TRUE/FALSE

    • a>b : a가 b보다 큼
    • a≥b : a가 b보다 크거나 같음
    • a==b : a와 b의 값이 서로 같음
    • a! =b : a와 b의 값이 서로 다름

■ 논리 연산자 Logical Operators

    • a&b : a와 b의 각 성분별로 AND 연산 결과
    • a|b : a와 b의 각 성분별로 OR 연산 결과
    • !a : a의 논리 결과를 반대로 변환(NOT)
    • a&&b : a와 b의 첫번째 원소에 대하여 AND연산 결과
    • a||b : a와 b의 첫번쨰 원소에 대하여 OR연산 결과

■ 대입(할당) 연산자 Assignment Operators

    • b의 값을 a에 대입(할당) : a< -b, a=b, a<< -b
    • 모두 같은 결과(취향이나 회사/팀 작업하는 규칙에 따라 결정)

■ 기타연산자 Miscellaneous Operators

    • a:b : 시작값은 a이고 끝값은 b보다 작거나 같은 벡터를 생성
    • a%in%b : a가 b의 성분인 경우 TRUE, 그렇지 않은 경우False
    • a%*%b : a와 b가 행렬 R객체인 경우, 행렬 간 곱셈을 수행
(a,b,c,d) 
(p,q,r,s) 

(a c) (p r) (ap+br ar+cs) 
(b d) (q s) (bp+dq br+ds)

6) 의사결정Decision Making 구조

: 하나 이상의 조건을 평가(또는 테스트)하여 그 결과에 따라 다양한 흐름으로 명령문을 수행하는 구조

■ 의사결정 구조의 용도

ⓐ if문 : 조건이 일 때만 명령문을 수행

  • 조건이 TRUE인 경우에만 명령문 수행
  • 가장 단순한 의사결정 구조
if(조건){ 
    #조건이 참인 경우 수행하는 명령문
}

ⓑ if~ else문 : 조건에 따라 별개의 명령문을 수행

  • 조건이 참인경우와 거짓인 경우 서로 다른 명령문을 수행하는 의사결정 구조
if(조건){ 
    #조건이 참인 경우 수행하는 명령문 
}else{ 
    #조건이 거짓인 경우 수행하는 명령문 
}

ⓒ swich문 : 다양한 값의 조건에 따라 별개의 명령문을 수행

  • 조건이 일치하는 경우CASE의 명령문을 실행
  • 조건이 다수로의 분기를 가질 때 유리
  • 다른 프로그램 언어와 달리 기본 값Default이 없음
#문법 
switch(조건, case1,case2,...->caseN) 

#예시 
x<- "han" 
switch(x, "kim"="김", "lee"="이", "han"="한") 
[l] "한"

7) 루프 Loop

: 특정한 명령문을 조건에 따라 여러 번 실행하고자 할 때 사용하는 구조

종류

ⓐ repeat loop

  • 무한히 반복하여 명령문을 실행하는 루프 구조
  • if문과 break를 사용하여 반복에서 탈출 할 수 있음
#문법 
repeat{ 
    #반복하여 실행할 명령문 
    } 

#예시 
i<-1 
repeat{ 
    i<-i+1 if(i==3){ 
        print(i) break 
    } 
} 
[l] 3

ⓑ while loop

  • 조건이 참이면 동일한 명령문을 다시 실행하는 루프
  • 명령문의 실행 결과에 따라 조건이 거짓이 되면 반복문으로부터 탈출하는 것이 가능
#문법 
while(조건){ 
    #조건이 참이면 반복하며 실행할 명령문 
} 
#예시 
i<-1 
while(i<3){ 
    i<-i+1 
} 
i 
[l] 3

ⓒ for loop

  • 벡터의 각 성분에 따라 반복하는 루프 구조
  • 벡터의 성분의 위치index에 일일히 접근하지 않으므로 벡터 성분별 명령문을 수행하는 구조일 때 유리
  • 벡터의 성분의 값을 대입하기 위한 변수 지정 필요
#문법
for(value in vector){ 
    #각 성분별 실행할 명령문 
} 

#예시
v<-c(2,3,5,7,10) 
s<-0 
for(ve in v){ 
    s<-s+ve 
} 
print(s) 
[l] 27

루프 제어 명령문

ⓐ break문

  • 현재 실행중인 루프문을 중단하고, 루프문 이후 명령문부터 실행하는 루프 제어 명령문

ⓑ next문

  • 현재 실행중인 루프문을 중단하고, 루프문의 처음으로 되돌아가 명령문을 실행하도록 흐름을 제어하는 루프 제어 명령문
v<-1:10 
for(ve in v){ 
    if(ve%%2 != 0){ # %%는 나머지 연산자 즉 짝수일때는 %%2값은 0, 홀수는 %%2=1 
        next 
    } 
    print(ve) 
} #짝수만 출력하게 하는 구조 
[l] 2 
[l] 4 
[l] 6
[l] 8 
[l] 10

**적용 방법은 if문 들을 이용하여 사용하는 것이 일반적

8) 함수 Functions

: 특정한 작업을 수행하는 명령문과 구조를 나열한 집합

■ 분류

ⓐ 기본함수 Buil-in Functions

: R에서 기본으로 정의되어 있는 함수

ⓑ 사용자 정의 함수 User-defined functions

: 사용자가 자신의 목적에 맞게끔 함수명, 명령문, 실행구조, 입력인자, 출력인자를 지정한 함수

  • 구성요소
    • 필수요소 : 함수명, function키워드, 중괄호 등
    • 선택요소 : 입력인자, 출력인자, 입력인자명 등
#문법 
<함수명><-function(입력인자명1=입력인자1,...){ 
    # 함수가 호출되면 실행할 명령문 및 구조 
}

# 예시 myfunc<-function(v){ 
    s<-0 
    for(ve in v){ 
        s<-s+v 
    } 
    return(s) #함수를 호출한 쪽으로 반환 
} 
myfunc(c(2,3,7)) 
[l] 6,9,21

함수의 사용

- 함수의 호출 Function Calling

<함수명>(입력인자1, 입력인자2...) 
>> mean(c(88,96,92)) # mean과 C함수 호출 

<함수명>(입력인자명1=입력인자1, 입력인자명2=입력인자2...) 
'>> png(file="result.png") #입력인자명을 지정하여 호출

반응형

댓글