0. 시작

  • 이 문서는 R마크다운(rmarkdown)으로 작성되었습니다.

1. R 개요 및 설치

R이란 데이터를 분석을 위해 사용되는 소프트웨어입니다
범용적인 분석 툴로 아래와 같은 다양한 적용 분야를 찾아볼 수 있습니다.

- 통계분석  
- 머신러닝 모델링  
- 데이터 마이닝  
- 소셜 네트워크 분석  
- 지도 시각화  
- 주식 분석  
- 이미지 분석  
- 사운드 분석  
- 웹 어플리케이션 개발  

*설치전 주의사항 : 운영체제 사용자 계정명이 한국어인 경우 경로를 정상적으로 읽지 못해 오류가 생깁니다.

  1. R 설치
  2. R Studio(IDE) 설치 : R 프로그래밍을 도와주는 개발도구


2. 데이터 다루기

먼저 R을 이용한 데이터 분석순서의 흐름은 아래와 같습니다.

패키지불러오기-> 데이터 읽기 -> 데이터 가공 -> 데이터 저장 및 시각화

패키지 불러오기는 추후에 설명하도록 하고 먼저 데이터와 관련해서 정리하겠습니다.
데이터를 다루기 위해서는 먼저 데이터 타입과 데이터 구조에 대해서 알아야 합니다.

2-1. 데이터 타입

타입이름 타입종류 예제
Numeric 실수형 1, 12.3
Integer 정수 1L, 23L
Complex 복소수 3+2i
Character 문자 “Hello”, “대구”, “12345”
Logical 논리 TRUE, FALSE, T, F
Factor 범주 1, 2, a, b
Date 날짜 “2018-07-03”, “19/01/01”


데이터 타입 확인하기

mode(변수명) 함수를 이용해서 데이터 타입을 확인할 수 있습니다.
R의 경우 데이터 타입을 선언하고 사용하지 않기 때문에, 추후 사용하는 변수의 자료형이 어떤 것인지 혼란이 올 수 있습니다. 이 때 이 함수를 이용해서 데이터 타입을 파악할 수 있습니다.

str_data <- "Hello World" # '<-'를 대신해서 '='도 호환가능
int_data <- 123456789
bool_data <- T

mode(str_data)
## [1] "character"
mode(int_data)
## [1] "numeric"
mode(bool_data)
## [1] "logical"

- 인자(Factor)

  • 값이 대상을 분류하는 의미를 갖는 타입
  • 성별에는 남자는 1,3 여자는 2,4로 분류
  • Factor는 변수와 레벨로 구성
  • Levels(factor)를 통해 레벨들을 확인

인자생성

myfct = factor(c("a","b","c","d"))
print(myfct)
## [1] a b c d
## Levels: a b c d


2-2. 데이터 구조

구조이름 구조설명
스칼라(Scala) 정수, 실수, 문자, 문자열 등 값 하나
벡터(Vector) 스칼라 값들이 여러개 모인 형태
매트릭스(Matrix) 2차원 벡터를 의미
배열(Array) 2차원 이상의 벡터를 의미
리스트(List) 항목 순서가 중요한 벡터
데이터 프레임(data.frame) 칼럼(Column)마다 다른 타입을 가짐


- 벡터(Vector)

  • 동일한 타입 의 스칼라가 여러개 모인 것, typeof(변수)로 벡터타입을 확인할 수 있다.
  • Combine 함수c( )를 이용하여 여러 값으로 구성할 수 있다.
  • 항목에 접근할 때 [ ] 를 사용한다.

벡터 생성

a <- 3
print(a)
## [1] 3
b <- 3.14
print(b)
## [1] 3.14
c <- c(2,4,6,8,10) #combine 함수를 이용해서 벡터 생성
print(c)
## [1]  2  4  6  8 10
d <- 1:10 # 1~10까지
print(d)
##  [1]  1  2  3  4  5  6  7  8  9 10
e <- seq(2,3, by=0.5) #2~3까지 0.5 간격으로
print(e)
## [1] 2.0 2.5 3.0
f <- rep(1:2, times=3) #1~2까지 숫자를 3번 반복
print(f)
## [1] 1 2 1 2 1 2
g <- rep(1:2, each=3) #1~2까지 숫자를 각각 반복
print(g)
## [1] 1 1 1 2 2 2

벡터 요소 접근

벡터접근은 벡터의 [인덱스]를 통해 접근할 수 있습니다.

c <- 10:20 # c : 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
c[3] #3번째 인덱스, R의 인덱스는 1부터 시작
## [1] 12
c[-3] # 3번째 인덱스를 뺀 나머지 
##  [1] 10 11 13 14 15 16 17 18 19 20
c[1:5] # 1~5 인덱스의 값 출력
## [1] 10 11 12 13 14
c[c(1,3,5,7,9)] #1,3,5,7,9번째 인덱스 값 출력
## [1] 10 12 14 16 18
c[c==14]; c[c==24] # c의 값이 14인 인덱스와 24인 인덱스를 출력 한줄에 나타낼 경우 ';'로 표시
## [1] 14
## integer(0)
c[c>5] # 5보다 큰 값을 출력 
##  [1] 10 11 12 13 14 15 16 17 18 19 20
c[c %in% c(2,4,6,8,10)] # %in% 벡터내 특정값 포함 여부
## [1] 10
c['2'] # NA는 결측치를 의미한다
## [1] NA

벡터의 성분은 숫자로 된 인덱스 대신 이름을 가질 수도 있습니다.

food <- c(1,2,3)
names(food) <- c("apple","banana","coke") #naems : 객체의 이름을 알안내거나 부여할 때 사용
food["banana"] ; print(food)
## banana 
##      2
##  apple banana   coke 
##      1      2      3
food2 <- setNames(c(1, 2, 3), c("apple", "melon", "peach")) #setNames : 객체이름부여
print(food2)
## apple melon peach 
##     1     2     3

벡터 함수

아래의 함수들은 벡터의 편리한 이용을 위해 내장된 기본 함수들입니다.

x <- c(4,5,1,2,3,8,9,10)
length(x) # 벡터 길이 계산 (인덱스 갯수)
## [1] 8
sort(x) #x를 오름차순으로 정렬된 벡터 반환
## [1]  1  2  3  4  5  8  9 10
rev(x) #x를 역순으로 정렬된 벡터 반환
## [1] 10  9  8  3  2  1  5  4
table(x) #x내 항목의 빈도수 반환
## x
##  1  2  3  4  5  8  9 10 
##  1  1  1  1  1  1  1  1
unique(x) #x내 항목 목록 반환, 중복은 1번만 표현
## [1]  4  5  1  2  3  8  9 10
append(x,3,after=3) # x벡터의 3번째 인덱스 뒤에 3이라는 숫자를 삽입후 벡터 반환
## [1]  4  5  1  3  2  3  8  9 10
x = append(x,-100,after=0) #x의 맨앞에 -100을 삽입 후 벡터 반환
x_set = unique(x) # 반환된 벡터를 다른 변수에 넣어서 사용 가능
print(x_set)
## [1] -100    4    5    1    2    3    8    9   10
수학함수
함수명 설명
log(x)/exp(x) 항목별 로그/지수 계산
max(x)/min(x) 항목의 최대값/최소값 반환
round(x,n)/signif(x,n) 항목별 반올림
cor(x,y) 항목별 상관분석(상관계수) 계산
cov(x,y) 공분산 계산
sum(x) 벡터의 항목 합
mean(x) 벡터의 항목 평균
median(x) 벡터의 항목 중앙 값
quantile(x) 벡터의 사분위 값 계산
rank(x) 벡터의 항목별 순위
var(X) 벡터의 분산 값
sd(x) 벡터의 표준편차
range(x) 최대값 최소값의 차이


- 매트릭스(Matrix)

  • 2차원 벡터(Vector)
  • 한가지 타입으로 구성

매트릭스 생성

m1 = matrix(c(1:12), ncol=3) #default : 열 기준
m2 = matrix(c(1:12), ncol=3, byrow= TRUE) #행 기준으로 데이터 값이 들어감
print(m1) ; print(m2)
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12

매트릭스 요소 접근

mtx = matrix(c(1:12), ncol=3) #default : 열 기준
mtx[2,] #2번 행
## [1]  2  6 10
mtx[,2] #2번 열
## [1] 5 6 7 8
mtx[2,3] #2행 3열
## [1] 10
mtx[2:3,1:3] #2,3행~1,2,3열까지
##      [,1] [,2] [,3]
## [1,]    2    6   10
## [2,]    3    7   11


- 배열(Array)

  • 2차원 이상의 벡터

배열 생성

arr=array(1:20, dim=c(2,5,2)) #array(벡터,dim=c(행,열,갯수)) dim=dimension
print(arr)
## , , 1
## 
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   11   13   15   17   19
## [2,]   12   14   16   18   20


- 리스트(List)

  • 항목의 순서가 중요한 목록
  • 다양한 타입(서로 다른 mode)을 저장할 수 있음

리스트 생성

#리스트명 = list(이름=벡터, 이름. 벡터, 이름 = 매트릭스, 이름 = 배열)
a=1; b='a'; c=matrix(c(1:12),ncol=3, byrow=TRUE); d= array(1:20,dim=c(4,5,1))
mylist = list(f1=a, f2=b, f3=c, f4=d)
print(mylist)
## $f1
## [1] 1
## 
## $f2
## [1] "a"
## 
## $f3
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12
## 
## $f4
## , , 1
## 
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20


- 데이터 프레임(data.frame)

  • 2차원 데이터 구조
  • 다양한 타입으로 구성가능

데이터 프레임 생성

# data.frame(컬럼명=벡터, 컬럼명 = 벡터, ...)
df= data.frame(number=c(1,2,3),color=c("red","green","blue"))
print(df)
##   number color
## 1      1   red
## 2      2 green
## 3      3  blue
nrow(df) #행의 수
## [1] 3
ncol(df) #열의 수
## [1] 2
dim(df) #행과 열의 수
## [1] 3 2

데이터 프레임 요소 접근

df= data.frame(number=c(1,2,3),color=c("red","green","blue"))
df[,2] #2 번째 열
## [1] red   green blue 
## Levels: blue green red
df[,1:2] # 1~2번째 열
##   number color
## 1      1   red
## 2      2 green
## 3      3  blue
df[2,] # 2번째 행
##   number color
## 2      2 green
df['number'] # number 열
##   number
## 1      1
## 2      2
## 3      3
df[c('number','color')] #number, color 열
##   number color
## 1      1   red
## 2      2 green
## 3      3  blue
df$color # df내 color 컬럼 
## [1] red   green blue 
## Levels: blue green red


2-3. 기본문법

- 구문

반복문

특정 동작을 반복할 경우, 반복문을 통해 표현할 수 있습니다.
for

vector <- c(1,2,3,4,5)
sum = 0
for(temp in vector){ #변수명 in 범위
    sum = sum+temp
}
print(sum)
## [1] 15

while

While(조건){
    반복할 코드
}


조건문

특정 조건에 따라 다르게 분기시켜 동작할 수 있습니다.

if(조건){
    # 조건이 참일 때 실행
}else{
    # 조건이 거짓일 때 실행
}
data <- 10
result <- ifelse(data <0,-1,1) #ifelse(조건,참,거짓)
print(result)
## [1] 1


함수

자주 사용하는 코드는 함수로 묶어서 호출할 수 있습니다.

함수명 = function(인자){
    #함수의 기능을 코드 작성
}


- 비교연산자

조건을 표현할 때 이 비교연산자를 이용할 수 있습니다.

연산자 설명
a==b a와 b가 같다
a!=b a와 b가 같지 않다
a>b a가 b보다 크다
a>=b a가 b보다 크거나 같다
a<b a가 b보다 작다
a<=b a가 b보다 작거나 같다
is.na(a) a값이 없는지(결측치)
is.null(a) a값이 null인지